《C语言程序设计(1006)答案(共27页).doc》由会员分享,可在线阅读,更多相关《C语言程序设计(1006)答案(共27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上中南大学现代远程教育课程考试复习题及参考答案C语言程序设计一、单项选择题若以下各题所有库函数都可以合法使用,且变量定义如下:int m=5, i=3,j=2,*p, a=8,b=0;int arr10=0,1,2,3,4,5,6,7,8,9,td 3=1,2,3,4,5,6;float x=2.5,y=3.0;double z=0; long n=1;char c=A,ch20=a,b,c,0,d,0;struct student int num; char name20; float score; struct student *next;st1,st2,*ps;
2、FILE *fp; 1若将3和10从键盘输入给变量a、x,输入语句为scanf(“a=%d,x=%f”,&a,&x);正确的键盘输入是(表回车): A a=3,x=10 B 3,10 C 3 10 D 3,10.02. 以下不是死循环的语句是:A for ( ; ;y+=i+); B while(a) y+=i+ ;C do y+=i+while (a0);D for (b=0;(c=getchar()!=n);)b+;3.若p=arr;正确的语句是: A *p=arr10; B *p=arr2*a; C p=arr5; D pi=arr0;4.若ps=&st1;则下面描述正确的是: A ps
3、-num与st1-num等价。 B ps.num与st1.num等价。 C ps-num与num等价。 D ps-num与st1.num等价。5.语句printf(“%d,aj);的输出结果是:A 1 B 0 C 8 D都不对 6.表达式 j/i+a%i+x 的值是:A 6 B 4.5 C 6.0 D 5.5 7.表达式 b|a+i&ij ?+i : i+;则a与i的值分别为:A 4 ,4 B 3 ,4 C 4 ,3 D 3 ,3 10.if (ab) if (c=d) x=8;else x=1;表示的逻辑关系是: 8 ab 且c=d 8 ab 且c=dA x= B x= 1 ab 且cd 1
4、 ab且c=d 8 ab 且c=d 8 ab 且c=dC x= D x=1 ab 1 ab 11.将字符串“Wan Ming”输入数组ch中,正确的是: A、scanf(“%s”,ch) B、scanf(“%s”,&ch) C、ch=“Wan Ming” D、gets(ch)12. 执行语句printf(“%c”,td10+A)的结果是: A、A B、B C、D D、E13下列关于main()函数说法正确的是A、 C语言程序总是从main()开始执行 B、 C语言程序可以没有main()函数C、C语言程序可以包含多个main()函数,但必须在不同的模块中 D、C语言程序中main()函数不能有
5、形式参数14下列关于函数说法正确的是A、 C语言程序的函数内还可定义其他的函数B、 C语言程序的函数内不可再定义其他的函数C、 C语言程序的函数不能自己调用自己D、 C语言程序中只有同一源文件中的函数才能有调用与被调用关系15若#define squ(x) x*x 执行语句printf(“result=%d”,squ(i+j);结果为:A、result=36 B、36 C、result=11 D、1116. 若#define squ(x) (x)*(x) 执行语句printf(“result=%d”,squ(i+j);结果为:A、result=36 B、result=17 C、result=1
6、1 D、result=2517C语言对宏命令叙述正确的是A、 宏替换占用运行时间B、 编译程序对宏命令的处理是在对源程序中其它成分编译之前进行的C、 宏命令的处理是在程序执行时进行的D、 宏命令的处理是在程序连接时进行的18. 若执行语句a- =a+=a*=10;a的值为:A、0 B、-10 C、-100 D、10019若执行语句p=arr; printf(“%d”,*(p+i);输出结果为A、0 B、2 C、3 D、120若执行printf(“%s”,ch);结果为:A、abc B、abc C、abcd D、abc0d21.若对数组进行初始化:char carr =s,t,u,d,e,n,t
7、,barr =”student”;则正确的是A、carr与barr长度相同 B、carr比barr长C、carr与barr相同 D、carr比barr短22若有说明语句int (*p)N;则p是A、N个指向整型变量的指针 B、可指向有N个整型元素的一维数组的指针C、指向N个整型变量的函数指针 D、有N个指针元素的一维指针数组23若有说明语句int *f( );则函数f是A、f是一个指向整型变量的数组指针 B、f返回一个整型数据C、f是一个指向整型变量的函数指针 D、f 返回一个整型指针,指向函数本身24若函数f定义如下:void f(char *d, char *s) while ( *d+=
8、*s+);函数f的功能是:A、串比较 B、串复制 C、求串长 D、串反向25表达式100+a+a+x*z的值的数据类型为A、int B、float C、double D、char26若要动态申请一个double型内存单元,正确的语句是A、pd=double malloc(sizeof(double) B、pd=( * double)malloc(sizeof(double)C、pd=double * malloc(sizeof(double) D、pd=(double *)malloc(sizeof(double)27若要从键盘上输入67892到变量n中,正确的语句是A、scanf(“%lf”
9、,&n); B、scanf(“%ld ”,&n); C、scanf(“%lf ”,n); D、scanf(“%d ”,&n); 28判断字符变量c是否不为小写英文字母的正确表达式是A、a=c = a & c=zC、ac z D、cz 29下列每组表达式被执行后,结果完全等价的是A、 !(b= =0)与 !(!b ) B、b=(a=4,4*5) 与 b=a=4,4*5C、float(i/j) 与 float i/j D、0x0 & x=0|b=0)&(a0|b=0&b=0)&(a0&b0&(a*b036. 若x=y=z=1;表达式(x-|+y)&(z+)执行后,x,y,z的值分别为:A. 0,1
10、,1 B. 0,1,2 C. 0,2,1 D. 0,2,237.下列变量的初始化,不正确的是:A. int x,y=5; B. float x=y=3.5; C. char s=”a”; D. int a3=1,0,9;38. 可以代替while(x!=0)中的条件x!=0的是:A. x B. !x C. x=1 D. x!=139.有关函数参数,下列说法不正确的是:A. 实参和形参是不同的变量; B. 实参可以将数据传给形参;C. 形参可以将数据传给实参; D. 实参和形参必须个数相等,类型一致。40.为避免嵌套的条件语句if-else的二义性,C语言规定else与if的配对原则是:A. 同
11、一行上的未配对if B. 缩排位置相同的未配对if C. 它之前最近的未配对的if D. 它之后最近的未配对if41.对于一个二维数组,以下几种方法中,不能正确表示i行j列元素的是:A.tdij B. *(tdi+j) C. *(*(td+i)+j) D.*(td+i+j)42.下面语句段不是死循环的是:A. for(i=1;i+) B. k=0; s=s+i; do k+; while(k0); C. i=0; D. a=1; while(1) while(a5) continue; if(i=20) break; a+; 43.下列字符串中,可以用作变量名的是:A. _out2 B. 12
12、abc C. while D. stu&344. 表达式0a5和0a&aname=”Tan Jing” D. static char4=G,o,o,d二、程序理解题(指出程序执行的结果)1 #include main( ) int i,j,x=0;for (i=0;i2;i+) x+;for (j=0;j3;j+) if (j%2 ) continue; x+; x+; printf(“x=%dn”,x); 2. #include main( ) int k=0,j,x=0;while (k2) +x;for (j=0;j3;j+) if (j%2 ) break; x+; k+; +x; p
13、rintf(“x=%dn”,x); 3. #include main()int a=2,b=7,c=5;switch (a0)case 1:switch (b0) case 1: printf(“$”);break; case 2: printf(“!”); break; case 0: switch (c= =5) case 0: printf(“*”);break; case 1:printf(“#”);break; default: printf(“%”); default: printf(“&”); printf(“n”); 4. main() int i,sum=0; for (i=
14、1;i10) break; printf(“sum=%-5dn”,sum); 5. 若输入字符串program时,下列程序输出为: #include main() char str80;void prochar(char *str,char ch); scanf(“%s”,str); prochar(str,r); puts(str);void prochar(char *str,char ch) char *p; for (p=str;*p!=0;p+) if (*p=ch)*str=*p;(*str)+;str+; *str=0;6. #include #include main() in
15、t i,j,temp, d44=1,2,3,4,5,6,7,8,4,3,2,1,1,2,3,4;for (i=0;i4;i+) for (j=0;jdji) dji=dij; for (i=0;i4;i+) printf(n); for (j=0;j=i) printf(%6d,dij ) ; else printf(%6c, ) ; 7. #includemain() int k; printf(n); for (k=1;k10;k+) switch(k%2) case 0: printf(#);break; case 1: k+=2;printf(*); defalt: printf(n)
16、; 8 int d=1; fun(int p) static int d=5; d+=p; printf(f)%-4d,d); return (d); main() int a=3; printf(n(m)%d,fun(a*fun(d); 9. #include main()char a26=sun,moon; int j,i,len2; for(i=0;i2;i+) for (j=0;j6;j+) if (aij=0) leni=j;break; printf(%8s:%dn,ai,leni); 10. int x=2,y=4;f1(int x) x+;y+; printf(“f1:x=%d
17、,y=%dn”,x,y);f2(int *y) x+;(*y)+; printf(“f2:x=%d,y=%dn”,x,*y); main() int y=6; f1(x);f2(&y); printf(“main:x=%d,y=%d”,x,y);三、程序填空题1.从键盘输入两个整数,按由大到小输出,程序如下: main( ) int a,b; ; scanf(“%d,%d”,&a,&b); if ( ) swap( ); printf(“%d,%d”,a,b);void swap(int * x,int * y) ; t= *x; ; *y=t; 2.输入任意多个十进制正整数,将其对应的二进制
18、数的各位反序,形成新的十进制数输出。当输入0时程序结束。例如:输入13,131101101111,输出11。#include main() int x,y,m,t; printf(“Enter a integer:”);scanf(“%d”,&x);m=x;while ( ) y=0;do t=x%2; y= x=x/2; while ( );printf(“nOld integer is:%d,New integer is: %d”,m,y);printf(“Enter a integer:”);scanf(“%d”,&x); 3. 以下函数creatlist用来建立一个带头节点的单向链表,
19、新的结点总是插入在链表的末尾。链表的头指针作为函数值返回。读入时字符以#表示输入结束(#不存入链表)。struct node char data;struct node *next; creatlist()struct node *head,*s,*r;char ch;head=(struct node *)malloc(sizeof(struct node);r=head;ch=getchar(); while (ch!=# )s=(struct node *)malloc(sizeof(struct node); s-data= ;r-next=s; ch=getchar(); r-nex
20、t= ; ;4. 程序功能:输出10100之间的全部素数,每行显示5个。#include main() int i, j, for(i=11; i= i ) ;counter+;if( ) printf(n); 5. 求菲波那契数列第n项的值。n由键盘输入。菲波那契数列的第一、二项为1,以后各项为前两项之和。即:f1=f2=1,fn=fn-1+fn-2#include main() int k,n,f1,f2,f; scanf( ) ; f1=f2=1; if ( ) f=1 ; else for ( ;k=n;k+) f=f1+f2 ; f1=f2; ; printf(fibonacci n
21、umber=%dn,f); 6从键盘上输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。 #include main()int data,temp,k; static int a9=-10,2,4,8,10,15,25,50; printf(nEnter a data:); scanf(%d,&data); ; for (k=8; ;k- -) if (akak-1) ; ak=ak-1; ak-1=temp; else ; for (k=0; ;k+) printf(%7d,ak);7求1!+2!+9!+20!,程序如下: #include main() float sum=0;
22、 int k; for (k=1; ;k+) sum+=jiecheng(k);printf( ,sum);float jiecheng(int n) int j; for (j=1; ; j+) t=t*j; 8. 从键盘上输入一个整数字符串,将其转换为一个整数,如输入“-1234”转换为-1234。#include#includemain()char s6; int n; gets(s); if (*s=-) n= ; else n=chnum(s); printf(%dn,n); int chnum(char *p) int num=0,k,len,j; len=strlen(p); f
23、or (; ;p+) k= ; j=(-len); while (j-0) ; num=num+k; ; 9以下程序从键盘输入10个不相同的数到数组a中,再输入一个数到x中,在a中查找与x值相同的元素所在的位置,填空完善该程序。main()int a11,x,i; printf(Input 10 integers:n); for(i=1; ;i+) scanf(%d, ); printf(Input x:); scanf(%d,&x); *a=x;i=10; while (x!=*(a+i) if ( ) printf(%6ds position is :%3dn,x,i); else pri
24、ntf(%6d Not bee found !n,x); 10. 从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。 #include main()int i=0,c52=0,m=0; char str80; printf(Input a string:); scanf( ,str); while (stri) if (stri=A & ) cstri-A+; if (stri=a & stri =z) ; i+; for (i=0;i26;i+) if (ci) if (m%8=0) putchar(n);m+; printf(%c:%-d ,i+A
25、,ci); for (i=0;i26;i+) if (ci+26)if (m%8=0) putchar(n);m+; printf(%c:%-d , ,ci+26); 四、用波浪线标出错误,并在空白处改正(不要重写程序)1. 从键盘上输入一个数,判断其是否为素数#includemain() int a,flag,k; scanf(“%d”,a);flag=1; for (k=2;ki;k+)if (a/k=0) break;flag=0; if (flag=0); printf(“%d” is a prime number”,a);2. 计算分段函数的值 2-x 0x1 1+x 1x3 y=
26、2-0.5(x-3) 3x6 x2 6x10 #include main() float x,y; printf(Input a data:); scanf(%d,%x); if (x=10 ) printf(Input error!n); else if (0x1) y=2-x; else if (x3) y=1+1/2x; else if (x6) y=2-0.5*(x-3.0); if (x10) y=x2; printf(x=%.2f,y=%.1fn,x,y); 3. 计算下列分段函数的值 x 64x81 y= x+4 49x64 -1 25x490 其它#include main()
27、int x; y ; scanf(“%d”, x ); switch ( sqrt(x) ) case 8: y=fabs(x);break; case 7: y=2/3x+4;break; case 5,6:y=+1 ; default: y=0; printf(“y=%.2f”,&y); 4. 将“computer”按逆序显示,程序如下: #include main() char a=computer; void print(char *str) print(&a); void print(char *str) char *str ; int count ; if (*str!=0) while (*str) str+;count+; str - -; while(count- -)printf(%c, str);str+ ; 5求满足如下条件的最大自然数n.:12+22+32+n21000#include ;main()int n=s=0; while (s=1000); n+; s+=s+n*n; print