2022年中山大学公共课《C语言》科目期末试卷B(有答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022年中山大学公共课《C语言》科目期末试卷B(有答案)
一、填空题
1、设有一输入函数scanf("%d”,k);它不能使float类型变量k得到正确数值的原因是_______未指明变量k的地址和_______格式控制符与变量类型不匹配。
2、C语言的源程序必须通过【】和【】后,才能被计算机执行。
3、一个C语言源程序由若干函数组成,其中至少应含有一个________
4、表达式x=6应当读做_______
5、表达式pow(2.8,sqrt(double(x))值的数据类型为_______。
6、设x的二进制数是11001101,若想通过x&y运算使x中的低4位不变,高4位清零,则y的二进制数是_______。
7、函数swap(int x,inty)可完成对x和y值的交换。
在运行调用函数中的如下语句后,a[0]和a[1]的值分别为_______,原因是_______。
a[o]=1;a[1]=2;
swap(a[o],a[1]);
8、假设M为已经声明的符号常量,则定义一个具有M×M个元素的双精度型数组a,且所有元素初值为0的形式是_______。
9、若有定义:inta[3][4]={{1,2},{0},{4,6,8,10}};,则初始化后,a[1][2]得到的初值是_______,a[2][1]得到的初值是_______。
10、下面程序段的运行结果是_______。
char*s1="AbcdEf", *s2="aB";
int t;s1++;
t=(strcmp(s1,s2)>0);
printf("%d\n",t);
二、选择题
11、下面4个选项中,是合法转义字符的选项是( )。
A.’\"
B. '\ '
C. ' \018'
D. '\\o'
'\\ ' ' \017' '\f' '\10l'
'\n' '\ " ' xab' ' xlf'
12、已知字母A的ASCII码为十进制数65,且定义c2为字符型变量,则执行语句c2='A'+'6'-'3';后,c2中的值为( )。
A.D
B.68
C.不确定的值
D.C
13、一个C程序的执行是从()
A.本程序的main函数开始,到main函数结束
B.本程序的第一个函数开始,到本程序文件的最后一个函数结束
C.本程序的main函数开始,到本程序文件的最后一个函数结束
D.本程序的第一个函数开始,到本程序main函数结束
14、以下叙述正确的是
A.在C程序中,main函数必须位于程序的最前面
B.C程序的每行中只能写一条语句
C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误
15、若有说明:inta[3][4];,则对a数组元素的正确引用是()。
A.a[3][4]
B.a[1,3]
C.a[i+1][0]
D.a(2)(1)
16、以下针对scanf函数的叙述中,正确的是()。
A.输入项可以为一实型常量,如scanf("%f",3.5);
B.只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d");
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf
("%4.2f",&f);
D.当输入数据时,必须指明变量的地址,如scanf("%f",&f);
17、下面程序段的运行结果是()
char str[]="ABC",*p=str;
printf("%d\n",*(p+3));
A.67
B.0
C.字符C的地址
D.字符C
18、若用数组名作为函数调用的实参,则传递给形参的是()
A.数组的首地址
B.数组第一个元素的值
C.数组中全部元素的值
D.数组元素的个数
19、若i为整型变量,则以下循环执行次数是()。
for(i=2;i==0;)printf("%d",i--);
A.无限次
B.0次
C.1次
D.2次
20、若有如下语句:
int x=3;
do {printf("%d\n",x-=2);}while(!(--x));
上面程序段( )。
A.输出1
B.输出1和-2
C.输出3和0
D.是死循环
21、以下程序的运行结果是( )。
#include <stdio.h>
int main()
{int a,b,d=241;
a=d/100%9;
b=(-1)8&.8&(-1);
printf("%d,%d",a,B.;
return0;
}
A.6,1
B.2,1
C.6,0
D.2,0
22、当运行以下程序时,从键盘输入:AhaMA Aha<回车>,则下面程序的运行结果是()
#include<stdio.h>
int main()
{char s[80],c='a';int i=0;
scanf("%s",s);
while(s[i]!= '\0')
{if(s[i]==c) s[i]=s[i]-32;
else if(s[i]==c-32) s[i]=s[i]+32:
i++;
}
puts(s);
return 0;
}
A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA
23、下面程序段的运行结果是()。
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,B.;
printf("%c",a[5]);
A.口
B.\0
C.e
D.f(其中口表示1个空格)
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、下面程序的功能是将从键盘输入的偶数写成两个素数之和。
请选择填空()
#include<stdio.h>
#include<math.h>
int main()
{int a,b,c,d;
scanf("%d",&.A.;
for(b=3;b<=a/2;b+=2)
{for(c=2;c<=sqrt(B.;c++)
if(b%c==0)break;
if(c>sqrt(B.)d=【】;
else break;
for(c=2;c<=sqrt(D.;c++)
if(d%c==0)break;
if(c>sqrt(D.)printf("%d=%d+%d\n",a,b,D.;
}
return 0;
}
A.a+b
B.a-b
C.a*b
D.a/b
三、读程序填空
26、若要求下列程序的输出结果为8.00,则[]中应填入的是_______。
#include <stdio.h>
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;
}
27、以下程序的输出结果是_______。
#include <stdio.h>
int main()
{int x=10;float pi=3.1416;
printf("(1)%d\n",x);
printf("(2)%6d\n",x);
printf("(3)%f\n",56.1);
printf("(4)%14fNn", pi);
printf("(5)%e\n",568.1);
printf("(6)%14e\n", pi);
printf("(7)%g\n", pi);
printf("(8)%12g\n", pi):
return 0;
}
28、函数del的作用是删除已按升序排列的数组a中的指定元素x。
已有调用语句n=del(a,n,x);其中实参n为删除前数组元素的个数,赋值号左边的n为删除后数组元素的个数。
请填空。
int del(int a[],int n,int x)
{int p,i;p=0;
while(x>=a[p]& &p<n)_______;
for(i=p-1;i<n;i++)_______;
n=n一1;
return n;
}
29、以下程序的运行结果是_______。
#include<stdio.h>
void f(inta[])
{int i=0;
while(a[i]<=10)
{printf("%d",a[i]);
i++;
int main()
{int a[]={1,5,10,9,11,7};
f(a+1);
return(0);
}
30、下面程序的功能是求1111的个、十、百位上的数字之和。
请填空。
#include<stdio.h>
int main()
{int i,s=1,m=0;
for(i=1;i<=11;i++)s=s*11%1000;
do{m+=_______;s=_______;}while(s);
printf("m=%d\n",m);
return 0;
}
31、以下程序是将矩阵a、b的乘积存入矩阵c中并按矩阵形式输出。
请填空。
#include<stdio.h>
int main()
{int a[3][2]={2,-1,一4,0,3,1},b[2][2]={7,-9,一8,10};
int i,j,k,s,c[3][2];
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{for(___________;k<2;k++)
s+=__________; c[i][j]=s; for(i=0;i<3;i++)
{for(j=0;j<2;j++)printf("%6d",c[i][j]);
___________
return 0;
}
32、若运行以下程序时输入:100<回车>,则程序的运行结果是_______。
#include <stdio.h>
int main()
{int a;
scanf("%d",&a);
printf("%s",(a%2!=0)?"no":"yes");
return 0;
}
33、以下程序通过指针数组p和一维数组a构成如下所示的二维数组的左下半三角结构,然后输出。
请填空。
#include<stdio.h>
#define M 5
#define NUM(M+1)x(M)/2
int main()
int a[NUM],*p[M],i,j,index,n;
for(i=0;i<M;i++)
{index=i*(i+1)/2;
p[i]=_______;
}
for(i=0;i<M;i++)
{n=1;
for(j=0;j<=i;j++)
{p[i][j]=_______;
n++;
}
printf("The Output:\n");
for(i=0;i<M;i++)
{for(j=0;_______;j++)
printf("%4d",p[i][j]);
printf("\n");
}
return(0);
}
四、编程题
34、请编写程序实现文件的复制。
即将源文件复制到目的文件,两个文件名均由命令行给出,源文件名在前。
35、以下程序的功能是应用下面的近似公式计算e的n次方。
函数fl用来计算每项分子的值,函数f2用来计算每项分母的值。
请编写f1和f2函数。
e x=1+x+x2
2!+x3
3!
…(前20项的和)
#include <stdio.h> float f2(int n)
{
}
float fl(int x,int n){
}
int main()
{float exp=1.0;int n,x;
printf("Input a number:");
scanf("%d',&x);
printf("%d\n",x);
exp=exp+x;
for(n=2;n<=19;n++)
exp=exp+f1(x,n)/f2(n);
printf("\nThe is exp(%d)=%8.4f\n",x,exp);return(0);
}
运行结果:
Input a number:3
The is exp(3)=20.0855
参考答案
一、填空题
1、【1】格式控制符与变量类型不匹配。
scanf 语句的正确形式应该是:scanf("%f",8.k);【2】未指明变量k的地址。
2、【1】编译【2】连接
3、主函数(或main函数)
4、将常量6赋给变量x
5、双精度型(或double型)
6、00001111
【1】7、a[0]=1 a[1]=2
【2】单向值传递,不能返回交换后的值。
8、double a[M][M]={0};
9、【1】0【2】6
10、1
二、选择题
11、A
12、A
13、A
14、C
15、C
16、D
17、B
18、A
19、B
20、B
21、B
22、A
23、D
24、B
25、B
三、读程序填空
26、3.6
27、(1)10
(2)口口口囗10
(3)56.100000
(4)口口口口口口3.141600(5)5.68100e+02
(6)口口口3.14160e+00(7)3.1416
(8)口口口口囗囗3.1416
(注:答案中的囗代表空格)
28、【1】p=p+1【2】a[i]=a[i+1]
29、5 10 9
30、【1】s%10【2】s/10
31、【1】k=s=0【2】a[i][k]*b[kJ[]【3】printf("\n");
32、yes
33、【1】8.a[index]【2】i*M+n【3】j<=i
四、编程题
34、#include <stdio.h>
FILE*source,*target;
int main(int argc,char*argv[])
{char c;
if(argc!=3)
printf("Error!\n");
else
{source=fopen(argv[1],"rb");
target=fopen(argv[2],"wb");
while(!feof(source))
{c=getc(source);
putc(c,target);
fclose(source);
fclose(target);
}
return 0;
}
35、float f2(int n)
{if(n==1)return 1; else return(f2(n-1)*n); }
float f1(int x,int n) {int i;float j=1;
for(i=1;i<=n;i++) j=j*x; return j;
}。