您好,欢迎来到好土汽车网。
搜索
您的当前位置:首页2008长江大学《C语言程序设计》习题集

2008长江大学《C语言程序设计》习题集

来源:好土汽车网
前言

C语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计语言的优点,又具有低级程序设计语言的特点,既可以用来编写系统程序,又可以用来编写应用程序。因此,C语言正在被迅速地推广和普及。

课后做些练习是有必要的,本习题集通过大量的典型习题,循序渐进地引导学生巩固各章的知识点。根据最新教学大纲,我们编排了13章的单元习题,结合各章的课时数,确定其所需的篇幅。学生可根据教师的进度完成相应习题。任课教师可以根据需要收取学生所做的试卷检查教学效果,并作为平时成绩的一个依据(分值老师自己把握)。

C语言是电子信息类专业重要的专业基础课,任课教师和学生要引起足够的重视。因为C语言是一个比较通用的高级编程语言,很多编程语言都与之相关,作为学生的第一门计算机语言课,对它学习的好坏将影响后续所有与编程相关的课程以及学生参与项目的能力。

学习C语言的较好方法就是做适量的习题和大量的编程实践。前者是为了巩固基础知识,后者则是对基础知识的灵活运用,只有当我们能够使用C语言畅通无阻地让计算机执行我们所想要做的工作时,我们才能最大限度地发挥计算机的优势,使之真正成为我们强有力的工具。

目录

第一章 C语言概述 ··························································································· 1 第二章 程序的灵魂——算法 ··············································································· 3 第三章 数据类型、运算符与表达式 ······································································ 4 第四章 最简单的C程序设计 ·············································································· 8 第五章 选择结构程序设计 ················································································ 11 第六章 循环控制 ···························································································· 16 第七章 数组 ·································································································· 21 第八章 函数 ·································································································· 27 第九章 预处理命令 ························································································· 33 第十章 指针 ·································································································· 35 第十一章 结构体与共用体 ················································································ 41 第十二章 位运算 ···························································································· 47 第十三章 文件 ······························································································· 49

《C语言程序设计》习题集

第一章 C语言概述

一、选择题

1、以下叙述中正确的是( )

A)C程序中注释部分可以出现在程序中任意合适的地方 B)花括号“{”和“}”只能作为函数体的定界符

C)构成C程序的基本单位是函数,所有函数名都可以由用户命名 D)分号是C语句之间的分隔符,不是语句的一部分 2、以下叙述中正确的是( ) A)C语言比其他语言高级

B)C语言可以不用编译就能被计算机识别执行

C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D)C语言出现得最晚,具有其他语言的一切优点 3、在一个C程序中( )

A) main函数必须出现在所有函数之前 C) main函数必须出现在所有函数之后

B) main函数可以在任何地方出现 D) main函数必须出现在固定位置

4、以下叙述中正确的( )

A) 构成C程序的基本单位是函数 B) 可以在一个函数中定义另一个函数 C) void main()函数必须放在其它函数之前

D) 所有被调用的函数一定要在调用之前进行定义 5、下列叙述中正确的是( ) A) C语言编译时不检查语法

B) C语言的子程序有过程和函数两种 C) C语言的函数可以嵌套定义 D) C语言所有函数都是外部函数

6、一个C程序的执行是从( )

A)本程序的main函数开始,到main函数结束

B)本程序文件的第一个函数开始,到本程序文件的最后一个函数 C)本程序的main函数开始,到本程序文件的最后一个函数 D)本程序文件的第一个函数开始,到main函数结束 7、以下叙述正确的是( )

A) 在C程序中,main函数必须位于程序的最前面 B) C程序的每行中只能写一条语句 C) C语言本身没有输入输出语句

D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 8、以下叙述不正确的是( )

A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数

D)在C程序中,注释说明只能位于一条语句的后面 9、以下叙述正确的是( )

A)可以把define和if定义为用户标识符

- 2 -

《C语言程序设计》习题集

B)可以把define定义为用户标识符,但不能把if定义为用户标识符 C)可以把if定义为用户标识符,但不能把define定义不用户标识符 D)define和if都不能定义为用户标识符

二、填空题

1、C源程序的基本单位是 。 2、一个C源程序至少包含一个 。

3、在C语言中,输入函数由库函数 完成,输出函数由库函数 完成。 三、编程题

1、编写一个简单的C程序介绍,输出以下信息:

* * * * * * * * * * * * * * * * * * * * * * * * * * *

Welcome to C Programme

* * * * * * * * * * * * * * * * * * * * * * * * * * *

2、编写一个C程序,输入整数a,b两个值,输出两个整数之差。 3、编写一个C程序,输入a、b、c 三个值,输出其中最小者。

- 3 -

《C语言程序设计》习题集

第二章 程序的灵魂——算法

一、选择题

1、以下不能正确计算代数式1sin2(1)值的C语言表达式是( )

32

A)1/3*sin(1/2)*sin(1/2) B)sin(0.5)*sin(0.5)/3

C)pow(sin(0.5),2)/3

D)1/3.0*pow(sin(1.0/2),2)

2、算法具有五个特性,以下选项中不属于算法特性的是( ) A)有穷性 B)简洁性 C)可行性 D)确定性

3、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是( A) 有零个或多个输入 B) 有零个或多个输出 C) 有穷性 D) 可行性 4、与数学式子

3xn对应的C语言表达式是( )

2x1A) 3*x^n(2*x-1)

B) 3*x*n/(2*x-1)

C) 3*pow(x,n)*(1/(2*x-1))

D) 3*pow(n,x)/(2*x-1)

二、填空题

1、在程序中要指定数据的类型和数据的组织形式,也就是 。 2、算法是对 的描述。

3、计算机算法可以分为 和 。 4、循环结构可分为 和 。 三、编程题

1、依次将10个数输入,要求将其中最小的数打印出来,并画出其流程图。 2、求6!的算法并用N-S流程图表示。

3、写出判定2010-2500年中属于闰年的算法,并画出其流程图。 4、写出将1-500之间的素数打印出来的算法,并画出其流程图。 5、用C语言表示两个m和n的最大公约数,并画出其流程图。

6、用C语言表示求 100 即(1+2+3+...+100),并画出其流程图。

nn1

- 4 -

) 《C语言程序设计》习题集

第三章 数据类型、运算符与表达式

一、选择题

1、 在C语言中,不正确的int 类型的常数是( ) A)32768 B)0 C)037 D)0xAF 2、以下选项中合法的字符常量是( ) A)”B” B)'\\010' C)-268 D) D 3、以下选项中,不能作为合法常量的是( )

A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 4、 下列选项中,合法的C语言关键字是( )

A) VAR B) cher C) integer D) default

5、有以下定义语句 double a,b; int w; long c;

若各变量已正确赋值,则下列选项中正确的表达式是( ) A) a=a+b=b++ B) w%(int)a+b C) (c+w)%(int)a D) w=a==b; 6、若有定义:int a=8,b=5,c;,则执行语句c=a/b+0.4;后,c的值为( ) A)1.4 B)1 C)2.0 D)2 7、 以下选项中合法的用户标识符是( )

A) long B) _2Test C) 3Dmax D) A.dat 8、若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是( ) A)a的值是字符C B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符'A'的ASCII值加上1

9、设有定义:float a=2,b=4,h=3;,以下C语言表达式与代数式 计算结果不相符的是( A) (a+b) *h/2 B) (1/2)*(a+b) *h C) (a+b) *h*1/2 D) h/2*(a+b) 10、 以下选项中非法的表达式是( )

A) 0<=x<100 B) i=j==0 C) (char)(65+3) D) x+1=x+1

11、若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是( )

A)1 B)2 C)2.0 D)2.5 12、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是( )

A)a>=10 or a<=0 B)a>=0|a<=10 C)a>=10 &&a<=0 D)a>=10‖a<=0 13、当c的值不为0 时,在下列选项中能正确将c的值赋给变量a、b的是( )

A)c=b=a; B)(a=c)||(b=c); C)(a=c)&&(b=c); D)a=c=b;

14、能正确表示a和b同时为正或同时为负的逻辑表达式是( ) A)(a>=0||b>=0)&&(a<0||b<0) B)(a>=0&&b>=0)&&(a<0&&b<0) C)(a+b>0)&&(a+b<=0) D)a*b>0

15、语句:printf("%d",(a=2)&&(b=-2));的输出结果是( ) A)无输出 B)结果不确定 C)-1 D)1 16、设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )

A)3 B)4 C)11 D)12 17、设 int x=1, y=1; 表达式(!x||y--)的值是( )

- 5 -

)

《C语言程序设计》习题集

A)0 B)1 C)2 18、C语言中运算对象必须是整型的运算符是( )

A)%= B)/ C)=

D)-1 D)〈=

19、已定义ch为字符型变量,以下赋值语句中错误的是( ) A) ch=\"\\\"; B) ch=62+3; C) ch=NULL; D) ch=\"\\xaa\"; 20、有以下程序 void main( ) { int m=12,n=34;

printf(\"%d%d\ printf(\"%d%d\\n\}

程序运行后的输出结果是( ) A)12353514 B)12353513 C)12343514 D)12343513 21、以下程序的输出结果是( ) void main( )

{ int a=4,b=5,c=0,d; d=!a&&!b||!c;

printf("%d\\n",d); } A)1 B)0 C)非0的数 D)-1 22、 以下选项中不属于C语言的类型的是( )

A) signed short int B) unsigned long int C) unsigned int D) long short 23、有以下定义语句 double a,b; int w; long c;

若各变量已正确赋值,则下列选项中正确的表达式是( ) A) a=a+b=b++ B) w%(int)a+b) C) (c+w)%(int)a D) w=a= =b; 24、有以下程序 void main() { char a='a',b; print(\"%c,\ printf(\"%c\\n\}

程序运行后的输出结果是( ) A) b,b B) b,c C)a,b D) a,c 25、 下列程序执行后的输出结果是( )

A) -32767 B) FFFE C) 255 D) -32768 void main( )

{ char x=0xFFFF; printf(\"%d \\n\ 二、填空题

1、以下程序运行后的输出结果是 。

void main()

- 6 -

《C语言程序设计》习题集

{ int a,b,c; a=25; b=025; c=0x25;

printf(\"%d %d %d\\n\}

2、若有语句

int i=-19,j=i%4; printf(\"%d\\n\

则输出结果是 。

3、 以下程序输出的结果是 。

void main()

{ int a=5,b=4,c=3,d;

d=(a>b>c);

printf(\"%d\\n\}

4、设y是int型变量,请写出判断y为奇数的关系表达 。 5、以下程序的输出结果是 。

void main()

{ unsigned short a=65536; int b;

printf(“%d\\n”,b=a); }

6、 有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是________。

c=(a-=(b-5)); c=(a%11)+(b=3);

7、表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 _____________。 8、有如下程序段

int a=14,b=15,x; char c='A';

x=(a&&b)&&(c<'B');

执行该程序段后,x的值为 。

9、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是 。 10、语句:x++;、++x; x=x+1;、x=l+x; ,执行后都使变量x中的值增1,请写出一条同一功能的赋值语句(不得与列举的相同) 。 11、数字字符0的ASCII值为48,若有以下程序

void main()

{ char a='1',b='2'; printf(\"%c,\ printf(\"%d\\n\}

程序运行后的输出结果是 。 12、 void main() {

- 7 -

《C语言程序设计》习题集

printf(\"\\101 \\x42 C\\n\");

printf(\"I say:\\\"How are you?\\\"\\n\"); printf(\"\\\\C Program\\\\\\n\"); printf(\"Turbo \\'C\\'\"); }

程序运行后的输出结果是 。 13、 #define PRICE 12.5 void main()

{ int num=3; float total;

char ch1,ch2=‘D’; total=num*PRICE; ch1=ch2-‘A’+‘a’;

printf(“total=%f,ch1=%c\\n”,total,ch1); } 程序运行后的输出结果是 。 14、#include

void main() { int x,y=7; float z=4;

x=(y=y+6,y/z);

printf(\"x=%d\\n\ }

程序运行后的输出结果是 。 15、 下列程序的输出结果是 。 void main( )

{ double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(\"%d \\n\ }

三、求下列表达式的值

1、设x=2.5,a=7,y=4.7, x+a%3*(int)(x+y)%2/4

2、设a=2,b=3,x=3.5,y=2.5 (float)(a+b)/2+(int)x%(int)y

3、设a=24, ① a+=a-=a*=a ②a/=a+a ③a%=(n%=2),n的值等于5 四、编程题

要将“Glmre”进行解密,解密的规则是:用原来的字母前面第4个字母代替原来的 字母,例如:字母”E“前面的字母是”A“,用“A”代替“E”。因此“Glmre”应解密为“China”。请编一程序,用赋处值的方法使c1,c2,c3,c4,c5五个变量的值分别为’G’、’l’、’m’、’r’、’e’经过运算,是c1,c2,c3,c4,c5 分别变成 ‘C’、‘h’、‘i’、‘n’、‘a’,并输出。

- 8 -

《C语言程序设计》习题集

第四章 最简单的程序设计——顺序程序设计

一、选择题

1、以下叙述中错误的是( ) A)C语句必须以分号结束 B)复合语句在语法上被看作一条语句 C)空语句出现在任何位置都不会影响程序运行 D)赋值表达式末尾加分号就构成赋值语句

2、以下叙述中正确的是( )

A) C语言的源程序不必通过编译就可以直接运行

B) C语言中的每条可执行语句最终都将被转换成二进制的机器指令 C) C源程序经编译形成的二进制代码可以直接运行 D) C语言中的函数不可以单独进行编译 3、以下能正确定义且赋初值的语句是( ) A)int n1=n2=10; B)char c=32; C)float f=f+1.1; D)double x=12.3E2.5; 4、有以下程序 void main() { char a1='M', a2='m'; printf(\"%c\\n\

}

以下叙述中正确的是( ) A)程序输出大写字母M B)程序输出小写字母m C)格式说明符不足,编译出错 D)程序运行时产生出错信息 5、 以下程序段的输出结果是( )

int a=1234; printf(\"%2d\\n\

A) 12 B) 34 C) 1234

D) 提示出错、无结果

6、 以下程序的输出结果是( )

void main( )

{ int a=5,b=4,c=6,d;

printf(\"%d\\n\} A) 5 B) 4 C) 6 D) 不确定 7、下列程序执行后的输出结果是(小数点后只写一位) ( )

A)6 6 6.0 6.0 B) 6 6 6.7 6.7 C) 6 6 6.0 6.7 D) 6 6 6.7 6.0 void main( )

{ double d;float f; long l; int i; i=f=l=d=20/3;

printf(\"%d %ld %f %f \\n\",i,l,f,d); }

8、语句printf(\"a\\bre\\'hi\\'y\\\\\\bou\\n\");的输出结果是( ) (说明:'\\b'是退格符)

- 9 -

《C语言程序设计》习题集

A)a\\bre\\'hi\\'y\\\\\\bou B)a\\bre\\'hi\\'y\\bou C)re'hi'you D)abre'hi'y\\bou 9、有如下程序

void main( )

{ int y=3,x=3,z=1;

printf(\"%d %d\\n\",(++x,y++),z+2); }

运行该程序的输出结果是( ) A)3 4 B)4 2 C)4 3 D)3 3

10、若变量已正确说明为float类型,要通过语句scanf(\"%f%f %f \",&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:( )

A)10<回车>22<回车> 33<回车> B)10.0,22.0,33.0<回车> C)10.0<回车>22.0 33.0<回车> D)10 22<回车> 33<回车> 二、填空题

1、以下程序运行后的输出结果是 void main( ) { char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(\"%d %f\\n\ } 2、 以下程序运行后的输出结果是 void main( ) { char m;

m=‘B’+32; printf(\"%c\\n\}

3、以下程序运行后的输出结果是 void main( ) { int x=0210;

printf(\"%X\\n\ }

4、以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是 。

#include void main( )

{ int i=0,j=0,k=0;

scanf(\"%d%*d%d\ printf(\"%d,%d,%d\\n\}

5、 已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>.输出结果

是 。 #include \"stdio.h\" void main( ) { char a,b;

a=getchar(); scanf(\"%d\ a=a-'A'+'0';

- 10 -

《C语言程序设计》习题集

b=b*2;

printf(\"%c %c\\n\}

6、有以下程序

#include void main( )

{ char ch1,ch2; int n1,n2;

ch1=getchar(); ch2=getchar(); n1=ch1-‘0’; n2=n1*10+(ch2-‘0’); printf(“%d\\n”,n2); }

程序运行时输入:12<回车>,执行后输出结果是 。 7、 以下程序的输出结果是___________________。 void main( ) {int a=177;

printf(\"%o\\n\",a); }

8、以下程序的输出结果是___________________。

void main( )

{int a=5,b=4,c=3,d; d=(a>b>c);

printf(\"%d\\n\",d); }

9、以下程序的输出结果是______________。 void main( )

{ int a=1, b=2;

a=a+b; b=a-b; a=a-b;

printf(\"%d,%d\\n\", a, b ); }

10、下列程序的输出结果是16.00,请填空。 void main( )

{ int a=9, b=2;

float x=_________, y=1.1,z; z=a/2+b*x/y+1/2;

printf(\"%5.2f\\n\", z ); }

11、已有定义int a; float b, x; char c1,c2;为使a=3,b=6.5,x=12.6,c1=’a’,c2=’A’,正确的scanf函数调用语句是 ,输入数据的方式 。 三、编程题

1、设圆的半径r=2.5,圆柱高h=5,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要有文说明,取小数点后2位数字。请编程实现。

2、输入一个华氏温度,要求输出摄氏温度,公式为c=5/9(F-32),输出要有文字说明,取2位小数。

- 11 -

《C语言程序设计》习题集

第五章 选择结构程序设计

一、选择题

1、设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=a>b)&&(n=c>d)运算后,n的值为( )

A) 0 B) 1 C)2 D) 3 2、若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式aA) 1 B) 2 C) 3 D) 4 3、有以下程序 void main()

{ int i=1,j=1,k=2;

if((j++‖k++)&&i++) printf(\"%d,%d,%d\\n\}

执行后输出结果是( ) A) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,3

4、有以下程序

void main()

{ int a=15,b=21,m=0; switch(a%3)

{ case 0:m++;break; case 1:m++; switch(b%2)

{ default:m++;

case 0:m++;break; }

}

printf(“%d\\n”,m); }

程序运行后的输出结果是( ) A) 1 B) 2 C) 3

D) 4

5、阅读以下程序: void main() { int x;

scanf(“%d”,&x);

if(x--<5) printf(“%d”,x); else printf(“%d”,x++); }

程序运行后,如果从键盘上输人5,则输出结果是( ) A)3 B) 4 C) 5 D) 6 6、有以下程序段

- 12 -

《C语言程序设计》习题集

int k=0,a=1,b=2,c=3;

k=ac ? c:k; 执行该程序段后,k的值是( ) A)3 B)2 C)1 D)0 7、如下程序 void main( )

{ int x=1,a=0,b=0; switch(x)

{ case 0:b++; case 1:a++;

case 2:a++;b++; }

printf(\"a=%d,b=%d\\n\",a,b); }

该程序的输出结果是( ) A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 8、有如下程序 void main( )

{ float x=2.0,y; if(x<0.0) y=0.0;

else if(x<10.0) y=1.0/x; else y=1.0;

printf(\"%f\\n\",y); }

该程序的输出结果是( ) A)0.000000 B)0.250000 C)0.500000 9、 有如下程序 void main( )

{ int a=2,b=-1,c=2; if(aif(b<0) c=0; else c++;

printf(\"%d\\n\",c); }

该程序的输出结果是( ) A)0 B)1 C)2 10、若执行以下程序时从键盘上输入9,则输出结果是( )

A)11 B)10 C)9 void main( ) { int n;

scanf(\"%d\",&n);

if(n++<10) printf(\"%d\\n\",n); else printf(\"%d\\n\",n--); }

- 13 -

D)a=2,b=2

D)1.000000 D)3 D)8

《C语言程序设计》习题集

1x011、 有一函数,y0x0 ,以下程序段中不能根据x值正确计算出y值的是

1x0A) if(x>0) y=1;

B) y=0;

else if(x==0) y=0; if(x>0) y=1;

else y=-1; else if(x<0) y=-1; C)y=0;

D)if(x>=0) if(x>=0); if(x>0) y=1; if(x>0) y=1 ; else y=0;

else y=-1;

else y=-1;

12、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是( A) abs(x-y)<10 B) x-y>-10&& x-y<10 C) @(x-y)<-10||!(y-x)>10 D) (x-y)*(x-y)<100 13、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是( ) A) 6 B) 0 C) 2 D) 1 14、若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是( ) A) switch(a+b) B) switch(a*a+b*b) { case 1:y=a+b; break; {case 3:

case 0:y=a-b; break; case 1:y=a+b;break; } case 3:y=b-a,break; }

C) switch(a) D) switch(a-b) { case c1 :y=a-b; break; {default:y=a*b;break case c2: x=a*d; break; case 3:case 4:x=a+b;break; default:x=a+b; case 10:case 11:y=a-b;break; } } 15、有以下程序 void main() { int k=5,n=0; while(k>0) { switch(k) { default : break; case 1 : n+=k; case 2 : case 3 : n+=k; } k--; } printf(\"%d\\n\ }

程序运行后的输出结果是( ) A)0 B)4 C)6 D)7 二、填空题

1、 以下程序运行后的输出结果是 _____ - 14 -

)

《C语言程序设计》习题集

void main() {

int a=3,b=4,c=5,t=99;

if(b}

2、以下程序运行后的输出结果是 ______ 。

void main()

{ int x=1,y=0,a=0,b=0; switch(x)

{case 1:switch(y) { case 0:a++; break; case 1:b++; break;

}

case 2:a++;b++; break; }

printf(\"%d %d\\n\} 3、有以下程序

void main( )

{ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%d\\n”,x); }

执行后输出结果是_______。 4、若有以下程序

void main()

{ int a=4,b=3,c=5,t=0; if(aprintf(\"%d %d %d\\n\}

执行后输出结果是 ____ 。 5、以下程序运行后的输出结果是 。

void main()

{ int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(“%d,%d \\n”,x,y); }

6、 以下程序运行后的输出结果是 _______ - 15 -

《C语言程序设计》习题集

void main() { int a, b, c;

a=10;b=20;c=(a % b<1)||(a/b>1); printf(\"%d %d %d\\n\" ,a ,b ,c); }

7、 以下程序运行后的输出结果是 _______ 。

void main() { int p=30;

printf (“%d\\n”,(p/3>0 ? p/10 : p%3)); }

8、 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式

_________ 。

9、 若从键盘输入58,则以下程序输出的结果是____________。

void main( ) { int a;

scanf(\"%d\",&a);

if(a>50) printf(\"%d \",a); if(a>40) printf(\"%d \",a); if(a>30) printf(\"%d \",a); }

10、下列程序段的输出结果是_____________。

int n='c'; switch(n++)

{ default: printf(\"error\");break;

case 'a': case 'A': case 'b': case 'B': printf(\"good\");break; case 'c': case 'C': printf(\"pass\"); case 'd': case 'D': printf(\"warn\"); } 三、编程题

1、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 2、编程输出9*9口诀。

3、编程实现以下功能:读入两个运算符(data和data2)及一个运算符(op),计算表达式data op data2的值,其中op可以为+,-,*,/(用switch语句实现)。

4、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

5、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

- 16 -

《C语言程序设计》习题集

第六章 循环控制

一、选择题

1、以下叙述正确的是( )

A)do-while语句构成的循环不能用其它语句构成的循环代替。 B)do-while语句构成的循环只能用break语句退出。

C)用do-while语句构成的循环,在while后的表达式为非零时结束循环。 D)用do-while语句构成的循环,在while后的表达式为零时结束循环。 2、以下程序的输出结果是( ) A)2 0 B)3 1 C)3 2 1 D)2 1 0 #include \"stdio.h\" void main( ) { int n=4; while(n--)

printf(\"%d\

}3、以下程序的输出结果是( ) A)#*#*# B)##### C)***** D)*#*#* void main( ) { int i;

for(i=1;i<6;i++)

{ if(i%2) {printf(\"#\");continue;} printf(\"*\"); }

printf(\"\\n\"); }

4、以下程序的输出结果是( )

A)编译不通过,无输出 B)aceg C)acegi D)abcdefghi void main( ) { int i;

for(i='A';i<'I';i++,i++) printf(\"%c\",i+32); printf(\" \\n\"); }

5、有如下程序

void main( ) { int i,sum;

for(i=1;i<=3;sum++) sum+=i; printf(\"%d\\n\",sum); }

该程序的执行结果是( ) A)6 B)3 C)死循环 D)0 6、设有以下程序运行后,可得到的结果( )

void main()

- 17 -

《C语言程序设计》习题集

{ int num=0; while (num<=2) {num++;

printf(“%d\\n”,num); } }

A)1 B)1 C)1 D)1 2 2 2

3 3 4

7、有如下程序 void main( ) { int n=9;

while(n>6) {n--;printf(\"%d\",n);} }

该程序段的输出结果是( ) A)987 B)876 C)8765 D)9876 8、有以下程序段 int k=0;

while(k=1) k++;

while 循环执行的次数是 A)无限次 B)有语法错,不能执行 C)一次也不执行 D)执行1次 9、有以下程序段

int x=3; do

{ printf(\"%d\其输出结果是( ) A)1 B)3 0 C)1 2 D)死循环 10、t为int类型,进人下面的循环之前,t的值为0 while( t=l ) { ……}

则以下叙述中正确的是

A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合 D)以上说法都不对 11、有如下程序 void main( ) { int x=23; do

{ printf(\"%d\",x--);}while(!x);} 该程序的执行结果是( ) A)321 B)23 C)不输出任何内容 D)陷入死循环 12、 要求以下程序的功能是计算: s1main ()

- 18 -

111... 2310《C语言程序设计》习题集

{ int n; float s; s=1.0;

for(n=10;n>1;n--) s=s+1/n;

print(\"%6.4f\\n\}

程序运行后输出结果错误,导致错误结果的程序行是( ) A) s=1.0; B) for(n=10;n>1;n--) C) s=s+1/n; D)printf(\"%6.4f/n\、有以下程序 void main() { int i=0,s=0; do{

if(i%2){i++;continue;} i++; s +=i;

}while(i<7); printf(\"%d\\n\}

执行后输出结果是( ) A) 16 B) 12 C) 28 14、以下程序中,while循环的循环次数是( )

main ( ) { int i=0; while(i<10)

{ if(i<1) continue;

if(i==5) break; i++; } ...... }

A) 1 B) 10

C) 6 D) 死循环,不能确定次数 二、填空题

1、以下程序的输出结果是_________________ #include \"stdio.h\" void main( ) {int s,i;

for(s=0,i=1;i<3;i++,s+=i); printf(\"%d\\n\}2、设有以下程序:

void main( ) { int n1,n2;

scanf(\"%d\",&n2);

- 19 -

D) 21 13 《C语言程序设计》习题集

while(n2!=0) { n1=n2%10; n2=n2/10;

printf(\"%d\",n1);} }

程序运行后,如果从键盘上输入1298;则输出结果为__________________ 3、 要使以下程序段输出10个整数,请填入一个整数。 for(i=0;i<=___________ ;printf(\"%d\\n\",i+=2));

4、 若输入字符串:abcde<回车>,则以下while循环体将执行____________ 次。 while((ch=getchar( ))== 'e') printf(\"*\"); 5、以下程序段的执行结果是( ) int a,y; a=10;y=0; do

{ a+=2;y+=a;

printf(\"a=%d y=%d\\n\",a,y); if(y>20) break; } while(a=14);

6、以下程序

void main() { int i;

for(i=0;i<3;i++) switch(i) { case 1: printf(\"%d\ case 2: printf(\"%d\ default: printf(\"%d\ } }

执行后输出结果是 。 7、以下程序的输出结果是 。

void main( ) {int a=0,j;

for(j=0;j<4;j++) { switch( j ) {case 0: case 3:a+=2; case 1:

case 2:a+=3; default:a+=5; } }

printf(\"%d\\n\}

8、以下程序的输出结果是 。

- 20 -

《C语言程序设计》习题集

#include \"stdio.h\" void main( ) {int i=0,a=0; while(i<20) { for(;;)

{if((i%10)==0) break; else i--; }

i+=11;a+=i; }

printf(\"%d\\n\}

9、有以下程序

void main() { int k=4,n=4; for( ; nif(n%3!=0) continue; k--; }

printf(\"%d,%d\\n\}

程序运行后的输出结果是 。 10、以下程序运行后的输出结果是 。

void main() { int x=15;

while(x>10 && x<50) { x++;

if(x/3){x++;break;} else continue; }

printf(“%d\\n”,x); }

三、编程题

1、输入两个正整数m和n,求其最大公约数和最小公倍数。

2、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 3、一个三位数,其各位数字立方和等于该数本身。 4、求1!+2!+3!+4!+...+20!

5、 有一分数序列2/1,3/5,5/3,8/5,13/8,21/13…..求出这个数列的前20项。 6、把100~200之间的不能被3整除的数输出。

7、任意输入一个正整数,要求判断该正整数是否是另一个整数的平方。

8、编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。

- 21 -

《C语言程序设计》习题集

第七章 数 组

一、选择题

1、下列描述中不正确的是( )

A)字符型数组中可以存放字符串

B)可以对字符型数组进行整体输入、输出 C)可以对整型数组进行整体输入、输出

D)不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值 2、设有数组定义:char array [ ]=\"China\"; 则数组 array所占的空间为( A)4个字节 B)5个字节 C)6个字节 D)7个字节 3、以下不能正确定义二维数组的选项是( ) A) int a[2][2]={{1},{2}}; B) int a[][2]={1,2,3,4}; C) int a[2][2]={{1},2,3}; D) int a[2][]={{1,2},{3,4}}; 4、以下程序的输出结果是( ) A)1,5,9, B)1,4,7, C)3,5,7, D)3,6,9,void main( )

{ 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]); } 5、以下程序段的输出结果是( ) char s[ ]= \"\\\\141\\141abc\\"; printf(\"%d\\n\",strlen(s)); A)9 B)12

C)13 D)14

6、有以下程序 void main() {

int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf(\"%d\\n\}

程序运行后的输出结果是( ) A)42 B)45 C)56

D)60

7、有以下程序 void main()

{ char a[7]=\"a0\\0a0\\0\";int i,j; i=sizeof(a); j=strlen(a); printf(\"%d %d\\n\}

程序运行后的输出结果是( ) A)2 2 B)7 6 C)7 2 D)6 2

8、 有以下程序

int f(int a)

- 22 -

)

《C语言程序设计》习题集

{ return a%2; } void main()

{ int s[8]={1,3,5,2,4,6},i,d=0; for (i=0;f(s[i]);i++) d+=s[i]; printf(\"%d\\n\}

程序运行后的输出结果是( ) A) 9 B) 11 C) 19 D) 21 9、以下程序的输出结果是( )

A)20 B)21 C)22 D)23 void main( )

{ int i,k,a[10],p[3]; k=5;

for (i=0;i<10;i++) a[i ]=i;

for (i=0;i<3;i++) p[i ]=a[i *(i+1)]; for (i=0;i<3;i++) k+=p[i] *2; printf(\"%d\\n\",k); }

10、以下不能正确进行字符串赋初值的语句是( ) A)char str[5]= \"good!\" ; B)char str[ ]= \"good!\"; C)char *str=\"good!\"; D)char str[5]={ 'g','o','o','d'}; 11、有以下程序

void main( )

{ char a[]=”abcdefg”,b[10]=”abcdefg”; printf(“%d %d\\n”,sizeof(a) ,sizeof(b)); }

执行后输出结果是( ) A) 7 7 B) 8 8 C) 8 10 12、 以下程序的输出结果是( )

#include #include void main()

{ char b1[8]=\"abcdefg\while (--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\} A) 8 B) 3 C) 1 D) 7 13、程序

void main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2){k=k+p[i];i++;} printf(\"%d\\n\}

- 23 -

D) 10 10

《C语言程序设计》习题集

执行后输出结果是( ) A) 58 B) 56 C) 45 D) 24 14、以下能正确定义数组并正确赋初值的语句是( ) A) int N=5,b[N][N]; B) int a[1][2]={{1},{3}}; C) int c[2][]={{1,2},{3,4}}; D) int d[3][2]={{1,2},{34}}; 15、定义:int aa[ 8],则以下表达式中不能代表数组元aa[1]的地址的是( ) A) &aa[0]+1 B) &aa[1] C) &aa[0]++ D) aa+1 16、有以下程序 void sort(int a[], int n) { int i, j ,t; for (i=0; i程序运行后的输出结果是( ) A)1,2,3,4,5,6,7,8,9,10, B)1,2,7,6,3,4,5,8,9,10, C)1,2,7,6,5,4,3,8,9,10, D)1,2,9,8,7,6,5,4,3,10, 17、有如下程序

main ( )

{ int n[5]={0,0,0},i,k=2;

for(i=0;i该程序的输出结果是( )

A) 不确定的值 B) 2 C) 1 D) 0 18、已有定义:char a[]=\"xyz\以下叙述中正确的是( ) A)数组a和b的长度相同 B)a数组长度小于b数组长度 C)a数组长度大于b数组长度 D)上述说法都不对

19、s12和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是( ) A) if(s1>s2)S; B) if(strcmp(s1,s2))S; C) if(strcmp(s2,s1)>0) S; D) if(strcmp(s1,s2)>0)S; 20、 以下程序的输出结果是( )

void main()

{ char st[20]= “hello\\0\\\\\”;

printf(%d %d \\n”,strlen(st),sizeof(st));

- 24 -

《C语言程序设计》习题集

} A) 9 9

B) 5 20 C) 13 20 D) 20 20

二、填空题

1、以下程序运行后的输出结果是 。

#include \"string.h\" void main() {

char ch[]=\"abc\ for(i=0;i<3;i++) strcpy(x[i],ch);

for(i=0;i<3;i++) printf(\"%s\ printf(\"\\n\"); }

2、以下程序运行后的输出结果是 。

void main()

{ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0,j=0,s=0; while(i++<4) {

if(i==2||i==4) continue; j=0;

do{ s+= a[i][j]; j++; } while(j<4); }

printf(\"%d\\n\}

3、以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。

void main()

{ int i,a[20],sum,count; sum=count=0;

for(i=0;i<20;i++) scanf(\"%d\ ); for(i=0;i<20;i++) { if(a>0) { count++; sum+= ; } }

printf(\"sum=%d,count=%d\\n\} 4、以下程序运行后的输出结果是 。

void main()

{ int i, n[]={0,0,0,0,0}; for(i=1;i<=4;i++)

{ n[i]=n[i-1]*2+1;

printf(“%d ”,n[i]);

- 25 -

《C语言程序设计》习题集

} }

5、以下程序运行后的输出结果是 。

void main()

{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++)

for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++)

{ for(j=0;j<3;j++) printf(\" %d \printf(\"\\n\"); } }

6、若有以下程序

void main()

{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(a[i][j]<0)continue; if(a[i][j]==0)break; s+=a[i][j]; } } printf(\"%d\\n\}

执行后输出的结果是 。

7、 若有定义语句: char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式)

while(s[i]) { d[j]= ; j++;} d[j]=0; 8、下列程序段的输出结果是 void main()

{ char b[]=”Hello,you”; b[5]=0;

printf(“%s \\n”, b ); }

9、 当执行下面的程序时,如果输入ABC,则输出结果是 。

#include “stdio.h” #include “string.h” void main()

{ char ss[10]=“1,2,3,4,5”;

- 26 -

《C语言程序设计》习题集

gets(ss); strcat(ss, “6789”); printf(“%s\\n”,ss); }

10、有如下程序,输出为 。

main( )

{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++)

for(j=0;j11、该程序的输出结果是 。

void void main( ) {char s[ ]= \"abcdef \"; s[3]= '\\0';

printf(\"%s\\n\",s); }

12、以下程序的输出结果是 void main( )

{char c [3][5]={ \"AAAA\",\"BBB\",\"CC\; printf(\"\\\"%s\\\"\\n\",ch[1]); }

三、编程题

1、编程实现将20个无序的数编程由大到小排列的顺序。 2、读10个整数存入数组,找出其中最大值和最小值。

3、通过赋初值按行顺序给2╳3的二维数组赋予2、4、6、…等偶数,然后按列的顺序输出

该数组。 4、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 5、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 6、 求一个3╳3的整形矩阵对角线元素之和。

7、有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中大写字母、小写字母、数字、空格以及其他字符的个数。 8、编程实现将两个字符串连接起来。(不用strcat函数实现)

- 27 -

《C语言程序设计》习题集

第八章 函数

一、选择题

1、设函数fun的定义形式为: void fun(char ch, float x ) { … }

则以下对函数fun的调用语句中,正确的是( )。 A)fun(\"abc\ B)t=fun('D',16.5); C)fun('65',2.8); D)fun(32,32);

2、以下关于函数的叙述中正确的是( )。

A)每个函数都可以被其它函数调用(包括main函数) B)每个函数都可以被单独编译 C)每个函数都可以单独运行

D)在一个函数内部可以定义另一个函数

3、在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则( )

A) 称为函数的直接递归调用 B) 称为函数的间接递归调用 C) 称为函数的循环调用 D) C语言中不允许这样的递归调用

4、有以下程序: int a=2; int f(int n)

{ static int a=3; int t=0;

if(n%2){ static int a=4; t += a++; } else { static int a=5; t += a++; } return t+a++; }

void main() { int s=a, i;

for( i=0; i<3; i++) s+=f(i); printf(\"%d\\n\}

程序运行后的输出结果是( )。 A)26 B)28 C)29

D)24

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- 28 -

《C语言程序设计》习题集

void main( )

{ int a=’9’,b=’8’,c=’7’;

printf(“%c\\n”,fun(fun(a,b) ,fun(b,c) )); }

程序的执行结果是( )。 A) 函数调用出错 B)8 C)9

D)7

7、有以下程序

void swap1(int c[]) { int t;

t=c[0];c[0]=c[1];c[1]=t; }

void swap2(int c0,int c1) { int t;

t=c0;c0=c1;c1=t; }

void main( )

{ int a[2]={3,5},b[2]={3,5}; swap1(a) ; swap2(b[0],b[1]);

printf(“%d %d %d %d\\n”,a[0],a[1],b[0],b[1]); }

其输出结果是( )。

A) 5 3 5 3 B) 5 3 3 5 C) 3 5 3 5 D) 3 5 5 3 8、有以下程序

int f(int b[][4]) { int i,j,s=0;

for(j=0;j<4;j++) { i=j;

if(i>2) i=3-j; s+=b[i][j]; }

return s; }

void main( )

{ int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\\n”,f(a) ); }

执行后的输出结果是( )。 A) 12 B) 11 C) 18 D) 16 9、有以下程序:

void sort(int a[],int n) { int i,j,t;

for(i=0;iif(a[i]- 29 -

《C语言程序设计》习题集

}

void main()

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);

for(i=0;i<10;i++) printf(“%d”,aa[i]); printf(“\\n”); }

其输出结果是( )。 A) 1,2,3,4,5,6,7,8,9,10, B) 10,9,8,7,6,5,4,3,2,1, C) 9,2,7,4,5,6,3,8,1,10, D) 1,10,3,8,5,6,7,4,9,2,

10、若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是( )。 A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参 C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参 11、以下叙述中正确的是( )。

A) 全局变量的作用域一定比局部变量的作用域范围大

B)静态(static)类别变量的生存期贯穿于整个程序的运行期间 C)函数的形参都属于全局变量

D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值 12、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。 A) void B) int C) float D) double 13、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序

void sort(int a[],int n) { int i,j,t;

for(i=0;iif(a[i]void main()

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) print(“%d,”,aa[i]); printf(‘\\n”); }

程序运行后的输出结果是( )。 A)1,2,3,4,5,6,7,8,9,10 B) 10,9,8,7,6,5,4,3,2,1, C) 1,2,3,8,7,6,5,4,9,10 D) 1,2,10,9,8,7,6,5,4,3 14、有以下程序

void f(int a[],int i,int j) { int t; if(i{ t=a[i]; a[i]=a[j];a[j]=t; f(a,i+1,j-1); } }

void main( )

- 30 -

《C语言程序设计》习题集

{ int i,aa[5]={1,2,3,4,5}; f(aa,0,4);

for(i=0;i<5;i++) printf(“%d,”,aa[i]); printf(“\\n”); }

执行后输出结果是( )。

A) 5,4,3,2,1, B) 5,2,3,4,1, C) 1,2,3,4,5, D) 1,2,3,4,5, 15、有以下程序

int f(int n)

{ if (n==1) return 1; else return f(n-1)+1; }

void main() { int i,j=0;

for(i=1;i<3;i++) j+=f(i); printf(“%d\\n”,j); }

程序运行后的输出结果是( )。 A) 4 B) 3 C) 2

D) 1

16、有以下程序

void main()

{ char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\\0’}; int i,j; i=sizeof(a); j=strlen(a); printf(“%d,%d\\n”, i,j); }

程序运行后的输出结果是( )。 A)9,9 B)8,9 C)1,8 D)9,8 17、以下程序的输出的结果是( )。

int x=3; void main() { int i;

for (i=1;iincre( )

{ static int x=1;

x*=x+1;

printf(\" %d\}

A) 3 3 B) 2 2 C) 2 6 18、以下程序的输出结果是( )。

int a, b; void fun()

{ a=100; b=200; } void main()

{ int a=5, b=7;

fun();

- 31 -

D) 2 5

《C语言程序设计》习题集

printf(“%d%d \\n”, a,b);

}

A) 100200

B) 57

C) 200100

D) 75

二、填空题

1、有以下程序 int sub(int n) { return (n/10+n%10); } void main() { int x,y; scanf(\"%d\ y=sub(sub(sub(x))); printf(\"%d\\n\ }

若运行时输入:1234<回车>,程序的输出结果是

2、以下程序运行后的输出结果是 int f(int a[], int n)

{ if (n >= 1) return f(a, n-1)+a[n-1]; else return 0; }

void main()

{ int aa[5]={1,2,3,4,5}, s;

s=f(aa, 5); printf(\"%d\\n\} 3、以下程序运行后的输出结果是 fun(int a) {

int b=0;

static int c=3; b++; c++; return (a+b+c); }

void main() {

int i,a=5;

for(i=0;i<3;i++)

printf(\"%d %d \ printf(\"\\n\"); }

4、以下程序的运行结果是 #include void main()

{ int k=4, m=1, p;

p=func(k,m); printf(\"%d,\ p=func(k,m); printf(\"%d \\n\ }

func(int a, int b)

- 32 -

《C语言程序设计》习题集

{ static int m=0, i=2; i+=m+1; m=i+a+b; return m; }

5、函数fun的功能是计算x。

double fun(double x,int n) { int i; double y=1;

for(i=1;i<=n;i++) y=y*x; return y; }

主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a4 + b4 -(a+b)3。实现这一计算的函数调用语句为 。 6、以下程序运行后的输出结果是 int a=5; fun(int b)

{ static int a=10; a+=b++;

printf(\"%d\}

void main() { int c=20; fun(c); a+=c++;

printf(\"%d\\n\}

n三、编程题

1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用两个函数,并输出结果,两个整数由键盘输入。

2、写一个判断素数的函数在主函数输入一个整数,输出是否是素数的信息。 3、写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

4、写一函数,输入一个4位数字,要求输出4个数字字符,但每两个数字间有一个空格。如输入2008,应输出“2 0 0 8”。

- 33 -

《C语言程序设计》习题集

第九章 预处理命令

一、选择题

1、以下叙述中正确的是( )。

A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令

C)宏名必须用大写字母表示 D)宏替换不占用程序的运行时间 2、有如下程序

#define N 2

#define M N+1 #define NUM 2*M+1 #void main() { int i;

for(i=1;i<=NUM;i++)printf(“%d\\n”,i); }

该程序中的for循环执行的次数是( )。

A) 5 B) 6 C) 7 3、有以下程序

# define f(x) (x*x) void main() { int i1, i2;

i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ; printf(\"%d, %d\\n\ }

程序运行后的输出结果是( )。

A)64, 28 B)4, 4

C)4, 3 二、填空题

1、以下程序运行后的输出结果是 。

#define S(x) 4*x*x+1 void main() { int i=6,j=8;

printf(\"%d\\n\}

2、以下程序中, for循环体执行的次数是 。#define N 2 #define M N+1

#define K M+1*M/2 void main() { int i;

for(i=1;i- 34 -

D) 8 D)64, 64

《C语言程序设计》习题集

3、以下程序的输出结果是 。

#define MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m void main() { int i=2,j=3;

printf(\"%d\\n\} 4、下面程序的运行结果是 #define N 10 #define s(x) x*x #define f(x) (x*x) void main() { int i1,i2;

i1=1000/s(N); i2=1000/f(N); printf(“%d %d\\n”,i1,i2); }

5、设有如下宏定义

#define MYSWAP(z,x,y) {z=x; x=y; y=z;} 以下程序段通过宏调用实现变量a、b内容交换,请填空。

float a=5,b=16,c; MYSWAP( , a, b); 6、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每

一行上的最大值。请填空。

#define N 3 #define M 4

void LineMax(int x[N][M]) { int i,j,p;

for(i=0; ifor(j=1; jif(x[i][p]void main()

{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1}; } 三、编程题

1、定义一个带参数的宏,使两个参数的值互换,并写程序,输入两个数作为使用宏 时的实参。输出已交换后的两个值。

2、分别用函数和带参的宏,从3个数中找出最大数。

3、给年份year,定义一个宏,以判断该年份是否闰年,用带参的宏实现。

- 35 -

《C语言程序设计》习题集

第十章 指针

一、选择题

1、若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是( ) A)p+1 B)a+1 C)a++ D)++p 2、设有定义:int n1=0,n2,*p=&n2,*q=&n1;以下赋值语句中与n2=n1;语句等价的是 A)*p=*q; B)p=q; C)*p=&n1; D)p=*q; ( )。 3、有以下程序 float f1(float n) { return n*n; } float f2(float n) { return 2*n; } void main()

{ float (*p1)(float),(*p2)(float),(*t)(float), y1, y2; p1=f1; p2=f2; y1=p2( p1(2.0) );

t = p1; p1=p2; p2 = t; y2=p2( p1(2.0) );

printf(\"%3.0f, %3.0f\\n\ }

程序运行后的输出结果是( )。

A)8, 16 B)8, 8 C)16, 16 D)4, 8

4、有以下程序

void main() {

int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i;

for(i=0;i<3;i++)

printf(\"%d \}

程序运行后的输出结果是( )。 A)0 1 2 B)1 2 3 C)2 3 4

D)3 4 5

5、以下语句或语句组中,能正确进行字符串赋值的是( )。 A)char *sp; *sp=\"right!\"; B)char s[10]; s=\"right!\"; C)char s[10]; *s=\"right!\"; D)char *sp=\"right!\"; 6、有以下程序

void main() {

char s[]=\"159\ p=s;

- 36 -

《C语言程序设计》习题集

printf(\"%c\ printf(\"%c\}

程序运行后的输出结果是( )。

A)15 B)16

C)12

D)59

7、有以下函数

fun(char *a,char *b) {

while((*a!='\\0')&&(*b!='\\0')&&(*a==*b)) { a++; b++;} return (*a-*b); }

该函数的功能是( )。

A)计算a和b所指字符串的长度之差 B)将b所指字符串复制到a所指字符串中 C)将b所指字符串连接到a所指字符串后面 D)比较a和b所指字符串的大小 8、有以下程序

void main()

{ int a=7,b=8,*p,*q,*r; p=&a;q=&b; r=p; p=q;q=r;

printf(\"%d,%d,%d,%d\\n\}

程序运行后的输出结果是( )。 A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8

D) 7,8,8,7

9、设有定义语句

int x[6]={2,4,6,8,5,7},*p=x,i;

要求依次输出x数组6个元素中的值,不能完成此操作的语句是(A) for(i=0;i<6;i++) printf(\"%2d\B) for(i=0;i<6;i++) printf(\"%2d\C) for(i=0;i<6;i++) printf(\"%2d\D) for(i=0;i<6;i++) printf(\"%2d\ 10、有以下定义和语句

int a[3][2]={1,2,3,4,5,6,},*p[3]; p[0]=a[1];

则*(p[0]+1)所代表的数组元素是( )。 A) a[0][1] B) a[1][0] C) a[1][1] D) a[1][2]

11、有以下程序 void main()

{char s[]=\"ABCD\

for(p=s+1;p程序运行后的输出结果是( )。 A) ABCD B) A C) B

D) BCD

- 37 -

。 ) 《C语言程序设计》习题集

BCD B CD C D D

C D

CD D

12、有以下程序

int a=2; int f(int *a) {return (*a) ++;} void main( ) { int s=0; { int a=5; s+=f(&a) ; }

s+=f(&a) ;

printf(“%d\\n”,s); }

执行后输出结果是( )。 A) 10 B) 9 C) 7 D) 8

13、下面程序把数组元素中的最大值放入a[0]中,则在if 语句中的条件表达式应该是( )

A)p>a B)*p>a[0] C)*p>*a[0] D)*p[0]> *a[0] void main( )

{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,i; for(i=0;i<10;i++,p++) if(________) *a=*p; printf(\"%d\",*a); } 14、 以下程序的输出结果是( )

A)AfghdEFG B)Abfhd C)Afghd D)Afgd #include\"string.h\" void main( )

{ char *p1,*p2,str[50]=\"ABCDEFG\"; p1=\"abcd\"; p2=\"efgh\";

strcpy(str+1,p2+1); strcpy(str+3,p1+3); printf(\"%s\",str); }

15、以下程序中函数scmp的功能是返回形参指针s1和 s2所指字符串中较小字符串的首地址。

#include #include

char *scmp(char *s1, char *s2) { if( strcmp (s1, s2)<0)

return(s1); else return(s2); }

main ()

- 38 -

《C语言程序设计》习题集

{ int i; char string[20], str[3][20]; for(i=0;i<3;i++) gets(str[i]);

strcpy(string,scmp(str[0],str[1]));/*库函数strcpy对字符串进行复制*/ strcpy(string,scmp(string,str[2])); printf(\"%s\\n\}

运行时依次输入:abcd、abba和abc三个字符串,则输出结果为( )。 A) abcd B) abba C) abc D) abca 16、已定义以下函数:

fun(char *p2, char *p1)

{ while((*p2=*p1)!=‘\\0’){p1++;p2++; } } 函数的功能是( )。

A) 将p1所指字符串复制到p2所指内存空间 B) 将p1 所指字符串的地址赋给指针 p2 C) 对p1和p2两个指针所指字符串进行比较

D) 检查p1和p2两个指针所指字符串中是否有‘\\0’ 17、有以下程序

#include “string.h” void main()

{ char s[]=\"\\n123\\\\\";

char *p=“abcde\\0fghjik\\0”;

printf(\"%d,%d,%d\\n\}

执行后输出结果是( )。

A) 赋初值的字符串有错 B) 6,7,12 C) 5,6,5 18、有以下程序

void main()

{ char str[]=\"xyz\

while(*ps)ps++;

for(ps--;ps-str>=0;ps--) puts(ps); }

执行后的输出结果是( )。 A) yz B) z C) z xyz yz yz

xyz

D) 6,6,6

D) x xy xyz

二、填空题

1、已有定义:double *p;,请写出完整的语句,利用malloc函数使p指向两个双精度型 的动态存储单元 。

2、以下函数sstrcat()的功能是实现字符串的连接,即将t所指字符串复制到s所指字符串的

尾部。例如:s所指字符串为abcd,t所指字符串为efgh,函数调用后s所指字符串为abcdefgh。请填空。 # include void sstrcat(char *s, char *t) { int n; n= strlen(s);

- 39 -

《C语言程序设计》习题集

while (*(s+n)= ){s++; t++;} }

3、以下程序运行后的输出结果是 。 #include char *ss(char *s) { char *p, t; p=s+1; t=*s; while(*p) { *(p-1) = *p; p++;} *(p-1)=t; return s; } void main() { char *p, str[10]=\"abcdefgh\"; p = ss(str) ; printf(\"%s\\n\ }

4、以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返

回字符串:yesyes!,否则函数返回字符串:no!,并在主函数中输出.所谓回文即正向与反向的拼写都一样,例如:adgda.请填空. #include \"string.h\"

char *huiwen(char *str) {

char *p1,*p2; int i,t=0; p1=str; p2= for(i=0;i<=strlen(str)/2;i++) if(*p1++!=*p2--) { t=1; break; } if( ) return (\"yes!\"); else return (\"no!\"); }

void main() {

char str[50];

printf(\"Input:\"); scanf(\"%s\ printf(\"%s\\n\ ); } 5、以下程序中,函数 sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。

#define M 2 #define N 4

void SumColumMin(int a[M][N],int *sum) { int i,j,k,s=0; for(i=0;i- 40 -

《C语言程序设计》习题集

for(j=1;jif(a[k][i]>a[j][i]) k=j; s+= ; } =s; }

void main()

{ int x[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin( ); printf(\"%d\\n\}

6、以下程序运行后的输出结果是 void main()

{ char s[ ]=“9876”,*p; for ( p=s ; p

7、若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。

p和s是基类型为int的指针变量。请对以下问题进行填空。

a[0] 22 a[1] a[2] a[3] 33 44 55 a[4] 66 (1)若p已指向存储单元a[1]。通过指针p,给s赋值,使s指向最后一个存储单元a[4]的

语句是 。

(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 。 三、编程题

1、利用指针编写求字符串长度的函数strlen()。

2、利用函数和指针编写一个程序,在main函数中输入一个字符串,在pcopy函数中将此字符串从第n个字符开始到第m个字符为止的所有字符全部显示出来。

3、利用函数和指针编写一个程序,从键盘输入三个字符串,并按由小到大的顺序显示出来。

- 41 -

《C语言程序设计》习题集

第十一章 结构体与共用体

一、选择题

1、有以下程序段 typedef struct NODE { int num; struct NODE *next; } OLD;

以下叙述中正确的是( )。 A)以上的说明形式非法 B)NODE是一个结构体类型 C)OLD是一个结构体类型 D)OLD是一个结构体变量 2、有以下程序 # include struct STU { int num;

float TotalScore; }; void f(struct STU p) { struct STU s[2]={{20044,550},{20045,537}}; p.num = s[1].num; p.TotalScore = s[1].TotalScore; } void main() { struct STU s[2]={{20041,703},{20042,580}}; f(s[0]); printf(\"%d %3.0f\\n\ }

程序运行后的输出结果是( )。 A)20045 537 B)20044 550 C)20042 580 D)20041 703 3、有以下程序 # include struct STU { char name[10];

int num; }; void f(char *name, int num) { struct STU s[2]={{\"SunDan\ num = s[0].num; strcpy(name, s[0].name); } void main() { struct STU s[2]={{\"YangSan\ p=&s[1]; f(p->name, p->num); printf(\"%s %d\\n\ }

程序运行后的输出结果是( )。 A)SunDan 20042 B)SunDan 20044

- 42 -

《C语言程序设计》习题集

C)LiSiGuo 20042 D)YangSan 20041 4、有以下程序 struct STU { char name[10]; int num; float TotalScore; }; void f(struct STU *p) { struct STU s[2]={{\"SunDan\ ++p ; ++q; *p=*q; } void main() { struct STU s[3]={{\"YangSan\ f(s); printf(\"%s %d %3.0f\\n\ }

程序运行后的输出结果是( )。 A)SunDan 20044 550 B)Penghua 20045 537 C)LiSiGuo 20042 580 D)SunDan 20041 703 5、设有如下说明 typedef struct ST { long a; int b; char c[2]; } NEW;

则下面叙述中正确的是( )。 A)以上的说明形式非法 C)NEW是一个结构体类型

B)ST是一个结构体类型

D)NEW是一个结构体变量

6、有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。

struct node

{ int data; struct node *next; } *p,*q,*r;

现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是( )。

A)p->next=q->next; B)p->next=p->next->next; C)p->next=r; D)p=q->next; 7、以下对结构体类型变量td的定义中,错误的是( )。

B)struct aa A)typedef struct aa

{ {

int n; int n;

float m; float m;

} td; }AA;

struct aa td; AA td;

- 43 -

《C语言程序设计》习题集

C)struct

{

int n; float m; }aa;

struct aa td;

D)struct

{

int n;

float m;

}td;

8、有以下说明和定义语句

struct student

{ int age; char num[8];};

struct student stu[3]={{20,\"200401\struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是( )。 A) (p++)->num B) p->num C) (*p).num D) stu[3].age 9、设有以下语句

typedef struct S

{ int g; char h;} T; 则下面叙述中正确的是( )。 A) 可用S定义结构体变量 C)S是struct类型的变量

B)可以用T定义结构体变量

D)T是struct S类型的变量

10、有以下程序

struct STU

{ char name[10]; int num; int Score; };

void main( )

{ struct STU s[5]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}, {“wangYin”,20043,680},{“SunDan”,20044,550}, {“Penghua”,20045,537}},*p[5],*t; int i,j;

for(i=0;i<5;i++) p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++)

if(p[i]->Score>p[j]->Score) { t=p[i];p[i]=p[j];p[j]=t;}

printf(“5d %d\\n”,s[1].Score,p[1]->Score); }

执行后输出结果是( )。

A) 550 550 B) 680 680 C) 580 550 D) 580 680 11、有以下程序

#include struct NODE{ int num;

- 44 -

《C语言程序设计》习题集

struct NODE *next; };

void main( )

{ struct NODE *p,*q,*r;

int sum=0;

p=(struct NODE *)malloc(sizeof(struct NODE)); q=(struct NODE *)malloc(sizeof(struct NODE)); r=(struct NODE *)malloc(sizeof(struct NODE)); p->num=1;q->num=2;r->num=3; p->next=q;q->next=r;r->next=NULL; sum+=q->next->num;sum+=p->num; printf(“%d\\n”,sum); }

执行后的输出结果是( )。 A) 3 B) 4 C) 5 D) 6

12、有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。

struct node { int data

struct node *next ; } *p, *q, *r;

data next ↑p data next ↑q data next ↑r

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 A) r->next=q; q->next=r->next; p->next=r; ( )。 B) q->next=r->next; p->next=r; r->next=q; C) p->next=r; q->next=r->next; r->next=q; D) q->next=r->next; r->next=q; p->next=r; 13、有以下程序

void main()

{ union { unsigned int n; unsigned char c; }u1; u1.c=’A’;

printf(\"%c\\n\}

执行后输出结果是( )。 A) 产生语法错 B) 随机值 14、以下程序的输出结果是( )。

union myun

- 45 -

C) A D) 65

《C语言程序设计》习题集

{ 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(“%d\\n”,a.u.x); } A) 4 B) 5 C) 6 D) 0

15、已知字符0的ASCⅡ码为十六进制的30,下列程序的运行结果是( )。

void main( )

{ union { char ch;

unsigned int k[4]; } x; x.k[0]=0x39; x.k[1]=0x36;

printf(\"%c\\n\",x.ch); } A) 6 B) 9 C) 3 D) 0 16、设有如下枚举类型定义:

enum language { English=6,French,Chinese=1,Japanese,Italian}; 则枚举量Italian的值为( )。

A) 10 B) 4 C) 3 D) 5 17、以下对枚举类型名ee的定义中正确的是( )。 A) enum ee {A,B,C,D}; B) enum ee {'A','B','C','D'}; C) enum ee = {A,B,C,D}; D) enum ee = {'A','B','C','D'};

18、下面对typedef的叙述中不正确的是( )。

A) 用typedef不能定义变量名

B) 用typedef可以定义新的数据类型

C) 用typedef只是将已存在的类型用一个新的标识符来代表 D) 使用typedef有利于程序的通用和移植 19、以下程序的运行结果是( )。

typedef union { long a[2]; int b[4]; char c[8]; } EXAM; void main( )

{ printf(\"%d\\n\",sizeof(EXAM));} A) 32 B) 16 C) 8 D) 报错 二、填空题

- 46 -

《C语言程序设计》习题集

1、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是___,变量p在内存所

占字节数是 。 struct stud

{ char num[6];

int s[4]; double ave; } a,*p; 2、已有定义如下:

struct node { int data;

struct node *next;| } *p;

以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间,请填空。

p=(struct node *) malloc( ___ __ ); 3、下面程序的运行结果是: typedef union student { char name[10]; long sno; char sex;

float score[4]; }STU;

void main() { STU a[5];

printf(“%d\\n”,sizeof(a)); }

三、编程题

1、定义一个结构体变量(包括年,月,日)。计算该日在本年中是第几天,注意闰年 问题。

2、编写一个函数printf,打印一个学生的成绩数组,该数组中有5个学生的数据记录 每个记录包括(num,name,score[3],用主函数输入这些记录,用printf函数输出这些记录 3、有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入10个学生的 数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课 成绩,平均分数)。

- 47 -

《C语言程序设计》习题集

第十二章 位运算

一、选择题

1、以下程序的功能是进行位运算: void main() { unsigned char a, b; a=7^3; b= ~4 & 3;

printf(\"%d %d\\n\ }

程序运行后的输出结果是( )。 A)4 3 B)7 3 C)7 0

D)4 0

2、设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是(

)。A) c1^c2 B) c1&c2 C) ~c2 D) c1|c2 3、有以下程序: void main() { unsigned int a; int b=-1; a=b;

printf(\"%u\}

程序运行后的输出结果是( )。

A) -1 B) 65535

C) 32767

D) -32768

4、有以下程序:

void main( )

{ unsigned char a,b; a=4|3; b=4&3;

printf(“%d %d\\n”,a,b)(; }

执行后输出结果是( )。 A) 7 0 B) 0 7

C) 1 1 D) 43 0

5、有以下程序:

void main()

{ int x=3, y=2,z=1; printf(\"%d\\n\}

程序运行后的输出结果是( )。

A) 3 B) 2 C) 1 D) 0

6、设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是( A) 10101001 B) 10101000 C) 11111101 D) 01010101 7、有以下程序:

void main()

{ unsigned char a,b,c;

- 48 -

) 《C语言程序设计》习题集

a=0x3; b=a|0x8; c=b<<1; printf(“%d%d\\n”,b,c); }

程序运行后的输出结果是( )。 A) –11 12 B) –6 –13 C) 12 24 8、以下程序的输出结果是( )。

void main() { char x=040;

printf(\"%0\\n\}

A) 100 B) 80

D) 11 22

C) 64 D) 32

9、 整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是( )。 A) x || y B) x | y C) x & y D) x ^ y

10、以下程序的输出结果是( )。

A) 0 B) 1 C) 2 D) 3

void main()

{ int x=0.5; char z=’a’;

printf(“%d\\n”, (x&1)&&(z<’z’) ); } 11、设 int b=2;表达式(b>>2)/(b>>1)的值是( )。

A) 0 B) 2 C) 4 D) 8

二、填空题

1、若有运算符<<,sizeof,^,&=,则按优先级由高到低排列为 。 2、设有char a,b;若要通过a&b运算屏蔽掉a中的其它位,只保留第1和第7位(右起为第0位),则b的二进制数是 。

3、测试char型变量a第五位是否为1的表达式是 。

4、把int型变量low中的低字节及变量high中的高字节放入变量s中的表达式是 。 5、以下函数:

unsigned getbits(unsigned x ,unsigned p, unsigned n) { x = ((x<<(p+1-n) & ~((unsigned)~0>>n) ; return (x) ; }

若调用此函数时x=0115032, p=7, n=4, 则函数返回值是 。 6、若x=0123,则表达式(5+(int)(x))&(~2)的值是 。 三、编程题 1、编写一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为: getbits(value,n1,n2)。

value为该16位(两个字节)单元中的数据值,n1为欲取出的起始位,n2为欲取出的结束位 如: getbits(0101675,5,8)表示对八进制101675这个数,取出它从左起的第5位到第8位. 2、写一个函数,对于一个16位的二进制数取出它的奇数位(即从左边起第1,3,5…..15位)。 3、编译一函数来实现左右循环移位.函数名为move,调用方法为: move(value,n)

其中value为要循环位移的数,n为位移的位数.如n<0为左移;n>0为右移.如n=4,表示右移4位,n=-3表示左移3位。

- 49 -

《C语言程序设计》习题集

第十三章 文件

一、选择题

1、以下叙述中错误的是( )。 A)C语言中对二进制文件的访问速度比文本文件快 B)C语言中,随机文件以二进制代码形式存储数据 C)语句 FILE fp; 定义了一个名为fp的文件指针 D)C语言中的文本文件以ASCII码形式存储数据

2、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为

A) 0 B) 1 C) -1 D) 一个非0值 ( )。 3、下列关于C语言数据文件的叙述中正确的是( )。 A) 文件由ASCII码字符序列组成,C语言只能读写文本文件 B) 文件由二进制数据序列组成,C语言只能读写二进制文件

C) 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 D) 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 4、以下叙述中错误的是( )。

A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B) 在程序结束时,应当用fclose函数关闭已打开的文件 C) 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据

D) 不可以用FILE定义指向二进制文件的文件指针 5、若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是( )。

A) fopen(\"A:\\abc.txt\ B) fopen(\"A:\\\\\\abc.txt\C) fopen(\"A:\\abc.txt\ C) fopen(\"A:\\\\\\abc.txt\6、以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是( )。 A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp) 7、有以下程序

#include \"stdio.h\"

void WriteStr(char *fn,char *str) {

FILE *fp;

fp=fopen(fn,\"w\"); fputs(str,fp); fclose(fp); }

void main() {

WriteStr(\"t1.dat\ WriteStr(\"t1.dat\}

程序运行后,文件t1.dat中的内容是( )。 A)start B)end C)startend

- 50 -

D)endrt

《C语言程序设计》习题集

8、有以下程序:

#include void main()

{ FILE *fp; int i, k, n; fp=fopen(\"data.dat\ for(i=1; i<6; i++)

{ fprintf(fp,\"%d \

if(i%3==0) fprintf(fp,\"\\n\"); }

rewind(fp);

fscanf(fp, \"%d%d\ printf(\"%d %d\\n\ fclose(fp); }

程序运行后的输出结果是( )。 A)0 0 B)123 45 C)1 4 D)1 2 9、有以下程序

#include void main( )

{ FILE *fp; int i,k=0,n=0; fp=fopen(“d1.dat”,”w”);

for(i=1;i<4;i++) fprintf(fp,”%d”,i); fclose(fp);

fp=fopen(“d1.dat”,”r”);

fscanf(fp,”%d%d”,&k,&n); printf(“%d %d\\n”,k,n); fclose(fp); }

执行后输出结果是( )。 A) 1 2 B) 123 0 C) 1 23 D) 0 0

10、有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END) ;语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节)

#include void main( )

{ FILE *fp; int i,a[4]={1,2,3,4},b; fp=fopen(\"data.dat\

for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp); fclose(fp);

fp=fopen(\"data.dat\;

fseek(fp,-2L*sizeof(int).SEEK_END) ; fread(&b,sizeof(int),1,fp);

/*从文件中读取sizeof(int)字节的数据到变量b中*/

fclose(fp);

printf(\"%d\\n\}

执行后输出结果是( )。 A) 2 B) 1 C) 4 D) 3

- 51 -

《C语言程序设计》习题集

11、以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。

#include void main() { FILE *fout; char ch; fout=fopen('abc.txt',’w'); ch=fgetc(stdin); while(ch!=’#’) { fputc(ch,fout); ch=fgetc(stdin); } fclose(fout); }

出错的原因是( )

A) 函数fopen调用形式错误 B) 输入文件没有关闭 C) 函数fgetc调用形式错误 D) 文件指针stdin没有定义 12、有以下程序

#include void main()

{ FILE *fp; int i=20,j=30,k,n; fp=fopen(“d1.dat”“w”);

fprintf(fp,“%d\\n”,i);fprintf(fp,“%d\\n”j); fclose(fp);

fp=fopen(“d1.dat”, “r”);

fp=fscanf(fp,“%d%d”,&k,&n); printf(“%d%d\\n”,k,n); fclose(fp); }

程序运行后的输出结果是( )。 A) 20 30 B) 20 50 C) 30 50 D) 30 20 13、下面的程序执行后,文件test中的内容是( )。

#include

void fun(char *fname.,char *st) { FILE *myf; int i;

myf=fopen(fname,“w” );

for(i=0;ivoid main()

{ fun(“test”,“new world”; fun(“test”,“hello,”0;) A)hello, B)new worldhello, C)new world

D) hello, rld

二、填空题

1、已有文本文件test.txt,其中的内容为:Hello,everyone!。以下程序中,文件test.txt已正确为“读”而打开,由文件指针fr指向该文件,则程序的输出结果是 。

#include

- 52 -

《C语言程序设计》习题集

void main() { FILE *fr; char str[40];

…… fgets(str,5,fr); printf(\"%s\\n\ fclose(fr); }

2、若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen( );

3、以下程序用来统计文件中字符个数。请填空。

#include \"stdio.h\" void main()

{ FILE *fp; long num=0L;

if((fp=fopen(\"fname.dat\ { pirntf(\"Open error\\n\"); exit(0);} while( ) { fgetc(fp); num++;}

printf(\"num=%1d\\n\ fclose(fp);

} 4、以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。

FILE *myf; ling f1; myf= (“test.txt”,“rb”);

fseek(myf,0,SEEK_END); f1=ftel(myf); fclose(myf); printf(“%d\\n”,f1); 5、下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中。请填空。

#include “stdio.h” void main() { FILE *fp; char ch;

if( (fp=fopen ( ) )= = NULL)exit(0); while( (ch=getchar( )) !=’@’) fputc (ch,fp); fclose(fp); } 三、编程题

1、有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生学号,姓名,三门课的成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stu.txt中。

2、统计一个文本文件中数字、空格、字母出现的次数,以及文件的字节数,并将结果输出,文本文件名由命令行给出。

3、编写一个程序并取名test.c,统计该文件中出现”if”,”while”,”for”的次数。

- 53 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务