c语言复习题及参考答案
更新时间:2024-04-26 14:40:01 阅读量: 综合文库 文档下载
《C语言程序设计》复习题
第一、二章
一、单项选择题
1、下列符号中,不可以作为变量名的是_________。 A、 _var B、VAR10 C、varx D、2def 2、运算符&&代表 。
A、按位与 B、逻辑与 C、逻辑或 D、按位取反 3、下列字符串为标识符的是__ ___。
A、_1_A B、5_student C、long D、!DF 4、下列属于字符型常量的是 。 A、‘AA‘ B、―B‖ C、?\\a‘ D、‘\\x93L‘ 5、表达式18/4*sqrt(4.0)/8值的数据类型为____________. A、 int B、 double C、 char D、不确定
6、设有单精度变量f,其值为13.4执行语句―n=((int)f%3;‖后,n的值是 。 A、1 B、4 C、4.333333 D、4.6
7、为表示关系x≥y≥z,正确的C语言表达式是 。
A、(x>=y)&&(y>=z) B、(x>=y) AND (y>=z) C、(x>=y>=z) D、(x>=z)&(y>=z) 8、运算符||代表 。
A、按位或 B、逻辑或 C、按位异或 D、按位取反 9、若k为int型变量且赋值11,则k++表达式的值为 。 A、10 B、11 C、12 D、13
10、下列四组选项中,均是合法转义符的选项是 。
A、?\\‖‘ ?\\\\‘ ?\\n‘ B、?\\‘ ?\\017‘ ?\\‖‘ C、?\\018‘ ?\\f‘ ?xab‘ D、?\\\\0‘ ?\\101‘ ?xlf‘ 11、下列不正确的字符常量是 。
A、―C‖ B、?\\‖‘ C、?‘ D、?K‘
12、用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将 。 A、生成可执行目标文件 B、生成目标文件 C、输出运行结果 D、自动保存源文件 13、下列说法中错误的是 。
A、主函数可以分为两个部分:主函数说明部分和主函数体 B、主函数可以调用任何非主函数的其他函数 C、任何非主函数可以调用其他任何非主函数 D、程序可以从任何非主函数开始执行
14、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为 。 A、算术运算、赋值运算、关系运算 B、算术运算、关系运算、赋值运算 C、关系运算、赋值运算、算术运算 D、关系运算、算术运算、赋值运算 15、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A‘+‘6‘-?3‘;后 c2中的值是 。
A、C B、D C、68 D、不确定的值 16、字符串\在内存占用的字节数是 。
- 1 -
A、3 B、4 C、 6 D、8
17、设a=1,b=2,c=3,d=4,则表达式:a
A、C语言程序是由过程和函数组成的 B、C语言函数可以嵌套调用,例如:fun(fun(x)) C、C语言函数不可以单独编译
D、C语言中除了main函数,其他函数不可作为单独文件形式存在 19、以下叙述不正确的是 。 A、在C程序中,逗号运算符的优先级最低 B、在C程序中,MAX和max是两个不同的变量
C、若a和b类型相同,在计算了赋值表达式a=b后,b中的值不变
D、当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
20、整型常量不能使用的形式是 。
A、二进制 B、八进制 C、十进制 D、十六进制
21、C语言源程序的扩展名为 ,连接后生成文件的扩展名为 。 A、.C B、.EXE C、.OBJ D、.COM 二、填空题
1、C语言程序是由 组成,其中主函数的名字必须用 。 2、C语言程序总是从 开始执行。
3、一个函数包含 和 两大部分,包含在 中的内容称为函数体。 4、C语言程序的上机步骤分为 、 、 和 四步。 5、注释部分以 开始,以 结束。
6、在32位系统中,C语言的int型数据占个 字节,float型数据占 个字节,double型数据占 字节,char型数据占个 字节。 7、将x定义为整型变量的语句是 。 8、将lg定义为长整型变量的语句是 。 9、将cg定义为字符型变量的语句是 。
10、与x3+3x3y+3xy2+y3对应的C语言表达式是___________________。
11、表达式3.5+1/2的计算结果是 。
12、C语言的基本数据类型有___ ___、____ __和___ __。 13、表达式x=x+1表示成增量表达式为 。
第三章
一、单项选择题
1、putchar函数可以向终端输出一个 。
A、整型变量表达式 B、实型变量值 C、字符串 D、字符或字符型变量值 2、printf函数中用到格式符%5s。如果字符串长度大于5,则输出按方式 ;如果字符串长度小于5,则输出按方式 。
- 2 -
A、从左起输出该字符串,右补空格 B、按原字符长从左向右全部输出 C、右对齐输出该字符串,左补空格 D、输出错误信息
3、 阅读以下程序,当输入数据的形式为:25,13,10
scanf(―%d%d%d‖,&x,&y,&z); printf(―x+y+z=%d\\n‖,x+y+z); }
A、x+y+z=48 B、x+y+z=35 C、48 D、不确定值
4、根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为 。 void main( ) { char ch1,ch2,ch3; 输入语句
printf(―%c % %c‖,ch1,ch2,ch3); }
输入形式:ABC 输出形式:ABC
A、scanf(―%c%c%c‖,&ch1,&ch2,&ch3); B、scanf(―%c,%c,%c‖,&ch1,&ch2,&ch3); C、scanf(―%c %c %c‖,&ch1,&ch2,&ch3); D、scanf(―%c%c‖,&ch1,&ch2,&ch3); 5、已知ch是字符型变量,下面不正确的赋值语句是 。
A、ch=?a‘+‘b‘; B、ch=?\\0‘; C、ch=?7‘+?9‘; D、ch=‖aa‖; 6、以下关于结构化程序设计的叙述正确的是 。
A、一个结构化程序必须同时由顺序、分支、循环三种结构组成 B、结构化程序使用goto语句会很便捷
C、在C语言中,程序的模块化是利用函数实现的 D、由三种基本结构构成的程序只能解决小规模的问题 7、有以下程序 #include
scanf(―%d%c%d%c‖,&a1,&c1,&a2,&c2); printf(―%d,%c,%d,%c‖,a1,c1,a2,c2); }
若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b,则正确的输入格式是 。(以下_代表空格,
A、12a34b
- 3 -
printf(\}
A、2 B、4 C、10 D、11
9、执行以下语句后,显示结果为 。
x=19; printf(―%x‖,x);
A、13 B、19 C、23 D、执行错误 10、执行以下语句:显示结果为 。 x=97; printf(―%c‖,x);
A、97 B、a C、A D、执行错误 二、程序填空题
1、从键盘上输入一个字符,如果是大写字母,则将其转换成小写字母后输出。 #include
scanf(―%c‖, );
ch=( )?ch+32:ch; printf(―char=%c\\n‖,ch); }
2、从键盘分别为变量x和y输入整数,交换它们的值后输出。 #include
scanf(―%d%d‖,&x,&y); z=x;
; y=z;
printf(―x=%d,y=%d‖,x,y); }
三、程序改错题,下面程序片段可能只有一个错,也可能有一个以上的错。 1、void main() {float a1=123.456; printf(―%d‖,a1); }
( )改为:( ) 2、printf(―请输入三个数x1,x2,x3:‖); scanf(―%f%f%f‖,x1,x2,x3);
( )改为:( ) 3、k=-8567; printf(―m\\n‖,k);
- 4 -
( )改为:( )
四、编程题。
1、从键盘输入一个四位数,把该整数颠倒过来输出(例如1234变成4321)。 2、写一个程序,从键盘输入两个整数,然后输出这两个数的和、差、积、商。
3、将―China‖译成密码。加密规则是:用原来的字母后面的第4个字母代替原来的字母(提示:设5个字符型变量,存放5个字符,经运算使各ASCII码增4,再输出)。
第四章
一、单项选择题。
1、逻辑运算符两侧运算对象的数据类型 。
A、只能是0和1 B、只能是0或非0正数 C、只能是整型或字符型数据 D、可以是任何类型的数据 2、判断char型变量ch是否为大写字母的正确表达式是 。 A、?A‘<=ch<=?Z‘ B、(ch>=?A‘)&(ch<=?Z‘) C、(ch>=?A‘)&&(ch<=?Z‘) D、(?A‘<= ch)AND(?Z‘>= ch)
3、若希望当A的值为奇数时,表达式的值为―真‖,A的值为偶数时,表达式的值为―假‖。则以下不能满足要求的表达式是 。
A、 A%2==1 B、!(A%2==0) C、!(A%2) D、A%2
4、设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为 。 A、1 B、2 C、0 D、4 5 、以下程序的运行结果是 。
void main( ) {int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf(―%d,%d‖,a,b); }
A、2,0 B、2,1 C、6,0 D、6,1
6 、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 。
if(x>y) z=x; x=y; y=z;
A、x=10, y=20, z=30 B、x=20, y=30, z=30 C、x=20, y=30, z=10 D、x=20, y=30, z=20 7、以下程序的运行结果是 。
void main( ) {int m=5; if(m++>5)
printf(―%d\\n‖,m); else;
printf(―%d\\n‖,m--);}
A、4 B、5 C、6 D、7
8 、若运行时给变量x输入12,则以下程序的运行结果是 。
- 5 -
void main( ) {int x,y; scanf(―%d‖,&x); y=x>12 ? x+10 : x-12; printf(―%d\\n‖,y); }
A、0 B、2 C、3 D、4
9、if语句的基本形式是:if(表达式) 语句,以下关于―表达式‖值的叙述正确的是 。 A、必须是逻辑值 B、必须是整数值 C、必须是正数 D、可以是任意合法的数值 10、有以下程序
#include
b++; else if(a==0)
if(a) b+=2; else b+=3;
printf(―%d\\n‖,b); }
程序运行后的输出结果是。 A、0 B、1 C、2 D、3
11、有以下程序,程序运行后的输出结果是 。
#include
printf(―%d\\n‖,c) }
A、3 B、5 C、7 D、9
12、有如下程序, 该程序的输出结果是_______。 void main( ) { int x=1,a=0,b=0; switch(x)
{ case 0: b++;
- 6 -
case 1: a++; case 2: a++;b++; }
printf(\\n\); }
A、a=2,b=1 B、a=1,b=1 C、a=1,b=0 D、a=2,b=2 13、 若运行时给变量x输入12,则以下程序的运行结果是_____。
void main() {int x,y;
scanf(\%d\
y=x>12?x+10:x-12; printf(\);}
A、0 B、10 C、12 D、22
14、若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是_____。
A、a=a+b,b=a-b,a=a-b; B、t=a,a=b,b=t; C、a=t; t=b; b=a; D、t=b;b=a;a=t; 15、下面程序的运行结果是。
void main( ) {int x=4,y=5;
if ((x>y)&&(++x>0)) printf(―%d‖,x+y); printf(―%d‖,x); }
A、9 4 B、4 C、5 D、10 5 16、以下程序执行后的显示结果为 。 {int n=3 , m=6 ; if (n > 4 && m ++ < 10)
m++;
printf(―m = %d\\n‖,m); }
A、6 B、7 C、8 D、9 二、填空题。
1、执行if(x||!x) printf(‖ABC‖);else printf(‖XYZ‖);屏幕上显示的是______________。 2、执行下列语句后,显示结果为 。 x=0; if(x=0)
printf(―yes‖); else
printf(―no‖);
3、switch语句中,使用break语句,作用是 。 三、程序填空题
- 7 -
1、下面程序判断输入一个整数是否能被3或7整除,若能整除输出―YES‖,若不能整除,输出―NO‖。 void main( ) {int k;
printf(―请输入一个整数:‖); scanf(―%d‖,&k); if printf(―YES\\n‖); else
printf(―NO\\n‖); }
2、下列程序根据菜单选择完成相关操作。 void main() {int x,y,n;
printf(―请输入第一个整数:‖);scanf(―%d‖,&x); printf(―请输入第二个整数:‖);scanf(―%d‖,&y);
printf(―请输入你的选择1-加法、2-减法、3-乘法、4-除法scanf(―%d‖, ); switch(n)
{ case 1:printf(―和为:%d\\n‖,x+y);break; case 2:printf(―差为:%d\\n‖,x-y);break; case 3:printf(―积为:%d\\n‖,x*y);break; case 4:printf(―商为:%d\\n‖,x/y);break; :printf(―选择有误!\\n‖); } }
四、程序改错题
1、输入一个整数,判断其奇偶性。 #include
printf(―请输入一个整数:‖); scanf(―%f‖,x); if(x%2=0)
printf(―是一个偶数!\\n‖);
else
printf(―是一个奇数!\\n‖);
}
( )改为:( ( )改为:(
- 8 -
‖); ) )
2、输入一个整数,判断其是否能被3整除。 #include
printf(―请输入一个整数:‖); scanf(―%f‖,x); y=x%3; switch(y)
{ case 0:printf(―能被3整除!\\n‖); case 1,2:printf(―不能被3整除!\\n‖); } }
( )改为:( ) ( )改为:( ) ( )改为:( ) 五、编程题
1、编程:输入整数x,计算并输出下列分段函数f(x)的值。
y=
x 2x-1 3x-11
(x<1) (1<=x<10)
(x>=10)
2、编程:输入两个整数,再输入两个数相加的和,由程序判断输入的和是否正确。 3、编程:把百分制成绩转换成5级记分制,要求用switch语句。
90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E 如:Input Score: 86 86的等级为B
4、用switch语句编程,输入2005年的任一个月,输出这个月的天数。
如:Input month of 2005: 10 2005年10月有31天
5 、给出一个不多于5位的正整数,要求:
(1)求出它是几位数; (2)分别输出每一位数字;
(3)按逆序输出各位数字,例如原数为321,应输出123
第五章
一、单项选择题
- 9 -
1、有如下程序,该程序的输出结果是_______。
void main( ) {int n=9;
while(n>6){n--; printf(\);} }
A、876 B、987 C、8765 D、9876 2、continue语句的正确的用法是 。
A、跳过该循环体中剩余的语句而强行开始下一次循环。 B、在多重循环中,只能退出最靠近的那一层循环语句。 C、跳出多重循环。
D、无论在任何情况下,都中断程序的执行,退出到系统下一层。 3、有以下程序段,则下面的描述正确的是 。 int k=0;
while(k=0) k=k-1;
A、while循环执行10次 B、循环是无限循环 C、循环体语句一次也不执行 D、循环体语句执行一次 4、C语言中whi1e和do-while循环的主要区别是___ __。 A、do-while的循环体至少无条件执行一次
B、while的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内 D、do-while的循环体不能是复合语句 5、有以下程序,则以下叙述正确的是_______。
int t=0; while (t=1) {...}
A、循环控制表达式的值为0 B、循环控制表达式的值为1 C、循环控制表达式不合法 D、以上说法都不对 6、语句 while(!E); 中的表达式 !E 等价于 ________。 A、E==0 B、E!=1 C、E!=0 D、E==1 7、下面程序段的运行结果是 _,循环次数为 。 int n=0; while(n++<=2);
printf(\
A、2 B、3 C、4 D、有语法错 8、下面程序的运行结果是 。
#include
printf(\
- 10 -
} }
A、1 B、1 C、1 D、 1 2 2 2 3 3
4
9、以下程序段 ________。
x=-1; do{x=x*x; } while(!x);
A、是死循环 B、循环执行二次 C、循环执行一次 D、 有语法错误 10、有如下程序段,则程序段_ _____。
int x=3;
do{printf(\
A、输出的是 1 B、输出的是 1 和 -2 C、输出的是 3 和 0 D、是死循环 11、下面程序的运行结果是 _ ___。 #include
void main( ) { int y=10;
do{y--;} while(--y); printf(\; }
A、-1 B、0 C、1 D、8
12、若i 为整型变量,则以下循环执行次数是 _____。
for(i=2;i==0;) printf(\
A、无限次 B、0 次 C、1 次 D、2 次 13、执行语句 for(i=1;i++<4; ); 后变量 i 的值是______。
A、3 B、4 C、5 D、 不定 14、以下正确的描述是 _______.
A、continue 语句的作用是结束整个循环的执行 B、只能在循环体内和 switch 语句体内使用 break 语句
C、在循环体内使用 break 语句或 continue 语句的作用相同 D、从多层循环嵌套中退出时,只能使用 goto 语句 15、有以下程序,程序运行后的输出结果是______。 void main() { char b,c; int i; b='a'; c='A'; for(i=0;i<6;i++) { if(i%2) putchar(i+b); else putchar(i+c); }
printf(\ }
- 11 -
A、ABCDEF B、AbCdEf C、aBcDeF D、abcdef 二、程序填空题:
1、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。
void main( ) { float x,amax,amin; scanf(―%f‖,&x); amax=x;amin=x; while( ) { if(x>amax) amax=x; if( ) amin=x; scanf(―%f‖,&x); }
printf(―\\namax=%f\\namin=%f\\n‖,amax,amin); }
2、下列程序打印如下形式的图形。
* * * * * * * * * *
void main( )
{ for(int i=1;i<=4;i++)
{ for(int j=1; ;j++) printf( ); printf( ); } }
3、下列程序求100之内的自然数中偶数之和。
#include
{if (i%2==0) ; ; }
printf(―s=%d\\n‖,s ); }
4、下面程序的功能是:输出 100以内(不包含100)能被 3整除且个位数为 6的所有整数,请填空。
- 12 -
#include<stdio.h> void main() { int i, j;
for(i=1; ; i++)
if ( )
printf(\;
}
5、下列程序打印如下形式的图形
* * * * * * * * * *
void main( )
{ for(int i=1;i<=4;i++)
{ for(int j=1; ;j++) printf( ); printf( ); } }
6、 下面程序段是从键盘输入的字符中统计数字字符的个数, 用换行符结束循环。 int n=0,c; c=getchar( ); while( ) {
if( ) n++; c=getchar(); }
7、下面程序的功能是用 \辗转相除法\求两个正整数的最大公约数。 #include
scanf(\ if(m while(r){m=n;n=r;r= _ ;} printf(\ } 三、程序改错题 1、以下程序是输入一个整数,分别将其逆向输出。如-321的逆向是-123 - 13 - 源程序(有错误的程序) #include scanf(―%d‖, n); int m,y; y=0; if(n<0) m=n; else m=-n; while (m==0) { y=y*10+m/10; m=m; } if(n>=0) y= –y; printf(―%d的逆向是%d\\n‖,n,y); } ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 2、输入正整数的个数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 #include printf(―输入正整数的个数n:‖); scanf(―%d‖,&n); printf(―输入%d个正整数\\n‖,n); for(j=0;j printf(―%d是一个素数!\\n‖,m); else printf(―%d不是一个素数!\\n‖,m); - 14 - } } ( )改为:( ) ( )改为:( ) ( )改为:( ) 四、编程题 1、编程:输入一批非零整数,先输出其中的偶数和及奇数和,然后输出偶数和与奇数和的差。 如:输入一批整数,以零结束:10 11 20 33 0 偶数和为:30 奇数和为:44 偶数和与奇数和的差为:-14 2、编程,输入1个正实数eps,计算并输出下式的值,直到最后一项的绝对值小于eps。 s?1?11111?????...59131721 如:Input eps:0.00001 S = 0.866978 3、编程,输入1个实数x,计算并输出下式的值,直到最后一项小于10-5。在math.h中定义的标准函数pow(x,y),可以求x的y次方。 x2x4x6s?1????...2!4!6! 如:X=2 S=3.762195 4、编程,输入一个整数,求它的各位数字之和及位数。例如123的各位数字之和是6,位数是3。 如:输入一个整数:-12345 -12345有5位数,各位数字之和是15 5、打印出所有的―水仙花数‖,所谓―水仙花数‖是指一个三位数,其各位数字立方和等于该数本身。如153是一个水仙花数,因为153=13+53+33。 6、编程,输出101-115之间不能被3整除的数,每行输出5个。要求使用continue语句。 如: 101 103 104 106 107 109 110 112 113 115 7、编程,找出200以内的所有完数,所谓完数是指这个数如恰好等于它的因子之和,如6是完数,因为6=1+2+3。 8、有一个分数序列,2/1,3/2,5/3,8/5,13/8,21/13……求出这个数列的前20项之和。 9、输出以下图案 - 15 - * ** *** **** ***** 第六章 一、单项选择题 1、在下面的一维数组定义中,_______有语法错误。 A、int a[ ]={1,2,3}; B、int a[10]={0}; C、 int a[]; D、int a[5]; 2、调用函数strlen(―abcd\\tef\\ng‖)的返回值是 。 A、4 B、6 C、7 D、9 3、设有数组定义: char array[]=\, 则数组 array所占的空间为 个字节。 A、4 B、5节 C、6 D、7 4、要使字符串变量str具有初值\正确的定义语句是__ _。 A、char str[8]={'A','B','C','D','E','F','G','H'}; B、char str[8]=\ C、char str[]={'A','B','C','D','E','F','G','H'}; D、char str[]=\ 5、设有数组定义:char array[]=‖good‖; ,则数组所占的空间是________个字节。 A、4 B、5 C、6 D、7 6、以下能正确进行字符串赋值的是 。 A、char s[5]={?a‘,‘e‘,‘I‘,‘o‘,‘u‘}; B、char s[5];s=‖good‖; C、char s[5]=‖abcd‖; D、 char s[5];s[]=‖good‖; 7、下列语句中, 是合法的数组定义。 A、int a[]={―string‖}; B、int a[5]={0,1,2,3,4,5}; C、char a={―string‖}; D、char a[]={0,1,2,3,4,5} 8、有以下程序: void main( ) { char p[]={?a‘,‘b‘,‘c‘},q[]=‖abc‖; printf(―%d %d‖,sizeof(p),sizeof(q)); } 程序运行后的输出结果是( )。 A、3 3 B、3 4 C、4 3 D、4 4 9、下列说法正确的是 。 A、在2000,2001,2002…2007这几个连续的地址单元中可存放8个数据。 B、在2000,2001,2002…2007这几个连续的地址单元中可存放8个字符。 C、在2000,2001,2002…2007这几个连续的地址单元中可存放字符串‖ABCDEFGH‖。 D、在2000,2001,2002…2007这几个连续的地址单元中可存放8个整数。 10、有定义:char ch,s[30]; int a,b;,下列输入语句正确的是_______。 - 16 - A、scanf(―%d%f‖,&a,&b); C、scanf(―%c%s‖,&ch,s); B、scanf(―%s%c‖,&s,&ch); D、scanf(―%d%c‖,a,ch); 11、以下为一维整型数组a的正确定义是_________.。 A、int a(10); B、int n=10,a[n]; C、int n; D、#define SIZE 10 scanf(\ int a[n]; 12、以下对二维数组a的正确定义是 ________。 A、int a[3][]; B、 float a(3,4); C、double a[1][4] D、 float a(3)(4); 13、若二维数组a有m列,则计算任一元素a[i][j] 在数组中位置的公式为 。(假设a[0][0]位于数组的第一个位置上。) A、i*m+j B、j*m+i C、 i*m+j-1 D、i*m+j+1 14、若二维数组a有m列,则在 a[i][j]前的元素个数为 ________。 A、j*m+i B、i*m+j C、i*m+j-1 D、i*m+j+1 15、有两个字符数组a、b,则以下正确的输入语句是_______。 A、gets(a,b); B、scanf(\ C、scanf(\ D、 gets(\ 16、下面程序段的运行结果是 _________。 char a[7]=\ char b[4]=\ strcpy(a,b) ; printf(\ A、空格 B、\\0 C、e D、f 17、判断字符串s1是否大于字符串s2,应当使用_______。 A、if(s1>s2) B、if(strcmp(s1,s2)) C、if(strcmp(s2,s1)>0) D、if(strcmp(s1,s2)>0) 18、下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分 隔,请选择填空。 #include { char s[80],c1,c2=' '; int i=0,num=0; gets(s); while(s[i]!='\\0') {c1=s[i]; if(i==0) c2=' '; else c2=s[i-1]; if(_ _) num++; i++; - 17 - } printf(\ } A、c1==' '&&c2==' ' B、c1!=' '&&c2==' ' C、c1==' '&&c2!=' ' D、c1!=' '&&c2!=' ' 19、下面程序的运行结果是_______。 #include {char str[]=\ int k; for(k=2;(c=str[k])!='\\0';k++) {switch (c) {case 'I':++k;break; case 'L':continue; default:putchar(c);continue; } putchar('*'); } } A、 SSW* B、 SW* C、 SW*A D、 SW 20、设char str[100];int i=5;,则引用数组元素的错误形式是 。 A、str[i + 10] B、(str + i) C、(str + i - 1) D、 ((str + + ) + i) 二、填空题 1、已知数组b定义为int b[]={9,6,3}; ,则数组b的最小下标是 ___, 最大下标是 ___。 2、已知数组e定义为int e[][4]={{1,2,3,4},{5,6,7,8}};,则e是一个 行 列的二维 数组,总共有 个元素,最大行下标是 ,最大列下标是 。 3、C语言中,数组名是一个 常量,不能对它进行赋值运算。 4、二维数组的元素在内存中按 存放。 5、C语言中,数组元素的下标下限为 。 6、设char string[] =―This_is_a_book!‖;,则数组的长度应是________________ 。 三、程序填空题 1、输入一个字符串,将其中所有的小写字符变成―*‖字符。 #include char str[80]; int i; printf(―请输入一个字符串:‖); scanf(―%s‖, ); for (i=0;str[i];i++) - 18 - if( ) str[i]=‘*‘; printf(―变换后的字符串为%s\\n‖, ); } 2、下面程序以每行4个数据的形式输出a数组,请填空。 #define N 20 void main( ) {int a[N],i; for(i=0;i scanf(\ __); for(i=0;i printf( ); printf(\ ); } printf(\ } 3、下面程序可求出矩阵a的主对角线上的元素之和,请填空。 void main( ) {int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(__ _) sum=sum+_ _; printf(\ } 四、程序改错题 1、输入一个正整数n(0 源程序(有错误的程序) #include printf(―输入数据的个数n:‖); scanf(―%d‖,&n); printf(―输入%d个整数:‖,n); for(i=0;i printf(―输入要插入的整数:‖); scanf(―%d‖,&x); - 19 - for(i=0;i a[i]=x; break; } if(i==n) a[n]=x; for(i=0;i ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 2、输入一个以回车结束的字符串(少于80个字符),将它的内容颠倒过来再输出。如‖ABCD‖颠倒为‖DCBA‖。 #include printf(―input a string:‖); i=0; while((str[i]=getchar())==‘\\n‘) i++; str[i]=‘\\0‘; k=i; for(i=0;i for(i=0;str[i]!=‘\\0‘;i++) putchar(str[i]); } ( )改为:( ) - 20 - ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 五、编程题 1、输出以下杨辉三角形(要示输出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2、编程,输入一个n行m列(n<=4,m<=4)的数组,先以n行m列的格式输出该数组,然后找出该数组中值最小的元素,输出该元素及其行下标和列下标。 输入输出示例: 输入数组行和列数n、m:2 3 输入2行3列的数组元素: 12 -7 15 -18 9 11 12.00 -7.00 15.00 -18.00 9.00 11.00 a[1][0]=-18.00 3、编程,输入一个以回车结束的字符串(少于80个字符),先输出其中的小写英文字母、空格和感叹号!,然后统计这些字符的个数。 4、编程,输入一个字符ch和一个以回车符结束的字符串(少于80个字符),统计字符串中与ch相同的字母个数。 如:输入一个字符:o 输入一个字符串:Studio Classroom 在字符串中与o相同的字母有3个! 5、编一程序,将两个字符串连接起来,不要用strcat函数。 6、编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数。复制时,‘\\0‘也要复制过去。‘\\0‘后面的字符不复制。 7、任意输入20个整数,计算正数的个数和正数的和。 第七章 一、单项选择题 1、以下关于函数的叙述中正确的是 。 A、每个函数都可以被其它函数调用(包括main函数) B、每个函数都可以被单独编译 C、每个函数都可以单独运行 - 21 - D、在一个函数内部可以定义另一个函数 2、设函数 fun 的定义形式为: void fun(char ch, float x ) { ……} , 则以下对函数 fun 的调用语句中,正确的是 。 A、 fun(\ B、 t=fun('D',16.5); C、 fun('65',2.8); D、 fun(32,32); 3、有以下程序,程序运行后的输出结果是 。 int f1(int x,int y) {return x>y?x:y;} int f2(int x,int y) {return x>y?y:x;} void main( ) { int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d)); g=a+b+c+d-e-f; printf(\ } A、2,5,7 B、3,4,7 C、4,3,7 D、5,2,7 4、有以下程序,程序运行后的输出结果是 。 #define P 3 #define F(int x) { return (P*x*x);} void main( ) { printf(\} A、25 B、29 C、192 D、编译出错 5、若程序中定义了以下函数 double myadd(double a,double b) { return (a+b); } 并将其放在调用语句之后,则在调用之前应该对该函数进行说明, 以下选项中错误的说明是 。 A、 double myadd(double a,b) ; B、 double myadd(double,double); C、 double myadd(double b,double a); D、 double myadd(double x,double y); 6、有以下程序,程序的执行结果是 。 char fun(char x , char y) { if(x return x; return y; } void main( ) { int a=‘9‘,b=‘8‘,c=‘7‘; printf(―%c \\n‖,fun(fun(a,b) ,fun(b,c) )); } - 22 - A、7 B、8 C、9 D、函数调用出错 7、 有以下程序,执行后输出结果是 。 void f(int v , int w) { int t; t=v;v=w;w=t; } void main( ) { int x=1,y=3,z=2; if(x>y) f(x,y); else if(y>z) f(y,z); else f(x,z); printf(―%d,%d,%d \\ n‖,x,y,z); } A、1,2,3 B、1,3,2 C、2,3,1 D、3,1,2 8、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 。 A、 调用可以作为独立的语句存在 B、调用可以作为一个函数的实参 C、调用可以出现在表达式中 D、调用可以作为一个函数的形参 9、 有函数定义:void fun( int n, double x) {……} ,若以下选项中的变量都已正确定义并赋值,则对函数 fun 的正确调用语句是 。 A、fun(int y,double m); B、k=fun(10,12.5); C、fun(x,n); D、 void fun(n,x); 10、有以下程序,程序运行后的输出结果是 。 fun(int a, int b) { if(a>b) return(a); else return(b); } void main( ) { int x=3, y=8, z=6, r; r=fun (fun(x,y), 2*z); printf(\ } A、3 B、6 C、8 D、12 11、在一个 C 程序中, 。 A、main 函数必须出现在所有函数之前 B、main 函数可以在任何地方出现 C、main 函数必须出现在所有函数之后 D、main 函数必须出现在固定位置 - 23 - 12、在函数内,定义变量时存储类型符可省略的是 。 A、auto B、 static C、extern D、register 13、有如下程序,执行后输出结果是 void f(int x,int y) { int t; if(x { t=x; x=y; y=t; } } voidmain( ) { int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c); printf(\ } 。 A、3,4,5 B、4,3,5 C、 5,3,4 D、5,4,3 14、C 语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是 。 A、void B、 int C、float D、double 15、有以下程序,程序运行后的输出结果是 。 float fun(int x,int y) { return(x+y); } void main( ) { int a=2,b=5,c=8; printf(―%3.0f \\ n‖,fun((int)fun(a+c,b),a-c)); } A、9 B、9.0 C、21 D、编译出错 16、若有以下程序,则以下叙述中不正确的是 。 #include { void f(int n); f(5); } void f(int n) { printf(\ A、若只在主函数中对函数 f 进行说明,则只能在主函数中正确调用函数 f B、若在主函数前对函数 f 进行说明,则在主函数和其后的其它函数中都可以正确调用函数f C、对于以上程序,编译时系统会提示出错信息:提示对 f 函数重复说明 D、函数 f 无返回值,所以可用 void 将其类型定义为无值型 17、以下函数值的类型是 。 fun ( float x ) { float y; y= 3*x-4; return y; } A、int B、 不确定 C、void D、float 18、以下所列的各函数首部中,正确的是 。 - 24 - A、void play(var :Integer,var b:Integer) B、void play(int a,b) C、void play(int a,int b) D、Sub play(a as integer,b as integer) 19、以下程序的输出结果是 。 fun(int x, int y, int z) { z=x*x+y*y; } void main() { int a=31; fun(5,2,a); printf(―%d‖,a); } A、0 B、29 C、31 D、无定值 20、有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是 。 A、3 B、4 C、5 D、有语法错 21、有如下程序,该程序的输出的结果是 。 int func(int a,int b) { return(a+b);} void main( ) { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(―% \\d\\ n‖,r); } A、12 B、13 C、14 D、15 22、以下叙述中不正确的是 。 A、在不同的函数中可以使用相同名字的变量 B、函数中的形式参数是局部变量 C、在一个函数内定义的变量只在本函数范围内有效 D、在一个函数内的复合语句中定义的变量在本函数范围内有效 23、有以下程序,输出结果是 。 viod fun (int a,int b,int c) { a=456; b=567; c=678;} viod main( ) { int x=10, y=20,z=30; fun (x,y,z); printf(\ } A、10,20,30 B、30,20,10 C、 456,567,678 D、 678,567,456 24、有以下程序,输出结果是 。 # include \ int abc(int u,intv); void main ( ) - 25 - { int a=24,b=16,c; c=abc(a,b); printf('%d\\n\ } int abc(int u,int v) { int w; while(v) { w=u%v; u=v; v=w } return u; } A、6 B、7 C、8 D、9 25、以下说法中正确的是 。 A、C语言程序总是从第一个的函数开始执行 B、 在C语言程序中 , 要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C 语言 程序中的main( )函数必须放在程序的开始部分 26、以下程序的输出结果是 。 #include void main( ) { int x=6, y=7, z=8, r; r=func(( x--,y++,x+y),z--); printf(\ } A、11 B、20 C、21 D、31 27、某程序中对myfun函数有此说明:void myfun( ); 此说明的含义是 。 A、myfun函数无返回值 B、myfun函数的返回值可以是任意的数据类型 C、myfun 函数的返回值是无值型的指针类型 D、指针myfun指向一个函数,该函数无返回值 28、一个函数的返回值类型是 决定的。 A、return语句中表达式类型 B、定义函数时所指定的函数类型 C、调用该函数的主调函数的类型 D、在调用时临时指定的类型 29、以下对C语言函数的描述中,正确的是 。 A、C程序由一个或一个以上的函数组成 B、函数既可以嵌套定义又可以递归调用 C、函数必须有返回值,否则不能使用函数 - 26 - D、C程序中调用关系的所有函数必须放在同一个程序文件中 30、下列函数形式正确的是 。 A、double fun(int x,int y) B、fun(int x,y) C、fun(x,y) D、double fun(int x,int y) {z=x+y; {int z; {int x,y {double z; return z;} return z;} double z=x+y; z=x+y; return z;} return z;} 31、以下函数定义形式正确的是 。 A、double fun(x,y); B、double fun(int x;int y); C、double fun(int x,int y); D、double fun(int x,y); 32、C语言程序中,当调用函数时 。 A、实参和形参各占一个独立的存储单元 B、实参和形参共用一个存储单元 C、可以由用户指定是否共用储存单元 D、由系统自动指定是否共用存储单元 33、用数据组名作为函数调用时的实参,实际上传递的是 。 A、数组全部元素 B、数组第一元素的值 C、数组的首地址 D、数组元素的个数 34、文件中定义的全局变量的作用域为 。 A、本程序全部范围 B、本文件全部范围 C、函数内全部范围 D、从定义该变量的位置开始到本文件结束 35、下面程序的正确运行结果是 。 void fun(int s[],int n1,int n2) {int i,j,t; i=n1; j=n2; while (i {t=s[i];s[i]=s[j];s[j]=t; i++;j--; } } void main( ) { int a[10]={1,2,3,4,5,6,7,8,9,0},i; fun(a,0,3);fun(a,4,9);fun(a,0,9); for(i=0;i<10;i++) printf(―-‖,a[i]); printf(―\\n‖); } A、0 9 8 7 6 5 4 3 2 1 B、4 3 2 1 0 9 8 7 6 5 C、5 6 7 8 9 0 1 2 3 4 D、0 9 8 7 6 5 1 2 3 4 二、填空题 1、在函数外定义的变量称为 变量。 2、在程序编译时是以 为单位进行编译的。 - 27 - 3、函数的返回值是通过函数中的 语句获得的。 4、若有以下程序,执行后输出的结果是 。 int f(int x,int y) { return(y-x)*x; } void main( ) { int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5)); printf(\ } 三、程序填空题 1、 通过函数求 f(x) 的累加和,其中 f(x)=x 2+1 void main( ) { printf(\} SunFun(int n) { int x,s=0; for(x=0;x<=n;x++) s+=F( ); return s; } void F( int x) { return ;} 2、函数 fun 的功能是计算 x n 。 double fun(double x,int n) { int i; ; for(i=1;i<=n;i++) ; return y; } 主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算: m=a 4 +b 4 -(a+b) 3 。实现这一计算的函数调用语句为 。 3、 以下sum函数的功能是计算下列级数之和:S=1+x+x2/2!+x3/3!+........+xn/n! 请给函数中的各变量正确赋初值。 double sum( double x, int n ) { int i; double a,b,s; ; for( a=1,b=1,i=1;i<=n;i++) { a=a*x; ; s=s+a/b; } - 28 - return s; } 4、以下程序的功能是调用函数fun计算: m=1-2+3- 4+……+9 -10, 并输出结果。 int fun(int n) { int n=0,f=1, i; for (i=1; i<=n; i++) { m+=i*f; f= ; } return m; } void main( ) { printf(\ );} 5、请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 (double,double); void main() { double x,y; scanf(\ printf(\ double max(double a,double b) { return (a>b ? a:b) :} 6、函数pi的功能是根据以下近似公式求 π 值: ( π * π )/6=1+1/(2*2)+1/(3*3)+..+1/(n*n) 请填空,完成求 π 的功能。 #include for(i=1;i<=n;i++)s=s+ ; return(sqrt(6*s)); } 7、 对输入一个数,调用prime函数判断其是否是素数:是打印―yes‖,不是打印―no‖。 void main( ) {int x; printf(―请输入一个整数给x‖); scanf(―%d‖, ); if (prime(x)) ; else ; } void prime(int a) {int e,i=2,y=1; - 29 - e=a/2; while ((i<=e) ) if(a% ==0) y=0; else i++; ; } 8、下列程序是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组各元素之和,并输出结果。函数sum计算数组元素之和。请完成下列程序。 #include { int a[5]={2,3,6,8,10}; int total; total= ; printf(\数组元素之和为:%d\\n\ ); } int sum(int array[],int len) { int s=0; for(int i=0;i 9、下面程序是用递归函数fib(n)计算斐波那契(Fibonacci)数列第n项。 斐波那契数列为:0,1,1,2,3,5 ┄┄ int fib(int n) { if(n==0)return(0); if(n==1) return(1); if(n>1) return( + ); } 10、以下函数返回数组s中最大元素的下标,数组中元素的个数由t传入。 int Findmax(int s[],int t) { int m,n; for(n=0,m=n;n if(s[n]>s[m]) ; return ; } 11、函数fun的功能是求x的y次方(y>=1),请填空。 - 30 - double fun(double x,int y) { ; double z; for(i=1,z=1; ;i++) z=z*x; ; } 12、下面的程序通过函数average计算数组中各元素的平均值。 float average(int pa[],int n) { int i; float avg=0.0; for(i=0;i avg=avg+ ; avg= ; return avg; } void main( ) { int i,a[5]={2,4,6,8,10}; float mean; mean=average( ,5); printf(―%f\\n‖,mean); } 13、以下程序根据输入的x ,求1到x的累加和。 float fun(int n) {int i;float c; ; for (i=1;i<=n;i++) c+=i; ; }; void main( ) {int x; scanf(―%d‖, ); printf(―%f\\n‖,fun(x)); } } 四、程序改错题 1、下面的程序完成数值1到N之间的偶数之和。在main()函数中输入N值,并输出求和结果。在sum()函数中完成偶数累加,并把累加结果作为函数值返回。请更改程序中的五个错误。 - 31 - 注意:不得增行或删行,也不得更改程序结构。 #include void main( ) { int n; printf(‖请输入N的值:‖); scanf(‖%d‖,n); printf(‖偶数之和为%d‖,sum(n)); } ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 2、下面的程序完成统计字符串中大写字母的个数。在main()函数中输入一字符串(字符个数不超过80个),并输出统计结果。在UpperNum()函数中统计字符串str中的大写字母个数,并作为函数值返回。请更改程序中的五个错误。 注意:不得增行或删行,也不得更改程序结构。 #include { if (str[i]>= \ } return i; } void main( ) {char str[]; - 32 - i++; n++; printf(\ scanf(―%s‖,str); printf(\} ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 五、编程题(以下各题均用函数实现) 1、求出100—10000之间有多少个整数,它们的各位数字之和等于5。 2、写一个函数,将两个字符串连接。 3、编程,设u、v取值为区间[-20,20]的整数,找出使f(u,v)取最大值的u和v。f(u,v)=(3.8*u*u+6.2*v-2*u)/(-1.2*6+3*v)。要求定义和调用函数计算f(u,v)的值。 4、编程,输入3个整数x、y、z,计算并输出s=x!+y!+z!。要求定义1个求阶乘的函数。 第八章 一、单项选择题 1、变量的指针,其含义是指该变量的________。 A、值 B、地址 C、名 D、一个标志 2、若有语句:int *point,a=4; 和 point=&a; 下面均代表地址的一组选项是 。 A、a,point,*&a B、&*a,&a,*point C、*&point,*point,&a D、&a,&*point ,point 3、若有说明:int *p,m=5,n; 以下正确的程序段的是________。 A、p=&n; B、p=&n; C、scanf(\D、p=&n; scanf(\ scanf(\ *p=n; *p=m; 4、下面程序段的运行结果是________。 char *s=\ s+=2;printf(\ A、cde B、 字符 'c' C、字符'c'的地址 D、无确定的输出结果 5、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 _______。 A、c=*p1+*p2; B、p2=c C、p1=p2 D、c=*p1*(*p2); 6、若有说明;int *p,m=5,n;以下正确的程序段的是________。 A、p=&n; scanf(\ B、p=&n; scanf(\C、scanf(\ *p=n; D、p=&n; *p=m; 7、若有说明语句char a[]=\ 则以下不正确的叙述是 __。 A、a+1表示的是字符t的地址 B、p指向另外的字符串时,字符串的长度不受限制 C、p变量中存放的地址值可以改变 D、a中只能存放10个字符 - 33 - 8、下面程序的运行结果是 _______。 #include { char *s1=\ char *s2=\ s1+=2;s2+=2; printf(\ } A、负数 B、零 C、正数 D、不确定的值 9、下面程序的运行结果是_______。 #include while(s1 void main( ) {char *p; p=\ fun(p,strlen(p)); puts(p); } A、7654321 B、1714171 C、1711717 D、7177171 10、若有定义 :int a[5],*p=a; ,则对a数组元素的正确引用是_________。 A、*&a[5] B、a+2 C、*(p+5) D、*(a+2) 11、若有定义:int a[2][3], 则对 a 数组的第 i 行 j 列元素地址的正确引用为______。 A、*(a[i]+j) B、(a+i) C、*(a+j) D、a[i]+j 12、若有定义: int a[10],*p=a; ,则 p+5 表示_______。 A、元素a[5]的地址 B、元素a[5]的值 C、元素a[6]的地址 D、元素a[6]的值 13、设变量定义为 int a[4]={1,4,7,8},*p=&a[2];,则*p的值是 。 A、&a[2] B、4 C、 7 D、 1 14、若已定义:int a[9], *p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为 。 A、p+1 B、a+1 C、a++ D、++p 15、要使指针变量p指向二维数组A的第一个元素(0行0列元素),正确的赋值表达式是 。 A、p=A或p=A[0][0] B、p=A[0]或p=A[0][0] C、p=A[0]或p=&A[0][0] D、p=A或p=&A[0][0] 16、下列说法正确的是 。 - 34 - A、空指针也称为void 指针,是一种不指向任何数据的指针。 B、空指针也称为无类型指针,是一种可指向任何类型数据的指针。 C、除了void指针外,任何非空指针都指向某种既定类型的数据。 D、void指针也称为无类型指针,是一种不指向任何数据的指针。 17、已知一运行正常的程序中有这样两个语句: int *p1,*p2=&a; p1=b; 由此可知,变量a和b的类型分别是 。 A、int和int B、int *和int C、int和int* D、int*和int* 18、说明语句float (*p)(int);的含义是__ _。 A、p是一个指向一维数组的指针变量 B、p是指针变量,指向一个整型数据 C、p是一个指向函数的指针,该函数的返回值是一个浮点型,且有一个整型数据作参数 D、以上都不对 19、若有定义:int x,*pb;则以下正确的赋值表达式是________。 A、pb=&x B、pb=x C、*pb=&x D、*pb=*x 20、C语言的语句char *line[5];是指 。 A、line 是一个数组,其数组的每一个元素是指向字符的指针。 B、line是一个指针,指向一个数组,数组的元素是为字符型。 C、A和B 均不对,但它是C语言正确的语句。 D、C语言不允许这样的语句。 21、设 int x[] = {1,2,3,4,5,6},* p = x ;,则值为3的表达式是 。 A、p + = 2, * + + p B、p + = 2, * p + + C、p + = 3, * p D、 p + = 2, + + * p 22、已知:int *p, a,b;p=&a; 则语句―b=*p; ‖,中的运算符―*‖的含义是 。 A、指针定义 B、乘法运算符 C、取指针所指变量内容 D、取变量地址 23、设有定义:static int x,*p=&x,*q; scanf(―%d,%d‖,p,q); 若输入3,4,则x的值为 。 A、0 B、3 C、4 D、无法确定 24、程序中对fun函数有如下说明:void *fun( );此说明的含义是___ __。 A、fun函数无返回值 B、fun函数的返回值可以是任意的数据类型 C、fun函数的返回值是无类型的指针 D、指针fun指向一个函数,该函数无返回值 25、执行下面的程序的结果是 。 int main( ) { char a; char *str=&a; strcpy(str,\printf(―%s‖,str); return 0; } A、hello B、nul C、h D、发生异常 - 35 - 26、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________。 void main( ) { int *p,*q,a,b; p=&a; printf(―input a:‖); scanf(―%d‖,*p); …… } A、*p表示的是指针变量p的地址 B、*p表示的是变量a的值,而不是变量a的地址 C、*p表示的是指针变量p的值 D、*p只能用来说明p是一个指针变量 27、已有变量定义和函数调用语句: int a=25; print_value(&a); 下面函数的正确输出结果是________。 void print_value(int *x) { printf(―%d\\n‖,++*x);} A、23 B、24 C、25 D、26 28、若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 。 A、*p=&a; scanf(\ B、p=(long *)malloc(8); scanf(\ C、scanf(\ D、scanf(\ 29、有以下程序,程序运行后的输出结果是 。 #include { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(\} A、1,2,1,2 B、1,2,2,1 C、2,1,2,1 D、2,1,1,2 30、有以下程序,执行后的输出结果是 。 void main( ) { int a=1, b=3, c=5; int *p1=&a, *p2=&b, *p=&c; *p =*p1*(*p2); printf(\ } A、1 B、2 C、3 D、4 - 36 - 31、在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是 。 A、p向高地址移了一个字节 B、p向高地址移了一个存储单元 C、p向高地址移了两个字节 D、p与a+1等价 32、有以下定义 char a[10],*b=a;不能给数组a输入字符串的语句是 。 A、gets(a) B、gets(a[0]) C、gets(&a[0]); D、gets(b); 二、填空题 1、若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是_____,*(a+5)的值是_________。 2、p1,p2都是字符指针,p1指向字符串―ABCDEFGIJKLMN‖,p2-p1的差为5,则执行printf(―%s‖,p2);时显示在屏幕上的是 。 3、P为一指针变量,使p指向下一个单元,然后取该单元的数据作为表达式的值的表达式是 。 4、已知指针p为int型指针,且其指针值为5000,则p+3的指针值为 。(注:sizeof(int)=4) 5、P为一指针变量,取p所指向单元的数据作为表达式的值,然后使p指向下一个单元的表达式是 。 6、P为一指针变量,将P所指向单元的数据值加1并作为表达式的值的表达式是_______ ________。 7、若正常执行了如下语句: int m[]={1,2,3,4,5,6,7,8},*p1=m+3,*p2=&m[6],*p3; p3=p1+3; printf(―%d %d %d‖,*p1,*p2,*p3); 则程序的输出是________ ______。 8、下面程序段的运行结果是 。 char s[80],*sp=\ sp=strcpy(s,sp); s[0]='h'; puts(sp); 9、下面程序段的运行结果是 。 char str[ ]=\*p=str; printf(\10、若有以下定义 :int a[2][3]={2,4,6,8,10,12}; 则 a[1][0] 的值是 .,*(*(a+1)+0)) 的值是 。 11、 运算符用于返回变量在内存中的地址; 运算符用于返回指针变量指向变量的值。 三、程序填空题 1、以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。 #include \ - 37 - void main( ) {int *a,*b,*c,num,x,y,z; a=&x;b=&y;c=&z; printf(\输入 3 个整数: \ scanf(\ printf(\num=*a; if(*a>*b ) _; if(num>*c) _ ; printf(\输出最小整数 :%d\\n\ ); } 2、下面程序的功能是将两个字符串 s1 和 s2 连接起来。请填空。 #include {char s1[80],s2[80]; gets(s1); gets(s2); conj( ); puts(s1); } void conj(char *p1,char *p2) {char *p=p1; while(*p) ; while(*p2) {*p= ; p++; p2++; } *p='\\0'; } 3、以下程序将数组 a 中的数据按逆序存放,请填空。 #define M 8 void main( ) {int a[M],i,j,t; for(i=0;i - 38 - while(i for(i=0;i 4、下面的程序的功能是:利用指针统计一个字符串中,字母、空格、数字、及其它字符的个数,请填空。 #include { int alpha,space,digit,other; char *p,s[80]; alpha=space=digit=other=0; printf(―input string:\\n‖); ; for(p=s;*p!=‘\\0‘;p++) if( ) alpha++; else if(( *p==‘ ‘|| *p==‘\\t‘) ) space++; else if( *p>=‘0‘ && *p <=‘9‘) digit++; else other++; printf(―alpha:%dspace:Yigit:%dother:%d\\n‖,alpha,space,digit,other); } 5、main()函数利用函数swap()来交换main函数中的两个变量的值。 void swap( __ ) { int temp; temp=*x; *x=*y; __ ; } void main( ) { int x=10,y=10; swap( __ ); printf(―%d, %d\\n‖, x, y); } 四、程序改错题,注意:不得增行或删行,也不得更改程序的结构。 1、下面有一段程序,函数spacenum的功能是统计字符串中空格的个数,并将空格的个数存 - 39 - 放在形参n所指向的存储单元中,请指出并更改程序中出现的5处错误。 #include void spacenum(char *a,int *n) {int i; n=0; for(i=0;;i++) if(*(a+i)==‘ ‘)) *n++; } void main( ) {char str[100]; int count; puts(str); spacenum(str,count); printf(―space=%d\\n‖,count); } ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 2、下面有一段程序,其功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由fun函数返回,平均分存放在形参aver所指的存储单元中。例如,若8名学生的成绩为:80.5 60 72 90.5 98 51.5 88 64,则低于平均分的学生人数为4(平均分为75.5625)。请指出并更改程序中出现的5处错误。 #inclue int fun(float s,int n,float *aver) {float ave,t=0.0; int count,k,i; for (k=0;k t=s[k]; ave=t/n; for (i=0;i if (s[i]>ave) count++; *aver=&ave; return count; } void main( ) {float s[30],aver; int m,i; printf(―\\nplease enter n(<30):‖ ); scanf(―%d‖,&m); printf(―\\nplease enter %d mark:\\n‖,m); for (i=0;i scanf(―%f‖,s+i); printf(―\\nthe number of students:%d\\n‖,fun(s,m,aver)); printf(―ave=%f\\n‖,aver); } - 40 - ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) 五、编程题(以下各题均用指针实现) 1、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数: (1)输入10个数; (2)进行处理; (3)输出10个数; 2、编程,输入一个以回车结束的字符串(少于80个字符),先输出其中的小写英文字母、空格和感叹号!,然后统计这些字符的个数。 3、编程,输入一个字符ch和一个以回车符结束的字符串(少于80个字符),统计字符串中与ch相同的字母个数。 4、输入一个以回车结束的字符串(少于80个字符),把字符串中的所有数字字符(?0‘-?9‘)转换为整数,去掉其他字符。例如,字符串‖3A56BC‖转换为整数后是356。 输入输出示例: Free82jeep5 825 5、编一程序,将两个字符串连接起来,不要用strcat函数。 6、有一字符串,包含n个字符。写一函数将此字符串中从m个字符开始的全部字符复制成另一字符串。 第九章 一、单项选择题 1、设有以下语句: struct SS {int no; char name[10; }PERSON; 则下面叙述中错误的是__ _。 A、struct是结构体类型的关键字 B、struct SS是结构体类型 C、PERSON是结构体类型名 D、name是结构体成员名 2、如下说明语句,则下面叙述不正确的是__ _。 struct stu { int a ;float b; } stutype; A、struct是结构体类型的关键字 B、struct stu是用户定义结构体类型 C、stutype是用户定义的结构体类型名(变量名) D、 a和b都是结构体成员名 3、如果sizeof(int)=4,若有定义如下,则结构变量b占用内存的字节数是__ _。 struct data { int i ; char ch; double f; } b; - 41 - A、1 B、2 C、8 D、13 4、运行下列程序,输出结果是__ _。 struct contry { int num; char name[20]; }x[5]={1,\void main( ) { int i; for (i=3;i<5;i++) printf(\} A、3F4E5S B、4E5S C、F4E D、c2U3F4E 5、以下程序的输出结果是__ _。 union myun { struct { int x, y, z; } u; int k; } a; void main( ) { a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(\ } A、4 B、5 C、 6 D、 0 6、当定义一个共用体变量时,系统分配给它的内存是__ _。 A、各成员所需内存量的总和 B、结构中第一个成员所需内存量 C、成员中占内存量最大的容量 D、结构中最后一个成员所需内存量 7、若有以下程序段,则以下语句正确的是__ _。 union data { int i ; char c; float f;} a; int n; A、a=5; B、a={2,‘a‘,1.2} C、printf(―%d‖,a.i); D、n=a; 8、设struct {int a; char b; } Q, *p=&Q; 错误的表达式是__ _。 A、Q.a B、(*p).b C、p->a D、*p.b 9、 以下对C语言中共用体类型数据的叙述正确的是__ _。 A、可以对共用体变量直接赋值 B、一个共用体变量中可以同时存放其所有成员 C、一个共用体变量中不能同时存放其所有成员 D、共用体类型定义中不能出现结构体类型的成员 10、当定义一个结构体变量时,系统为它分配的内存空间是__ _。 - 42 - A、结构中一个成员所需的内存容量 B、结构中第一个成员所需的内存容量 C、结构体中占内存容量最大者所需的容量 D、结构中各成员所需内存容量之和 11、运行下列程序段,输出结果是__ _。 struct country { int num; char name[10]; }x[5]={1,\ p=x+2; printf(\ A、2,U B、3,a C、4,g D、5,S 12、如果有下面的定义和赋值,则使用__ _不可以输出n中data的值。 struct Snode { unsigned id; int data; }n,*p; p=&n; A、p.data B、n.data C、p->data D、(*p).data 13、定义以下结构体数组 struct Date { int year; int month; int day; }; struct S { struct Date birthday; char name[20]; } x[4]={{2008,10,1,\ 语句printf(\的输出结果为__ _。 A、 guangzhou,2009 B、 guangzhou,2008 C、 Tianjin,2008 D、 Tianjin,2009 二、填空题 1、设struct student { int no; char name[12]; float score[3]; } sl,* p = &sl ; 用指针法给 sl的成员no赋值1234的语句是 _____________。 2、 (1)写出左图所示的存储结构所需的类型定义和语句。 - 43 - struct link { data; next;} ; (2)写出建立上图所示的存储结构和赋值所需的语句。 =20; =NULL; (3)写出输出成员data的值。 printf(―%d\\n‖, ) 三、程序填空题 head data next 20 NULL 1、输入n(3 输入输出示例: n=5 1,林宏,1800,600 2,李涛,1700,550 3,王钢,2100,750 4,周航,1500,450 5,金明,2300,850 基本工资+职务工资最少的是:周航 基本工资+职务工资最多的是:金明 #include void main( ) { ; int max=0,min=0,i,n; printf(\scanf(\for (i=0;i printf(\基本工资+职务工资最少的是%s\\n\printf(\基本工资+职务工资最多的是%s\\n\ - 44 - scanf(\ ); ; ; if(s[max].jbpay+s[max].zwpay if(s[max].jbpay+s[max].zwpay >s[i].jbpay+s[i].zwpay ) } 四、程序改错题 1、输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如下表所示),输出每人的姓名和实发工资(基本工资+浮动工资-支出)。 工资表 姓名 Zhao Qian Zhou #include scanf(―%s%d%d%d‖,emp[i].name,emp[i].&jbg,emp[i].&fdg,emp[i],&zc); for(i=0;i printf(―%5s实发工资:%7.2f\\n‖, emp[i].name,emp[i]. jbg+emp[i]. fdg-emp[i].zc); } ( )改为:( ) ( )改为:( ) ( )改为:( ) 五、编程题 1、编程,建立一个有n(3 输入输出示例: n=5 1 黄岚 78 83 75 2 王海 76 80 77 3 沈强 87 83 76 4 张枫 92 88 78 5 章盟 76 81 75 - 45 - 基本工资 240.00 360.00 560.00 浮动工资 400.00 120.00 150.00 支出 75.00 50.00 80.00 总分最高的学生是:张枫,285分 第十章 一、单项选择题 1、sizeof(float) 是 ____ __。 A、一种函数调用 B、一个不合法的表示形式 C、一个整型表达式 D、一个浮点表达式 2 、以下叙述中不正确的是 __________。 A、表达式 a&=b 等价于 a=a&b B、表达式 a|=b 等价于 a=a|b C、表达式 a!=b 等价于 a=a!b D、表达式 a^=b 等价于 a=a^b 3、若 x=2,y=3, 则 x&y 的结果是 _________。 A、0 B、2 C、3 D、5 4、在位运算中,操作数每左移一位,则结果相当于 ________。 A、操作数乘以2 B、操作数除以2 C、操作数除以4 D、操作数乘以4 5、下面程序运行的结果是 。 #define f(x) 1+x+x*x #include A、7 B、13 C、17 D、31 二、填空题 1、9&&6的值是 ,9&6的值是 ,9||6的值是 ,9|6的值是 。 2、在16系统中有一个整型变量a ,想只保留其低字节(高字节全0),应进行的运算是a=a& 。 3、有语句char a=3,b=6,c;c=a^b>>2;运算后c中的二进制数是 。 4、表达式0x13 ^ 0x17的值是 _。 三、编程题 1、定义一个带参数的宏,使两个参数的值互换,并编写程序任意输入两个数,进行宏调用,之后输出互换结果。 2、定义一个宏,求出三个参数中的最小值,并写一个程序来调用该宏定义。 int a=2,b=3; printf(\ 第十一章 一、单项选择题 1、系统的标准数入文件是指 _________。 A、键盘 B、显示器 C、软盘 D、硬盘 2、若执行 fopen 函数时发生错误,则函数的返回值是 ___ ___。 A、地址值 B、0 C、1 D、EOF - 46 - 3. 若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是______。 A、\ B、\、\、\ 4、fscanf 函数的正确调用形式是 ________。 A、fscanf(fp, 格式字符串 , 输出表列 ) B、fscanf( 格式字符串,输出表 列 ,fp); C、fscanf( 格式字符串 , 文件指针 , 输出表列 ); D、fscanf( 文件指针,格式字符串 , 输入表列 ); 5、fgetc 函数的作用是从指定文件读入一个字符,该文件的打开方式必须是 。 A、只写 B、追加 C、读或读写 D、答案 B 和C 都正确 6、函数调用语句: fseek(fp,-20L,2); 的含义是 _______. A、将文件位置指针移到距离文件头 20 个字节处 B、将文件位置指针从当前位置向后移动 20 个字节 C、将文件位置指针从文件末尾处向前移动 20 个字节 D、将文件位置指针移到离当前位置 20 个字节处 7、利用 fseek 函数可实现的操作_________. A、fseek(文件类型指针,起始点,位移量 ); B、fseek(文件类型指针,位移量,起始点); C、fseek( 位移量,起始点,文件类型指针); D、fseek( 起始点,位移量,文件类型指针 ); 二、填空题 1、fopen函数打开一文本文件,在―使用方式‖这一项中,为输出而打开需填入 ,为输入而打开需填入 。 2、feof函数可用于 文件和 文件,它用来判断即将读入的是否为 ,若是,函数值为 。 3、C语言中调用 函数关闭文件。 4、调用fopen函数打开文件时,文件的位置指针在文件的 。随着文件的读/写操作,文件的位置指针向 移动。若需要将文件中的位置指针重新回到文件的开头位置,可调用 函数;若需将文件的位置指针指向文件中倒数第20个字节处,则可调用 函数。 5、从文件中读入一个字符,可调用函数 , ;从文件中读一字符串,可调用函数 , ;从文件中既读字符又读数字,可调用函数 , 。 6、向文件写入一个字符,可调用函数 , ;向文件写一字符串,可调用函数 , ;向文件中既写字符又写数字,可调用函数 , 。 二、程序填空题 磁盘上有文本文件―testfile.txt‖ ,统计该文件的行数和字符数。 #include - 47 - void main() {FILE*fpin; char ch; int n=0; int m=0; if((fpin=fopen(\ __ ))==NULL) { printf(\ exit(0); } ch=fgetc(fpin); while(ch!=EOF) { putchar(ch); n++; if(ch=='\\n') __ ; ch=fgetc(fpin); } fclose( __ ); printf(\字符数有:%d\\n行数有:%d\\n\} 三、编程题 1、建立二进制数据文件―cj.data‖,内容为:80,90,72,64,59,92。 2、有文本文件test.txt,存放一批正整数,求出它们的最大值、最小值和平均值。 习题答案 第一、二章 一、单项选择题 1、D 2、B 3、A 4、C 5、B 6、A 7、A 8、B 9、B 10、A 11、A 12、B 13、D 14、B 15、B 16、B 17、A 18、B 19、D 20、A 21、A B 二、填空题 1、函数 main 2、main函数 3、函数头 函数体 花括号{} 4、编辑 编译 连接 运行 5、/* */ 6、4 4 8 1 7、int x; 8、long lg; 9、char cg; 10、x*x*x+3*x*x*x*y+3*x*y*y+y*y*y 11、3.5 第三章 - 48 - 一、单项选择题 1、D 2、C 3、A 4、A 5、D 6、C 7、A 8、C 9、C 10、B 二、程序填空题 1、&ch ch>=‘A‘&&ch<=‘Z‘ 2、x=y 三、程序改错题 1、printf(―%d‖,a1);改为: printf(―%f‖,a1); 2、scanf(―%f%f%f‖,x1,x2,x3);改为: scanf(―%f%f%f‖,&x1,&x2,&x3); 3、printf(―m\\n‖,k); 改为:printf(―m\\n‖,k); 四、编程题 1、 #include int x,a,b,c,d; printf(\请输入四位数的整数:\scanf(\a=x/1000; b=(x-a*1000)/100; c=(x-a*1000-b*100)/10; d=x; printf(―颠倒过来的数为:\\n‖,d,c,b,a); } 2、 #include printf(\请输入两个整数:\scanf(\printf(\和为:%d\\n‖,a+b); printf(\差为:%d\\n \printf(\积为:%d\\n \printf(\商为:%d\\n \} 3、 #include {char c1='C',c2='h',c3='i',c4='n',c5='a'; - 49 - c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4; printf(\putchar(c1); putchar(c2); putchar(c3); putchar(c4); putchar(c5); putchar('\\n'); } 第四章 一、单项选择题 1、D 2、C 3、C 4、B 5、B 6、B 7、C 8、A 9、D 10、A 11、A 12、A 13、A 14、C 15、B 16、A 二、填空题 1、‖ABC‖ 2、‖yes‖ 3、终止switch语句的执行 三、程序填空题 1、k%3==0||k%7==0 2、&n default 四、程序改错题 1、 scanf(―%f‖,x); 改为:scanf(―%d‖,&x); if(x%2=0) 改为:if(x%2==0) 2、scanf(―%f‖,x); 改为:scanf(―%d‖,&x); case 0:printf(―能被3整除!\\n‖); 改为:case 0:printf(―能被3整除!\\n‖);break; case 1,2:printf(―不能被3整除!\\n‖); 改为:case 1:case 2:printf(―不能被3整除!\\n‖); 五、编程题 1、 #include - 50 -
正在阅读:
c语言复习题及参考答案04-26
商业空间装饰装修工程施工合同05-30
道岔水平方向不良的原因及整改措施03-26
二、2门诊病案管理工作制度04-22
五年书法练习指导下06-20
项目安全生产管理制度汇编04-23
2010年重点品牌调研问卷08-09
马克思主义哲学教案12-21
《河流最蓝的地方》阅读答案07-04
高压聚乙烯装置(LDPE)工艺说明01-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 复习题
- 答案
- 语言
- 参考
- 论文X射线的应用
- 新一代商户接入手册V2.7
- 学生奖励方法
- 建筑工程造价习题集答案 - 图文
- 最新苏教版 小学四年级数学上册第一单元升和毫升教案含教学反思
- 唐山市路南区2013-2014学年八年级数学上册期末测试答案版
- 冀教版数学五年级上册第3单元《小数除法》(循环小数)教学设计
- 测回法观测水平角实验报告
- 古代文学资料 - 唐诗专题
- 2014国家公务员考试行测暑期炫酷备考资料分析:易入陷阱题讲解
- 手术授权分级管理制度
- 高速铁路地基加固方案设计
- 七年级模拟考试数学试卷
- BBS论坛的设计与实现毕业论文
- 上海海事大学物流工程学院研究生教育及导师简介
- DSC报警主机简易操作手册1
- 小儿推拿保健师 试题1和答案解析 ZZB
- 《中国共产党党员领导干部廉洁从政若干准则》解读
- 机械管理办法
- c++实验六