长安大学20 08 -20 09 学年第 二 学期 试题(A)卷
课程名称 学生姓名 C语言程序设计 学院 考试日期 2009年7月 8 日 学号 共四题 班级 注意:所有答案均写在答题纸上 一、选择题(每题2分,共60分) 1.下列关于C程序设计语言的正确说法是 。 A.C语言只适合进行系统程序设计 B.一个C语言程序也可以不含main函数 C.C程序的基本组成单位是函数 D.在C程序中, 注释说明只能位于一条语句的后面 2.下列常数中不能作为C语言常量的是 。 A.2.5e-2 B. 0xA5 C 3e2 D.0582 3.若变量已正确定义并赋值,下面符合C语言语法的表达式是 。 A.a=b=c+2 B.a=a+7=c+b C.int 12.7%5 D.a:=b+1 4.设x,y,i,j均为整型变量,且x=9,y=2,则执行i=x--; j=++y;语句以后,x,y,i,j的值是 。 A.8,3,9,3 B.8,3,8,3 C.8,3,9,2 D.8,2,9,3 5.设有定义int a;则执行语句a=1/5+3%4+4.5/5后a的值为 。 A.3.900000 B.3 C.3.9 D.1.850000 6.下列不是赋值语句的是 。 A. a+=c; B. a=12; C. a==c; D.a=a+1; 7.使变量m被赋值为486, 变量n被赋值为-286,则运行语句scanf(\时正确的输入是 (下面↙代表回车键)。 A.m=486 n=-286↙ B.m=486,n=-286↙ C.m=486↙n=-286↙ D.123,456↙ 8.设a ,b, c, d, m, n均为int型变量,且a=8,b=7,c=6,d=5,m=2,n=2,则逻辑表达式 (m=a>b)||(n=c void main() { int x=102,y=012; printf(\ A. 10,01 B. 02,12 C. 102 10 D. 102,10 10.表达式(x=3*2,x+5),x=x+10执行后x的值为 。 A.11 B.21 C.16 D. 6 11. 假定所有变量均已正确说明,下列程序段运行后x的值是 。 a=b=0; c=8; x=35; if(!a) x --; else if(b);if(!c) x=3;else x=4; 第 1 页(共 7 页)
A.4 B.35 C.3 D.34 12. 下面程序的运行结果是 。 #include int m=8; f(int a) { int b=0; static int c=3; b++; c++; return(a+b+c)/m;} void main() { int m=2, i; for(i=0;i<3;i++) printf(\A.001 B.000 C.011 13. 下面程序的输出结果是 。 #include D.010 void main( ) {int x=3 ; do{printf(“-”,x--);}while(x);} A. 3 B. 3 2 1 C. 不打印任何内容 D.陷入死循环 14.以下关于for语句说法中错误的是 。 A.for语句可以完全替代while语句。 B.for语句中如果省略表达式2,则相当于“死循环”。 C.for语句中表达式2表示循环条件,因此它只能是关系表达式或逻辑表达式。 D.使for循环趋于结束的语句可以写入for语句的循环体中。 15. 以下合法的数组定义是 。 A. int a=5, M[a]={1,2,3,4,5}; B. int a[][3]={ 0,1,2, 6,5,4, 9,8,7}; C. char a[11];a=\’basic’}; 16. 执行下面的程序段之后,i的值是 。 int i,x; for(i=1,x=1;i<=50;i++) {if(x>=10)break; x+=5; continue; x-=3;} A.8 B.5 C.6 D.3 17.以下程序的输出结果及函数递归调用的次数是 。 #include fun (int k) { if (k>0) fun(k-1); printf(\void main( ) { int w=5; fun(w); } 第 2 页(共 7 页) A.输出54321递归调用4次 B. 输出12345递归调用4次 C.输出012345递归调用5次 D. 输出543210递归调用5次 18.若有两个字符串str1,str2,要比较二者是否相等,正确的if语句是 。 A. if(strcmp(str1,str2)==0) B. if(str1=str2) C. if((str1-str2)==0) D. if(str1==str2) 19.C语言规定,简单变量做函数实参时,它和对应形参之间的数据传递方式是 。 A.可以由用户指定传递方式 B.只能由实参传递给形参的单向值传递 C.地址传递 D.由实参值传递给形参,再由形参返回到调用处。 20.若程序中定义了以下函数 double mysum(double a,double b) { return (a+b);}并将其放在调用语句所在函数之后,则在调用之前应该对该函数进行说明, 以下选项中错误的说明是 A.double mysum(double a, double b); B.double mysum(double m, double n); C.double mysum(double a, b); D.double mysum(double, double); 21.下面叙述错误的是 . A.在变量初始化方面,自动类变量在每调用一次函数时都赋一次初值。 B.局部变量原则上只在定义它们的函数内部有效,但main函数的局部变量在整个程序中都有效。 C.局部静态变量不能定义成寄存器变量 D.全局变量在程序的全部执行过程中都占用存储单元 22.执行以下程序的输出结果为 。 #include #define P(a,b) a*b+1 void main() { int x=1,y=2,z; z=P(x+y,4+3); printf(“%d”,z);} A.22 B. 16 C.21 D.13 23.当说明一个共用体变量时,系统分配给它的内存是 A.各成员所需内存量的总和 B.共用体变量第一个成员所需内存量 C.成员中占内存最大者所需的容量 D.共用体变量最后一个成员所需内存量 24.设有如下定义 struct student { int num; char name[20]; float score; }stu[5],*p=stu;则下列对于成员引用的方式正确的是 。 A.(*p).score B.(*p)->score C.*p.score D.*p.name 25.一个main(int a, char *argv[])函数带参数,可执行文件名为prog.exe,若命令行输入 prog abcd efg 123,则printf(\的结果是 . 第 3 页(共 7 页) A.3,14 B.4,3 C.3,3 D.4,4 26.若已定义int a[5][6], (*p)[6]=a;下面表达式不能表示a[2][3]元素地址的是 。 A.*a+2*6+3 B.*(p+2)+3 C. a[2]+3 D. *((p+2)+3) 27.下面程序段的运行结果为 。 #include void swap1(int c[]) { int t; t=c[0]; c[0]=c[1]; c[1]=t;} void swap2(int c0,int c1) { int t; t=c0; c0=c1; c1=t;} void main() { int a[2]={0,1},b[2]={0,1}; swap1(a); swap2(b[0],b[1]); printf(\ A.1010 B.0110 C.0101 D.1001 28. 若有定义 int (*p[3])(int);则以下说法正确的是 A. p是指向一维数组的指针,一维数组包含3个元素。 B. p是指向函数的指针,函数返回值是int型的指针。 C. p是函数指针数组,函数返回值是int型。 D. p是指向函数的指针,函数返回值是int型。 29.以下程序的运行结果是___ _____ #include void main() { char a[10]={'1','2','3','4','5','6','7','8','9',’\\0’}, *p, **q; int i=8; p=a+i; q=&p; printf(\A. 6 B. 6789 C. '6' D. 789 30.下列关于C语言的文件操作叙述正确的是 。 A.先打开文件,然后对其读或写,最后关闭文件 B.先测试文件已存在,再打开文件 C.fputc函数可以从指定文件中读出一字符 D.对操作顺序无要求 二.阅读下列程序,写出运行结果(10分)(1、2题各2分, 3、4题各3分) 1. 以下程序的运行结果是 。 #include struct ord {int x,y;}dt[2]={1,2,3,4}; void main() { struct ord *p=dt; printf(\ printf(\ 第 4 页(共 7 页) 2.下面程序输出结果是____ ______. #include void main( ) { char a[]=\ char *p1,*p2; int i; p1=a; p2=b; for(i=0;i<7;i++) if(*(p1+i)==*(p2+i)) printf(\ 3.以下程序的运行结果是 。 #include #include void main( ) { int i=0; char s1[10]=“ABCD”,s2[10]=“EFG”, *p1=s1, *p2=s2; strcat(p1,p2); while(s2[i++]!=’\\0’) s2[i]=s1[i]; puts(p2);} 4.以下程序的输出结果为________________ #include void main() { void func(int *x,int n); int i,a[]={1,3,5,7,9,11,13,15}; func(a,5); for(i=3;i<=5;i++) printf(\void func(int *x,int n) { int *p,t,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i<=p;i++,j--) {t=*i; *i=*j; *j=t;} } 第 5 页(共 7 页)
三.填空题(每空2分,共20分) 1.若变量x,y定义为int类型,即 int x=99,y=9;请将输出语句printf( (1) ,x/y);补充完整。 2.符合结构化程序设计原则的三种基本控制结构是:选择、循环和 (2) 3.下面的程序是用冒泡法对a数组中的n个数进行升序排序,请填空 #include #define n 10 void main() { int a[n]={7,5,4,2,43,8,1,9,12,-5}, i,j,t; for(i=0;i void main() { int a[2][3]={{1,2,3},{4,5,6}},_ (5) ,i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) b[j][i]= (6) ; for(i=0;i<3;i++) { printf(“\\n”); for(j=0;j<2;j++) printf(“%d”,b[i][j]); } } 5.从键盘输入一个字符串,用指针访问字符串,求字符串的长度,请填空 #include void main() { char str[20], (7) ; gets(str); p=str; while( (8) ) p++; printf(“len=%d\\n”,p-str); } 第 6 页(共 7 页) 6.下面的程序实现从10个数中找出最大数和最小数,请填空 #include int max,min; void find_max_min(int *p,int n) {int *q; max=min=*p; for(q=p; (9) ;q++) if(max<*q) max=*q; else if( (10) ) min=*q; } void main() {int i,num[10]; printf(\for(i=0;i<10;i++) scanf(\find_max_min(num,10); printf(\} 四、编程题(每题5分,共10分) 1.编程求4*4矩阵主对角线元素的乘积。 要求(1)矩阵初值由键盘输入。 (2)用循环语句求矩阵主对角线元素的乘积 2.下面的程序是将两个字符串首尾相接。在主函数中调用字符串连接函数cstrcat()使得字符串“We are having a ”和字符串“test of C programming language”连接成“We are having a test of C programming language”存入字符数组str1中。请写出完整的cstrcat()函数。 #include void main( ) { void cstrcat(char *s1, char *s2); char str1[100]=”We are having a ”, *str2=”test of C programming language.”; cstrcat(str1,str2); printf(“%s\\n”,str1); } void cstrcat(char *s1,char *s2) { ??? ??? } 第 7 页(共 7 页)
本文来源:https://www.bwwdw.com/article/89lo.html