《高级语言程序设计(C)》期末考试试题一、选择题(本题共20道小题,共40分。
)1. 设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是A)把x和y按从大到小排列 B)把x和y按从小到大排列C)无确定结果 D)交换x和y中的值2. 下面程序的输出是void prtv(int *x){ printf("%d\n", ++(*x));}main(){ int a=25;prtv(&a);}A) 23 B) 24C) 25 D) 263. int x=10, y=20, z=30;if(x>y) z=x; x=y; y=z;以上语句执行后x, y, z的值是A) x=10,y=20,z=30B) x=20,y=30,z=30C) x=20,y=30,z=10D) x=20,y=30,z=204. 设有以下宏定义:#define N 3#define Y(n) ((N+1)*n)则执行语句:z=2 *(N+Y(5+1))后,z的值为A)出错 B)42 C)48 D)545. 逻辑运算符两侧运算对象的数据类型是()。
A) 只能是0或1B) 只能是0或非0正数C) 只能是整型或字符型数据D) 可以是任何类型的数据6. 当执行以下程序段时x=-1;do { x=x*x;}while(!x);A)循环体将执行一次 B)循环体将执行两次C)循环体将执行无限次 D)系统将提示有语法错误7. int x=3;do{ printf("%3d",x-=2);}while(!(--x));以上程序段的输出结果是A) 1 B) 3 0 C) 1-2 D) 死循环8. main(){int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); }以上程序段的输出结果是A)k=11,k=12,k=11 B)k=11,k=13,k=13C)k=11,k=013,k=0xb D)k=11,k=13,k=b9.以下程序的输出结果是()。
main(){ int num=0;while(num<=2){ num++; printf(“%d\n”,num);}}A) 1B) 1C) 1D) 12 2 23 3410. 表示关系x≤y≤z的c语言表达式为A) (X<=Y)&&(Y<=Z)B) (X<=Y)AND(Y<=Z)C) (X<=Y<=Z)D) (X<=Y)&(Y<=Z)11. 执行x=((5>1+2)&&2||((2*4<4)-!0))后,x的值为A) -1B) 0C) 1D) 512. 有以下程序main(){char a[]="programming", b[]="language";char *p1,*p2;int i;p1=a; p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是A)gm B)rg C)or D)ga13. 以下程序的输出结果是# include <stdio.h># include <string.h>main(){ char str[12]={'s','t','r','i','n','g'};printf("%d\n",strlen(str));}A) 6 B) 7 C) 11 D) 1214. 运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为main ( ){int m,n;printf("Enter m,n:");scanf("%d%d,&m,&n");while(m!=n){while(m>n) m-=n;while(n>m) n-=m;}printf("m=%d\n",m);}A)m=3 B)m=2 C)m=1 D)m=015. char ch=’A’;ch=(ch>=‘A’&&ch<=‘Z’)?(ch+’a’-‘A’):ch;表达式运算后,ch的值是A) a B) ‘a’C) A D) “a”16. 设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是A) k=*p1+*p2;B) p2=k;C) p1=p2; D) k=*p1*(*p2);17. 若有以下定义和语句:int u=010,v=0x10,w=10;printf(“%d,%d,%d\n”,u,v,w);则输出结果是A) 8,16,10B) 10,10,10C) 8,8,10D) 8,10,1018. 能正确表示a≥10或a≤0的关系表达式是A)a>=10 or a<=0 B)a>=10│a<=0C)a>=10││a<=0 D)a>=10 ││a<=019.main( ){int x=1,a=0,b=0;switch(x){case 0: b++;case 1: a++;case 2: a++;b++;}printf(“a=%d,b=%d\n”,a,b);}程序的输出结果是A) a=2,b=1B) a=1,b=1C) a=1,b=0D) a=2,b=220. 以下说法中正确的是A) #define和printf都是C语句B) #define是C语句,而printf不是C) printf是C语句,但#define不是D) #define和printf都不是C语句二、填空题(每空1分,共10分。
)1. 为表示关系:x≤y≤z ,应使用的C语言表达式是_____________。
2. C语言本身没有输入输出语句。
其输入输出是由____________来完成。
3. 有函数调用fun1(x+y,(y,z),10,fun((x,y―1)));函数fun1有_______个参数。
4. C程序注释是由_________ 和________所界定的文字信息组成的。
5. 表达式x=x+1表示成增量表达式为___________。
6. while语句和do-while语句的区别是_______________________。
7. 结构化程序设计中的三种基本结构是_________、__________、___________。
三、判断题(本题共10道小题,共10分。
)1. 在不得已的情况下(例如提高程序运行效率),才使用goto语句()2. C程序的注释只能是一行()3. 在有参函数中,形参在整个程序一开始执行时便分配内存单元()4. C语言不允许混合类型数据间进行运算()5. 实参和与其对应的形参共占用一个存储单元()6. 在C程序中对用到的所有数据都必须指定其数据类型()7. 函数的定义和函数的调用均不可以嵌套()8. 如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明()9. 在不同函数中可以使用相同名字的变量()10. if语句中的表达式不限于逻辑表达式,可以是任意的数值类型()四、程序分析题(用列表法列出关键变量在运行过程中的值)(本题3道小题,共20分)1. (8分)分析程序,给出select函数的功能,解释其形参的含义,并给出main函数的输出结果。
#define N 3#define M 3select(int a[N][M],int *n){int i,j,row=1,colum=1;for(i=0;i<N;i++) for(j=0;j<M;j++)if(a[i][j]>a[row][colum]){row=i;colum=j;} *n= row ;return ( a[row][colum]);}main(){ int a[N][M]={9,11,23,6,1,15,9,17,20},max,n; max=select(a,&n);printf("max=%d,line=%d\n",max,n);2. (6分)列表分析下面程序的运行步骤和中间结果,给出最后的输出结果 #include <stdio.h> main(){ int i =5;char c[6]="abcd"; do {c[i]=c[i―1]; } while (――i>0); puts (c ); main( ){ int i,j;for(i=1;i<=4;i++){ for(j=1;j<=4-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } }注:五、编程题(本题共2道小题,每题10,共20分。
) 编程题要求:(1)先给出伪代码,然后再写出源码,重要变量和语句要加注释;(2)若有子函数,则要给出函数框架设计(函数名、形参、返回类型)。
1. 编写一程序,求100之内的素数。
2. 我们需要一个小程序,输入两个整数,输出这两个数的平方和与平方差,要求:(1)主函数负责接收这两个整数(2)将计算代码独立做成子函数math(3)在主函数中调用math函数并输出结果到屏幕上。