1、江 南 大 学 考程序设计(C语言)期末考试卷 (A)使用专业、班级 学号 姓名 l题数一二三四五总分得分 一、选择题 每题2分,共计40分1.下列变量合法的是( B )。A2a0B_1a0CxyDb-a2假设所有变量均为整型,则表达式(a=2,b=5,b+,a+b)的值是( B )。A7B8C6D23有以下程序:void main( )int x=101,y=011; printf(%2d,%2dn,x,y); 执行后输出结果是( C )。A10, 9B101,11C101, 9D01,114若有说明语句:char c=72;则变量c( A )。A包含1个字符 B包含2个字符 C包含3个字符
2、D说明不合法,c的值不确定5阅读一下程序,当输入数据的形式为25,13,10 正确的输出结果为( D )。void main()int x,y,z;scanf(%d%d%d,&x,&y,&z);printf(x+y+z=%dn,x+y+z);Ax+y+z=48Bx+y+z=35Cx+z=35D不确定值6定义如下变量和数组:int k;int a33=1,2,3,4,5,6,7,8,9;则下面语句的输出结果为( )。for(k=0;k3;k+) printf(%d,ak2-k); A3 5 7 B3 6 9 C1 5 9 D1 4 77有以下程序:void main() int i,n=0; f
3、or(i=2;i5;i+) do if(i%3) continue; n+; while(!i); n+; printf(n=%dn,n); 程序执行后的输出结果是( )。An=5Bn=2 Cn=3 Dn=48已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2= A+6-3;后c2中的值为( )。 ADB68C不确定的值DC9putchar 函数可以向终端输出一个( )。 A整型变量表达式值B实型变量值 C字符串D字符或字符型变量值10C语言中while和do-while循环的主要区别是( )。Ado-while循环是表达式不成立才进入循环体Bdo-while的循环控制条件
4、至少无条件执行一次Cdo-while允许从外部转到循环体内,而while循环不允许Ddo-while的循环体不能是复合语句11设x,y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( )。Ax&yBx=yCx|y+z&y-zD!(xy)&!z|1)12以下对二维数组a的正确说明是( )。Aint a 3 ;Bfloat a ( 3 , 4 ) ;Cdouble a 14;Dfloat a (3) ( 4)13以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( )。main ( ) int * p , * q , a , b ; p = & a ;
5、 printf ( “ input a : ” ); scanf (“ % d “ , * p ) ; A* p表示的是指针变量p的地址B* p表示的是变量a的值,而不是变量a的地址C* p表示的是指针变量p的值D* p只能用来说明p是一个指针变量14设有以下说明语句:struct stu int a; float b; stutype ;则下面的叙述不正确的是( )。Astruct是结构体类型的关键字Bstruct stu是用户定义的结构体类型Cstutype是用户定义的结构体类型名Da和b都是结构体成员名15若有定义“int a=1,2,3,4,5,6,7,8,9,10, *p=a;”,则
6、以下表达式值为4的是( )。A. p+=3, *p+B. p+=3, + *pC. p+=4, *p+D. p+=4, + *p16下面的程序将输出:( )。main() int a5=1,2,3; int k,j; for(k=1;k4;k+) ak+; for(j=0;j10) break; Cint i=0;Di =100; do +i ; while(i=0); while(+i%2) i+;19设x为int型变量,则执行以下语句后,x的值为( )。 x=10; x+=x-=x-x; A10B20C40D3020下面程序段的运行结果是( )。char a7=abcdef;char b4
7、=ABC;strcpy(a,b);printf(%c,a5); A. 空格B. 0C. eD. f 二、判断题 每题1分,共计10分( )1一个函数利用return只能返回一个函数值。( )2在程序运行过程中,系统分配给实参和形参的内存单元是不同的。( )3用scanf输入字符时,字符串中不能包含空格。( )4Continue 和break都可用来实现循环体的中止。( )5字符常量的长度肯定为。( )6.在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。( )7.在C语言的复合语句中,只能包含可执行语句。 ( )8.在复合语句内部定义的变量属于局部变量。 ( )9.若将C源程
8、序经过编译、连接后生成可执行文件,则可直接在DOS系统下输入可执行文件名执行。 ( )10已知:char c=48;int i=1,j=10;执行语句j=!(cj)&i+;则i和j的值分别是1和0 三、填空题 每题2分,共计20分1执行 a = 4 + 6 , a * 5 , a + 10后,逗号表达式的值为【1】_。2下面程序的运行结果是【2】_ _ _#include void main()int i,j=4;for(i=j;i=2*j;i+)switch(i/j)case 0:case 1: printf(*);break;case 2: printf(#);3下面程序的运行结果是【3】
9、_ _void main ( ) char a = “123456789“ , * p ; int i = 0 ; p = a ; while ( * p ) if ( i % 2= =0 ) * p = * ; p + + ; i + + ; puts ( a) ; 4下面程序的运行结果是【4】_ _ #include #include void main()char str=I,0,a,m,0,a,0,C,0,P,r,o,g,r,a,m,m,e,r,0,0; int len; char *p; p=str; while(1) len=strlen(p); if(len=0) break;
10、printf(%s ,p); p+=len+1; printf(n); 5下面程序如果输入是:1357924-1运行结果是【5】_ _#include #include int a5=0;void main()int i=0,j,k;for(;) scanf(%d,&k); if(k0) break; ai=k; i=(i+1)%5; for(i=0;i = 1 ) ; for ( j = i 1 ; j = 0 ; j - - ) printf ( “ %d “ , a j ) ; 7. 下面程序的运行结果是【7】 _#include stdio.hvoid main()int i=5;pr
11、intf(%dn,sub(i);sub(int n)int a;if(n=1) return 1;a=n+sub(n-1);return(a)8. #include stdio.hvoid main()int n,sum=0;n=2345;dosum=sum+(n%10)*(n%10);n=n/10;while(n);printf(sum=%dn,sum);该程序的输出结果是:【8】_ _9. #include stdio.h#define M 8void main()int aM,i,j,t;for(i=0;iM;i+) scanf(%d,a+i);i=0;j=M-1;while(ij)t=
12、*(a+i);*(a+i)=*(a+j);*(a+j)=t;i+;j-;for(i=0;i0 & +b0) +a; printf(a=%d,b=%d,a,b); 四、完善程序 每空2分,共计16分1 统计从键盘输入的字符中数字字符的个数,用换行符结束循环。请填空。int n = 0 , c ;c = getchar ( ) ;while (【1】 ) if (【2】 ) n + + ; c = getchar ( ) ; 2下面程序的功能是从三个红球、五个白球、六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案,请填空。#include stdio.hvoid main()int
13、i,j,k;printf(n 红 白 黑n);for(i=0;i=3;i+)for(【3】 ;j=5;j+)k=8-i-j;if(【4】 ) printf( %3d %3d %3dn,i,j,k);3执行以下程序后,第一行的输出是【5】 ,第二行的输出是【6】 。#include stdio.hint fac (int a ) int b = 0 ; int c = 3 ; b + + ; c + + ; return a + b + c ;void main ( ) int a = 3 , j ; for ( j = 0 ; j =0&c=0&k=6 【5】 5 【6】 6 【7】 n=1
14、【8】 (2*n-1)*x-p(n-1,x) 本题得分五、编程题 第1题5分,第2题9分,共计14分1. 将以下程序段改用嵌套的if语句实现。int s,t,m;t=(int)(s/10);switch(t)case 10: m=5;break;case 9;m=4;break;case 8: m=3;break;case 7: m=2;break;case 6: m=1;break;default m=0;答案: int s,m; /正确的变量定义1分if(s109) m=0; /正确的条件以及赋值1.5分(对应于default情况)else if(s70) m=1; /正确的条件以及赋值0
15、.5分else if(s80) m=2; /正确的条件以及赋值0.5分else if(s90) m=3; /正确的条件以及赋值0.5分else if(s100) m=4; /正确的条件以及赋值0.5分else m=5; /正确的赋值0.5分2.写一个函数,用“起泡法”对输入的10个整数按由小到大的顺序排列。void main()void sort(int b10);int i,a10; /正确的数组变量定义1分for(i=0;i10;i+) /正确的输入循环控制1分scanf(%d,&ai); /正确的输入1分sort(a);for(i=0;i10;i+)printf(%d,ai);void sort(b10)int i,j;for(j=0;j9;j+) /正确的冒泡法外循环控制1分for(i=0;ibi+1) /正确的比较1分t=bi; /正确的赋值1分bi=bi+1; /正确的赋值1分bi+1=t; /正确的赋值1分