C语言复习题及答案老师给的Word文档下载推荐.docx
《C语言复习题及答案老师给的Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言复习题及答案老师给的Word文档下载推荐.docx(46页珍藏版)》请在冰豆网上搜索。
C)externD)static
9、已知:
inta,x;
则正确的赋值语句是()。
A)a=(a[1]+a{2})/2;
B)a*=*a+1;
C)a=(x=1,x++,x+2);
D)a="
good"
;
10、已知:
inta,*p=&
a;
则下列函数调用中错误的是()。
A)scanf("
%d"
&
a);
B)scanf("
p);
C)printf("
a);
D)printf("
11、下述程序的输出结果是 ( )。
#include<
stdio.h>
voidmain()
{structcomplex
{intx;
inty;
}cnum[2]={1,3,2,7};
printf(“%d”,cnum[0].y/cnum[0].x*cnum[1].x);
}
A)0B)1C)3D)6
12、下述程序的输出结果是( )。
#include<
voidmain()
{union
{unsignedcharc;
unsignedinti[4];
}z;
z.i[0]=0x39;
z.i[1]=0x36;
printf(“%c”,z.c);
A)6B)9C)0D)3
13、下述关于C语言文件操作的结论中,( )是正确的。
A)对文件操作必须先关闭文件
B)对文件操作必须先打开文件
C)对文件操作顺序无要求
D)对文件操作前必须先测试文件是否存在,然后再打开文件
14、以下程序的输出结果是( )。
main()
{charch[3][4]={"
123"
"
456"
78"
},*p[3];
inti;
for(i=0;
i<
3;
i++)
p[i]=ch[i];
%s"
p[i]);
}
A)123456780B)123456780C)12345678D)147
15、对于所定义的二维数组a[2][3],元素a[1][2]是数组的第()个元素。
A)3B)4C)5D)6
二、判断题
1、赋值运算符的优先级低于关系运算符( )。
2、条件运算符的结合方向是“自左向右”( )。
3、C语句的循环语句中循环体如果包含一个以上的语句,必须以复合语句形式出现( )。
4、C程序中的函数不能嵌套调用,但可嵌套定义( )。
5、若自定义函数要求函数名返回一个值,则该函数体中必须要有return语句( )。
6、当形式参数为指针变量名时,实际参数可为指针变量名、数组名或其它类型变量的首地址( )。
7、若有说明:
staticinta[3][4];
,则数组a中各数组元素可在程序的编译阶段得到初值0( )。
8、若用数组名作为函数调用时的实参,则实际上传递给形参数组的是数组的第一个元素的值( )。
9、利用指针和结构体类型可以构成表、树等复杂的数据结构( )。
10、共用体变量的地址和它的各成员的地址都是同一地址( )。
11、printf函数中的“%0”格式参数表示用来输出unsigned型数据()。
12、在一个C程序中,所有要使用的变量和要调用的函数都必须在main()函数中定义()。
13、赋值运算符的结合性是“自右至左”()。
14、一个C程序可以由多个源程序文件组成()。
15、do-while语句构成的循环,当while语句中的表达式的值为零时结束循环()。
三、写出下面各程序的运行结果
1、#includestdio.h
main()
{inti=0,j=0,k=0,m;
for(m=0;
m4;
m++)
switch(m)
{case0:
i=m++;
case1:
j=m++;
case2:
k=m++;
case3:
m++;
printf(“\n%d,%d,%d,%d”,i,j,k,m);
2、#includestdio.h
{inti=1;
while(i=15)
if(++i%3!
=2)
continue;
else
printf(“%d”,i);
3、#include<
add1(inta[],intn)
{inti;
for(i=0;
n;
i++)a[i]++;
{staticintarray[]={0,1,2,3,4,5,6,7,8,9};
intj;
add1(array,10);
for(j=0;
j<
10;
j++)
printf(“%d”,array[j]);
4、uniondata
{longw;
floatx;
charz;
}beta;
main()
{beta.w=123456;
beta.y=888;
beta.x=3.14;
beta.z=’x’;
printf(“%c”,beta.y);
5、#include<
string.h>
typedefstructstudent{
charname[10];
longsno;
floatscore;
}STU;
{
STUa={"
zhangsan"
2001,95},b={"
Shangxian"
2002,90},c={"
Anhua"
2003,95},d,*p=&
d;
d=a;
if(strcmp(a.name,b.name)>
0)d=b;
if(strcmp(c.name,d.name)>
0)d=c;
%ld%s\n"
d.sno,p->
name);
四、程序填空
1、以下程序是从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请将缺省语句填上。
{floatx,amax,amin;
scanf(“%f”,&
amax=x;
amin=x;
while(①)
{if(②)amax=x;
if(③)amin=x;
printf(“amax=%f,amin=%f\n”,amax,amin);
}2、下面的程序是用指针来交换两个数据,请将缺省语句填上。
voidexchange(int*p,int*q)
{intt;
t=*p;
*p=*q;
*q=t;
{inta,b,*x,*y;
a=10;
b=20;
x=&
①
②
printf(“%d%d\n”,*x,*y);
五、程序设计题
有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数。
2、用自定义函数和数组求n个数的平均值,并用主函数调用
参考答案:
1、B2、D3、C4、C5、A
6、A7、D8、C9、C10、D
11、D12、B13、B14、C15、D
( √ )2、( ×
)3、( √ )4、( ×
)5、( ×
)
6、 √ )7、( √ )8、( √ )9、( √ )10、( √ )
11、(×
)12、(×
)13、(√)14、(√)15、(√)
三、写出程序的运行结果
1、答案是:
0,1,2,5
2、答案是:
2581114
3、答案是:
12345678910
4、答案是:
x
5、答案是:
2002Shangxian
1、答案是:
①x=0②xamax③xamin
2、答案:
①y=&
b;
②exchange(x,y);
五、程序设计题
1、参考答案:
#defineN10
structstudent
{charnum[6];
charname[8];
intscore[4];
floatave;
}stu[N];
{inti,j,max,maxi,sum;
floataverage;
/*输入*/
for(i=0;
i<
N;
i++)
{printf(“\nInputscoresofstudent%d,\n”,i+1);
printf(“No.:
”);
scanf(“%s”,stu[i].num);
printf(“name:
scanf(“%s”,stu[i].name);
{printf(“score%d:
”,j+i);
scanf(“%d”,&
stu[i].score[j]);
/*计算*/
average=0;
max=0;
maxi=0;
for(i=0;
{sum=0;
for(j=0;
j<
j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>
max)
{max=sum;
maxi=i;
average/=N;
/*打印*/
printf(“NO.namescore1score2score3average\n”);
{printf(“%s%10s”,stu[i].num,stu[i].name);
printf(“%9d”,stu[i].score[j]);
printf(“%8.2f\n”,stu[i].avr);
printf(“average=%6.2f\n”,average);
printf(“Thehighestscoreis:
%s,scoretotal:
%d”,stu[maxi].name,max);
2、参考答案:
floataverage(floata[],intn)
{floataver=0;
intj;
aver=aver+a[j];
aver=aver/n;
returnaver;
{floatx[10],y;
scanf(“%f”,&
x[j]);
y=average(x,10);
printf(“aver=%.2f\n”,y);
复习B:
1、逗号表达式2,4,6,8的值为()。
A)2B)4C)6D)8
2、以下选项中非法的表达式是()
A)0<
=x&
x<
100B)i=j==0
C)(char)(65+3)D)x+1=x+1
3、若定义floata;
现要从键盘输入a的数据,其整数位为3位,小数位为2位,则
选用()。
A)scanf(“%f”,&
B)scanf(“%5.2f”,a);
C)scanf(“%6.2f”,&
D)scanf(“%f”,a);
4、下列程序的运行结果是()
{inta=3,b=2,c=1,k=4;
k<
a?
k:
c<
b?
c:
a);
A)4B)3C)2D)1
5、以下程序中,while循环的循环次数是()。
{inti=0;
while(i<
10)
{if(i<
1)continue;
if(i==5)break;
i++;
A)1B)10C)6D)死循环,不能确定次数
6、执行语句:
for(i=1;
i++<
4;
)后;
变量i的值是()。
A)3B)4C)5D)不定
7、有关函数参数,下列说法不正确的是( )。
A)实参可以将数据传给形参;
B)实参和形参是不同的变量;
C)形参可以将数据传给实参;
D)实参和形参必须个数相等,类型一致。
8、C语言中,变量和函数具有两个属性是( )。
A)作用域和生存期B)类型和存储类别
C)作用域和类型D)作用域和存储类别
9、说明语句“int(*p)():
”的含义是()。
A)p是一个指向一维数组的指针变量
B)p是指针变量,指向一个整型数据
C)p是一个指向函数的指针,该函数的返回值是一个整型
D)以上都不对
10、说明语句"
int*(*p);
"
的含义是()。
A)p是一个指向int型数组的指针
B)p是指针变量,它构成了指针数组
D)p是一个指向函数的指针,该函数的返回值是一个指向整型的指针
11、下述程序的执行结果是( )。
#include<
unionun
charc[2];
};
{unionunx;
x.c[0]=10;
x.c[1]=1;
printf(“\n%d”,x.i);
A)266B)11C)265D)138
12、若程序中有如下的说明和定义:
structex
{intx,y;
…
structexx,y;
则会发生的情况是 ( )。
A)编译时错 B)程序能顺利编译、连接、执行
C)能顺利编译和连接,但不能执行 D)能通过编译,但连接出错
13、C语言可以处理的文件类型是( ) 。
A)文本文件和数据文件 B)文本文件和二进制文件
C)数据文件和二进制文件 D)数据代码文件
14、下面的for语句()。
for(x=0,y=0;
(y!
=123)&
(x4);
x++)
A)是无限循环B)循环次数不定C)循环执行4次D)循环执行3次
15、若有如下说明:
struct
{charch;
inti;
doublex;
}arr[2][3]={{‘a’,1,3.45},{‘b’,2,7.89},{‘c’,3,1.93}};
则表达式() 的值为2。
A)arr[0][1].chB)arr[0][1].iC)arr[0][0].iD)arr[0][2].i
1、条件运算符的结合方向是“自左向右”( )。
2、switch语句中每一个case的常量表达式的值必须互不相同( )。
3、循环语句中循环体允许包含一个以上的语句,可以不以复合语句形式出现( )。
4、构成C程序的源文件之间以及函数与函数之间,相互位置可以任意( )。
5、C程序中的函数不能嵌套定义,但可嵌套调用( )。
6、从变量的作用域角度来分,可以分为全局变量和局部变量( )。
7、从终端输入一个字符串给字符数组,该字符串两端不必用双引号括起来( )。
8、若有说明:
inta[][4]={0,0};
,则只有a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0( )。
9、利用指针和结构类型不能构成更复杂的数据结构( )。
10、共用体类型可以出现在结构体类型定义中( )。
11、当一个case语句末包含break语句时,执行完该case语句后跳出switch结构()。
12、宏定义中的标识符可以用大写字母,也可以用小写字母()。
13、do-while语句构成的循环,当while语句中的表达式的值为非零时结束循环()。
14、用“%”作求余运算时,该运算符两侧均应为整型数据()。
15、一个逗号表达式可以与另一个表达式组成一个新的逗号表达式()。
{inta=1,b=3,c=5,d=4;
if(ab)
if(cd)x=1;
if(ac)
if(bd)x=2;
elsex=3;
elsex=6;
elsex=7;
printf(“x=%d”,x);
{intk,j,m;
for(k=5;
k=1;
k--)
{m=0;
for(j=k,j=5;
m+=k*j;
printf(“m=%d\n”,m);
3、#include<
main()
{unionExa
{struct
{inta;
intb;
}out;
intc;
intd;
}e;
e.c=1;
e.d=2;
e.out.a=e.c*e.d;
e.out.b=e.c+e.d;
%d%d"
e.out.a,e.out.b);
4、#include“stdio.h”
{inta[]={1,2,3,4},i,j,s=0;
j=1;
for(i=3;
i>
=0;
i--)
{s=s+a[i]*j;
j=j*10;
printf(“s=%d\n”,s);
5、#include"
stdio.h"
#include"
string.h"
{chars1[]="
somthings"
chars2[]="
test"
chars3[]="
%s\n"
strcat(strcpy(s1,s2),s3));
1、下面程序输出100到200之间的素数,每行输出10个素数,请将缺省语句填上,使算法完整。
#include“math.h”
{intm,k,i,n=0;
for(m=101;
m=200;
m=m+2)
{if(①)printf(“\n”);
k=sqrt(m);
for(i=2,i=k;
if(②)break;
if(i=k+1){printf(“%d”,m);
n=n+1;
2、一个函数days,实现求某月某日是该年的第多少天。
由主函数将年、月、日传递给days函数,计算后将日数传回主函数输出,请将缺省语句填上,使算法完整。
structy_m_d
{intyear;
intmonth;
intday;
}date;
{intdays(int,int,int);
inti,day_sum;
printf(“inputyear,month,day:
scanf(“%d,%d,%d”,&
date.year,&
date.month,&
date.day);
day_sum=days(①);
printf(“\n%d/%disthe%dthdayin%d.”,date.month,date.day,day_sum,date.year);
days(intyear,intmonth,intday)
{intday_sum,i;
intday_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
②
for(i=1;
month;
day_sum+=day_tab[i];
day_sum+=day;
if((year%4==0&
year%100!
=0||year%4==0)&
month>
=3)
③
return(day_sum);
1,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把分数最低的学生数据放在h所指的数组中,注意:
分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b)
{…………
{STRECs[N]={{“GA05”,85},{“GA03”,76},{“GA02”,69},{“GA04”,85},
{“GA01”,91},{“GA07”,