桂林电子科技大学试卷2009-2010 学年第 2 学期课号0921306等课程名称C语言程序设计A (A卷; 闭卷)适用班级(或年级、专业)7院09级考试时间120 分钟班级学号姓名第一部分:基础知识(20题,共20分)1、表达式18/4*2/8值的数据类型为()A)int B)float C)double D)不确定2、在C语言中,int, char和short int三种类型变量所占用的内存大小是()。
A)均为2个字节 B)由用户自己定义 C)由所用机器的字长决定 D)是任意的3、C语言中函数返回值的类型是()A)return语句中的表达式类型 B)调用函数的类型C)总是int型 D)定义函数时所指定的函数类型4、凡是在函数中未指定存储类别的变量,其隐含的存储类别是()A)自动B)静态C)外部D)寄存器5、以下不正确的描述是()A)break语句只能用于循环语句和switch语句B)在switch语句中,break语句的作用也可用continue语句来替代C)在循环语句中,使用continue语句是为了结束本次循环,而不是终止循环的执行D)在循环语句中,使用break语句是为了使流程跳出循环体,提前结束循环6、以下说法正确的是()A)输入项可以为一实型常量,如scanf("%f",3.5);B)只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d”);C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf (“%4.2f",&f);D)当输入数据时,必须指明变量的地址,如scan f(“%f",&f);7、己知各变量的类型说明如下:int i=8,k,a,b;unsigned long w=55;double x=1.42,y=5.2;则以下符合c语言语法的表达式是()A)a+=a-=(b=4)*(a=3) B)a=a*3=2C)x%(-3) D)y=float(i)8、已知ch是字符型变量,下面不正确的赋值语句是()A)ch=‟a+b‟; B) ch=‟\0‟; C)ch=‟7‟+‟9‟; D)ch=5+99、有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c),为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是______。
A)132<回车>B)1,3,2<回车>C)a=l b=3c=2<回车>D)a=1,b=3,c=2<回车>10、逻辑运算符两侧运算对象的数据类型()A)只能是0或lB)只能是0或非0正数C)只能是整型或字符型数据D)可以是任何类型的数据11、一个c程序的执行是从()A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结柬C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束12、以下程序段()x=-1;do{x=x*x;}while(!x);A)是死循环 B)循环执行二次C)循环执行一次 D)有语法错误13、以下正确的叙述是()A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定B)C语言允许main函数带形参,形参名只能是argc和argvC)当main函数带有形参时,传给形参的值只能从命令行中得到D)若有说明:main(int argc,char *argv),则形参argc的值必须大于114、若有宏定义 #define mod(x,y) x%y ,则执行以下程序段后,输出为()int z,a=15,b=100;z=mod(b,a);printf(“%d/n”,z++);A)11 B)10 C)6 D)宏定义不合法15、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其正确的解释是_()main(){int *p,*q,a,b;p=&a;printf("input a:");scanf("%d",*p);……}A)*p表示的是指针变量p的地址B)*p表示的是变量a的值,而不是变量a的地址C)*p表示的是指针变量p的值D)*p只能用来说明p是—个指针变量16、若有说明语句: char s1[4]=”12”; char *ptr;则执行下列语句后输出为()ptr=s1;printf(“%c/n”,*(ptr+1));A)字符…2‟ B)整数2 C)字符串“12” D)字符…1‟17、若有以下语句int x[]={2,4,6,8,10,12},*ptr;ptr=x;则对数组元素的正确引用为()A)x B)x[6] C)*(--ptr) D 、 *(++ptr)18、若有说明语句:int i,x[3][4];则不能实现将x[1][1]的值赋给变量i的语句是()A)i=*(*(x+1)+1) B)i=*(*(x+1)) C)i=x[1][1] D)i=*(x[1]+1)19、若用数组名作为函数调用的实参,传递给形参的是____。
A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数20、若有定义:int a[5];则a数组中首元素的地址可以表示为()A)&a B)a+l C)a D)&a[1]第二题:简单程序(15题,共45分)21、执行以下语句后b的值为()int a=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);A)5 B)0 C)6 D)122、运行下面的程序,其输出是()main(){int i=1;while(i<19)if(i++%5!=3) continue;else printf(“%4d”,i);printf(“/n”);}A)2 5 7 9 11 13 15 17 B)3 6 9 12 15 18C)4 9 14 19 D)3 8 13 17 1923、运行下面的程序后,其正确的输出是()main(){static int a[5]={7,2,8,4,5};static int *pa[5]={&a[0], &a[2], &a[1], &a[3], &a[4]};int **p,i;p=pa;for(i=0;i<5;i++){printf(“%d/t”,**p+2);p++;}printf(“/n”);}A)9 4 10 6 7 B)7 2 8 4 5C)7 4 10 4 5 D)9 10 4 6 724、下面程序运行后,其输出是()main(){int i;int n=2;while(++n<20){i=1;while(++i<n){if(n%i= =0)break;if(i= =n-1)printf(“%d/t”,n);}printf(“/n”);}}A)2 5 7 9 13 17 19 B)3 5 7 11 13 17 19C)2 3 5 7 11 13 17 19 D)3 5 7 11 13 17 2025、下面程序运行后,其输出是()main(){int i,j,k; int func();i=1,j=2,k=3;printf(“%d/n”,func((j+=k, j++),(i,i++,++i)));}int func(int x,int y){int z;z=x%y;return(z);}A)2 B)0 C)1 D)326、下面程序运行后,其输出是()int x,y;one(){int a,b;a=25,b=10;x=a-b;y=a+b;}main(){int a,b;a=9,b=5;x=a+b;y=a-b;one();printf(“%d,%d/n”,x,y);}A)14,4 B)14,35 C)15,35 D)15,427、下面程序运行后,其输出是()#include <stdio.h>void printd(int i);main(){int n=123;printd(n);}void printd(int n){int i;if(n<0){n=-n;putchar(…-…);}putchar(n%10+‟0‟);if((i=n/10)!=0)printd(i);}A)123 B)321 C)3 D)128、下面程序运行后,其输出是()struct sample{int a,b;char *ch;};void f1(struct sample parm);main(){struct sample arg;arg.a=1000;arg.b=100;arg.ch=”abcd”;f1(arg);}void f1(struct sample parm){ parm.a+=parm.b;parm.ch[2]=‟x‟;printf(“%d/n”,parm.a);printf(“%s/n”,parm.ch);}A)1000 B)1100 C)1100 D)100Abcd abcd abxd abcd 29、下面程序运行后,其输出是()main(){static char s[30]=”abcdefg”;static char t[]=”abcd”;int i,j;i=0;while(s[i]!=‟/0‟)i++;j=0;while(t[j]!=‟/0‟){s[i+j]=t[j];j++;}s[i+j]=‟/0‟;printf(“%s/n”,s);}A)abcdabcdefg B)abcdefg C)abcd D)abcdefgabcd30、下面程序运行后,其输出是()main(){ int a[4][4],i,j,k;for(i=0;i<4;i++)for(j=0;j<4;j++)a[i][j]=i+j;for(i=1;i<4;i++)for(j=i+1;j<4;j++){ k=a[i][j];a[i][j]=a[j][i];a[j][i]=k;}for(i=0;i<4;i++){printf(“/n”);for(j=0;j<4;j++)printf(“%4d”,a[i][j]);}}A)0 1 2 3 B)0 1 2 3 C)0 1 2 3 D)3 2 1 01 2 3 4 1 2 5 4 1 2 4 2 4 3 2 12 3 4 5 2 3 4 5 2 3 5 3 5 4 3 23 4 5 6 3 4 5 6 3 4 6 4 6 5 4 3 31、运行下面的程序,其输出是()main(){ int a[]={4,2, 6,8,10},y=1,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf(“%d/n”,y);}A)17 B)18 C)19 D)2032、运行下面程序,从键盘输入四个字符xyz#,其输出是()#include "stdio.h"main(){ void recursion();recursion();}void recursion(){char c;c=getchar();putchar(c);if(c!=‟#‟)recursion();}A)xyz# B)xyz#xyz# C)xyz##zyx D)xyzxyz33、当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为()if ( a < b )if( c < d)x = 1;else if (a < c )if ( b < d )x = 2;elsex = 3;elsex = 6;else x = 7;供选择的答案是:A) 1 B) 2 C) 3D)634、有以下程序:main(int argc , char *argv[ ] ){int i;if ( argc <= 0 ) return ;for( i=1; i<argc ; i++) printf(“%c”, *argv[ i] );}经编译链接后生成的可执行文件是test.ext,若运行时输入以下带参数的命令行:test good luck执行后输出结果是()A)goodluck B)goo C)luc D)gl35、以下程序struct tree{ int x ;char *s;}t;fun(struct tree t) {t.x = 10;t.s = “here”;}main( ) {t.x = 1;t.x = “there”;fun ( t );printf(“%d, %s”, t.x , t.s );}执行后输出结果是()A)10, here B)1, there C)1,here D)10, there第三题:程序填空题在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。