友情提示:本文共有 870 个字,阅读大概需要 2 分钟。
C语言程序设计
一、单项选择题
若以下各题所有库函数都可以合法使用,且变量定义如下:
int m=5, i=3,j=2,*p, a=8,b=0;
int arr[10]={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’,ch[20]={’a’,’b’,’c’,’ ’,’d’,’ ’};
struct student
{ int num;
char name[20];
float score;
struct student *next;
}st1,st2,*ps;
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.0↙
2. 以下不是死循环的语句是:
A for ( ; ;y+=i++);
B while(a) y+=i++ ;
C do{ y+=i++}while (a>0);
D for (b=0;(c=getchar()!=’n’);)b++;
3.若p=arr;正确的语句是:
A *p=arr[10]; B *p=arr[2*a];
C p=arr[5]; D p[i]=arr[0];
4.若ps=&st1;则下面描述正确的是:
A ps->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&&i 8.若执行语句 a=b+=3*j+(int)x;则b的值为: A 1 B 8 C 0 D 8.5 9. 若执行语句 a=b>j ?++i : i++;则a与i的值分别为: A 4 ,4 B 3 ,4 C 4 ,3 D 3 ,3 10.if (a8 aA x= B x= 1 a8 aC x= D x= 1 a≥b 1 a11.将字符串“Wan Ming”输入数组ch中,正确的是: A、scanf(“%s”,ch) B、scanf(“%s”,&ch) C、ch=“Wan Ming” D、gets(ch) 12. 执行语句printf(“%c”,td[1][0]+’A’)的结果是: A、A B、B C、D D、E 13.下列关于main()函数说法正确的是 A、 C语言程序总是从main()开始执行 B、 C语言程序可以没有main()函数 C、C语言程序可以包含多个main()函数,但必须在不同的模块中 D、C语言程序中main()函数不能有形式参数 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、11 16. 若#define squ(x) (x)*(x) 执行语句printf(“result=%d”,squ(i+j));结果为: A、result=36 B、result=17 C、result=11 D、result=25 17.C语言对宏命令叙述正确的是 A、 宏替换占用运行时间 B、 编译程序对宏命令的处理是在对源程序中其它成分编译之前进行的 C、 宏命令的处理是在程序执行时进行的 D、 宏命令的处理是在程序连接时进行的 18. 若执行语句a- =a+=a*=10;a的值为: A、0 B、-10 C、-100 D、100 19.若执行语句p=arr; printf(“%d”,*(p+i));输出结果为 A、0 B、2 C、3 D、1 20.若执行printf(“%s”,ch);结果为: A、’abc’ B、abc C、abcd D、abc d 21.若对数组进行初始化:char carr[ ]={’s’,’t’,’u’,’d’,’e’,’n’,’t’},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++=*s++); } 函数f的功能是: A、串比较 B、串复制 C、求串长D、串反向 25.表达式100+a+’a’+x*z的值的数据类型为 A、int B、float C、double D、char 26.若要动态申请一个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”,&n); B、scanf(“%ld ”,&n); C、scanf(“%lf ”,n); D、scanf(“%d ”,&n); 28.判断字符变量c是否不为小写英文字母的正确表达式是 A、’a’<=c <=’z’ B、c>= ‘a’ && c<=’z’ C、’a’≤c ≤’z’ D、c<’a’ || c>’z’ 29.下列每组表达式被执行后,结果完全等价的是 A、 !(b= =0)与 !(!b ) B、b=(a=4,4*5) 与 b=a=4,4*5 C、float(i/j) 与 float i/j D、0 30.表达式(m&1)==(m%2)的值是 A、 0 B、无法确定 C、 1 D、以上都不对 31.数学式ln2x+asin(60°)的C语言表达式是 A、log(2*x)+a*sin(60) B、ln(2*x) +a*sin(60/180*3.14) C、ln(2*x) +a*sin(60) D、log(2*x)+a*sin(3.14*60/180) 32. 要打开一个已经存在的非空文件file用于修改,则正确的语句是 A、fopen(“file”,”r+”) B、fopen(“file”,”w”) C、fopen(“file”,”a+”) D、fopen(“file”,”r”) 33. 若打开文件时发生错误,则fopen()函数的返回值是 A、1 B、0 C、不确定 D、没有返回值 34. 调用函数fseek(fp,-25L,2),其操作结果是 A、 文件位置指针从文件开始处前移25字节 B、文件位置指针从文件结尾处后移25字节 C、文件位置指针从文件当前位置处前移25字节 D、文件位置指针从文件当前位置处后移25字节 35. 能正确表示a和b同时为正或同时为负的逻辑表达式是 A、 (a>=0||b>=0)&&(a<0||b<0) B、 (a>=0&&b>=0)&&(a<0&&b<0) C、 (a*b>0&&(a*b<=0) D、 a*b>0 36. 若x=y=z=1;表达式(x--||++y)&&(z++)执行后,x,y,z的值分别为: A. 0,1,1 B. 0,1,2 C. 0,2,1 D. 0,2,2 37.下列变量的初始化,不正确的是: A. int x,y=5; B. float x=y=3.5; C. char s[]=”a”; D. int a[][3]={{1},{},{0,9}}; 38. 可以代替while(x!=0)中的条件x!=0的是: A. x B. !x C. x==1 D. x!=1 39.有关函数参数,下列说法不正确的是: A. 实参和形参是不同的变量; B. 实参可以将数据传给形参; C. 形参可以将数据传给实参; D. 实参和形参必须个数相等,类型一致。 40.为避免嵌套的条件语句if-else的二义性,C语言规定else与if的配对原则是: A. 同一行上的未配对if B. 缩排位置相同的未配对if C. 它之前最近的未配对的if D. 它之后最近的未配对if 41.对于一个二维数组,以下几种方法中,不能正确表示i行j列元素的是: A.td[i][j] B. *(td[i]+j) C. *(*(td+i)+j) D.*(td+i+j) 42.下面语句段不是死循环的是: A. for(i=1;;i++) B. k=0; s=s+i; do{ k++; }while(k>0); C. i=0; D. a=1; while(1) while(a<10) { i++; { if(a>5) continue; if(i==20) break; } a++; } 43.下列字符串中,可以用作变量名的是: A. _out2 B. 12abc C. while D. stu&3 44. 表达式0A. 0和0 B. 0和1 C. 1和0 D. 1和1 45.下列常数中,符合C语法规则的是: A. ‘’ B. .5e2 C. 018 D. e3 46.以下为合法的整型常量的是: A. 027a B. 0.0 C. 0x4e3 D. 3×102 47.以下为合法的整型常量的是: A. ‘3’ B. 281 C. 5af D. ‘101’ 48.以下为合法的实型常量的是: A. 1.5×102 B. 1e-5 C. 1e1.5 D. E+5 49.以下为合法的实型常量的是: A. π B. .5 C. 025.3 D. 0 50.以下为合法的字符型常量的是: A. "A" B. 64 C. '啊 ' D. 'n' 51. 以下为非法的字符型常量的是: A. ‘ok’ B. ‘*’ C. ‘A’ D.‘111’ 52. 以下为合法的变量定义的是: A. #define N 10 B. int a=12,b,c; float x,y,a=1.5; int a[3*N]; C. int m,f(x); D. char c,*pc=&c,n; 53.以下为非法的变量定义的是: A. char 21cn; B. int k=0,*p=&k; C. int a=b=c=21; D. static char[4]=”Good”; 54.以下是合法的表达式的是: A. y=mn B. (x+y)++ C. x+y=8 D. putchar('A ') 55. 以下是非法的表达式的是: A. a+=b*c B. i=0,k=k++ C. k==0 D. !a||m≤n &&7 56.下是非法赋值语句的是: A.a+b=0 B. pc=&x C. ps->name=”Tan Jing” D. static char[4]=’G’,’o’,’o’,’d’ 二、程序理解题(指出程序执行的结果) 1. #include main( ) { int i,j,x=0; for (i=0;i<2;i++) { x++; for (j=0;j<3;j++) { if (j%2 ) continue; x++; } x++; } printf(“x=%dn”,x); } 2. #include main( ) { int k=0,j,x=0; while (k<2) { ++x; for (j=0;j<3;j++) { if (j%2 ) break; x++; } k++; ++x; } printf(“x=%dn”,x); } 3. #include main() {int a=2,b=7,c=5; switch (a>0) {case 1:switch (b<0) { 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=1;i<=50;i++) { sum+=i; if (sum>10) break; printf(“sum=%-5dn”,sum); } } 5. 若输入字符串program时,下列程序输出为: #include main() { char str[80]; 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!=" ";p++) if (*p==ch){*str=*p;(*str)++;str++;} *str=" "; } 6. #include main() { int i,j,temp, d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}}; for (i=0;i<4;i++) for (j=0;jif (d[i][j]>d[j][i]) d[j][i]=d[i][j]; for (i=0;i<4;i++) { printf("n"); for (j=0;j<4;j++) if (j>=i) printf("%6d",d[i][j] ) ; else printf("%6c"," ") ; } } 7. #include main() { int k; printf("n"); for (k=1;k<10;k++) switch(k%2) {case 0: printf("#");break; case 1: k+=2;printf("*"); defalt: printf("n"); } } 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 {char a[2][6]={"sun","moon"}; int j,i,len[2]; for(i=0;i<2;i++) { for (j=0;j<6;j++) if (a[i][j]==" ") { len[i]=j; break; } printf("%8s:%dn",a[i],len[i]); } 10. int x=2,y=4; f1(int x) { x++;y++; printf(“f1:x=%d,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.输入任意多个十进制正整数,将其对应的二进制数的各位反序,形成新的十进制数输出。当输入0时程序结束。例如:输入13,13→1101→1011→11,输出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用来建立一个带头节点的单向链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回。读入时字符以#表示输入结束(#不存入链表)。 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->next= ; ; } 4. 程序功能:输出10~100之间的全部素数,每行显示5个。 #include main() { int i, j, for(i=11; i<=100; i+=2) { for(j=2; ; j++) if(i%j= =0) ; if( j >= 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 number=%dn",f); } 6.从键盘上输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。 #include main() {int data,temp,k; static int a[9]={-10,2,4,8,10,15,25,50}; printf("nEnter a data:"); scanf("%d",&data); ; for (k=8; ;k- -) if (a[k] ; a[k]=a[k-1]; a[k-1]=temp; } else ; for (k=0; ;k++) printf("%7d",a[k]); } 7.求1!+2!+…+9!+20!,程序如下: #include main() {float sum=0; 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 #include main() {char s[6]; 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); for (; ;p++) {k= ; j=(--len); while (j-->0) ; num=num+k; } ; } 9.以下程序从键盘输入10个不相同的数到数组a中,再输入一个数到x中,在a中查找与x值相同的元素所在的位置,填空完善该程序。 main() {int a[11],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("%6d"s position is :%3dn",x,i); else printf("%6d Not bee found !n",x); } 10. 从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。 #include {int i=0,c[52]={0},m=0; char str[80]; printf("Input a string:"); scanf( ,str); while (str[i]) { if (str[i]>="A" && ) c[str[i]-"A"]++; if (str[i]>="a" && str[i] <="z") ; i++; } for (i=0;i<26;i++) if (c[i]){ if (m%8==0) putchar("n");m++; printf("%c:%-d ",i+"A",c[i]); } for (i=0;i<26;i++) if (c[i+26]){if (m%8==0) putchar("n");m++; printf("%c:%-d ", ,c[i+26]); } } 四、用波浪线标出错误,并在空白处改正(不要重写程序) 1. 从键盘上输入一个数,判断其是否为素数 #include main() { int a,flag,k; scanf(“%d”,a);flag=1; for (k=2;kif (a/k=0) {break;flag=0;} if (flag=0); printf(“%d” is a prime number”,a); } 2. 计算分段函数的值 2-x 0≤x<1 1+ x 1≤x<3 y= 2-0.5(x-3) 3≤x<6 x2 6≤x<10 #include main() { float x,y; printf("Input a data:"); scanf("%d",%x); if (x<0 && x>=10 ) printf("Input error!n"); else { if (0≤x<1) y=2-x; else if (x<3) y=1+1/2x; else if (x<6) y=2-0.5*(x-3.0); if (x<10) y=x2; printf("x=%.2f,y=%.1fn",x,y); } } 3. 计算下列分段函数的值 x 64≤x<81 y= x+4 49≤x<64 -1 25≤x<49 0 其它 #include main() {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!=" ") { while (*str){ str++;count++;} str - -; while(count- -){printf("%c", str);str++ ;} } } 5.求满足如下条件的最大自然数n.:12+22+32+…+n2≤1000 #include main() {int n=s=0; while (s<=1000); { n++; s+=s+n*n; } print("n=%d",n ); }_ 五、编程题 1.从键盘上输入不超过50个非0数,计算这些数的平均值并输出,输出高于平均值的数。输入0时结束。 2.计算 1+++…+ 3. 回文是从前向后读与从后向前读都是一样的句子。编写一函数判断字符串是否为回文。字符串(少于80字符)从主函数中输入。 4. 公鸡5元一只,母鸡3元一只,小鸡一元3只,100元买100鸡,求有多少中买法并输出所有可能的买法,。 5.求1000以内的完全数。一个整数如果正好等于它的因子之和(自身除外),则称该数是完全数。如6=1+2+3,所以6是完全数。 6.用下面的公式求π的近似值,要求最后一项的绝对值小于10-4为止。 公式为:π/4≈1-1/3+1/5-1/7+1/9-1/11+… 题型题量及分值 一、选择题:在每小题给出的四个选项中,只有一项是符合题目要求的,请把所选项前的字母填在题后的括号内。 二、阅读程序,写出执行结果。 三、程序填空题。 四、程序改错题。用波浪线标出错误,在空白处改正(不得重写程序)。 五、编写程序。 参 考 答 案 一、单项选择题 1. A 2. D 3. D 4. D 5. B 6. B 7. D 8. B 9. B 10. A 11.D 12.D 13. A 14.B 15.C 16 .D 17.B 18. A 19.C 20.B 21. D 22. B 23 .C 24 B 25.C 26.D 27.B 28 D 29 A 30.C 31. D 32.A 33 . B 34. B 35. D 36.B 37.B 38.A 39.C 40.C 41.D 42. C 43. A 44.C 45.D 46.C 47.B 48.B 49.B 50.D 51. A 52. A 53.B 54. D 55. D 56.C 二、程序理解题(指出程序执行的结果) 1. x=8 2. 程序输出为:x=6 3. 程序输出为:#& 4. 程序输出为: sum=1 sum=3 sum=6 sum=10 5.当键盘输入program.时,下列程序的输出: pogam 6. 程序输出为: 1 5 4 4 6 7 8 2 3 4 7. 程序输出为: * #* #* 8. 程序输出为: (f)6 (f)24 (m)24 9 . sun:3 moon:4 10. f1:x=3 ,y=5 f2:x=3 ,y=7 main:x=3 ,y=7 三、程序填空题 1.void swap(int * x,int * y); a2.x!=0 、 y+2*t 、 x!=0 、 m=x; 3. 以下函数creatlist用来建立一个带头节点的单向链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回。读入时字符以#表示输入结束(#不存入链表)。 struct node {char data; struct node *next; }; struct node 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= ch ; r->next=s; r=s; ch=getchar(); } r->next= NULL ; return head; } 4. 输出10~100之间的全部素数,每行显示5个。 #include main() { int i, j, counter=0; for(i=11; i<=100; i+=2) { for(j=2; j< i; j++) if(i%j= =0) break; if( j >= i ) { printf("%8d",i); counter++; if(counter%5= =0) printf("n"); } } } 5. 求菲波那契数列第n项的值。n由键盘输入。菲波那契数列的第一、二项为1,以后各项为前两项之和。即:f1=f2=1,fn=fn-1+fn-2 #include main() { int k,n,f1,f2,f; scanf("%d",&n) ; f1=f2=1; if (n<=2) f=1 ; else for ( k=3;k<=n;k++) { f=f1+f2 ; f1=f2; f2=f; } printf("fibonacci number=%dn",f); } 6.从键盘上输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。