2022年江西机电职业技术学院公共课《C语言》科目期末试卷B(有
答案)
一、填空题
1、设有以下定义和语句,请在printf语句的_______中填上能够正确输出的变量及相应的格式说明。
union
{int n;doublex;}num; num.n=10; num.x=10.5;
printf(\"_______\",_______); 2、下面程序段的运行结果是_______。 x=2;
do{printf(\"*\");x--;)while(!x==0); 3、执行下面程序段后,k的值是_______。 k=1;n=263;
do{k*=n%10;n/=10;} while(n);
4、若x和n均是int型变量,且x和n的初值均为5,则执行表达式x+=n++后x的值为_______,n的值为_______。
5、C语言所提供的基本数据类型包括:单精度型、双精度型、_______、_______和_______。
6、下面程序wdm的运行结果是_______。
int i,x[10]={2,3,0,3,0,2,3,2,1,3},y[4]={0}; for(i=0;i<10;i++)y[x[i]]++; printf(\"%d\\n\",y[3]);
7、测试char型变量a第6位是否为1的表达式是_______(设最右位是第1位)。 8、在C语言源程序中,一个变量代表【 】。
9、C语言源程序文件的后缀是 ;经过编译后,生成文件的后缀是 ;经过连接后,生成文件的后缀是 10、若有以下定义和语句: int*p[3],a[6],i; for(i=0;i<3;i++) p[i]=8&a[2*i];
则*p[0]引用的是a数组元素_______,*(p[1]+1)引用的是a数组元素_______。
二、选择题
11、在C语言中,char型数据在内存中的存储形式是( )。 A.补码B.反码C.原码D.ASCII码
12、设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。
A.n=(n*100+0.5)/100.0 B.m=n*100+0.5,n=m/100.0 C.n=n*100+0.5/100.0 D.n=(n/100+0.5)*100.0
13、以下叙述正确的是
A.在C程序中,main函数必须位于程序的最前面 B.C程序的每行中只能写一条语句 C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误 14、C语言规定:在一个源程序中,main函数的位置( ) A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后
15、若有说明:char*language[]={\"FORTRAN\",\"BASIC\",\"PASCAL\",JAVA\",\"C\;则以下不正确的叙述是( )
A.language+2表示字符串”PASCAL”的首地址 B.*language[2]的值是字母P
C.language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串变量的指针
D.language是一个字符型指针数组,它包含5个元素,其初值分别是:\"FORTRAN\",\"BASIC\",\"PASCAL\",\"JAVA\",\"C\"
16、阅读以下程序,当输入数据的形式为25,13,10<回车>,程序的输出结果
#include int main() {int x,y,z;scanf(\"%d%d%d”,8.x.&y,&z); printf(\"x+y+z=%d\\n\",x+y+z); return0;
}
A.x+y+z=48 B.x+y+z=35 C.x+z=35 D.不确定值 17、以下正确的描述是( )。
A.continue语句的作用是结束整个循环的执行 B.只能在循环体内和switch语句体内使用break语句 C.在循环体内使用break 语句或continue语句的作用相同 D.从多层循环嵌套中退出时,只能使用goto语句
18、以下程序有语法性错误,有关错误原因的正确说法是( )。
#include int main() {int G=5,k; void prt_char(); -----k=prt_char(G); ---
}
A.语句void prt_char();有错,它是函数调用语句,不能用void说明 B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾 D.函数名不能使用下划线
19、若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为。(假设a[0][0]位于数组的第一个位置上)( )
A.i*m+j B.j*m+i C.i*m+j-1 D.i*m+j+1
20、下面程序段(每行代码前面的数字表示行号)( )。
1 int a[3]={3*0}; 2 int i;
3 for(i=0;i<3;i++)scanf(\"%d\",&a[i]); 4 for(i=1;i<3;i++)a[o]=a[o]+a[i]; 5 printf(\"%d\\n\",a[o]);
A.第1行有错误 B.第5行有错误 C.第3行有错误 D.没有错误 21、以下程序( )。
#include int main(){int a=5,b=0,c=0; if(a=b+C.printf(\"***\\n\"); else printf(\"$$$\\n\"); return 0; }
A.有语法错不能通过编译 B.可以通过编译但不能通过连接 C.输出*** D.输出$$$ 22、下面程序段的运行结果是( )。
int a[6][6],i,j; for(i=1;i<6;i++)
for(j=1:j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) {for(j=1;j<6;j++) printf(\"%2d\",a[i][j]); printf(\"\\n\") }
A)11111 B)00001 C)10000 D)10001 11111 00010 01000 01010 11111 00100 00100 00100
11111 01000 00010 01010
11111 10000 00001 10001
23、下面程序的功能是将字符串s中所有的字符c删除。请选择填空(#include int main() {char s[80];inti,j; gets(s);for(i=j=0;s[i]!= '\\o';i++) if(s[i]!='c)[ ]; s[j]='\\o'; puts(s);
)。
return 0; }
A)s[j++]=s[i] B)s[++j]=s[i] C)s[j]=s[];j++ D)s[j]=s[i]
24、折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary的作用是应用折半查找法从存有10个有序整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。
int binary(int a[10],int m) {int low=0,high=9,mid; while(low<=high) {mid=(low+high)/2; if(ma[mid])【】; else return(miD.; return(一1); }A.high=mid-1 B.low=mid+1 C.high=mid+1 D.low=mid-1
25、若运行以下程序时,从键盘输入3.62.4<回车>,则下面程序的运行结果是( )
# include # include int main(){ float x,y,z;
scanf(\"%f%f\ z=x/y; while(1)
if(fabs(z)>1.0){x=y;y=z;z=x/y;} else break; printf(\"%f\\n\ return 0; }
A)1.500000 B)1.600000 C)2.000000 D)2.400000
三、读程序填空
26、已有定义int d=-2;执行以下语句后的输出结果是_______。
printf(\"*d(1)=%d*d(2)=%3d*d(3)=%-3d*\\n\",d,d,d); printf(\"*d(4)=%x*d(5)=%6x*d(6)=%-6x*\\n\",d,d,d); 27、若要求下列程序的输出结果为8.00,则[]中应填入的是_______。
#include int main() {int k=2,m=5; float s,x=1.2,y=[]; s=2/3+k*y/x+m/2; printf(\"%4.2f\\n\",s);return 0; }
28、若运行以下程序时输入:35/<回车>,则程序的运行结果是_______。
#include int main() {float x,y; char o; double r;scanf(\"%f%f%c\",&x,&y,&o); switch(o)
{case'+':r=x+y;break; case'-':r=x-y;break; case'*':r=x*y;break; case'/':r=x/y;break; printf(\"%f\",r); return 0; }
29、下面程序的功能是:根据表4-6中给定的函数关系,对输入的每个x值,计算出相应的y值。请填空。
函数关系
x 𝑥<0 0<𝑥≤10 y 0 x 10<𝑥≤20 20<𝑥≤40 # include int main() { int x,c,m; float y; scanf(\"%d\ if(______) c=-1; else c=(______); switch(c){ case-1:y=0; break; case 0:y=x; break; case 1:y=10; break; case 2:
case3: y=-0.5*x+20; break; default:y=-2;
if(______) printf(\"y=%f\ else printf(\"error\\n\"); return 0; }
10 -0.5x+20 30、以下程序的功能是用二分法求方程2x3-4x2+3x-6=0的根,并要求绝对误差不超过0.001。请填空。 #includefloat f(float x)
{return(2*x*x*x*x-4*x*x+3*x-6);} int main()
{float m=-100,n=90,r; r=(m+n)/2; while(f(r)*f(n)!=0) {if(_______) m=r; Else n=r: if(_______) break: r =(m+n)/2; }
printf(\"The fang cheng jie is %6.3f\\n\ return(0); }
31、以下程序段的功能是求数组num中小于零的数据之和。请填空。
int num[20]={10,20,1,一20,203,一21,2,一2,一2,11,一21, 22,12,一2,一234,一90,22,90,一45,20};
int sum=0,i;
for(i=0;i<=19;i++) if(_______) sum=_______;
printf(\"sum=%6d\",sum);
32、当运行以下程序时,从键盘输入“12345-1<回车>”,则下面程序的运行结果是_______。
#include int main() {int k=0,n; do{scanf(\"%d\",&n);k+=n; }while(n!=-1);
printf(\"k=%d n=%d\\n\",k,n); return 0; }
33、以下程序的运行结果是_______。
#include #define N6void fun(int*a,int*x) {int i;
for(i=0;i<3;i++)*(x+i)=0; for(i=0;i{if(*(a+i)<=100&&*(a+i)>=80)(if(*(a+i)<=79&&*(a+i)>=60)(if(*(a+i)<=59)(*(x+0))++*(x+2))++; *(x+1))++; } }
int main()
{int a[N]={66,55,77,88,100,99},x[3],i; fun(a,x); for(i=0;i<3;i++) printf(\"%d\ return(0); }
四、编程题
34、已有变量定义和函数调用语句int x=57;isprime(x);函数isprime()用来判断一个整型数a是否为素数;若是素数,则函数返回1,否则返回0。请编写isprime函数。
int isprime(int a) { }
35、编写程序,统计d输入的命令行中第二个参数所包含的英文字符个数。
参
一、填空题
1、【1】%If【2】num.x 2、** 3、36
4、【1】10【2】6
5、【1】整型【2】字符型【3】枚举型
6、4
7、a &040或a&0×20或a&32 8、内存中的一个存储单元 9、【1】.c【2】.obj【3】.exe 10、【1】a[0]【2】a[3]
二、选择题
11、D 12、B
13、C 14、C
15、D 16、D 17、B
18、C 19、D 20、A 21、D 22、C 23、A 24、C 25、B
三、读程序填空
26、*d(1)=-2*d(2)=囗-2*d(3)=-2囗**d(4)=fffe*d(5)=囗囗fffe*d(6)=fffe囗* (注:答案中的囗代表空格) 27、3.6 28、8.# 29、**1** **3**
30、【1】f(r)*f(n)<0【2】n-m<0.001 31、【1】num[i]<0【2】num[i]+sum 32、k=14 n=-1 33、1 2 3
四、编程题
34、int isprime(int a) {int i;
for(i=2;i35、#include #include int main(int argc,char*argv[]) {char*str; int num=0; if(argc==2)
{str=argv[1]; while(*str)
if(isalpha(*str++))num++; printf(\"\\nThe count is:%d.\\n\",num); }
return 0; }