选择题2. 有以下程序
#include<stdio.h>
void fun(char*c,int d)
{ *c=*c+1;
d=d+1;
printf("%c,%c,"*c,d);
}
main()
{ char b='a',a='A';
fun(&b,a);
printf("%c,%c\n",b,a);
{
程序运行后的输出结果是______。
- A.b,B,b,A
- B.b,B,B,A
- C.a,B,B,a
- D.a,B,a,B
A B C D
A
[解析] 调用fun函数输出为加1之后的值,fun函数功能将main函数中的b自增1,a没有变化,所以输出为A。
8. 有如下程序:
#include <stdio.h>
main()
{
int x=0x13;
printf("%d\n",x+1);
}
程序运行后的输出结果是______。
A B C D
C
[解析] 整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。十进制整常量没有前缀,输出格式控制符为%d;八进制整常量以0作为前缀,输出格式控制符为%o;十六进制整常量以0X或0x作为前缀,输出格式控制符为%x。十六进制数0x13表示成十进制数为19,以十进制格式输出x+1=19+1=20,故C选项正确。
9. 设有以下程序段:
float a[8]={1.0,2.0};
int b[1]={0};
char c[]={"A","B"};
char d=="1";
以下叙述正确的是______。
- A.只有变量c的定义是合法的
- B.只有变量a,b,c的定义是完全合法的
- C.所有变量的定义都是完全合法的
- D.只有变量a,b的定义是完全合法的
A B C D
D
[解析] float a[8]={1.0,2.0};定义了一个包含8个float型元素的数组,并初始化了数组的前2项,其他项是随机数。int b[1]={0},定义了只有一个int型元素的数组,并初始化为0。char c[]={"A","B"};定义一个char型数组,大小有初始化元素决定,但初始化值是字符串,类型不兼容,编译出错。char d="1";定义一个char型变量,但是初始化赋值字符串,类型不兼容,编译出错。因此只有数组a,b的定义和初始化正确。故答案为D选项。
11. 有以下程序:
#include<stdio.h>
main()
{ char s[]="rstuv";
printf("%c\n", *s+2);
}
程序运行后的输出结果是______。
- A.tuv
- B.字符t的ASCII码值
- C.t
- D.出错
A B C D
C
[解析] 本题中,语句printf函数输出的是字符指针s所指变量的ASCII表对应值,即ASCII表中值为s[0]+2的字符。所以选C。
13. 有如下程序:
#include <stdio.h>
main()
{
char a='3',b='A';
int i;
for(i=0;i<6;i++)
{
if(i%3)putchar(a+i);
else putchar(b+i);
}
printf("\n");
}
程序运行后的输出结果是______。
- A.A45D78
- B.ABC678
- C.34CD78
- D.34AB78
A B C D
A
[解析] putchar函数是向标准输出设备上输出一个字符。字符在内存中以AScII码方式存储,可以与整数进行加减运算,但是要保证计算结果在0~255之间。本题执行过程为:i=0,i%3=0,if条件不成立执行else函数体,输出字符A;i=1,i%3=1,if条件成立输出字符4;i=2,i%3=2,if条件成立输出字符5;i=3,if条件不成立,输出字符D;i=4和i=5时,分别输出字符7与8;i=6退出for循环。所以程序运行后输出结果为A45D78,故A选项正确。
17. 有以下函数
int fun(char *x, char *y)
{ int n=0;
while((*x==*y)&&*x!='\0')(x++; y++; n++;}
return n;
}
函数的功能是______。
- A.统计x和y所指字符串中相同的字符个数
- B.查找x和y所指字符串中是否有'\0'
- C.将y所指字符串赋给x所指存储空间
- D.统计x和y所指字符串中最前面连续相同的字符个数
A B C D
D
[解析] 本题中由循环条件可知,当遇到“\0”或“x与y所指的字符的值不相等”其中的一个条件时就结束循环,因此本题函数的功能是统计x和y所指字符串中最前面连续相同的字符个数。
18. 若有以下程序段,w和k都是整型变量:

w=k;
LB:if(w==0)go to LE;
w--;
printf("*")
goto LB;
LE;

则不能与上面程序段等价的循环语句是______。
- A.for(w=k; w!=0; w--)printf("*");
- B.for(w=k; w; --w)printf("*");
- C.w=k;
while(w--!=0)printf("*"); - D.w=k;
w++; do{w--; printf("*"); }while(w!=0);
A B C D
C
[解析] 当循环结束时,w的值应为-1,而其他选项中w的值为0,故选择C选项。
20. 有以下程序
#include<stdio.h>
#include<string.h>
typedef struct { char name[9]; char sex; int score[2]; } STU;
STU f(STU a)
{ STU b={"Zhao",'m',85,90};
int i;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2; i++)
a.score[i]=b.score[i];
return a;
}
main()
{ STU c={"Qian",'f',95,92),d;
d=f(c);
printf ("%s,%c,%d,%d,", d.name,d.sex, d.score[0]. d.score[1]);
printf ("%s,%c,%d,%d\n", c.name,c.sex, c.score[0], c.score[1]);
}
程序运行后的输出结果是______。
- A.Zhao,m,85,90,Zhao,m,85,90
- B.Zhao,m,85,90,Qian,f,95,92
- C.Qian,f,95,92,Qian,f,95,92
- D.Qian,f,95,92,Zhao,m,85,90
A B C D
B
[考点] 预编译处理、动态分配、结构体、位运算和文件
[解析] 本题考查的是结构体变量用作函数参数。结构体变量用作函数参数时是传值调用,即在函数内部无论怎样修改形参结构体变量的内容,都不会影响调用函数时传递给函数的实参结构体变量。因此,本题的函数没有任何实际作用,它改变不了什么内容。故本题程序运行后的输出结果是Zhao,m,85,90,Qian,f,95,92。
21. 有以下程序:
#include <stdio.h>
int funa(int a,int b){return a+b;}
int funb(int a,int b){return a-b;}
int sss(int(*t)(),int x,int y){ return((*t)(x,y)); }
main()
{ int x;
x=sss(funa,9,3); x+=sss(funb,8,3);printf("%d\n",x);
}
程序运行后的输出结果是______。
A B C D
C
[解析] 由x=sss(funa,9,3);可得到x=9+3=12,而后执行x+=sss(funb,8,3)可得x=x+8-3=12+5=17。因此选项C正确。
24. 有以下程序:
#include<stdio.h>
main()
{
printf("%d\n",NULL);
}
程序运行后的输出结果是______。
A B C D
A
[解析] C语言中,NULL作为整型时,值为0。
25. 有以下程序:
#include <stdio.h>
main()
{ struct cmplx{int x; int y;} cnum[2]={1,3,2,7};
printf("% d\n", cnum[0].y/cnum[0].x*cnum[1].x);
}
则正确的输出结果为______。
A B C D
D
[解析] 程序定义了一个名为cnum的含有两个元素的结构体类型数组,结构体类型为struct cmplx, cnum的每个元素含有两个成员。在定义cnum的同时给它的元素赋初值,cnum[0].x的初值是1,cnum[0].y的初值是3,cnum[1].x的初值是2,cnum[1].y的初值是7。因此,printf输出项中的表达式可代入为3/1*2,输出结果是6。总结:对结构体变量(或数组)赋初值时,C编译程序按每个成员在内存中排列的顺序,一一对应赋予初值表中的值。
30. 有以下程序
#include <stdio.h>
main()
{ int n,*p=NULL;
*p=&n;
printf("Input n:"); scanf("%d",&p); printf("output n:"); printf("%d\n",p);
}
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是______。
- A.int n,*p=NULL;
- B.*p=&n;
- C.scanf("%d",&p)
- D.printf("%d\n",p);
A B C D
A
[解析] 选项B的正确写法应为“p=&n;”,选项C的正确写法应为“scanf("%d",p);”,选项D的正确写法应为“printf("%din",*p);”。故本题答案为A。
31. 执行下列程序中的输出语句后,a的值是
。
main()
{ int a;
printf("%d\n",(a=2*3,a*5,a+7));
}
A B C D
C
[解析] 本题考查逗号表达式。本题的返回值是a+7,a=2*3=6,a+7=13(注意:本题问的是a的值,而不是程序的输出值)。
34. 以下程序运行后的输出结果是______。
#include<stdjo.h>
void reverse(int a[],int n)
{int i,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
mam()
{int b[10]={10,9,8,7,6,5,4,3,2,1);int i,s=0;
reverse(b,10);
for(i=0;i<3;i++)
s+=b[i];
printf("%d\n",s);
}
A B C D