(1)下列程序执行后输出的结果是___________。
int d=l:
fun(int p)
{ int d。5;
d+=p++;
printf("%d,",d);
}
main()
{ int a=3;
fun(a);
d+=a++:
printf("%d\n",d);
}
A)8,12
B)9,13
int d=l:
fun(int p)
{ int d。5;
d+=p++;
printf("%d,",d);
}
main()
{ int a=3;
fun(a);
d+=a++:
printf("%d\n",d);
}
A)8,12
B)9,13
C)8,4
D)9,5
答案:C
评析:本题执行过程如下:首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行"d+=a++",此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
D)9,5
答案:C
评析:本题执行过程如下:首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行"d+=a++",此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
(2)已知下面的程序段,正确的判断是_________。
#define A 3
#define B(A)((_A+1)'a)
int a=3:
……
X=3*(A+B(7));
A)程序错误,不允许嵌套定义
B)X=93
#define A 3
#define B(A)((_A+1)'a)
int a=3:
……
X=3*(A+B(7));
A)程序错误,不允许嵌套定义
B)X=93
C)X=8l
D)程序错误,宏定义不允许有参数
答案:C
评析:本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
D)程序错误,宏定义不允许有参数
答案:C
评析:本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
(3)定义int*swap()指的是_______。
A)一个返回整型值的函数swap()
B)一个返回指向整型值指针的函数swap()
C)一个指向函数swap()的指针,函数返回一个整型值
D)以上说法均错
答案:B
评析:一个函数可以带回一个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。本题的定义中,包括括号和?号,由于f)优先级高于t。故它是一个返回整型指针的函数。
A)一个返回整型值的函数swap()
B)一个返回指向整型值指针的函数swap()
C)一个指向函数swap()的指针,函数返回一个整型值
D)以上说法均错
答案:B
评析:一个函数可以带回一个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。本题的定义中,包括括号和?号,由于f)优先级高于t。故它是一个返回整型指针的函数。
(4)以下程序段的输出结果是__________。
main()
{ char s1[10],s2[10],s3[10];
scanf("%s",s1);gets(s2);gets(s3);
puts(s 1);puts(s2);puts(s3);
}
输入数据如下: (此处代表回车符)
aaa
bbb
A)aaa
B)aaa
C)aaa\0bbb\0
D)aaabbb
bbb
bbb
答案:B
{ char s1[10],s2[10],s3[10];
scanf("%s",s1);gets(s2);gets(s3);
puts(s 1);puts(s2);puts(s3);
}
输入数据如下: (此处代表回车符)
aaa
bbb
A)aaa
B)aaa
C)aaa\0bbb\0
D)aaabbb
bbb
bbb
答案:B
评析:scanf是标准输入函数,在输入字符串aaa时,实际的内容为"aaa","\0"是由系统自动加入的;gets的功能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以"\0"代替换行符。
(5)下述函数功能是________。
Int fun(char*x)
{ char*y=x;
while(*y++);
return y-x-l;
}
A)求字符串的长度
B)求字符串存放的位置
C)比较两个字符串的大小
D)将字符串x连接到字符串y后面
答案:A
评析:在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后
Int fun(char*x)
{ char*y=x;
while(*y++);
return y-x-l;
}
A)求字符串的长度
B)求字符串存放的位置
C)比较两个字符串的大小
D)将字符串x连接到字符串y后面
答案:A
评析:在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后
返回字符串首尾地址的差值,即字符串的长度。
(6)以下程序的输出结果是_________。
main()
{ char str[12]={'s','t','r','i','n',' g'};
printf("%d\n",strlen(str));
}
A)6
B)7
C)ll
D)12
答案:A
评析:在c语言中,字符串的长度是其首字符到NULL(不含)字符的总字符个数。本题定义字符数组str的同时,对第7个元素,由系统自动添加上"\0",故字符串的长度为6。
main()
{ char str[12]={'s','t','r','i','n',' g'};
printf("%d\n",strlen(str));
}
A)6
B)7
C)ll
D)12
答案:A
评析:在c语言中,字符串的长度是其首字符到NULL(不含)字符的总字符个数。本题定义字符数组str的同时,对第7个元素,由系统自动添加上"\0",故字符串的长度为6。
(7)请读程序段:
char str[]="ABCD",*p=str;
printf("%d\n",*(p+4));
程序段的输出结果是_________。
A)68
B)0
C)字符'D'的地址
D)不确定的值
答案:B
评析:在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符串结束标志"\0",故指向字符数组的指针p的+(p+4)的值为"\0"。由于"\0"的编码值就是0,所以本题输出为0。
printf("%d\n",*(p+4));
程序段的输出结果是_________。
A)68
B)0
C)字符'D'的地址
D)不确定的值
答案:B
评析:在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符串结束标志"\0",故指向字符数组的指针p的+(p+4)的值为"\0"。由于"\0"的编码值就是0,所以本题输出为0。
(8)若有定义:int a[4][10];,则以下选项中对数组元素a[i][j]引用错误的是________。
(0<=i<4,0<=j<10)
A)*(&a[O][O]+10*i+j)
B)*(a+i)+j
(0<=i<4,0<=j<10)
A)*(&a[O][O]+10*i+j)
B)*(a+i)+j
C)*(*(a+i)+j)
D)*(a[i]+j)
答案:B
评析:本题中选项B是错误的引用,*(a+i)+j只代表了a[i][i]的地址。
D)*(a[i]+j)
答案:B
评析:本题中选项B是错误的引用,*(a+i)+j只代表了a[i][i]的地址。
(9)设有以下语句:
char strl[]="string",str2[8],。str3,。str4="strin∥;
则__________不是对库函数的正确调用。
A)strcpy(strl,"HELLOl");
B)strcpy(str2,"HELL02");
C)strcpy(str3,"HELL03");
D)strcpy(str4,"HELL04");
答案:C
评析:c语言中:sgcpy(stl,st2);,其两个参数均为字符指针或字符数组,选项c中的目的串指针str3没有指向具体有效的存储单元,故是错误的调用。
char strl[]="string",str2[8],。str3,。str4="strin∥;
则__________不是对库函数的正确调用。
A)strcpy(strl,"HELLOl");
B)strcpy(str2,"HELL02");
C)strcpy(str3,"HELL03");
D)strcpy(str4,"HELL04");
答案:C
评析:c语言中:sgcpy(stl,st2);,其两个参数均为字符指针或字符数组,选项c中的目的串指针str3没有指向具体有效的存储单元,故是错误的调用。
(10)请读程序:
#include
#include
main()
{ char*sl="AbCdEf",*s2="aB";
s1++;s2++;
printf("%d\n",strcmp(s 1,s2));
}
上面程序的输出结果是___________。
A)正数
B)负数
C)零
D)不确定的值
答案:A
评析:函数strcmp的功能是比较字符串s1和s2,如果sl>s2,则返回个正数;如果sls2,所以函数的值为正数。
#include
#include
main()
{ char*sl="AbCdEf",*s2="aB";
s1++;s2++;
printf("%d\n",strcmp(s 1,s2));
}
上面程序的输出结果是___________。
A)正数
B)负数
C)零
D)不确定的值
答案:A
评析:函数strcmp的功能是比较字符串s1和s2,如果sl>s2,则返回个正数;如果sls2,所以函数的值为正数。
(11)下面程序的输出是_________。
char s[]="ABcD";
main()
{ char*p;
for(p=s;p printf("%s\n",p);
}
A)ABCD
B)A
C)D
D)ABCD
BCD B C ABC
CDC B AB
D D A A
答案:A
评析:在第一次执行for循环时,字符数组的首地址赋给了指针变量p,使得指针变量p指
char s[]="ABcD";
main()
{ char*p;
for(p=s;p printf("%s\n",p);
}
A)ABCD
B)A
C)D
D)ABCD
BCD B C ABC
CDC B AB
D D A A
答案:A
评析:在第一次执行for循环时,字符数组的首地址赋给了指针变量p,使得指针变量p指
向了s的首地址,输出p所指向的字符串;第二次执行for循环时,p值增加1,p指向了s的第二个元素输出BCD;第三次输出CD;第四次输出D;直到p指向字符串的结束字符"\0",for循环终止执行。
(1)以下程序的输出结果是________。
#include
#define SQR(x)x*x
main()
{ int a,k=3;
a=++SQR(k+1);
printf("%d\n",a);
}
A)8
B)9
C)17
D)20
#include
#define SQR(x)x*x
main()
{ int a,k=3;
a=++SQR(k+1);
printf("%d\n",a);
}
A)8
B)9
C)17
D)20
答案:B
评析:本题宏替换中遇到形参x以实参k+l代替,其它字符不变。sQR(k+1)展开后应为字符串k+l*k+l。
评析:本题宏替换中遇到形参x以实参k+l代替,其它字符不变。sQR(k+1)展开后应为字符串k+l*k+l。
(2)下面是对宏定义的描述,不正确的是_______。
A)宏不存在类型问题,宏名无类型,它的参数也无类型
B)宏替换不占用运行时间
C)宏替换时先求出实参表达式的值,然后代入形参运算求值
D)宏替换只不过是字符替代而已
答案:C
评析:宏替换实质上就是字符替代,它不可能进行计算,故c错误。带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。
A)宏不存在类型问题,宏名无类型,它的参数也无类型
B)宏替换不占用运行时间
C)宏替换时先求出实参表达式的值,然后代入形参运算求值
D)宏替换只不过是字符替代而已
答案:C
评析:宏替换实质上就是字符替代,它不可能进行计算,故c错误。带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。
(3)以下程序(程序左边的数字为附加的行号)________。
1#include
1#include
2#include
3main()
4{char s[]="string";
5 puts(s);
6 strcpy(s,"hello");
7 printf("%3s\n",s);}
A)没有错
B)第1行有错
C)第6行有错
D)第7行有错
答案:B
评析:字符串复制函数strcpy包含在头文件string.h中,因此,程序中的第l行文件包含命令是错误的。
3main()
4{char s[]="string";
5 puts(s);
6 strcpy(s,"hello");
7 printf("%3s\n",s);}
A)没有错
B)第1行有错
C)第6行有错
D)第7行有错
答案:B
评析:字符串复制函数strcpy包含在头文件string.h中,因此,程序中的第l行文件包含命令是错误的。
(4)若有如下说明,则__________的叙述是正确的。
struct st
struct st
{ int a;
int b[2l;
}a;
A)结构体变量a字符串比较函数实现与结构体成员a同名,定义是非法的
B)程序只在执行到该定义时才为结构体st分配存储单元
C)程序运行时为结构体st分配6个字节存储单元
D)类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)
答案:D
评析:结构体变量a与结构体成员a同名是合法的定义,引用成员a的方法是a.a,变量a处于不同的"层次"上,系统完全能够分清。st是一个结构体名,不会为结构体名分配存储空间,应该是在运行时为结构体变量a分配6个字节的存储单元,故选项B和选项C错误。
int b[2l;
}a;
A)结构体变量a字符串比较函数实现与结构体成员a同名,定义是非法的
B)程序只在执行到该定义时才为结构体st分配存储单元
C)程序运行时为结构体st分配6个字节存储单元
D)类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)
答案:D
评析:结构体变量a与结构体成员a同名是合法的定义,引用成员a的方法是a.a,变量a处于不同的"层次"上,系统完全能够分清。st是一个结构体名,不会为结构体名分配存储空间,应该是在运行时为结构体变量a分配6个字节的存储单元,故选项B和选项C错误。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论