中国高校课件下载中心 》 教学资源 》 大学文库

《C语言程序设计》课程教学资源(讲义资料)考试知识点复习(C语言程序设计复习样题及部分解析)

文档信息
资源类别:文库
文档格式:DOC
文档页数:19
文件大小:146.5KB
团购合买:点击进入团购
内容简介
《C语言程序设计》课程教学资源(讲义资料)考试知识点复习(C语言程序设计复习样题及部分解析)
刷新页面文档预览

C语言程序设计复习样题及部分解析 选择题: ()以上叙述中错误的是 A)C语言编写的函数源程序,其文件名后缀可以是C B)C语言编写的函数都可以作为一个独立的源程序文件 C)C语言编写的每个函数都可以进行独立的编译并执行 D)一个C语言程序只能有一个主函数 (I)C【解析】C语言编写的某些函数是依附于主调函数而存在的,它不能独立编译并执行 的。 (2)若有定义语句:inta=10:double b=3.14,则表达式'A'+ab值的类型是 A).char B)int C)double D)float (2)C【解析】根据表达式运算规则,所有数据在混合运算中,一律向上一级换算原则。本 题最高级是双精度,所以最后表达式类型应是double。. (3)若有定义语句:intx=12,y-8zx:,在其后执行语句x0.9+xy:,则z的值为 A1.9B1 C)2 D)2.4 (3)B【解析】C语言对于表达式运算0.9+xy后的值是1.9,但给整型量z值,则去掉小 数为1。 (4)若有定义:inta,b;,通过语句scanf("%d%d",&a,&b,能把整数3赋给a,5赋给 b的输入数据是 A)35B)35C03:5 D)35 (4)C【解析】使用scanf函数时应注意的问题(2)规定:如果在格式控制字符串中除了格 式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符”,所 以选C。 (5i若有定义语句:imtk1=10,k2=20:,执行表达式k1=k1>k2&&(k2=k2>k1)后,k1和 k2的值分别为 A)0和1 B)0和20 C10和1D)10和20 (⑤B【解折】关于逻辑表达式运算规定(),ak&b&C,只要a为0,则不必判别b和c 若a为1才判别b:若b为0,则不必判别c。 现题目逻辑表达式左边(k1-k1>k2为0,右边不再判别,所以答案是a为0:b仍为原值20, 1/19

1 / 19 C 语言程序设计复习样题及部分解析 选择题: (1)以上叙述中错误的是_。 A)C 语言编写的函数源程序,其文件名后缀可以是 C B) C 语言编写的函数都可以作为一个独立的源程序文件 C) C 语言编写的每个函数都可以进行独立的编译并执行 D)一个 C 语言程序只能有一个主函数 (1)C 【解析】C 语言编写的某些函数是依附于主调函数而存在的,它不能独立编译并执行 的。 (2)若有定义语句:int a=10; double b=3.14;,则表达式'A'+a+b 值的类型是_。 A).char B)int C) double D)float (2)C 【解析】根据表达式运算规则,所有数据在混合运算中,一律向上一级换算原则。本 题最高级是双精度,所以最后表达式类型应是 double。 (3)若有定义语句:int x=12,y=8,z;,在其后执行语句 z=0.9+x/y;,则 z 的值为_。 A)1.9 B)1 C)2 D)2.4 (3)B 【解析】 C 语言对于表达式运算 0.9+x/y 后的值是 1.9,但给整型量 z 值,则去掉小 数为 1。 (4)若有定义:int a,b;,通过语句 scanf("%d;%d",&a,&b);,能把整数 3 赋给 a,5 赋给 b 的输入数据是_。 A)3 5 B)3,5 C)3;5 D)35 (4)C 【解析】 使用 scanf 函数时应注意的问题(2)规定:如果在格式控制字符串中除了格 式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符”,所 以选 C。 (5)i 若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1 和 k2 的值分别为_。 A)0 和 1 B)0 和 20 C)10 和 1 D)10 和 20 (5)B 【解析】 关于逻辑表达式运算规定(1),a&&b&&c,只要 a 为 0,则不必判别 b 和 c; 若 a 为 1 才判别 b;若 b 为 0,则不必判别 c。 现题目逻辑表达式左边(k1=k1>k2)为 0,右边不再判别,所以答案是 a 为 0;b 仍为原值 20

(6有以下程序 #include mainO inta=1,b=0; if(-a)b++; else if(a=0)b+2; else b+=3; printf("%dn",b片 程序运行后的输出结果是 A)0 B)1 C)2 D)3 (6C【解析】此题非常简单,变量a运算前自减1,变为0,所以只执行了b+=2语句就 输出为2。 (⑦)下列条件语句中,输出结果与其他语句不同的是 A)if(a)printf("%dn",x):else printf("%d\n"y); B)if(a=0)printf("%dIn",y);else printf("%din",x); C)if(a!=0)printf("%d\n"x); else printf("%dn",y); D)ia=0) printf("%dn");else printf("%dn"y); ()D【解析】当a为0时A逻辑判断值为0,输出yB)逻辑判断值为1,输出:O逻 辑判断值为0,输出yD)逻辑判断值a=0为1,输出x (8)有以下程序段 #include main( inta=7; while(a-); printf("%dn",a片 程序运行后的输出结果是 A-1B0C1D)7 2/19

2 / 19 (6)有以下程序 #include main() { int a=1,b=0; if(- -a) b++; else if(a==0) b+=2; else b+=3; printf("%d\n",b); } 程序运行后的输出结果是 A)0 B)1 C)2 D)3 (6)C 【解析】此题非常简单,变量 a 运算前自减 1,变为 0,所以只执行了 b+=2 语句就 输出为 2。 (7)下列条件语句中,输出结果与其他语句不同的是_。 A) if(a) printf("%d\n",x); else printf("%d\n",y); B) if(a==0) printf("%d\n",y); else printf("%d\n",x); C) if(a!=0) printf("%d\n",x); else printf("%d\n",y); D) if(a==0) printf("%d\n",x); else printf("%d\n",y); (7) D 【解析】当 a 为 0 时 A)逻辑判断值为 0,输出 y;B) 逻辑判断值为 1,输出 y;C) 逻 辑判断值为 0,输出 y;D) 逻辑判断值 a==0 为 1,输出 x (8)有以下程序段 #include main() { int a=7; while(a- -); printf("%d\n",a); } 程序运行后的输出结果是_。 A)-1 B)0 C)1 D)7

(⑧)A【解析】whil(是一句无执行句的循环语句,且变量a是变为0后跳出循环,并 且又自减1为-1。 (9)以下不能输出字符A的语句是 。(注:字符A的ASCI码值为65,字 符a的ASC1码值为97 A)printf("%cn",-32); B)printf("%dn",A'); C)printf("%cln",65); D)printf("%en",'B-1); (9)B【解析】输出字符取决于输出语句的格式说明符,显然)输出是数值65。 (10)有以下程序(注:字符a的ASCI码值为97) #include<stdio.h main() char *s={"abe"); do {printf("%d",s%1);+s)while(*s): 程序运行后的输出结果是 A)abe B)789C)7890D)979899 (10)B【解折】本题是考查学生能否区别“指针变量”与“指针变量的值”。前者是地址: 后者是指针变量所指地址内的量。此题指针变量s指向“字符审数组”的起始地址,★是。 指向的字符,例如,刚开始时s值为字符“a”,即数值97,+s后指针移向“b”,即数值 98,当s移向字符c后面一个字符为”0”,则其值为0,退出循环结束。 (I)若有定义语句:double,*p=&;以下叙述错误的是 A)定义语句:*号是一个简址运算符 B)定义语句:*号是一个说明符 C)定义语句中的p只能存放double类型变量的地址 D)定义语句中,*p=&a把变量a的地址作为初始值赋给指针变量p (山)A【解析】*号是一种、表示单目运算的指针运算符,简称“简接访问运算符 (12)有以下程序 #include<stdio.h double f(doublex); main() 3119

3 / 19 (8) A 【解析】while(a-);是一句无执行句的循环语句,且变量 a 是变为 0 后跳出循环,并 且又自减 1 为-1。 (9)以下不能输出字符 A 的语句是_。(注:字符 A 的 ASCII 码值为 65,字 符 a 的 ASCII 码值为 97) A) printf("%c\n",'a'-32); B) printf("%d\n",'A'); C) printf("%c\n",65); D) printf("%c\n",'B'-1); (9) B 【解析】输出字符取决于输出语句的格式说明符,显然 B)输出是数值 65。 (10)有以下程序(注:字符 a 的 ASCII 码值为 97) #include main() { char *s={"abc"}; do { printf("%d",*s%10); ++s; } while(*s); } 程序运行后的输出结果是_。 A)abc B)789 C)7890 D)979899 (10) B 【解析】本题是考查学生能否区别“指针变量”与“指针变量的值”。前者是地址; 后者是指针变量所指地址内的量。此题指针变量 s 指向“字符串数组”的起始地址,*s 是 s 指向的字符,例如,刚开始时*s 值为字符“a”,即数值 97,++s 后指针移向“b”,即数值 98,当 s 移向字符 c 后面一个字符为”\0”,则其值为 0,退出循环结束。 (11)若有定义语句:double a, *p=&a; 以下叙述错误的是_。 A)定义语句:*号是一个简址运算符 B)定义语句:*号是一个说明符 C)定义语句中的 p 只能存放 double 类型变量的地址 D) 定义语句中,*p=&a 把变量 a 的地址作为初始值赋给指针变量 p (11) A 【解析】*号是一种、表示单目运算的指针运算符,简称“简接访问运算符” (12)有以下程序 #include double f(double x); main()

double a=0;int i; for(i=0;i 4/19

4 / 19 { double a=0; int i; for(i=0;i

void fun(int*p) printf("%d\n",pl5): main() {inta101=f1,2,345,67,89,109 fun(&a[3J) 程序运行后的输出结果是 A)5B6C8D)9 (1⑤)D【解析】本题考核考核学生举握指针变量与数组之间关系,主函数将3地址传给 函数fum,此时函数fm中的p接收的是以首地址值为4的数组p,故5徽组元素值应 是9。 (16)有以下程序 #include #define N4 void fun(intalN),int b) inti; for(i=0:i<N;i++)bli]-ali]lil-ali][N-1-il; main( {int x(NIIN]=(1,23,4,5,6,7,8,9,10,11,12,{13,14,15,161yN, fun(x.y): for(i=0:iN:+)printf("%d"il):printf("n"); } 程序运行后的输出结果是 12-3,0.0,B-3,-1,1,3C90,1,2,3D3,-3,3,-3 (1OB【解折】由于函数调用采用数组名为首地址共享方式,只要判别b0、b31即可确 定答案:由函数fm中b000-x0314-3确定答案只有A和D:其次计算 b13引-33x3到0-16-13-3。由此可知答案是B。 (17)有以下函数 int fun(char *x,char *y) 5/19

5 / 19 void fun(int *p) { printf("%d\n",p[5]); } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]); } 程序运行后的输出结果是_。 A)5 B)6 C)8 D) 9 (15) D 【解析】本题考核考核学生掌握指针变量与数组之间关系,主函数将 a[3]地址传给 函数 fun,此时函数 fun 中的*p 接收的是以首地址值为 4 的数组 p[7],故 p[5]数组元素值应 是 9。 (16)有以下程序 #include #define N 4 void fun(int a[][N], int b[]) { int i; for(i=0;i<N;i++) b[i]=a[i][i]-a[i][N-1-i]; } main() { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i; fun(x,y); for(i=0;i<N;i++) printf("%d",y[i]); printf("\n"); } 程序运行后的输出结果是_。 A)-12,-3,0.0, B)-3,-1,1,3 C)0,1,2,3 D)-3,-3,-3,-3 (16) B 【解析】由于函数调用采用数组名为首地址共享方式,只要判别 b[0]、b[3]即可确 定答案:由函数 fun 中 b[0]=x[0][0]-x[0][3]=1-4=-3 确定答案只有 A 和 D;其次计算 b[3]=x[3][3]-x[3][0]=16-13=3。由此可知答案是 B。 (17)有以下函数 int fun(char *x, char *y)

intn-0: whil(*x=y)&&x=0'){x+;yH++ return n: 函数的功能是」 A)查找x和y所指字符串中有否有10 B)统计x和y所指字符串中最前面连续相同的字符个数 C)将y所指字符串中赋给x所指的存储空间 D)统计x和y所指字符串中相同的字符个数 (1)B【解析】循环执行只有在x和y所指字符串中最前面连续相同,并统计其个数(存 放在变量。中),一且不满足连续相同,则终止循环而函数返回相同个数, (I8)若有定义语句:char*s1="0K,s2="ok";,以下选项中,能够输出"OK"的语句 是 A)if(stremp(s1,s2)-0)puts(s1); B)if(stremp(s1,s2)!-0)puts(s2); C)if(stremp(s1,s2)=1)puts(s1);D)if(stremp(s1,s2)!=0)puts(s1); (I8)D【解析】字符串比较库函数stremp要求两个参数是地址和设置头文件include 。返回值:s1s2为"1"。且"0K" main() double a[15],k; k-fun(a); 则以下选项中错误的fun函数的首部是 A)double fun(double a15) B)double fun(double*a) 6/19

6 / 19 { int n=0; while((*x==*y)&&*x!= '\0') {x++; y++; n++;} return n; } 函数的功能是_。 A)查找 x 和 y 所指字符串中有否有'\0' B)统计 x 和 y 所指字符串中最前面连续相同的字符个数 C)将 y 所指字符串中赋给 x 所指的存储空间 D)统计 x 和 y 所指字符串中相同的字符个数 (17) B 【解析】循环执行只有在 x 和 y 所指字符串中最前面连续相同,并统计其个数(存 放在变量 n 中),一旦不满足连续相同,则终止循环而函数返回相同个数 n。 (18)若有定义语句:char *s1="OK", *s2="ok";,以下选项中,能够输出"OK"的语句 是_。 A) if(strcmp(s1,s2)==0) puts(s1); B) if(strcmp(s1,s2)!=0) puts(s2); C) if(strcmp(s1,s2)==1) puts(s1); D) if(strcmp(s1,s2)!=0) puts(s1); (18) D 【解析】字符串比较库函数 strcmp 要求两个参数是地址和设置头文件#include 。返回值:s1s2 为"1"。且"OK"s2 或 s1 ∶ main() { double a[15], k; k=fun(a); ∶ } 则以下选项中错误的 fun 函数的首部是_。 A) double fun( double a[15]) B) double fun( double *a)

C)double fun(doubleal) D)double fun(doublea) (19)D【解析】函数调用时要求数组地址共享,达到数据返回的目的。要求主函数实参用 数组名;被调函数的形参用A)doublea1S、B)double*、C)doublea均为合法。D形式 参数是只进不出变量。 (20)有以下程序 #include #include main() {chara"china","beijing","you","tiananmen","welcome" intij;char 1:啡 for(i-0:i) {(strepy(ta:)strepy((a间,ajD:strepy((ajl,ti片 puts(a 3): 程序运行后的输出结果是 A)beijing B)china C)welcome D)tiananmen (20)C【解析】这是一个字符串升序排列程序,最后排成沈序为: beijing china tiananmen welcome you并存放在字符串数组a5中。 puts(a3:输出为C)welcome (21)有以下程序 #include int f(int m) staticint n=0; n十=m: return n main() intn-0; 7119

7 / 19 C) double fun( double a[]) D) double fun( double a) (19) D 【解析】函数调用时要求数组地址共享,达到数据返回的目的。要求主函数实参用 数组名;被调函数的形参用 A) double a[15]、B) double *a、C) double a[]均为合法。D)形式 参数是只进不出变量 a。 (20)有以下程序 #include #include main() { char a[5][10]={ "china","beijing","you","tiananmen","welcome"}; int i,j; char t[10]; for(i=0;i0) {strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[j],t);} puts(a[3]); } 程序运行后的输出结果是_。 A)beijing B)china C)welcome D)tiananmen (20) C 【解析】这是一个字符串升序排列程序,最后排成次序为: beijing china tiananmen welcome you 并存放在字符串数组 a[5]中。 puts(a[3]);输出为 C)welcome (21)有以下程序 #include int f(int m) { static int n=0; n+=m; return n; } main() { int n=0;

printf("%d,",f(+》 printf("%d\n"f(n++)); 程序运行后的输出结果是 A1,2B1,1C92,3 D)3,3 (2山A【解析】所有函数中变量初始值为随机数,但含有sa的变量属于静态变量,初 始值为·,且主调函数调用后不释放,再次调用时能在上次调用后值的基础上,再次参加运 算。所以主函数第一次调用显示“1,”,第二次调用,由于+,所以显示为1+1-2。 (22)有以下程序 #include #include void fun(char *w.int m) chars,*pl,*p2; p1=w;p2=w+m-1; while(pl<p2)(s=*pl;*pl=*p2;*p2=s;pl++;p2-;) main( {charal="123456' fun(a,strlen(a)): puts(a)防 8/19

8 / 19 printf("%d,",f (++n)); printf("%d\n",f (n++)); } 程序运行后的输出结果是_。 A)1,2 B)1,1 C)2,3 D)3,3 (21) A 【解析】所有函数中变量初始值为随机数,但含有 static 的变量属于静态变量,初 始值为 0,且主调函数调用后不释放,再次调用时能在上次调用后值的基础上,再次参加运 算。所以主函数第一次调用显示“1,”,第二次调用,由于 n++,所以显示为 1+1=2。 (22)有以下程序 #include main() { char ch[3][5]={ "AAAA","BBB","CC"}; printf("%s\n",ch[1]); } 程序运行后的输出结果是_。 A)AAAA B)CC C)BBBCC D)BBB (22)D 【解析】对于字符串二维数组,每一个字符串,均可用一维数组来表示。即 ch[0] 表示 AAAA;ch[1]表示 BBB;ch[2]表示 CC。 (23)有以下程序 #include #include void fun(char *w, int m) { char s, *p1, *p2; p1=w; p2=w+m-1; while(p1<p2) {s=*p1; *p1=*p2; *p2=s; p1++; p2-;} } main() { char a[]="123456"; fun(a,strlen(a)); puts(a); }

程序运行后的输出结果是 A)654321 B)116611C)161616D)123456 (23)小【解析】被调函数是一个将共享地址的字符串变量倒序重排后返回的通用函数。第 一次=pl;*p1=*p2;p2=g是:w数组,亦即a数组变为623451. (24)有以下程序 #include #include typedef struct (char name char sex;int score2:)STU: STU f(STUa) {STUb="Zhao",'m',85,90: inti; strepy(a.name,b.name): a.sex-b.sex; for(:i<2:i++)a.score[i]-b.scorei] mainO {STUc-"0ian",',95,92,d d=f(c); printf("%,%%d,%d"d.name,d.sex,d.scorel,d.score1); printf("%s,%c,%d,%dn"c.name,c.sex,c.scorelol.c.scorel11): 程序运行后的输出结果是」 A)Zha0,m,85,90,Qian,f,95.92 B)Zha0,m,85,90,Zha0,m,85,90 C)Qian,f95,92,Qian,f95,92 D)Qian,f95,92,Zha0,m,85,90 (24)A【解析】STU是用户用typedef自定义的结构体类型。调用函数是将 "Zha0”,'m',85,90)返回给自定义结构体变量d山但是自定义结构体变量 c("Qian",',95,92,d:)并未改变 9119

9 / 19 程序运行后的输出结果是_。 A)654321 B)116611 C)161616 D)123456 (23)A 【解析】被调函数是一个将共享地址的字符串变量倒序重排后返回的通用函数。第 一次 s=*p1; *p1=*p2; *p2=s;是:w 数组,亦即 a 数组变为 623451. (24) 有以下程序 #include #include typedef struct {char name[9]; char sex; int score[2]; } STU; STU f(STU a) { STU b={"Zhao",'m',85,90}; int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i<2;i++) a.score[i]=b. score[i]; return a; } main() { STU c={"Qian",'f',95,92}, d; d=f(c); printf("%s,%c,%d,%d,",d.name, d.sex, d.score[0], d.score[1]); printf("%s,%c,%d,%d\n",c.name, c.sex, c.score[0], c.score[1]); } 程序运行后的输出结果是_。 A) Zhao,m,85,90,Qian,f,95,92 B) Zhao,m,85,90, Zhao,m,85,90 C) Qian,f,95,92, Qian,f,95,92 D) Qian,f,95,92, Zhao,m,85,90 (24)A 【解析】STU 是用户用 typedef 自定义的结构体类型。调用函数是将 {"Zhao",'m',85,90}返回给自定义结构体变量 d;但是自定义结构体变量 c({"Qian",'f',95,92}, d;)并未改变

(25)有以下程序 #include mainO FILE*fp: int k.n,ia61-12,34,5,6: fp-fopen("d2.dat","w"); for(i=0:i main() inta-37; a%=9;printf("%dIn",a); 10/19

10 / 19 (25)有以下程序 #include main() { FILE *fp; int k,n,i,a[6]={1,2,3,4,5,6}; fp=fopen("d2.dat","w"); for(i=0;i main() { int a=37; a%=9; printf("%d\n",a);

共19页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档