扬州大学试题纸(2013-2014学年第1学期)全校非计算机专业统考课程C及C++语言程序设计(闭)卷注意:1.请用答题纸答题,将答案填于相应的题号内。否则不给分。2.请认真填写并仔细核对答题纸上的学院、系科、班级、学号及姓名等。3.请将试卷和答题纸分开上交。一、单选题(每小题2分,共30分)1.以下叙述中,正确的是(1)。A.main函数必须放在程序的开始B.main函数必须放在程序的最后C.在一个函数体内可以定义另外一个函数D.程序的执行总是从main函数开始,一般回到main函数结束2.下列声明变量的语句中,错误的是(2)。A.int_5;B.doubleint_C.charForD.floatUS$3.若有声明“charc='\72';”,则变量c(3)。A.包含1个字符B.包含2个字符C.包含3个字符D.声明明不合法4.判断char型变量c1是否为小写字母的正确表达式为(4)。A.'a'=c1='z'B.(c1=a)&&(c1=z)C.('a'=c1)||('z'=c1)D.(c1='a')&&(c1='z')5.下列语句中,能正确进行字符串赋值操作的语句是(5)。A.chars1[5][]={ABCDE};B.chars2[]={'A','B','C','D','E'};C.chars3[][10]={ABCDE};D.chars4[5]={'A','B','C','D','E'};6.以下关于break和continue语句的叙述中,正确的是(6)。A.break和continue语句都可以出现在switch语句中B.break和continue语句都可以出现在循环体中C.在循环语句和switch语句之外允许出现break和continue语句D.执行循环语句中的break或continue语句都将立即终止循环7.设有声明“inta=1,b=2,c=3,d=4,x;”,则执行下列程序段后,x的值为(7)。if(ab)if(cd)x=1;elseif(ac)x=2;elsex=3;elsex=6;A.1B.2C.3D.6学院___________系____________班级_____________学号____________姓名_____________------------------------------------------------装---------------------------------------订-------------------------------------------线-----------------------------------------------裁剪框第1页共10页裁剪框8.sizeof(float)是(8)。A.一种函数调用B.一个不合法的表达式C.一个整型表达式D.一个浮点表达式9.下列数组声明中,错误的是(9)。A.inta[][3]={1};B.inta[2][3]={{1,2},{3,4},{5,6}};C.inta[][3]={{1,2,3},{4,5,6}};D.inta[2][3]={1,2,3,4,5,6};10.若有声明:inta[10]={1,2,3,4,5,6,7,8},*p=&a[3];,则p[0]的值是(10)。A.1B.2C.3D.411.下列程序段运行时的输出结果是(11)。chars[]=China;printf(%s,s+2);A.ChinaB.CC.字符'i'的地址D.ina12.若有程序:#defineSUB(x,y)x*ymain(){inta=1,b=2;a=SUB(a+1,b+1);printf(“%d”,a);}则执行该程序后,a的值为(12)。A.4B.5C.6D.713.下列不是死循环的是(13)。A.inti=100;while(1){i=i%100+1;if(i100)break;}B.for(;;);C.intk=0;do{++k;}while(k=0);D.ints=36;while(s);--s;14.C语言规定,函数返回值的类型是由(14)。A.return语句中的表达式类型所决定B.调用该函数时的主调函数类型所决定C.调用该函数时系统临时决定D.在定义该函数时所指定的函数类型所决定15.若有结构定义及结构变量声明如下:structpupil{charname[20];intage;charsex;}pup[5],*p;p=pup;则下列scanf函数调用语句中,对结构变量成员引用错误的是(15)。A.scanf(“%s”,pup[0].name);B.scanf(“%d”,pup[0].age);C.scnaf(“%c”,&(p-sex));D.scanf(“%d”,&(*p).age);第2页共10页裁剪框二、填空题(每空1分,共20分)1.除goto语句外,C语言中的转移语句还有return,(1),(2)。2.设有变量声明如下:inta=9;floaty=3.5;则表达式a%5和7/4+y的值分别为(3)、(4)。3.在C语言中,分别用(5)和(6)表示逻辑“真”值和逻辑“假”值。4.把数学表达式bayx改写成C语言表达式为(7),计算这类表达式时通常要包含头文件(8)。5.在C语言中,根据生存期的不同,可将变量分为静态存储类别和动态存储类别。具体有extern、register、(9)和(10)。6.C语言中有!、&&、||三个逻辑运算符,其中优先级高于算术运算符的是(11),三个运算符中,优先级最低的是(12)。7.设有声明“intx,a=5,b=8;”,则执行语句“x=7;x+=x-=x+x;”后,x的值为(13)。而程序段“a+=b;b=a-b;a-=b;”的功能是(14)。8.若有声明语句如下:inta[3][4]={{1,2,3},{4,5},{6,7,8}};则执行该语句后,a[1][2]=(15),a[2][1]=(16)。9.若有声明“chars[10]=China;”,则表达式sizeof(s)的值为(17);表达式strlen(s)的值为(18)。10.在C语言源程序中,以“#”开头的命令被称为(19)命令,它们是在(20)被处理的。第3页共10页第3页共8页第4页三、阅读程序写出结果(每小题4分,共20分)1.运行以下程序,若输入数据为:2014↙,则输出结果为。注:用↙表示回车。main(){inta,t=0;scanf(%d,&a);while(a){t=t*10+a%10;a/=10;}printf(%d,t);}2.以下程序运行时的输出结果是。#includestdio.hvoidmain(){inti=4;while(i0){switch(i%2){case0:i--;case1:i--;break;}i--;}printf(%d,i);}3.以下程序运行时的输出结果是。#includestdio.hvoidfun(int*x,inty){*x=*x+y;y=5;}voidmain(void){inta[2]={1,2};fun(&a[0],a[1]);printf(%3d%3d\n,a[0],a[1]);}裁剪框第4页共10页4.下列程序运行时的输出结果是。#includestdio.hvoidmain(){chara[20]=2013,b[10]=14;inti=0,j=0;while(a[i])i++;while(b[j])a[i++]=b[j++];a[i]='\0';printf(%s,a+2);}5.下列程序运行时,若输入数据为10,则输出结果是。#includestdio.hvoidmain(){intb[16],x,k,r,i;printf(inputx:);scanf(%d,&x);k=-1;/*变量k用作b数组的下标*/while(x!=0){r=x%2;b[++k]=r;x/=2;}for(i=k;i=0;i--)printf(%d,b[i]);}四、完善程序题(每空1分,共30分)1.下列程序的功能是输出100以内的个位数为6且能被6整除的所有整数。#includestdio.hvoidmain(){inti,j;for(i=0;(1);i++){j=i*10+6;if((2))continue;printf(%d,j);}}裁剪框第5页共10页2.以下程序中,函数fun的功能是实现N行N列方阵的转置,即实现a[i][j]与a[j][i]的交换。算法提示:以主对角线为界,上三角区域中的元素与下三角区域中的对应元素交换。#includestdio.h#defineN3voidfun(inta[][N]){inti,j,t;for(i=0;iN;i++)for(j=0;j(3);j++){(4);a[i][j]=a[j][i];(5);}}voidmain(){intb[N][N],i,j;for(i=0;iN;i++)for(j=0;jN;j++)scanf(%d,(6));fun(b);for(i=0;iN;i++){for(j=0;jN;j++)printf(%4d,b[i][j]);printf(\n);}}3.下列程序中,函数gcd的功能是用欧几里德算法求两个正整数的最大公约数。#includestdio.hintgcd(intm,intn){intr;while(n!=0){r=(7);m=n;n=(8);}return(9);}voidmain(){inta,b,t;printf(Pleaseinputaandb:);scanf(%d%d,&a,&b);if(ab)t=a,a=b,b=t;printf(result=%d\n,gcd((10)));}裁剪框第6页共10页4.以下程序从键盘输入一个较大的整数n(n=6),然后验证6到n之间的所有偶数都可以分解为两个素数之和。#includestdio.h#includemath.hintprime(intm){intg,h=sqrt(m);for((11);g=h;g++)if(m%g==0)return0;(12);}voidmain(){intk,j,n,limit;do{printf(Inputanumber=6:);scanf(%d,&limit);}while(limit6);for(n=6;n=limit;n+=2)for(k=3;k=n/2;k+=2)if(prime(k)&&prime(j=(13))){printf(%d=%d+%d\n,n,k,j);break;}}5.用迭代法求a的近似值。迭代公式为:)(211nnnxaxx。要求前后两次求出值的差的绝对值小于10-6时迭代中止。#includestdio.h#includemath.hfloatsquare(floata){floatx0,x1;x0=a/2;x1=0.5*(x0+a/x0);while(fabs((14))=1.0e-6){x0=x1;x1=(15);}returnx1;}voidmain(){floata;scanf(%f,&a);if(a0)printf(\nxisanegative\n);elseprintf(sqrt(%.1f)=%.3f\n,a,(16));}裁剪框第7页共10页6.下列程序是利用插入排序法将n个数从大到小进行排序,插入排序的算法思想如下:从一个空表开始,将待排序的数一个接一个插入到已排好序的有序表中(空表视为有序),从而得到一个新的、记录数增1的有序表。例如:当n=7时,待排序的数及每一趟有序表的变化情况如下:趟数有序表剩余待排序数初始状态空49386597761327第1趟49386597761327第2趟49386597761327第3趟65493897761327第4趟97654938761327第5趟9776654938132