收藏 分销(赏)

c语言复习题解答2.doc

上传人:xrp****65 文档编号:5972327 上传时间:2024-11-24 格式:DOC 页数:14 大小:130KB 下载积分:10 金币
下载 相关 举报
c语言复习题解答2.doc_第1页
第1页 / 共14页
c语言复习题解答2.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
C语言程序设计练习题 题型 单选题 程序填空 程序运行结果 程序改错 编程 总分 分值 2*20=40 2*10=20 2*5=10 3*5=15 6+9=15 100 考生注意:所有答案均要填写在答题卡上否则不得分数! 一、单项选择题 1、下列转义字符中,错误的是(C)。 转义字符可以用八进制表示 \ddd, 0<=d<8 A.′\n′  B.′\\′ C.′\108′  D.′\xbb′ 2、以下选项中正确的实型常数是___D____。小于1的实数小数点前的0可以省略 A、12.f   B、 3.1415 (后有空) C、1,000   D、 .876 3、在C语言中,整型常量的书写形式不包括(A)。 A.二进制  B.八进制 C.十进制  D.十六进制 4、在C语言程序中,主函数的摆放位置(D )。 A.必须置于所有函数之首  B.必须置于所有函数之尾 C.不得置于所有函数之尾  D.任意 5、 以下选项中不合法的用户标识符是____A___。标识符只能是字母、下划线、数字 A、 abc.c   B、 file C、 Main   D、 PRINTF 6、 C 语言中运算对象必须是整型的运算符是____A____。 A、 %   B、 / C、 !   D、 * 7、 以下叙述中正确的是____A_____。 A、 a 是实型变量,C 允许进行赋值 a = 10,但不可以这样说:实型变量中允许存放整型值 B、 在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式 C、 执行表达式 a = b 后,在内存中 a 和 b 存储单元中的原有值都将被改变,a 的值已由原值改变为 b 的值,b 的值由原值变为0 D、 已有 a = 3, b = 5,当执行表达式 a = b, b = a 之后,使 a 中的值为5,b 中的值为3 8、以下叙述中正确的是____A______。 A、C 程序中各函数之间既允许直接递归调用,也允许间接递归调用 B、C 程序中各函数之间不允许直接递归调用,也不允许间接递归调用 C、C 程序中各函数之间允许直接递归调用,不允许间接递归调用 D、C 程序中各函数之间不允许直接递归调用,允许间接递归调用 9、 若 a、b、c、d 都是 int 型变量且初值为0,以下选项中不正确的赋值语句是____C______。 A、 a = b = c = 100;   B、 d++; C、 c + b=a+d;   D、 d = (c = 22) - (b++); 10、设有如下定义:char *aa[2]={“abcd”,“ABCD”};则以下说法中正确的是( C    )。 A aa数组成元素的值分别是“abcd”和ABCD“ B aa是指针变量,它指向含有两个数组元素的字符型一维数组 C aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D aa数组的两个元素中各自存放了字符‘a’和‘A’的地址 11、 若变量已正确定义为 int 型,要给 a、b、c 输入数据,正确的输入语句是___D_______。 A、 read(a, b, c);    B、 scanf("%d%d%d", a, b, c); C、 scanf("%D%D%D", &a, &b, &c);    D、 scanf("%d%d%d", &a, &b, &c); 12、 若有以下程序段: int c1 = 1, c2 = 2, c3; c3 = c1 / c2; printf("%d\n", c3); 执行后的输出结果是____A______。 A、 0   B、 1/2 C、 0.5   D、 1 13、 为表示关系:x≥y≥z,应使用的 C 语言表达式是_____A_____。 A、 (x >= y) && (y >= z)   B、 (x >= y) AND (y >= z) C、 (x >= y >= z)   D、 (x >= y) & (y >= z) 14、定义如下变量和数组: int i, x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句   for(i=0;i<3;i++) printf(“%d”,x[i][2-i]); 的输出结果是(  C   ) A、1  5  9   B、 1  4  7    C、3  5  7    D、 3  6  9 15、 设有定义:char str[] = "ABCD", *p = str; 则语句 printf("%d\n", *(p + 4)); 的输出结果是____B______。 A、 68   B、 0 (“ABCD”后面自动加上一个字符’\0’,ASCII值为0) C、 字符 D 的地址   D、 不确定的值 16.字符数组初始化错误的是(D )。 A. static char word [ ]=″Turbo″; B. static char word [ ]={″Turbo″}; C. static char word [ ]={′T′,′u′,′r′,′b′,′o′,′\0′}; D. static char word [ ]=′Turbo\0′; 17、 有以下定义: struct person { char name[9]; int age;}; struct person class[10] = {"John", 17, "Paul", 19, "Mary", 18, "Adam", 16}; 则下面能输出字母 M 的语句是____D______。 A、 printf("%c\n", class[3].name);   B、 printf("%c\n", class[3].name[1]); C、 printf("%c\n", class[2].name[1]);   D、 printf("%c\n", class[2].name[0]); 18、 C 语言中,字符(char)型数据在微机内存中的存储形式是____D______。 A、 反码   B、 补码 C、 DBCDIC 码   D、 ASCII 码 19、 C 语言中,下列不合法的字符常量是___D_____。 A、 '\xff'   B、 '\65' C、 '&'   D、 '\028' 20、 已定义了以下函数 fff(float x) { printf("%d\n", x * x);} 该函数的类型是___C_____。 函数没有声明类型为int型 A、 与参数 x 的类型相同   B、 void 类型 C、 int 类型   D、 无法确定 21、有以下程序: #include <stdio.h> #define N 2 定义N=2 #define M N + 1 M=2+1=3 #define NUM (M + 1) * M /2 NUM=(3+1)*3/2=6 void main() 用#define也可定义函数 { int i; for (i = 1; i < NUM; i++); printf("%d\n", i);} 程序运行后的结果是____B______。 A、 5   B、 6 C、 8   D、 9 22、 若有定义:int x, *pb; 则正确的赋值表达式是___A_____。 A、 pb = &x   B、 pb = x C、 *pb = &x   D、 *pb = *x 23、若已定义:int a[9], *p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为( C    )。 A、p+1    B、 a+1    C、 a++     D、 ++p a是固定的,不能做a++运算 24、设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( B    )。   A、P+i*2   B、P+(i-1)*2   C、P+(i-1)  D、P+i 25、 若有以下程序: void main() { int k = 2, m = 4, n =6, *pk = &k, *pm = &m, *p; *(p = &n) = *pk * (*pm); printf("%d\n", n);} 程序的输出结果是_____C_____。 A、 4   B、 6 C、 8   D、 10 27、 若指针 p 已正确定义并指向如下图所示存储单元: a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50 p↑ 则表达式 *++p 的值是_____B_____。 A、 20   B、 30 C、 21   D、31 27、 语句 printf("%d\n", strlen("ATS\n012\1\\")); 的输出结果是__C____。\n,\1,\\均为转义字符算一个 A、 11   B、 10 C、 9   D、 8 28、 若已定义: int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = a, i; 其中0≤i≤9,则对 a 数组元素的引用不正确的是 ( D) *是取地址的值的运算 A、 a[p - a]   B、 *(&a[i]) C、 p[i]   D、 *(*(a + i)) 29、设FILE *fp; char ch; , 则从fp所指向文件中读入一个字符,正确的语句是(B )。 A.fgetc(ch, fp);  B.ch=fgetc(fp); C.getchar(ch);  D.fgetc(fp,ch); 30、 有以下程序: 通过#define预定义函数 宏定义 #include <stdio.h> FUDGF(y)=2.84+y 返回整型数 7 #define FUDGF(y) 2.84 + y PR(a)输出a a=12 #define PR(a) printf("%d", (int)(a)) PRINT1(a) 调用PR(a) 输出换行符 #define PRINT1(a) PR(a); putchar('\n') 本题属于C语言预处理的内容,如要详细 void main() 了解,请学习预处理部分 { int x = 2; PRINT1(FUDGF(5) * x);} 程序运行后的结果是___B_____。 A、 11   B、 12 C、 13   D、 15 二、程序填空 1、从键盘上输入10个数,求其平均值。   main()   {int i;   float f,sum;   for(i=1,sum=0.0;i<11;i++)   { ___________【1】________________; scanf(“%f”,&f)    ____________【2】_________________; sum=sum+f   }   printf(“average=%f\n”,sum/10);   } 2、输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。 #include <stdio.h> #include <string.h> #define ARR_SIZE 80 main() { char str[ARR_SIZE]; int len, i, letter=0, digit=0, space=0, others=0; gets(str); for (i=0; 【1】 ; i++) str[i]!=’\0’ { if ( 【2】 ) (str[i]>=65&&str[i]<=80)|| (str[i]>=97&&str[i]<=122) letter ++; else if ( 【3】 ) (str[i]>=48&&str[i]<=57) digit ++; else if ( 【4】 ) str[i]=’ ‘; space ++; else others ++; } printf("English character: %d\n", letter); printf("digit character: %d\n", digit); printf("space: %d\n", space); printf("other character: %d\n", others); } 3、将从键盘输入的字符串逆序显示。 #include <string. h> main() {int n; char str[80], *p; printf(″Input a string:″); gets(str);/*输入字符串*/ n=strlen(___【1】_____); /* 第一空 */ str p=str+___【2】_____-1; /* 第二空 */ n while (p>=str) {printf(″%c″, *p); ____【3】____; /* 第三空 */ p-- } printf(″/n″); } 4、不用函数strcat(),编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符串dstStr的尾部。 #include <stdio.h> #include <string.h> main() { void MyStrcat(char dstStr[], char srcStr[]); char s[80], t[80]; printf("Please enter source string: "); gets(s); printf("Please enter destination string: "); gets(t); MyStrcat(s,t); printf("The concatenate string is: "); puts(s); } void MyStrcat(char dstStr[], char srcStr[]) { int i = 0, j; while (dstStr[i] != '\0') { 【1】 ; i++ /*起到目标串尾 */ } for (j=0; 【2】 ; j++, i++) srcStr[j]!=’\0’ { 【3】 ; dstStr[i]=srcStr[j] } 【4】 = '\0'; dstStr[i] } 5、给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。 main() { int i,j,row=0,colum=0,max; static int a[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}}; 【1】 ; max=a[0][0] for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) { 【2】 ; max=a[i][j] row=i; coum=j; } printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); } 三、读程序,写出运行结果 1、int x=6,y=7;   printf(“%d,”,x++);printf(“%d\n”,++y);   程序的输出结果是__6,8___. 2、#include ”stdio.h” func(int b[]) { int j; for(j=0;j<4;j++) b[j]=j; } main() { int a[4],k; func(a); for(k=0;k<4;k++) printf(“%d\n”,a[k]); } 上述程序运行的结果: 0 1 2 3 3、float f=3.1415927;   printf(“%f,%5.4f,%3.3f”,f,f,f);   则程序的输出结果是__3.141593,3.1416,3.142___. 4、#include ”stdio.h” void fun() { static int a=5; a++; printf(“a=%d\n”,a); } main() { int m; for(m=0;m<=1;m++) fun(); } 上述程序运行的结果: a=6 a=7 5、#include "stdio.h" union mix { char c; float f;int i; }; main(){ union mix x,*p=&x; *(float *)p=3.110; printf("%f",x.f); *(int *)p=50; printf("%d",x.i); } 上述程序运行的结果: 3.11000050 /* 输出没有分隔符 */ 6、#include "stdio.h" void test(int *x,int*y); void main() { int a=10,b=20; printf(“a=%d,b=%d\n”,a,b); test(&a,&b); printf(“a=%d,b=%d\n”,a,b); } void test(int *x,int*y){ int t; t=*x;*x=*y;*y=t; } 上述程序运行的结果: a=10,b=20 a=20,b=10 7、#include <stdio.h> main() { int i, j, m; int a[2][5] = {1,20,32,14,5,62,87,38,9,10}; m = a[0][0]; for (i=0; i<2; i++) for (j=0; j<5; j++) if( m<a[i][j] ) m = a[i][j]; printf(“m = %d\n”, m); } 上述程序运行的结果: m=87 /*求大值*/ 8、struct date { int year; int month; int day; }; void func(struct date *p) { p->year = 2000; p->month = 5; p->day = 22; } main() { struct date d; d.year = 1999; d.month = 4; d.day = 23; printf(“%d,%d,%d\n”,d.year, d.month, d.day); func(&d); printf(“%d,%d,%d\n”,d.year, d.month, d.day); } 上述程序运行的结果: 1999,4,23 2000,5,22 9、#include<stdio.h> void fun1(int x) { x=20; } void fun2(int b[4]) { int j; for(j=0; j<4; j++) b[j]=j; } main() { int x = 10; int a[4] = {1,2,3,4}, k; fun1(x); printf("x = %d\n", x); fun2(a); for(k=0; k<4; k++) printf("%d\n", a[k]); } 上述程序运行的结果: x=10 0 1 2 3 10、main()   {int a,b;   for (a=1,b=1;a<=100;a++)   { if(b>=20)  break;   if(b%3==1)   {b+=3;continue;}   b-=5;}  }   程序的输出结果a的值为__7____. 11、main() { int i=10; switch(i){ case 9: i+=1; case 10: i+=1; case 11: i+=1; default : i+=1; } printf(“%d”,i); } 上述程序运行的结果: 13 12、a=3;   a+=(a<1)?a:1; printf(“%d”,a);   结果是__4____. 13、 #include<stdio.h> int s(); int x,y; main() { int n; x=1;y=2 n=s(); printf(“x=%d,y=%d,n=%d\n”,x,y,n); } int s(); { int z; x=3;y=4; z=x+y; return(z); } 上述程序运行的结果: x=3,y=4,n=7 14、#include "stdio.h"    #include "string.h"   main()   { char *s1="engraft",*s2="engrave"; while(*s1++==*s2++);    printf("%d",strcmp(s1,s2)); } 上述程序运行的结果: 大于0的整数 /*当s1,s2指向a时,条件仍成立,继续指向f和v,条件不成立,但此时s1,s2再次指向下一位 t>e 结果得到大于0的整数 15、main( )   { int a[5]={2,4,6,8,10},*P,* *k;   p=a;  k=&p;   printf(“%d,”,*(p++));   printf(“%d\n”,* *k);   程序的输出结果是__2,4____. 四、程序改错题 在下面给出的5个程序中,共有10处错误,请找出其中的错误,并改正之。注意不得增行或删行,也不得更改程序的结构;多找、少找、找错、改错均不得分! 1、程序的功能是:程序中函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 #include <stdio.h> void fun(char *s, int a, double f) { file *fp; FILE *fp; char ch; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", s, a, f); fclose(fp); fp = fopen("file1.txt", "r"); printf("\nThe result :\n\n"); ch = fgetc(fp); while (!feof(fp)) { putchar(fp); ch = fgetc(fp); } putchar(ch);ch=fgetc(fp); putchar('\n'); fclose(fp); } main() { char a[10]="Hello!"; int b=12345; double c= 98.76; fun(&a,&b,&c); fun(a,b,c); } 2、 下面的程序是求500以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。 程序: #include <conio.h> #include <stdio.h> #include <math.h> int prime(int n) { int yes, i; if(n<=1) {return 1;} yes=1; for(i=2; i<=sqrt(n); i++) if(n%i==0){ yes=0; continue;} ***① {yes=0;break;} return 1; ***② return yes; } main() { int sum=0, i; clrscr(); for(i=2;i<=500; i++) if(prime(i)) sum+=i; printf("%d\n", sum); } 3、序是求[1,450]之间同时满足除3余2和除5余3条件的数的个数。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。 程序: #include <conio.h> #include <stdio.h> #include <math.h> main() { int count; int i; count=0; for (i=1;i<=450;i++) { if (fmod(i,3)==2 && fmod(i,5)==3) count+=i; ***① count++; } clrscr(); printf("%ld\n",count); ***② printf(“%d\n”,count); } 4、24有8个因子,而24正好被8整除。下面程序求[50,250]之间有多少个整数能被其因子的个数整除,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。 程序: #include <conio.h> #include <stdio.h> #include <math.h> main() { int a,b,c,n,count=0; for (a=50; a<=250; a++) { b=0; for (c=1;c<=a;c++) if (a%c ==0 ) b+=c; ***① b++; if (a%b==0) { count=count+a; ***② count++; } } printf("\n count = %d",count); } 5、程序的功能是:输入一个整数k(2≤k≤10000),打印出它的所有质因子(即所有为素数的因子)。 #include <conio.h> #include <stdio.h> IsPrime(int n); { int i, m; m = 1; for (i=2; i<n; i++) if !(n%i) if(n%i==0) { m = 0; break; } return(m); } main() { int j, k; printf("\nplease enter an integer number between 2 and 10000:"); scanf("%d", &k); printf("\n\nThe prime factor(s) of %d is(are):", k); for (j=2; j<k; j++) if ((!(k%j)) && (IsPrime(j))) printf(" %4d,", j); printf("\n");} 五、程序设计题 1、求1!+3!+5!+7!+…+19!的和。 long tm=1,sum=0; int i,j; for(i=1;i<=19;i+=2) {tm=1; for(j=1;j<=i;j++) tm=tm*j; sum=sum+tm;} printf(“totle=%d\n”,sum); 2、从键盘输入某学生的成绩(0≤score≤100)后,先输出该同学的成绩,再按下列条件 输出 int score; printf(“please input the score\n”); do scanf(“%d”,&score); while(score<0||score>100); if(score>=80)printf(“%d Good\n”,score); else if(score>=60)printf(“%d Pass\n”,score); else printf(“%d No pass\n”,score); 3、试编程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。 int i,k; for(i=1;i<=99;i++) if(i<10)k=i*i%10; else k=i*i%100; if(i==k)printf(“%4d”,i); 1 5 6 25 76 4、用选择法或者冒泡法对10个整数排序(从大到小)。 (选择算法) int s[10]={4,8,7,2,5,9,0,1,3,6}; int i,j,k,t; for(i=0;i<9;i++) {k=i; for(j=i+1;j<10;j++) if(s[j]>s[k])k=j; t=s[k];s[k]=sk[i];s[i]=t;} (冒泡算法) int s[10]={4,8,7,2,5,9,0,1,3,6}; int i,j,t; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(s[j]<s[j+1]) {t=s[j];s[j]=sk[j+1];s[j+1]=t;} 第14 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服