C语言复习题及答案老师给的docxWord格式.docx
《C语言复习题及答案老师给的docxWord格式.docx》由会员分享,可在线阅读,更多相关《C语言复习题及答案老师给的docxWord格式.docx(38页珍藏版)》请在冰豆网上搜索。
a;
贝!
|下列函数调用中错误的是
A)scanf「%d“,&
a);
C)printfT%d”,a);
13.
14.
15、
D)3)是正确的。
A)6B)9
下述关于C语言文件操作的结论中,(B
对文件操作必须先关闭文件
对文件操作必须先打开文件对文件操作顺序无要求
对文件操作前必须先测试文件是否存在,然后再打开文件
A)
B)
C)
D)
以下程序的输出结果是(C)O
main()
{charch[3][4]={〃123〃,"
456〃,〃78"
},*p[3];
(i=0;
i<
3;
i++)
p[i]二ch[i];
printf(z/%sz,,p[i]);
A)123456780B)123
对于所定义的二维数组a[2][3],A)3B)4C)
int
for
456780C)12345678D)147元素a[l][2]是数组的第(D)个元素。
5
D)6
1、赋值运算符的优先级低于关系运算符(V)«
2、条件运算符的结合方向是“自左向右”(x)。
3、C语句的循坏语句中循环体如果包含一个以上的语句,必须以复合语句形式出现(V)。
4、C程序屮的函数不能嵌套调用,但可嵌套定义(x)0
5、若自定义函数要求函数名返回一个值,则该函数体中必须要有return语句(x)。
6、当形式参数为指针变量名时,实际参数可为指针变量名、数组名或其它类型变量的首地址
(V)o
7、若有说明:
staticinta[3][4];
则数组a中各数组元素可在程序的编译阶段得到初值0(V)。
8、若用数组名作为函数调用时的实参,则实际上传递给形参数组的是数组的第一个元素的值(V)。
9、利用指针和结构体类型可以构成表、树等复杂的数据结构(V)o
10、共用体变量的地址和它的各成员的地址都是同一地址(V)o
11>
printf函数中的"
%0”格式参数表示用来输出unsigned型数据(x)。
12、在一个C程序中,所有要使用的变量和要调用的函数都必须在main()函数中定义(x)。
13、赋值运算符的结合性是“自右至左”(V)0
14、一个C程序可以由多个源程序文件组成(J)o
15>
do-while语句构成的循环,当while语句中的表达式的值为零时结束循环(V)。
三、写
出下面各程序的运行结果
1、#include<
stdio.h>
{inti=0,j=0,k=0,m;
for(m=0;
m<
4;
m++)switch(m){case0:
i=m++;
case1:
j=m++;
case2:
k=m++;
case3:
m++;
}printf(u\n%d,%d,%d,%d”,ijk,m);
2、#includc<
{inti=l;
while(i<
=15)if什+i%3!
=2)continue;
elseprintf(“%d"
i);
3、#include<
add1(inta[],intn)
{inti;
for(i=0;
n;
i++)a[i]++;
{staticintarray[]={0,1,2,3,43,6,7,8,9};
intj;
add1(arrayJO);
for(j=0;
j<
10;
j-H-)printf(“%d”,array[j]);
4、uniondata
{longw;
floatx;
inty;
charz;
}beta;
{beta.w=123456;
beta.y=888;
bcta.x=3.14;
beta・z='
x:
printfT%c'
'
beta.y);
5、#include<
string.h>
typedefstructstudent{
charname[10];
longsno;
floatscore;
}STU;
(
STUa={“zhangsan”,2001,95},b={HShangxianM,2002,90},c={“Anhua”,2003,95},d,*p=&
d;
d=a;
if(strcmp(a.name,b.name)>
0)d=b;
if(strcrnp(c.narne,d.name)>
0)d=c;
printf(H%ld%s\n,\d.sno,p->
naine);
四、程序填空
1、以下程序是从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请将缺省语句填上。
{floatx,amax,amin;
scanf(“%f'
&
amax=x;
amin=x;
while(①)
{if(②)amax=x;
if(③)amin=x;
scanf(“%f;
&
printf(uamax=%f>
amin=%f\n,\amax,amin);
}2、下面的程序是用指针来交换两个数据,请将缺省语句填上。
voidexchange(int*p,int*q)
{intt;
t=*p;
*p=*q;
*q=t;
main()
{inta,b,*x,*y;
a二10;
b二20;
x二&
①
②
printf(u%d%d\n"
*x,*y);
五、程序设计题
有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包插学号、姓名、3门课的成绩、平均分数。
2、用自定义函数和数组求n个数的平均值,并用主函数调用
参考答案:
一、单项选择题
1、B
2、D
3、C
4、C
5、A
6、A
7、D
8、C
9、C10、
D
11>
D
12、B
13、B
14>
C
15、D
判断题
7)
2、(x
)3、(
7)4、(X
)5、(*)
寸
)7、(7
)&
(7)9、(
7)10、(Q)
11、
(x
)12、(x
)13、
(7)14、
(7)15、(7)
三、
写出程序的运行结果
1、
答案是:
0,
1,2,5
2、
2
5811
14
3、答案是:
12345678910
4^答案是:
x
5、答案是:
2002Shangxian
1>
答案是:
①x>
=0②x>
amax③xvamin
2、答案:
©
y=&
b;
②exchange(x,y);
1、参考答案:
#defineN10
structstudent
{charnum[6];
charname[8];
intscore[4];
floatave;
}stu[N];
{intij,max,maxi,sum;
floataverage;
/*输入*/
for(i=0;
i<
N;
i卄)
{printf(u\nlnputscoresofstudent%d,\n'
i+l);
printf(“No.:
"
);
scanf(“%s'
stu[i].num);
printfpnamc:
scanf('
%s'
stu[i].name);
for0=0;
j++)
{printf(uscore%d:
j+i);
scanf(“%d"
&
stu[i].score[j]);
{sum=0;
j++)sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>
max)
{max=sum;
maxi=i;
avcragc/=N;
/*打印*/
printfC'
NO・namescore1score2
score3average\ii^);
for(i=0;
i++)
{printf("
%s%10s"
stu[i].num,
stu[i].name);
j卄)printf(“%9d"
stu[i].score[j]);
printf(“%8.2f\iT,stu[i].avr);
/*计算*/average=0;
max=0;
maxi=0;
}printfC'
average=%6.2f\n,\average);
printf^Thehighestscoreis:
%s,scoretotal:
%d”,stu[maxi].name,max);
2、参考答案:
floataverage(floata[],intn){floataver=0;
intj;
j++)aver=aver+a[j];
aver=aver/n;
returnaver;
{floatx[10],y;
forO=0;
j卄)scanf("
%F'
x[j]);
y=average(x,10);
printfC4aver=%.2f\n,,,y);
复习B:
1>逗号表达式2,4,6,8的值为(d)o
A)2B)4C)6
D)8
2、以下选项中非法的表达式是(d)
A)0<
=x&
x<
100B)i=j==O
C)(char)(65+3)D)x+仁x+1
7、
A)1执行语句:
A)3
有关函数参数,
(i=l;
10C)6
i++<
)后;
变量i的值是(c)o4
C)5
死循环,不能确定次数
D)不定
下列说法不正确的是
A)实参可以将数据传给形参;
C)形参可以将数据传给实参;
8、C语言屮,变量和函数具有两个属性是
A)作用域和生存期B)
C)作用域和类型D)
c)。
B)实参和形参是不同的变量;
D)实参和形参必须个数相等,类型一致。
b
类型和存储类别作用域和存储类别
)o
9、说明语句“int(*p)():
的含义是(c)。
A)p是一个指向一维数组的指针变量
B)p是指针变量,指向一个整型数据
C)p是一个指向函数的指针,该函数的返冋值是一个整型
D)以上都不对
10、说明语句”int*(邛);
“的含义是(d)。
A)p是一个指向int型数组的指针
B)p是指针变量,它构成了指针数组
D)p是一个指向函数的指针,该函数的返回值是一个指向整型的指针
11、下述程序的执行结果是(a)。
#include<
unionun
{inti;
charc[2];
};
voidmain(){unionunx;
3、若定义floata;
现要从键盘输入a的数据,其整数位为3位,小数位为2位,则
structexx,y;
则会发生的情况是(a)0
A)编译时错
C)能顺利编译和连接,但不能执行
13、C语言可以处理的文件类型是(
A)文本文件和数据文件B)
C)数据文件和二进制文件D)
14、下而的fbr语句(c)。
B)程序能顺利编译、连接、执行
D)能通过编译,但连接出错
b)。
文本文件和二进制文件
数据代码文件
for(x=0,y=0;
(y!
=123)&
(x<
4);
x++)
A)是无限循环B)循环次数不定C)循环执行4次D)循环执行3次
15、若有如下说明:
struct
{charch;
inti;
doublex;
}arr[2][3]={{<
a\l,3.45},{4b\2,7.89},{40\3,1.93}};
则表达式(b)的值为2。
A)arr[0][l].chB)arr[0][l].iC)arr[0][0].iD)arr[0][2].i
二、判断题
1、条件运算符的结合方向是“自左向右”(x)。
2、switch语句中每一,个case的常量表达式的值必须互不相同(V)0
3、循环语句中循环体允许包含一个以上的语句,可以不以复合语句形式出现(x)。
4、构成C程序的源文件之间以及函数与函数之间,相互位置可以任意(J)o
5、C程序中的函数不能嵌套定义,但可嵌套调用(V)。
6、从变量的作用域角度来分,可以分为全局变量和局部变量(V)。
7、从终端输入一个字符串给字符数组,该字符串两端不必用双引号括起来(V)。
8、若有说明:
inta[][4]={0,0};
则只有a[0][0]和a[0][叮可得到初值0,其余元素均得不到初值0
9、利用指针和结构类型不能构成更复杂的数据结构(x)。
10、共用体类型可以出现在结构体类型定义中(V)o
当一个case语句末包含break语句时,执行完该case语句后跳出switch结构(丿)。
12、宏定义屮的标识符可以用大写字母,也可以用小写字母(x)。
13、do-while语句构成的循坏,当while语句中的表达式的值为非零时结束循环(x)。
14、用“%”作求余运算时,该运算符两侧均应为整型数据(V)。
15、一个逗号表达式可以与另一个表达式组成一个新的逗号表达式(J)o
三、写出程序的运行结果
if(c<
d)x=l;
else
if(a<
c)
if(b<
d)x=2;
1、#include<
{inta=l,b=3,c=5,d=4;
if(a<
b)
elsex=3;
elsex=6;
elsex=7;
printf(“x=%d"
x);
2、#include<
{intk,j,m;
fdr(k=5;
k>
=l;
k--){m=0;
for(j=k,jv=5;
j++)
m+=k*j;
printf(um=%dW\m);
3、//include<
{unionExa
{struct
{inta;
intb;
}out;
intc;
intd;
}e;
e.c=l;
e.d=2;
c.out.a=c・c*c.cl;
e.out.b=e.c+e・d;
printf(M%d%d"
e.out.a,e.out.b);
4、#include“stdio.W
{inta[]={l,2,3,4},ij,s=0;
j=l;
for(i=3;
i>
=0;
i-){s=s+a[i]*j;
j=j*10;
}
printf(6<
s=%d\n,,,s);
5、include,,stdio.h,'
#include"
string.h"
{chars1[]='
*somthings"
;
chars2[]="
tcstM;
chars3[]=ngoodu;
%s\n"
strcat(strcpy(sl,s2),s3));
1、下面程序输出100到200之I、可的素数,每行输出10个素数,请将缺省语句填上,使算法完整。
^include“math.h'
{intm,k,i,n=0;
for(m=101;
=200;
m=m+2)
{if(_Q_)printfC4\n?
);
k=sqrt(m);
for(i=2,i<
=k;
if()break;
if(i>
=k+l){printfC%cT,m);
n=n+l;
2、一个函数days,实现求某月某日是该年的第多少天。
由主函数将年、月、日传递给days函数,计算后将日数传回主函数输出,请将缺省语句填上,使算法完整。
structy_m_d
{intyear;
intmonth;
intday;
}date;
{intdays(int?
int,int);
inti,day_sum;
printf(44inputyear,month,day:
95);
scanf(“%d,%d,%d”,&
date.yeai;
date.month,&
date.day);
day_sum=days(
(1));
printf{44\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=l;
month;
day_sum+=day_tab[i];
day_sum+=day;
if((year%4=0&
year%100!
=0||year%4==0)&
month>
=3)retuni(day_sum);
1,学生的记录由学号和成绩组成,N名学生的数据己在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把分数最低的学生数据放在h所指的数组中,注意:
分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
#dcfincN16
typedefstruct
{charnum[10J;
ints;
}STREC;
intfun(STREC*a,STREC*b)
{STRECs[N]={{“GA05"
85},{“GA03"
76},{“GA02"
69},{“GA04"
85},
{“GAOV\91},{“GA07"
72},{“GA08"
64},{“GA06"
87},
{“GAO15”,85},{“GAO13”,96},{“GAO12,64},{“GAO14”,91},{“GAO1V\91},{“GAO17”,64},{“GAO18”,64},{“GAO16”,72};
STRECh[N];
inti,n;
n=fun(s,h);
The%dlowestscore:
\n,,,n);
fbr(i=O;
汁+)
printf(t4%d%4d\n,,,h[I].num,h[I].s);
printf(“\n”);
2、从键盘输入一-批字符(回车键结束),存入一个磁盘文件abc.txt中
1、D2、D3、A4、D5、D
6、C7、C8、B
9、010、D
{FILE*fp;
charch;
m=fopen("
abc.txt”,'
w'
ch=getchar();
while(ch!
=,\n,)
{fputc(fp,ch);
ch=gctchar();
fclose(fp);
11、A
12、A
14、C
15、B
1、(x
)2、(
V
)3、(x
)4、(7
6、(V
)7、(
7)8、(P
)9、(x
11、(7)
12.(
X)
13、(x
)14、(7
1、答案是:
x=2
2、答案是:
m=15
3、答案是:
48
)5、(Q)
)10、(V)
15、(P)
1、答案是:
®
n%10==0②m%i==0
2、答案是:
date.year,date.month,date.day
②day_sum=0;
③day_sum+=l;
1、参考答案:
STRECfun(STREC*a,char*b)
{staticSTRECh={“,l};
intk;
fbr(k=0;
k<
k++)
if(!
strcmp(a[k].num,b))
{h=a[k];
break;
returnh;
2、参考答案:
复习C: