二、填空题
1.下列程序的输出结果是 GDABC 。
#include
main( )
{char b[30],*chp;
strcpy(&b[0],"GH");
strcpy(&b[1],"DEF");
strcpy(&b[2],"ABC");
printf("%s\n",B);
}
2.下列程序的字符串中各单词之间有一个空格,则程序的输出结果是 How does she 。
#include
main( )
{char strl[ ]="How do you do",*p1=strl;
strcpy (strl+strlen(strl)/2,"es she");
printf("%s\n",pl);
}
3.若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。
a[0] a[1] a[2] a[3] a[4]
2233445566
(1)若p已指向存储单元a[1]。通过指针p给s赋值,使s指向最后一个存储单元a[4]的语句是 s=p+3 。
(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 2 。
4.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。
#include
main()
{char *p, s[6];
int n;
p=s;
gets (p);
n=*p-'0';
while( *(++p) !='\0') n=n*8+*p-'0';
printf("%d\n", n);
}
5.设有以下程序:
main()
{int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=(pl= =&m);
b=(*p1)/(*p2)+7;
printf("a=%d\n", a);
printf("b=%d\n",
B);
}
执行该程序后,a的值为 0 ,b的值为 7 。
6.下列程序的输出结果是 0 。
void fun(int *n)
{while((*n)--);
printf("%d", ++(*n));
}
main()
{int a=100;
fun (&a);
}
7.以下程序的输出结果是 10 。
main()
{int arr[ ]={30, 25, 20, 15, 10, 5}, *p=arr;
p++;
printf("%d\n", *(p+3));
}
8.若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 *(p+5) 。
int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;
9.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。
strlen (char a[ ], char b[ ])
{int num=0, n=0;
while (*(a+num)!= '\0' ) num++;
while (b[n]){*(a+num)=b[n]; num++; n++ ;}
return(num);
}
10.函数void fun(float *sn,int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。
void fun(float *sn, int n)
{float s=0.0, w, f= -1.0;
int i=0;
for(i=0; i<=n; i++)
{f= -1 *f;
w=f/ (2*i+1);
s+=w;
}
*sn = s;
}
11.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add(int x,int y, int * z)
{ *z =x+y;}
12.以下fun函数的功能是:累加数组元素中的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。请填空。
fun(int b[ ],int n,int *x)
{int k,r=0;
for(k=0;k *x =r; } 13.以下函数的功能是:把两个整型指针变量所指的存储单元中的内容进行交换。请填空。 exchange(int *x,int *y) {int t; t=*y; *y= *x ; *x= t ; } 14.以下程序的输出是 49 。 main() {int a[10]={19,23,44,17,37,28,49,36},*p; p=a; printf(“%d\n”,(p+=3)[3]); } 15.下面程序的输出结果是 024 。 #define MAX 3 int a[MAX]; main() {fun1();fun2(a);printf(“\n”);} fun1() {int k,t=0; for(k=0;k } fun2(int b[]) {int k; for(k=0;k } 16.下面程序的输出结果是 ABCDCD 。 char b[]=“ABCD”; main() {char *chp; for(chp=b; *chp; chp+=2) printf(“%s”, chp); printf(“\n”); } 17.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。 #include main() {char str[81],*sptr; int i; for(i=0;i<80;i++) {str[i]=getchar(); if(str[i]==‘\n’) break; } str[i]= '\0' ; sptr=str; while(*sptr) putchar( *sptr++ ); } 18.fun1函数的调用语句为:fun1(&a,&b,&C);它将三个整数按由大到小的顺序调整后依次放入a、b、c三个变量中,a中放最大数。请填空。 void fun2(int *x, int *y) {int t; t=*x; *x=*y; *y=t; } void fun1(int *pa,int *pb,int *pC) {if(*pc>*pB) fun2( pc,pb ); if(*pa<*pC) fun2( pa,pb ); if(*pa<*pB) fun2( pa,pc ); } 19.以下函数用来在w数组中插入数x,w数组中的数已按由小到大的顺序存放,n所指存储单元中存放数组中数据的个数,x插入后数组中的数仍有序。请填空。 void fun(char *w,char x,int *n) {int i,p; p=0; w[*n]=x; while(x>w[p]) p++ ; for(i=*n;i>p;i--) w[i]= w[i-1] ; w[p]=x; ++*n; } 20.阅读程序: main() {char str1[]=“how do you do”, str2[10]; char *p1=str1, *p2=str2; scanf(“%s”, p2); printf(“%s ”, p2); printf(“%s\n”, p1); } 运行上面的程序,输入字符串HOW DO YOU DO,则程序的输出结果是 HOW how do you do 。 21.下面程序的输出结果是 SO 。 main() {char *p[]={“BOOL”, “OPK”, “H”, “SP”}; int i; for(i=3;i>=0;i--,i--) printf(“%c”,*p[i]); printf(“\n”); } 22.下面程序的输出结果是 17 。 funa(int a,int B) {return a+b;} funb(int a,int B) {return a-b;} sub(int(*t)(),int x,int y) {return((*t)(x,y));} main() {int x,(*p)(); p=funa; x=sub(p,9,3); x+=sub(funb,8,3); printf(“%d\n”, x); } 23.下面程序的输出结果是 XYZA 。 #include void fun(char *a1,char *a2,int n) {int k; for(k=0;k a2[k]=(a1[k]-‘A’-3+26)%26+‘A’; a2[n]=‘\0’; } main() {char s1[5]=“ABCD”, s2[5]; fun (s1, s2, 4); puts(s2); } 24.下面程序的输出结果是 7 1 。 void as(int x,int y,int *cp,int *dp) {*cp=x+y; *dp=x-y; } main() {int a=4,b=3,c,d; as(a,b,&c,&D); printf(“%d %d\n”,c,D); } 25.下面程序的输出结果是 eybdooG 。 #include main() {static char b[]=“Goodbye”; char *chp=&b[7]; while(--chp>=&b[0]) putchar(*chp); putchar(‘\n’); } 26.若输入:this test terminal,以下程序的输出结果为:terminal test this。填空补充以下程序。 #include #define MAXLINE 20 main() {int i; char *pstr[3],str[3][MAXLINE]; for(i=0;i<3;i++) pstr[i]=str[i]; for(i=0;i<3;i++) scanf(“%s”,pstr[i]); sort(pstr); for(i=0;i<3;i++) printf(“%s\n”,pstr[i]); } sort( char *pstr [3] ) {int i,j; char *p; for(i=0;i<3;i++) {for(j=i+1;j<3;j++) {if(strcmp(*(pstr+i),*(pstr+j))>0) {p=*(pstr+i); *(pstr+i)= *(patr+j) ; *(pstr+j)=p; } } } } 27.以下程序利用指针法将两个数按从小到大的顺序输出来。 main() {int a,b, *p1,*p2 , p ; printf(“input a, b:”); scanf(“%d%d”, &a,&B); p1=&a ; p2=&b; if(a
{p=p1; p1=p2; p2=p;} printf(“a=%d b=%d\n”,a,B); printf(“max=%d min=%d\n”, *p1,*p2 ); } 28.以下程序的输出结果是 8 。 fun(int n,int *s) {int f1,f2; if(n==1||n==2) *s=1; else {fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } main() {int x; fun(6,&x); printf(“%d\n”,x); } 29.下面的程序通过函数average计算数组中各元素的平均值,请填空。 float average(int *pa,int n) {int i; float avg=0.0; for(i=0;i avg=avg+ *(pa+i) ; avg= avg/n ; return avg; } main() {int i,a[5]={2,4,6,8,10}; float mean; mean=average(a,5); printf(“mean=%f\n”,mean); } 30.以下程序将字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后的新串存于字符数组s2中。 #include void replace(char *s1,char *s2,char *str1,char *str2) {char *t0,*t1,*t2; while( *s1 ) {for(t0=s1,t1=str1;(*t1!=‘\0’&& *t0=*t1 );t0++,t1++); if(*t1!=‘\0’) *s2++ = *s1++ ; else {for(t1=str2;*t1!=‘\0’;) *s2++ = *t1++ ; s1=t0 ; } } *s2=‘\0’; } main() {static char s1[]=“abcef ababcd abab.”, s2[25]; replace (s1, s2, “abc”, “XYZ”); printf(“%s\n”, s2); } 31.以下语句的输出结果是 hELLO! 。 char s[80],*sp=“HELLO!”; sp=strcpy (s, sp); s[0]=‘h’; puts(s);
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |