c语言复习题及参考答案

更新时间:2023-03-11 17:43: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(注:表示回车),则正确的输出结果为 。 void main( ) { int x,y,z;

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 void main( ) {int a1,a2; char c1,c2;

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 B、12_a_34_b C、12,a,34,b D、12_a34_b 8、有以下程序,程序运行后的输出结果是 。 #include void main( ) { int x=011;

- 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 void main( ) {char ch;

scanf(―%c‖, );

ch=( )?ch+32:ch; printf(―char=%c\\n‖,ch); }

2、从键盘分别为变量x和y输入整数,交换它们的值后输出。 #include void main( ) {int x,y; ;

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 void main( ) {int a=1,b=0; if(!a)

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 void main( ) {int c=0,k; for(k=1;k<3;k++) switch(k) {default:c+=k; case 2:c++;break; case 4:c+=2;break; }

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 void main( ) { int x;

printf(―请输入一个整数:‖); scanf(―%f‖,x); if(x%2=0)

printf(―是一个偶数!\\n‖);

else

printf(―是一个奇数!\\n‖);

}

( )改为:( ( )改为:(

- 8 -

‖); ) )

2、输入一个整数,判断其是否能被3整除。 #include void main( ) { int x,y;

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 viod main( ) { int num=0; while(num<=2) { num++;

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 void main( ) { int i=1,s; ; while (i<100)

{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 void main( ) {int r,m,n;

scanf(\ if(m

while(r){m=n;n=r;r= _ ;} printf(\ } 三、程序改错题

1、以下程序是输入一个整数,分别将其逆向输出。如-321的逆向是-123

- 13 -

源程序(有错误的程序) #include void main( ) { int n;

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 #include void main( ) { int i,j,k,m,n;

printf(―输入正整数的个数n:‖); scanf(―%d‖,&n);

printf(―输入%d个正整数\\n‖,n); for(j=0;jn)

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 void main( )

{ 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 void main( )

{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 void main( ) {

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 void main( ) { int i,j,n,x,a[n];

printf(―输入数据的个数n:‖); scanf(―%d‖,&n);

printf(―输入%d个整数:‖,n); for(i=0;i

printf(―输入要插入的整数:‖); scanf(―%d‖,&x);

- 19 -

for(i=0;ia[i]) continue; j=n-1; while(j>=i) { a[j]=a[j+1]; j++; }

a[i]=x; break;

}

if(i==n) a[n]=x; for(i=0;i

( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( )

2、输入一个以回车结束的字符串(少于80个字符),将它的内容颠倒过来再输出。如‖ABCD‖颠倒为‖DCBA‖。

#include void main( ) { int i,k,tmp; char str[];

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); main( )

{ 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 func( int a, int b) { int c; c=a+b; return c; }

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 double pi(long n) { double s=0.0; long i;

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 sum(int[],int); void main( )

{ 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 int sum(int m) { int x,s; do { x=m%2; switch(x) { case 0:s=s+m; case 1:break; } m++; } while(m>2) return; }

void main( ) { int n;

printf(‖请输入N的值:‖); scanf(‖%d‖,n);

printf(‖偶数之和为%d‖,sum(n)); }

( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( ) ( )改为:( )

2、下面的程序完成统计字符串中大写字母的个数。在main()函数中输入一字符串(字符个数不超过80个),并输出统计结果。在UpperNum()函数中统计字符串str中的大写字母个数,并作为函数值返回。请更改程序中的五个错误。

注意:不得增行或删行,也不得更改程序结构。 #include int UpperNum(char str[]) { int n,i=0; while((str+i))

{ 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 #include void main( )

{ char *s1=\ char *s2=\ s1+=2;s2+=2;

printf(\ }

A、负数 B、零 C、正数 D、不确定的值 9、下面程序的运行结果是_______。

#include #include void fun(char *w,int n) {char t,*s1,*s2; s1=w;s2=w+n-1;

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 void main( )

{ 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 void main( )

{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 void main( )

{ 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 struct Worker { int num; char name[20]; float jbpay; float zwpay; };

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 void main( ) { struct emp { char name[10]; float jbg; float fdg; float zc; }; int i,n; printf(―n=‖); scanf(―%d‖,&n); for(i=0;i

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 void main( ) { }

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 #include #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 void main( ) {

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 void main( ) { int a,b;

printf(\请输入两个整数:\scanf(\printf(\和为:%d\\n‖,a+b); printf(\差为:%d\\n \printf(\积为:%d\\n \printf(\商为:%d\\n \} 3、

#include void main()

{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 void main( ) { double x,y; printf(\ scanf(\ if(x<1) y=x;

- 50 -

本文来源:https://www.bwwdw.com/article/b0bw.html

Top