第 1 页:选择题 |
第 5 页:程序填空题 |
第 6 页:程序改错题 |
第 7 页:程序设计题 |
31若有定义“int b[8],*p=b;”,则p+6表示( )。
A.数组元素b[6]的值
B.数组元素b[6]的地址
C.数组元素bE73的地址
D.数组元素hEo]的值加上6
参考答案:B
参考解析:指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中“P+6”指的是将指针向后移动了6个存储单元,即指向b[6],存放的是bE6]的地址。
32有下列程序:
main()
{ char s[]=”abode”;
s+=2:
printf(”%d\n”,s[o]);
)
执行后的结果是( )。
A.输出字符a的ASCII码
B.输出字符c的ASCII码
C.输出字符c
D.程序出错
参考答案:D
参考解析:因为字符数组s[]中的数组名s表示的是一个地址常量。所以语句“s+一2;”不能将指针在当前位置的基础上再向后移动两位,因而程序编译时出错。
33有以下程序:
#include
main()
{ int w=4,x=3,y=2,z=1;
printf(”%d\n”,(w
程序的输出结果是( )。
A.1B.2C.3D.4
参考答案:A
参考解析:条件运算符具有右结合性。当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。w
34下列程序的运行结果是( )。
#include
void fun(int*s,int*p)
{ static int t=3;
*p=set];
t--:
}
void main()
{int a[]={2,3,4,5),k;
int x:
for(k=0,k<4,k++)
{fun(a,&.x);
printf(”%d,”,x);
)
}
A.5,4,3,2B.2,3,4,5C.2,2,2,2D.5,5,5,5
参考答案:A
参考解析:依据fun函数,可知其要实现的功能是将S中第(t+1)个元素以前的元素逆置赋给数组p。由于fun中函数定义了静态变量t=3,因此,main()函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数X,最后输出X数组。
35若有以下程序( )。
#include
main()
{ int**k,*j,i=100;
j=&i;k=&j;printf(”%d\n”,**k);
}
程序的输出结果是( >。
A.运行出错B.100C.j的地址D.i的地址
参考答案:B
参考解析:
B。【解析lint**k,*j,i=100;
j=8Li;//一维指针j指向i的地址,所以j中存放的是i的地址,*j就是i的内容,即*j一1001k-=&j;//二维指针k指向j的地址,所以k中存放的是指向i的地址的地址,*j就是i的内容,**k就是i的内容,即**k一100,printf(”%d\n”,**k);//输出100。
36c语言中,下列不合法的字符常量是( )。
A.'\xff'B.'\65'C.'&'D.'\028'
参考答案:D
参考解析:选项A,'\xff’中'\X'组合表示是一个十六进制数ffH一10进制的255,它代表一个不可见字符的ASCIl码,合法。选项B,‘\65'=’\o65'10进制的53,是'F’的ASCIl码表示。选项C,单'&’字,合法。选项D中’\028'同上表示是八进制数,但八进制数中逢八则进一,是不会出现8的,所以格式虽对但数值错了,不合法。
37下列程序的运行结果是( )。
int y一5,x一14;
y=((x=3*y,x+1),x-1);
printf(”x=%d,y=%d”,x,y);
A.x=27,y=27B.x=12,y=13C.x=15,y=14D.x=y=27
参考答案:C
参考解析:逗号表达式的解题思路是从左到右,依次求解,整个逗号表达式的值就是最后一个表达式的值。表达式(x=3*Y,X+1)中,依次是x=3*Y=3*5=15,表达式x+1-16,但没有给x或Y赋值,所以x还是等于15;第3个表达式x-l=15-1-14,所以Y的值为14。
38有以下程序段:
int x:
for(x=3:x<6:X++
print[((x%2)?(”**%d”):(”##%d\n”),x);
程序段的输出结果是( )。
A.**3B.##3
##4 **4
**5 ##5C.##3D.**3##4
**4##5 **5
参考答案:D
参考解析:voidmain(){intx;
for(x=3;x<6;X十+)
printf((X%2)?(”**%d”):(”##%d\n”),x);//x一33%2—1**3
//x一44%2—0##4\n//x一55%2=1**5//x一6退出循环
)
结果:
**3##4**5
因此正确答案为D选项。
39有以下程序:
#include
main()
{ int x,i;
for(i=1:i<=100:i++)
{ x=i:
if(++x$2==0)
if(++x%3==0)
if(++x%7==0)
printf(“%d”,x);
printf(”\n”);
程序的输出结果是( )。
A.2870B.4284C.2668D.3981
参考答案:A
参考解析:1—100内打印出如下数,这个数,可以被7整除,前一个数可以被3整除,再前一个数可以被2整除,最终运行结果为2870,因此正确答案为A。
40下面程序的运行结果是( )。
#include
void del(char*s)
{int i,j;
char*a:
a=s:
for(i=0,j一0;a[i]!='\o' ; i++)
{if(a[i]>='0'&&a[i]<='9')
{ s[j]=a[i];
j++;
}
s[j]='\0' ;
}
)
main()
{ char*s==”aa89gggh”:
del(s);
printf(”\n%s”,s);
A.1B.2C.3D.4
参考答案:B
参考解析:本题中del(char*s)函数实现的功能是逐个读入S数组中的字符,如果遇到数字,则将数字存在S中,遇到非数字字符则跳过。所以最后输出的应该是字符串s中所有数字的个数。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |