您的当前位置:首页正文

2022年长江职业学院公共课《C语言》科目期末试卷A(有答案)

2020-05-05 来源:年旅网
2022年长江职业学院公共课《C语言》科目期末试卷A(有答案)

一、填空题

1、C语言源程序的基本单位是________

2、下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是_______,改正后为_______。 void add(float a,float b) {float c; c=a+b; return c; }

3、执行下面程序段后,k的值是_______。 k=1;n=263;

do{k*=n%10;n/=10;} while(n);

4、为建立如图10-5所示的存储结构(即每个结点两个域,data是数据域,next是指向结点的指针域),请将定义补充完整。

struct s{char data; _______ }node;

5、设有一输入函数scanf(\"%d”,k);它不能使float类型变量k得到正确数值的原因是_______未指明变量k的地址和_______格式控制符与变量类型不匹配。

6、若x和n均是int型变量,且x和n的初值均为5,则执行表达式x+=n++后x的值为_______,n的值为_______。 7、设有以下宏定义: #define WIDTH 80

#define LENGTH WIDTH+40

则执行赋值语句:v=LENGTH*20;(v为int型变量)后,v的值是_______。 8、下面程序段的运行结果是_______。

Char a[]=\"123456789\",*p; inti=0;p=a; while(*p)

{if(i%2==0)*p='*'; p++;i++; }

puts(a);

9、已有一维数组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)计算各元素的平均值。

10、设x为无符号整数。表达式x^(~(~0<二、选择题

11、下面4个选项中,是正确的八进制数或十六进制数的选项是( )。

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程序的执行是从( )

A.本程序的main函数开始,到main函数结束

B.本程序的第一个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后一个函数结束

D.本程序的第一个函数开始,到本程序main函数结束

15、在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( ) A.extern B.register C.auto D.static 16、设有以下程序:

#include int main()

{char cl,c2,c3,c4,c5,c6;

scanf(\"%c%c%c%c\",&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1);。 putchar(c2);

printf(\"%c%c\\n\",c5,c6); return0; }

若运行时从键盘输入数据: abc<回车>

defg<回车>,则输出结果是( )。 A.abcd B.abde C.abef D.abfg 17、以下描述中正确的是( )

A.while、do-while、for循环中的循环体语句都至少被执行一次

B.do-while循环中,while(表达式)后面的分号可以省略

C.while循环体中,一定要有能使while后面表达式的值变为“假”的操作 D.do-while 循环中,根据情况可以省略 while

18、若有定义float x[4]={1.3,2.4,5.6},y=6;,则错误的语句是( )。 A.y=x[3]; B.y=x+1; C.y=x[2]+1; D.x[0]=y; 19、下面程序段的运行结果是( )。 char*s=\"abcde\";

s+=2;printf(\"%d',s);

A.cde B.字符c C.字符c的地址 D.无确定的输出结果

20、已有函数max(a,B.,为了让函数指针变量p指向函数max,正确的赋值方法是( )

A.p=max; B.*p=max;C.p=max(a,B.;D.*p=max(a,B.; 21、若w、x、y、z、m均为int型变量,则执行下面语句后的m值是( )。

w=1;x=2;y=3;z=4: m=(wA.1 B.2 C.3 D.4

22、下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中。请选择填空。

#include #include

int main()

{char a[]=\"acegikm\",b[]=\"bdfhjlnpq\"; charc[80],*p; int i=0,j=0,k=0;

while(a[i]!=\\o'&&b[j]!='\\o') {if(a[i]k++;

}

c[k]='\\o';

if(a[i]== '\\0')p=b+j; else p=a+i; strcat(c,p); puts(C.; return 0; }

A.c[k]=a[i];i++;B.c[k]=a[j];i++;C.c[k]=a[i];j++;D.c[k]=a[j];j++; 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、有一堆零件(100~200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件的总数,请选择填空( )。

# include int main() { int i;

for(i=100;i<200;i++) if((i-2)%4==0) if(!((i-3)%7)) if([ ])

printf(\"%d\

return 0; }

A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)i%9==5

25、以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。

#include #include float f(float,float); int main()

{floatx,y,z,sum;

scanf(\"%f%1%f\",8.x,&y,8.z); sum=f(【】)+f(z+y,z-y); printf(\"sum=%fNn\",sum); return(0); }

float f(float a,float B. {float value; value=a/b; return(value); }

A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y

三、读程序填空

26、若要求下列程序的输出结果为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; }

27、以下程序的输出结果为_______.

#include int main()

{printf(\"*%f,%4.3f*\\n\",3.14,3.1415); return0; }

28、以下函数fun的功能是:将输入的一个偶数写成两个素数之和的形式。例如,若输入数值8,则输出8=3+5。请填空。

# include # include vaid fun(int a) { int b,c,d;

for(b=3;b<=a/2;b=_______) { 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\ } }

int main() { int a;

printf(\"\\ ninput a:\\n\"); scanf(\"%d\ fun(a); return(0); }

29、当输入的数值x为4,y为3时,以下程序运行后#include

long fun(long x,long y){int i;longt=1; for(i=1;i<=y;i++) t=t*x%100; return t; }

int main()

t的值是_______。

{longx,y,t;

printf(\"\\ninput xand y:\\n\"); scanf(\"%ld%ld\",8&.x,8.y); t=fun(x,y);

printf(\"\\nx=%1d,y=%ld,last=%ld\\n\",x,y,t); return(0); }

30、将以下含有switch语句的程序段改写成对应的含有非嵌套if语句的程序段。 请填空。

含有switch语句的程序段:

Int x,y,m; y=(int)(x/10); switch(y)

{case10:m=5;break; case 9:m=4;break; case 8:m=3;break; case 7:m=2;break; case 6;m=1;break; default:m=0; }

含有非嵌套if语句的程序段:

int x,m;

if(_______)m=5;

if(x<100)&&(x=90))m=4; if(x<90)&&(x>=80))m=3; if(×<80)&&(x>=70))m=2; if(x<70)&&(x=60))m=1; if(_______)_______;

31、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符,则输出该字符在数组中第一次出现的位置(下标值);否则输出一1。请填空。

#include #include int main()

{charc='a',t[50];int n,k,j; gets(t); n=_______;

for(k=0;kprintf(\"%d\",j); return 0; }

32、下面程序的功能是输出1~100之间满足每位数的乘积大于每位数的和的数。请填空。

#include int main()

{int n,k=1,s=0,m; for(n=1;n<=100;n++) {k=1;s=0; _______; while(_______) {k*=m%10; s+=m%10; _______; }

if(k>s)printf(\"%d\",n); }

return 0; }

33、以下程序的运行结果是_______。

#include void fun(int*n) {while((*n)--); printf(\"\\n%d\",*n);

int main() {int a=10; fun(&a); return(0); }

四、编程题

34、用switch语句编程实现以下函数关系: −1 (x<0) y={0 (x=0)

1 (x>0)

35、输入两个整数,求它们相除的余数。用带参的宏编程来实现。

参考答案

一、填空题

1、函数

2、【1】void add(float a,float b)【2】float add(float a,float b) 3、36

4、structs*next;

5、【1】格式控制符与变量类型不匹配。

scanf 语句的正确形式应该是:scanf(\"%f\",8.k); 【2】未指明变量k的地址。 6、【1】10【2】6 7、880 8、*2*4*6*8*

9、【1】process(a,n,arr_add); 【2】process(a.n,odd_add); 【3】process(a,n,arr_ave); 10、【1】~0得到一个全1的数

【2】(~0<【4】~(~0<二、选择题

11、C 12、B

13、C 14、A

15、D 16、B 17、C 18、B 19、C 20、A 21、A 22、D 23、A 24、D 25、B

三、读程序填空

26、3.6

27、*3.140000,3.142* 28、【1】b+2【2】a-b 29、64

(注:函数fun的功能是求整数x的y次方的低2位值。例如,整数4的3次方低2位值为64。)

30、【1】1【2】2【3】2

31、【1】strlen(t)【2】t[k]==c 32、【1】m=n【2】m【3】m/=10 33、-1

四、编程题

34、#include int main() {float x;int y; printf(\\n input x:\"); scanf(\"%f\",8.x); switch(x<0)

{case 1:y=-1;break;case 0:switch(x==0){case 1:y=0; break; default:y=1; } }

printf(\\n y=%d',y);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; }

因篇幅问题不能全部显示,请点此查看更多更全内容