苏州科技学院c语言期末考试笔试试卷A(考试时间:120分钟,满分100分)使用专业电子,电科,计算机02级各班系:电子专业:班级:学号:姓名:一、单项选择题((1)-(20)题每题1分)对下面各题,从给出的A,B,C,D,四个可选答案中,选一个正确的答案。
1.当a的值为5,b的值为4时,逻辑表达式a<=6&&a+b>8的值为___C____。
A.trueB.falseC.非0整型值D.整型值02.外部变量对程序中的任一函数而言,它们是_____B____。
A.存在的B.可直接存取的C.不可见的(局部和静态)D.不可直接存取的3.C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是____B_____。
A.地址传递B.值传递C.实参数传给形参,并由形参传回来给实参D.由用户指定传递方式4.以下说法中正确的是_____C_____。
A.C语言程序总是从第一个的函数开始执行B.在C语言程序中,要调用的函数必须在main()函数中定义C.C语言程序总是从main()函数开始执行D.C语言程序中的main()函数必须放在程序的开始部分5..变量的有效范围与其定义位置有关,____B____,其作用域在整个源程序文件中都有效。
A.在第一个函数中定义的变量B.在定义第一个函数之前所定义的变量C.在主函数中定义的变量D.在函数中定义的静态变量6.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是___C___A.c=b=a;B.(a=c) || (b=c);C.(a=c)&&(b=c);D.a=c=b;7.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是_____C_____A.p+1B.a+1C.a++D.++p8.以下程序运行后,输出结果是___A____.main( ){char *s="abcde";s+=2;printf("%s\n",s);}A.cdeB.字符c的ASCII码值C.字符c的地址D.出错9.当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为___B___.if(a<b)if(c<d)x=1;else if(a<c)if(b<d)x=2;else x=3;else x=6;else x=7;A. 1B. 2C. 3D. 610.当执行以下程序段时___A___.x=-1;do { x=x*x;} while(!x);A.循环体将执行一次B.循环体将执行两次C.循环体将执行无限次D.系统将提示有语法错误11.以下程序执行后sum的值是____C______main(){ int i , sum;for(i=1;i<6;i++) sum+=i;printf(“%d\n”,sum);}A.15B.14C.不确定D.012.若变量c为char类型,能正确判断出c为小写字母的表达式是____D_____A.…a‟<=c<= …z‟B.(c>= …a‟)||(c<= …z‟)C.(…a‟<=c)and (…z‟>=c)D.(c>= …a‟)&&(c<= …z‟)13.以下程序的输出结果是_____C_____.fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf(“%d”,a);}A.0B.29C.31D.无定值14.列程序的输出结果是______C_____main(){char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf(“%d”,*--p);}A.非法B.a[4]的地址C. 5D.315.下列程序的运行结果是_____B________void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf(“%d %d”, a, b);}A. 6 3B. 3 6C.编译出错D.0 016.下面程序的输出结果是_______C________main(){ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;p=a;printf(“%d\n”,*p+9);}A.0B.1C.10D.917.若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是____C___.int t[3][3],*pt[3],k;for (k=0;k<3;k++) pt[k]=&t[k][0];A.t[2][0]B.t[2][2]C.t[l][2]D.t[2][l]18.当调用函数时,实参是一个数组名,则向函数传送的是___B___.A.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值19.以下程序的输出结果是______C______.int d=1;fun(int p){ static int d=5;d+=p;printf("%d ",d);return(d);}main( ){ int a=3;printf("%d \n",fun(a+fun(d)));}A. 6 9 9B. 6 6 9C. 6 15 15D. 6 6 1520.以下程序的输出结果是_____C______.#define f(x) x*xmain( ){ int a=6,b=2,c;c=f(a) / f(b);printf("%d \n",c);}A.9B. 6C.36D.18二、填空题(每空2分,共50分)1.register变量存储在____寄存器____;(程序存储区,静态存储区,寄存器,磁盘)如定义时给变量赋初值,则对于静态变量是在____编译____(编辑,编译,连接,运行)时赋初值,对于动态变量是在_____运行______(编辑,编译,连接,运行)时赋初值;如定义时没有赋初值,则对于int类型的静态变量其初值为______0______,对于int类型的动态变量其初值为________不确定________。
2.请读程序:f(int b[],int n){int i,r;r=1;for(i=0;i<n;i++)r=r*b[i];return (r);}main(){int x,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf(“%d\n”,x);}上面程序输出结果是_____24 (2*3*4)_____3..请读程序:#include <string.h>#include <stdio.h>char *fun(char *s){char a[10];strcpy(a,"STRING")s=a;return s;main(){char *p="ok";fun(p);printf("%s\n",p);}上面程序的输出结果是_____ ok _____4.以下函数的功能是:把两个整数指针所指的存储单元中的内容进行交换。
请填空。
exchange(int *x,int *y){int t;t=*y;*y=___*x____;*x=___t____;}5.设一个C程序中的如下定义:static char line[]="china";char * ptr=line;则ptr中为_____line[0]_____的地址,line[1]中为___h____,line[5]中为_____\0___。
6.以下程序的输出结果是_____10_____。
main(){ int arr[ ]={30,25,20,15,10,5}, *p=arr;p++;printf(“%d\n”,*(p+3));}7.下面程序的输出是_____15_____.unsigned fun(unsigned num){unsigned k=1;do {k*=num%10;num/=10;}while(num);return(k);}main(){unsigned n=35;printf(“%d\n”,fun(n));}8.请读程序:#include <stdio.h>main(){static char b[]=“Goodbye”;char *chp=&b[7];while(--chp!=&b[0])putchar(*chp);putchar('\n');}上面程序的输出结果是___eybdoo_______9.下列程序的输出结果是______5 6____。
int t(int x,int y,int cp,int dp){ cp=x*x+y*y;dp=x*x-y*y;}main( ){ int a=4,b=3,c=5,d=6;t(a,b,c,d);printf("%d %d \n",c,d);}10.下面程序的输出是____AB____。
main( ){int i=3,j=2char *a="DCBA";printf("%c%c\n",a[i],a[j]);}11.以下程序的输出结果第一行是___6_____,第二行是___12____。
#include <stdio.h>int fun(int x,int y){static int m=0,i=2;i=m+1;m=i+x+y;return m;}main(){int j=4,m=1,k;k=fun(j,m);printf("%d\n",k);k=fun(j,m);printf("%d\n",k);}12.以下fun函数的功能是:累加数组元素的值。
n为数组中元素的个数。
累加的和值放入x所指的存储单元中。
请填空。
fun(int b [ ],int n,int *x){int k,r=0;for(k=0;k<n;k++)r=___r+b[k]___;___*x___=r;}13..以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。
请填空。
main( ){ float x[1000],sum=0.0,ave,a;int n=0,i;printf("Enter mark:\n");scanf("%f",&a);while(a>=0.0&& n<1000){ sum+___=a_________;x[n]=_______a________;n++;scanf("%f",&a);}ave=______sum/n________;printf("Output:\n");printf("ave=%f\n",ave);for( i=0;i< n;i++ ) if(__x[i]<ave_____) printf("%f \n",x[i]);}三、编程题1.计算1!+2!+3!+ …… +20!。