a[j]=a[7];
puts(a);
}
【12】A)mogninrB)moC)morningD)mornin
13、下列程序段的运行结果为【13】。
chara[]="continue",*p;
p=a;
while(*p!
='i')
{printf("%c",*p-32);p++;}
【13】A)continueB)CONTINUEC)CONTD)contINUE
14、与下列函数不等价的函数为【14】。
copy_str(char*from,char*to)
{
while((*to=*from)!
='\0')
{
to++;from++;
}
}
【14】A)copy_str(char*from,char*to)
{while((*to++=*from++)!
='\0');}
B)copy_str(char*from,char*to)
{while(*from)*to++=*from++;*to='\0';}
C)copy_str(char*from,char*to)
{
while(*from!
='\0')
*to++=*from++;
*to='\0';
}
D)copy_str(charfrom[],charto[])
{
char*p1,*p2;p1=from;p2=to;
while((*p2=*p1)!
='\0')
}
15、若有下列定义:
intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*p)[3]=x;
则能够正确表示数组元素a[1][2]的表达式为【15】。
【15】A)*(*(p+1)+2)B)*((*p+1)[2])
C)*(*(p+5))D)*((*p+1)+2)
16、设有下列程序段,则scanf函数调用语句中对结构体变量成员的不正确引用为【16】。
structstudent
{
charname[20];
intage;
charsex;
}stu[5],*p;
p=stu;
【16】A)scanf("%s",stu[0].name);B)scanf("%d",p->age);
C)scanf("%c",&(p->sex));D)scanf("%d",&stu[0].age);
17、若有下列程序段:
intx=1,y=2;
x=x+y;
y=x-y;
x=x-y;
则执行后x和y的值分别为【17】。
(不用辅助变量交换两数据)
【17】A)x=1,y=2B)x=2,y=2C)x=2,y=1D)x=1,y=1
18、已知函数的调用形式:
fread(buffer,size,count,fp);其中buffer代表【18】。
【18】A)一个整型变量,代表要读入的数据项总数
B)一个文件指针变量,指向要读的文件
C)一个储存区,存放要读的数据项
D)一个指针变量,它存放数据缓冲区的地址
19、已知各变量的类型说明语句如下:
intk,a,b;unsignedlongw=5;doublex=1.42;
则不符合C语言语法的表达式是【19】。
【19】A)x%(-3)B)w+=2
C)k=(a=2,b=3)D)a+=(b=4)*(a=3)
20、已知a是float型变量,b是unsigned型变量,则正确的格式输入语句为【20】。
【20】A)scanf("%6.2f%d",&a,&b);
B)scanf("%f%n",&a,&b);
C)scanf("%6f%3d",&a,&b);
D)scanf("%f%f",&a,&b);
21、已知整型变量k和g,则下列程序段输出结果为【21】。
intk,g;
k=011;g=11;
printf("%d,%x\n",++k,g++);
【21】A)12,BB)10,3C)12,3D)10,B
22、已知inti,k;则下列for循环语句是【22】。
for(i=0,k=-1;k=1;i++,k++);
【22】A)判断循环结束的条件不合法B)无限循环
C)一次也不执行D)只执行一次
23、下列程序的输出结果为【23】。
main()
{
intx=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
{
case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;
break;
case3:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
【23】A)a=1,b=0B)a=2,b=1C)a=1,b=1D)a=2,b=2
24、执行【24】程序段,使i的结果为4。
【24】A)inti=0,j=0;B)inti=1,j=0;
(i=3,(j++)+i);j=i=((i++)*2);
C)inti=0,j=1;D)inti=1,j=1;
(j==1)?
(i=1):
(i=3);i+=j+=2;
25、说明语句int(*p)();的含义是【25】。
【25】A)p是一个指向一维数组的指针变量
B)p是指针变量,它指向一个整型数据的指针
C)p是一个指向函数的指针变量,该函数的返回值为整型数
D)p是一个指指针函数,该函数的返回值为指针值
26、下列函数fun的功能是【26】。
fun(char*s)
{
char*t=s;
while(*t++);
return(t-s-1);
}
【26】A)求两个串的长度差B)比较两个串的大小
C)将串s复制到串t中D)求s所指向的字符串长度
27、下列程序的输出结果为【27】。
main()
{
structdata
{
intyear,month,day;
}today;
union
{
longi;intk;charch;
}mix;
printf("%d,",sizeof(structdate));
printf("%d\n",sizeof(mix));
}
【27】A)6,2B)6,4C)8,4D)8,6
28、下列程序的输出结果为【28】。
main()
{
inta[]={1,2,3,4,5},*p;
p=a;
*(p+4)+=5;
printf("%d,%d\n",*p,*(p+4));
}
【28】A)4,10B)10,4C)1,4D)1,10
29、下列程序的输出结果是【29】。
main()
{
inta=10,b=20,*p1,*p2;
p1=&a;
p2=&b;
*p1=20;
*p2=32;
if(*p2>*p1)*p1=*p2;
printf("a=%d,b=%d\n",a,b);
}
【29】A)a=20,b=32B)a=32,b=20C)a=20,b=20D)a=32,b=32
30、下列程序的输出结果为【30】。
main()
{
inta=14,b=1;
printf("%d\n",(a&b)&&b);
}
【30】A)0B)1C)trueD)false
31、下列程序的输出结果为【31】。
main()
{
staticcharstr[]="abcdef";
voidfun();
fun(str);
printf("str[]=%s\n",str);
}
voidfun(chars[])
{
inta,b;
for(a=b=0;s[a]!
='\0';a++)
if(s[a]!
='c')
s[b++]=s[a];
s[b]='\0'
}
(去掉字符'c')
【31】A)str[]=abcdefB)str[]=abcdf
C)str[]=abD)str[]=abd
32、下列程序的输出结果为【32】。
main()
{
intn1,n2;
n1=n2=3;
n2=n1++;
printf("%d,%d\n",n1,n2);
}
【32】A)3,3B)4,4C)4,3D)3,4
33、下列程序段的输出结果为【33】。
intx=3;
do
{
printf("%2d",x--);
}while(!
x);
【33】A)321B)3C)21D)210
34、下列程序的输出结果为【34】。
main()
{
inta=-1,b=4,k;
k=!
((++a<0)&&!
(b--<=0));
printf("%d%d%d\n",k,a,b);
}
【34】A)104B)103C)013D)004
35、下列程序的输出结果为【35】。
main()
{
inta=2,i,k;
for(i=0;i<2;i++)
k=f(a++);
printf("%d\n",k);
}
f(intb)
{
staticinty=3;
return(b+y++);
}
【35】A)7B)6C)5D)8
36、下面对typedef不正确的叙述是【36】;
【36】A)用typedef可以定义各种类型名,但不能用来定义变量
B)用typedef可以增加新类型
C)用typedef只是将已存在的类型用一个新的标识符表示
D)使用typedef有利于程序的通用和移植
37、若有语句
chars1[]="string1",s2[8],*s3,*s4="string2";
则【37】是对库函数strcpy的错误调用。
(只有A能给出正确的结果)
【37】A)strcpy(s1,"string1");B)strcpy(s4,"string2");
C)strcpy("string2",s2);D)strcpy(s3,"string1");
38、下列程序的输出结果为【38】。
#defineSQR(x)x*x
main()
{
inta=10,k=2,m=1;
a/=SQR(k+m);
printf("%d\n",a);
}
【38】A)1B)8C)2D)9
39、下列程序的输出结果为【39】。
intd=1;
voidfun(intp)
{
intd=5;
d+=p++;
printf("%d,",d);
}
main()
{
inta=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
【39】A)8,4B)4,7C)9,4D)8,1
40、下列程序的输出结果是【40】。
main()
{
intx;
x=fun5(4);
printf("%d\n",x);
}
fun5(intn)
{
ints;
if((n==1)||(n==2))
s=2;
else
s=n+fun5(n-1);
returns;
}
【40】A)9B)11C)4D)2
二、请正确填充下列的函数或程序的划线部分,使其完成所要求的功能:
(本大题共20个空,每空2分,共40分。
请将答案写在答题卡对应栏中,答在试卷上不得分,每个空至多填一条语句。
)
1、下列程序的功能是应用如下的公式近似计算e的x次方。
(前10项的和)
main()
{floatexp=1.0,x,t;
intn,k;
scanf("%f",&x);
exp=exp+x;
t=x;
k=1;
for(n=2;【1】;n++)
{
t=t*x;
k=k*n;
exp=【2】;
}
printf("Thee^%dis%8.4f\n",int(x),exp);
}
2、有15个数按从小到大顺序存放在一个数组中,当输入一个数值时,要求用折半查找法找出该数是数组中第几个元素的值;如果该数不在数组中,则显示相应的提示。
#defineN15
main()
{
inti,num,top,bott,mid,a[N];
printf("请输入15个数(a[i]>a[i-1])\n");
scanf("%d",&a[0]);
i=1;
while(i{
scanf("%d\n",&a[i]);
if(【3】)i++;
else
{
printf("请重新输入a[i]");
printf("必须大于%d\n",a[i-1]);
}
}
printf("请输入查找数据:
");
scanf("%d",&num);
for(top=0,bott=N-1;top<=bott;)
{
mid=【4】;
if(num==a[mid])
{
printf("%d位于表中第%d个数\n",num,mid+1);
break;
}
elseif(numelsetop=【6】;
}
if(top>bott)
printf("%d不在表中\n",num);
}
3、下列程序完成统计命令行第三个参数中出现的字母的个数。
(isalpha(intch)函数功能检查ch是否字母,是返回1,否则返回0)
#include
main(argc,argv)
intargc;
char【7】;
{
char*str;
intcount=0;
if(argc<3)exit
(1);
str=【8】;
while(*str)
if(isalpha(【9】))count++;
printf("Count:
%d\n",count);
}
(最好为main(intargc,char【7】))
4、下列程序的功能是显示如下形式的数字:
100000
210000
321000
432100
543210
654321
main()
{
inta[6][6],i,j;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
if(【10】)a[i][j]=0;
else【11】;
}
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
printf("%3d",a[i][j]);
printf('\n');
}
}
5、下列程序的功能是求两个矩阵相乘。
#defineM3
#defineN4
voidfm(【12】)
{
inti,j,k;
for(i=0;ifor(j=0;j{
c[i][j]=【13】;
for(k=0;k【14】+=a[i][k]*b[k][j];
}
}
main()
{
inti,j;
intx[M][N]={1,2,3,4,5,6,7,8,9,10,11,12};
inty[N][M]={12,11,10,9,8,7,6,5,4,3,2,1};
intz[M][M];
fm(x,y,z);
for(i=0;i{
for(j=0;jprintf("%5d",【15】);
printf("\n");
}
}
6、下列程序完成将若干字符串按字母顺序(由大到小)输出。
main()
{
voidsort(),print();
staticchar*name[]={"Followme","BASIC","GreatWall",
"FORTRAN","Computerdesign"};
intn=5;
sort(name,n);
print(name,n);
}
voidsort(char*name1[],intn1)
{
char*temp;
inti,j,k;
for(i=0;i{
【16】;
for(j=i+1;jif(strcmp(name1[k],name1[j])>0)
【17】;
if(【18】)
{
temp=name1[i];
name1[i]=【19】;
name1[k]=temp;
}
}
}
voidprint(char*name2[],intn2)
{
inti;
for(i=0;iprintf("%s\n",【20】);
}
补充:
填空使程序完成所要求的功能
1、下面的函数是一个求非负整数阶乘的递归函数。
fac(intn)
{if(n==0)【21】;
elsereturn【22】;
}
2、下面程序使二维数组a[][]的第一行元素以后为零,但保留结尾数据-999,如下所示:
1234
0000
000-999
main()
{staticinta[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,-999}};
intj,k,*pa;
pa=【23】;/*把第一行的起始地址赋入pa*/
while(*pa!
=-999)
{【24】;
pa++;
}
for(j=0;j<3;j++)
{for(k=0;k<4;k++)
printf("%5d",【25】);
printf("\n");
}
}
3、建立函数arraycopy();使数组a[]的内容复制到数组b[]中。
arraycopy(【26】)
{inti=0;
while(a[i]!
=-999)
{【27】;
i++;
}
b[i]=【28】;
}
main()
{staticinta[]={1,2,3,4,5,6,7,8,9,10,-999};
intb[100],i=0;
【29】;
while(b[i]!
=-999)
printf("%d",【30】);/*被复制数组的数据显示*/
}
4、已知由英文单词和数字组成的文本文件xyz,统计该文件中单词和数字的个数并求出最长词或数字的长度。
注意,一个词(或数字)与另一个词(或数字)