2022年长沙南方职业学院公共课《C语言》科目期末试卷B(有答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022年长沙南方职业学院公共课《C语言》科目期末试卷B(有答案)
一、填空题
1、结构化程序由________、________ 、________ 3种基本结构组成。
2、函数swap(arr,n)可对arr数组从第1个元素到第n个元素分别进行两两元素
交换。
在运行调用函数中的如下语句后,a[o]和a[1]的值分别为_______,原因是
_______。
a[0]=1;a[1]=2;swap(a,2);
3、执行下面程序段后,k的值是_______。
k=1;n=263;
do{k*=n%10;n/=10;} while(n);
4、把int类型变量low中的低字节及变量high中的高字节放入变量s中的表达式是
_______。
5、请读程序段:
int a=1,b=2;
if(a&b)printf("***\n");
else printf("$$ $\n");
以上程序段的输出结果是_______。
6、在C语言中,用关键字_______定义单精度实型变量,用关键字_______定义双
精度实型变量,用关键字_______定义字符型变量。
7、设有一输入函数scanf("%d”,k);它不能使float类型变量k得到正确数值
的原因是_______未指明变量k的地址和_______格式控制符与变量类型不匹配。
8、设有以下宏定义:
#define WIDTH 80
#define LENGTH WIDTH+40
则执行赋值语句:v=LENGTH*20;(v为int型变量)后,v的值是_______。
9、设有以下宏定义:
#define WIDTH80
#define LENGTH(WIDTH+40)
则执行赋值语句:k=LENGTH*20;(k为int型变量)后,k的值是_______。
10、以下程序的运行结果是_______。
#include <stdio.h>
int main()
{char s[]="ab\'cdefg\",*p=s+1;
printf("%c”,*(p++));
printf("%s",p+2);
return(0);
}
二、选择题
11、下面正确的字符常量是( )
A."c"
B. "\\"
C. 'w'
D. "
12、下列4组选项中,不是C语言关键字的选项是。
()
A.define
B.getc
C.include
D.while
IF char scanf go
Type printf case pow
13、以下C程序的运行结果是()。
(注:口表示空格)
#include<stdio.h>
int main()
{long y=23456;
printf("y=%3x\n",y);
printf("y=%8x\n",y);
printf("y=%#8x\n",y);
return 0;
}
A.y=5ba0
B.y=囗囗囗5ba0
y=囗囗囗囗5ba0 y=囗囗囗囗囗囗05ba0
y=囗囗0x5ba0 y=囗囗0x5ba0
C) y=5ba0 D.y=5ba0
y=5ba0 y=囗囗囗囗5ba0
y=0x5ba0 y=####5ba0
14、已有定义intx;floaty;且执行scanf("%3d%f”,&x,&y);语句,若从第一列开始输入数据12345口678<回车>,则 y的值为( )。
(注:口表示空格)
A.无定值
B.45.000000
C.678.000000
D.123.000000
15、C语言规定:在一个源程序中,main函数的位置( )
A.必须在最开始
B.必须在系统调用的库函数的后面
C.可以任意
D.必须在最后
16、判断字符串a和b是否相等,应当使用()。
A.if(a==
B. B.if(a=B.
C.if(strcpy(a,B.)
D.if(strcmp(a,B.)
17、与下面程序段等价的是()。
for(n=100;n<=200;n++)
{if(n%3==0)continue;
printf("%4d",n);
}
A.for(n=100;(n%3)&&n<=200;n++)printf("%4d",n);
B.for(n=100;(n%3)|| n<=200;n++)printf("%4d",n);
C.for(n=100;n<=200;n++)if(n%3!=0)printf("%4d",n);
D.for(n=100;n<=200;n++){if(n%3)printf("%4d",n);else continue;break;}
18、在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是()
A.extern
B.register
C.auto
D.static
19、若有以下定义和语句,则对a数组元素的正确引用为()。
int a[2][3],(*p)[3];
p=a;
A.(p+1)[0]
B.*(*(p+2)+1)
C.*(p[1]+1)
D.p[1]+2
20、以下与库函数strcmp(char*s,char*t)的功能相等的程序段是()。
A.int strcmpl(char*s,char*t)
{for(;*s++==*t+十;)
if(*s=='\0')return O;
return(*s-*t);
}
B.int strcmp2(char*s,char*t)
{for(;*s++==*t++;)
if(!*s)
return O;
return(*s-*t);
C.int strcmp3(char*s,char*t)
{for(;*t==*s;)
{if(!*t)return0;t++;s++;}
return(*s-*t);·
}
D.int strcmp4(char*s,char*t)
{for(;*s==*t;s++,t++)
if(!*s)
return 0;
return(*t-*s);
}
21、若w、x、y、z、m均为int型变量,则执行下面语句后的m值是( )。
w=1;x=2;y=3;z=4:
m=(w<x)?w:x;
m=(m<y)?m:y;
m=(m<z)?m:z;
A.1
B.2
C.3
D.4
22、下面程序的运行结果是()。
#include <stdio.h>
int main()
{int num=0;
while(num<=2)
{ num++;
printf("%d\n",num);
return 0;
}
A)1 B) 1,2 C) 1,2,3 D)1,2, 3, 4
23、下面程序段的功能是计算1000!的末尾含有多少个零。
请选择填空()。
(提示:只要算出1000!中含有因数5的个数即可)
for(k=0,i=5;i<=1000;i+=5)
{m=i;
while(【】){k++;m=m/5; }
}
A.m%5==0
B.m=m%5==0
C.m%5==0
D.m%5!=0
24、以下程序的正确运行结果是()。
#include<stdio.h>
int f(int A.;
int main()
{int a=2,i;for(i=0;i<3;i++)
printf("%4d",f(A.);
return(0);
}
int f(int A.
{int b=0;static intc=3;
b++;c++;
return(a+b+C.;
}
A.7 7 7
B.7 10 13
C.7 9 11
D.7 8 9
25、下面程序段的运行结果是()。
int a[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf("%3d",a[i]) ;
}
A)-4 0 4 0 4 B)-4 0 4 0 3 C)-4 0 4 4 3 D)-4 0 4 4 0
三、读程序填空
26、以下printf语句中的负号的作用是_______,该程序的输出结果是_______。
#include<stdio.h>
int main()
{int x=12;
double a=3.1415926;
printf("%6d##\n",x);
printf("%一6d##\n",x);
printf("%14.101f##\n",a);
printf("%-14.101f##\n",a);
return 0;
}
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<stdio.h>
int func(int array[][4],int m)
{inti,j,k;
k=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]<m)k=k+array[i][j];
return(k);
}
int main()
{static int a[3][4]={{1,13,5,7},{2,4,26,8},{10,1,3,12}};
int i,j,m;
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
printf("%4d",a[i][j]);
printf("\n");m=10;
printf("\nThe value is%d\n",func(a,m));
return(0);
}
29、下面程序的功能是_______,运行结果是_______。
#include<stdio.h>
long fib(int g)
{switch(g)
{case 0:return 0;
case 1:case 2:return1;
}
return(fib(g-1)+fib(g-2));
int main()
{long k;
k=fib(7);
printf("k=%d\n",k);
return(0);
}
30、若有以下输入,则下面程序的运行结果是_______。
1423341233222331114111-1<回车>
#include<stdio.h>
#define M50
int main()
{int a[M],c[5],i,n=0,x;
printf("Enter 0 or 1 or 2 or 3 or 4,to end with-l\n");
scanf("%d”,8x);
while(x!=-1)
{if(x>=0&&x<=4)
{a[n]=x;n++;)
scanf("%d",&x);
for(i=0;i<5;i++)c[i]=0;
for(i=0;i<n;i++)c[a[i]]++;
printf("The result is:\n"):
for(i=1;i<=4;i++)printf("%d:%d\n",i,c[i]);
return 0;
}
31、若a、b、c均已正确定义且a=0、b=2、c=3,则以下程序段的输出是_______。
switch(a)
{case 0:switch(b==2)
{case 1:printf("&”);break;
case 2:printf("%”);break;
}
case 1:switch(c)
{case 1:printf("S");
case 2:printf(”*”);break;
default:printf("#”);
}
}
32、下面程序的功能是计算100~1000之间有多少个数其各位数字之和是5。
请填空。
#include<stdio.h>
int 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、下面程序可以逐行输出由language数组元素所指向的5个字符串。
请填空。
#include <stdio.h>
int main()
{char*language[]={"BASIC","FORTRAN","PROLOG","JAVA","C++");
char_______;
int k;
for(k=0;k<5;k++)
{q=_______;
printf("%s\n",*q);
}
return(0);
}
四、编程题
34、已有变量定义语句doublea=5.0,p;int n=5;和函数调用语句p=mypow (a,n);用以求a的n次方。
请编写double mypow(double x,inty)函数。
double mypow(double x,int y)
{
}
35、输入两个整数,求它们相除的余数。
用带参的宏编程来实现。
参考答案
一、填空题
1、【1】顺序结构【2】选择结构【3】循环结构
2、【1】a[0]=2a[1]=1
【2】因实参是地址,已对指定地址中的内容进行了交换。
3、36
4、s=high& 0xff00| low&0x00ff
或s=high&.0177400|low&0377
或s=high&65280| low&255
5、$$$
6、【1】float【2】double【3】char
7、【1】格式控制符与变量类型不匹配。
scanf 语句的正确形式应该是:scanf("%f",8.k);【2】未指明变量k的地址。
8、880
9、2400
10、'bdefg'
二、选择题
11、C
12、A
13、A
14、B
15、C
16、D
17、C
18、D
19、C
20、C
21、A
22、C
23、C
24、B
25、C
三、读程序填空
26、【1】输出数据左对齐
【2】囗囗囗012##
12口囗囗囗##
囗囗3.141592600##
3.141592600囗囗##
(注:答案中的囗代表空格)
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 13 5 7
2 4 26 8
10 1 3 12
The value is 31
29、【1】计算斐波拉契级数第7项的值。
【2】k=13
30、The result is:
1:8
2:5
3:6
4:3
31、【1】×<110&&x>=100【2】(x<60)||(x>109)【3】m=0
32、【1】k【2】k/10【3】continue
33、【1】**q
【2】language+k
四、编程题
34、double mypow(double x,int y)
{int i;double p;
p=1.0;
for(i=1;i<=y;++i)p=p*x;
return p;
}
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;
}。