2022年辽源职业技术学院公共课《C语言》科目期末试卷B(有答案)
一、填空题
1、设有一输入函数scanf(\"%d”,k);它不能使float类型变量k得到正确数值的原因是_______未指明变量k的地址和_______格式控制符与变量类型不匹配。 2、下面程序段是找出整数的所有因子。请填空。
scanf(\"%d\",&x); i=1;for(;_______;)
{if(x%i==0)printf(\"%3d\",i); i++; }
3、下面程序段的运行结果是_______。 x=2;
do{printf(\"*\");x--;)while(!x==0);
4、若有定义语句:inte=1,f=4,g=2;float m=10.5,n=4.0,k;,则执行表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m后k的值是_______。 5、表达式x=6应当读做_______
6、若有定义floata[3][5];则a数组所含数组元素个数是_______,a数组所占的字节数是_______。
7、在C语言中,&运算符作为单目运算符时表示的是_______运算;作为双目运算符时表示的是_______运算。
8、一个C语言源程序由若干函数组成,其中至少应含有一个________ 9、C语言的源程序必须通过【 】和【 】后,才能被计算机执行。
10、已有一维数组a,n为元素的个数,且各元素均有值;函数void process(float*p,int n,float(*fun)(float*,int))为一个可完成下面各种计算的通用函数。请分别写出用于以下计算的各函数中的调用语句_______、_______和_______。
(1)float arr_add(float*arr,int n)计算数组元素值之和。 (2)float odd_add(float*p,int n)计算下标为奇数的元素之和。 (3)float arr_ave(float*p,int n)计算各元素的平均值。
二、选择题
11、以下表达式值为3的是( )
A.16-13%10 B.2+3/2 C.14/3-2 D.(2+6)/(12-9) 12、设以下变量均为int类型,则值不等于7的表达式是( )。 A.(x=y=6,x+y,x+1) B.(x=y=6,x+y,y+1) C.(x=6,x+1,y=6,x+y) D.(y=6,y+1,x=y,x+1) 13、以下叙述正确的是
A.在C程序中,main函数必须位于程序的最前面 B.C程序的每行中只能写一条语句 C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误 14、以下叙述不正确的是( )
A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main函数 C.C程序的基本组成单位是函数
D.在C程序中,注释说明只能位于一条语句的后面
15、以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是( )。 A) void strcpyl(char xpl,char*p2)
{while((*p1++=*p2++)!=\\0');} B)void strcpy1(char *pl,char *p2)
{while((*pl=*p2)!=\\0){p1++;p2++;}}C)void strcpy1(char *pl,char *p2)
{while(*p2)*p1++=*p2++;} D)void trcpyl(char *p1,char *p2)
{while((*pl++=*p2++);)*p='\\0';} 16、以下程序的运行结果是( )。 #include int main(){int xl=0xabc,x2=0xdef; x2-=xl;
printf(\"%X\\n\",x2); return 0 }
A.ABC B.0Xabc C.0X333 D.33317、设有以下程序段:
int x=0,s=0;
while(!x!=0)s+=++x;
printf(\"%d”,s);则( )
A.运行程序段后输出0 B.运行程序段后输出1 C.程序段中的控制表达式是非法的D.程序段执行无限次
18、以下程序有语法性错误,有关错误原因的正确说法是( )。
#include int main() {int G=5,k; void prt_char(); -----k=prt_char(G); ---
}
A.语句void prt_char();有错,它是函数调用语句,不能用void说明 B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾 D.函数名不能使用下划线
19、若有初始化inta[][3]={1,2,3,4,5,6,7};,则以下错误的叙述是(A.引用a数组时,元素的两个下标值均不能超过2 B.a数组的第一维大小为3 C.a数组中包含9个元素 D.a数组中包含7个元素
) 20、若有以下程序段:
int a[]={4,0,2,3,1},i,j,t; for(i=l;i<5;i++) {t=a[i];j=i-1; while(j>=0&&t>a[j] {a[j+1]=a[j];j--;} a[j+1]=t;
则该程序段的功能是( )。
A.对数组a进行插入排序(升序)B.对数组a进行插入排序(降序) C.对数组a进行选择排序(升序)D.对数组a进行选择排序(降序) 21、以下程序的输出是( )。
#include int main(){int x=2,y=-1,z=2; if(xA) 3 B.2 C.1 D.0 22、下面程序段的运行结果是( )。int a[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5; printf(\"%3d\; }
A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0 23、下面程序的运行结果是( )。
#include int main(){char ch[7]={\"12ab56\; int i,s=0; for(i=0;ch[i]>= '0'&&ch[i]<='9';i+=2) s=10*s+ch[i]-'o'; printf(\"%d\\n\",s); return0; }
A.1 B.1256 C.12ab56 D.15
24、以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A',B’,C.;则符合程序段运行结果的选项是( )。
void move(char getone,char putone) {printf(\"%c——>%c\\n\",getone,putone); void hanoi(int n,char one,char two,char three)
{if(n==1)move(one,three); else
{hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } }
A)A-->C B)A-->C C)A-->C D)A-->CA-->B A-->B A-->B A-->BC-->B C-->A C-->B C-->BB-->A A-->B A-->C A-->CC-->B B-->C B-->A AA-->C A-->C B-->C B-->CA-->B A-->B A-->C A-->C25、下面程序的运行结果是( )。 #include int main() {int i,j,a=0; for(i=0;i<2;i++) {for(j=0;j<4;j++) {if(j%2)break;—->B a++; } a++;
}
printf(\"%d\\n\",A.: return 0; }
A.4 B.5 C.6 D.7
三、读程序填空
26、有以下程序:
#include int main() {int k=0; char c1='a', c2='b';scanf(\"%d%c%c”,&k,&c1,&c2); printf(\"%d,%c,%c\\n\",k,c1,c2); return 0; }
若运行时从键盘输入:55AB<回车>,则输出结果是_______。
27、已有定义float d1=3.5,d2=-3.5;执行以下语句后的输出结果是_______。
printf(\"*d(1)=%e*d(2)=%.4e*d(3)=%10.4e*\\n\",dl,dl,d1); printf(\"*d(4)=%e*d(5)=%.6e*d(6)=%-12.5e*\\n\",d2,d2,d2); 28、以下程序的功能是判断输入的某个年份是否是闰年。请填空。
#include int main() {int y,f;scanf(\"%d\",&y); if(y%400==0)f=1; else if(_______)f=1; else_______;
if(f)printf(\"%d is\",y); else printf(\"%d is not\",y); printf(\"a leap year\\n\"); return 0;
}
29、某个自动加油站有a、b、c三种汽油,单价分别为1.50、1.35、1.18(元/千克),也提供了“自己加”或“协助加”两个服务等级,以便用户可得到5%或10%的优惠。以下程序的功能是:针对用户输入加油量a,汽油品种b和服务类型c(f——自动,m——自己,e——协助),输出应付款m。请填空。
#include int main(){float a,r1,r2,m;
char b,c;
scanf(\"%f%c%c\",&a,&b,&c); switch(b)
{case'a':r1=1.5;break; case'b':_______;break; case'c':rl=1.18;break; switch(c)
{case'f':r2=0;break; case'm':r2=0.05;break; case_______:r2=0.1;break; m=_______;printf(\"%f\",m); return 0; }
30、已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。修改前的pow函数:
int pow(int x,int y) {int i,j=1;
for(i=1;i<=y;++i) j=j*x; return(j);: int pow(int x,int y)
{int j;
for(_______;_______;_______) j=j*x; return(j); }
31、下面程序的功能是检查一个二维数组是否对称(即对所有i、j都有a[i][j]= a[j][i])。请填空。
#include int main(){int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4}; int i,j,found=0; for(j=0;j<4;j++) for(_______;i<4;i++) if(a[j][i]!=a[i][j]) {_______;break;)
if(found==1)printf(\"No\"); else printf(\"Yes\"); return 0; }
32、下面程序的功能是计算100~1000之间有多少个数其各位数字之和是5。请填空。
#includeint main()
{int i,s,k,count=0; for(i=100;i<=1000;i++) {s=0;k=i;
while(_______){s=s+k%10;k=_______;} if(s!=5)_______; else count++; }
printf(\"%d\",count); return0; }
33、下面程序的运行结果是_______。
#includefloat*search(float(*pointer)[4]); int main()
{static float score[][4]={{60,70,80,90},{50,,67,88},90,66},{80,90,100,70}};
float*p;inti,j; for(i=0;i<=3;i++) {p=search(score+i); if(p==*(score+i))
{printf(\"No.%d scores:\",i);
,78, {34for(j=0;j<4;j++) printf(\"%5.2f\",*(p+j)); printf(\"\\n\"); return(0);
float*search(float(*pointer)[4]) {int i;float*pt; pt=*(pointer+1); for(i=0;i<=3;i++)
if(*(*(pointer)+i)<60)pt=*pointer; return(pt); }
四、编程题
34、编写程序实现功能:输入整数a和b,若a2+b2>100,则输出a2+b2百位以上数字,否则直接输出a2+b2的和
35、输入两个整数,求它们相除的余数。用带参的宏编程来实现。
参
一、填空题
1、【1】格式控制符与变量类型不匹配。
scanf 语句的正确形式应该是:scanf(\"%f\",8.k); 【2】未指明变量k的地址。 2、i<=x 3、** 4、13.700000
5、将常量6赋给变量x 6、【1】15【2】60 7、【1】取地址【2】按位与 8、主函数(或main函数) 9、【1】编译【2】连接
10、【1】process(a,n,arr_add); 【2】process(a.n,odd_add); 【3】process(a,n,arr_ave);
二、选择题
11、B 12、C
13、C
14、D
15、D 16、D 17、B 18、C 19、D 20、B 21、B 22、C 23、A 24、C 25、A
三、读程序填空
26、55,,A
27、*d(1)=3.50000e+00*d(2)=3.500e+00*d(3)=囗3.500e+00* *d(4)=一3.50000e+00*d(5)=-3.50000e+00*d(6)=-3.5000e+00囗x
(注:答案中的囗代表空格)
28、【1】y%4==0&&y%100!=0【2】f=0 29、【1】r1=1.35【2】'e'【3】a*rl*(1-r2) 30、【1】j=1【2】y>=1【3】--y或y--
31、【1】i=j+1【2】found=1 32、【1】k【2】k/10【3】continue 33、No.1 scores:50.00.0067.0088.00 No.2 scores:34.0078.00 90.0066.00
四、编程题
34、#include int main() {int a,b,x,y;scanf(\"%d%d\",&a,&.b); x=a*a+b*b; if(x>100)
{y=x/100;printf(\"%d\",y);} else printf(\"%d\",a+b); return 0 }
35、/*求两个整数相除的余数*/
#define MOD(a,b)(a%b) int main() {int a,b;
printf(\"input two integer a,b:\"); scanf(\"%d,%d\",&a,&b);
printf(\"a mod b is:%d\\n\",MOD(a,b)); return 0; }