C语言实验与习题(注释版) 下载本文

一、 目录

一、 目录 ........................................................................................................................... 1 二、 编程环境介绍 ........................................................................................................... 2

1. 前言: ............................................................................................................... 2 2. 编程环境介绍 ................................................................................................... 2 三、 福建省高等学校计算机应用水平等级考试 二级(C语言)考试大纲 ............ 3 四、 理论习题 ................................................................................................................... 6

1. 第一章 第二章 ................................................................................................. 6 2. 第三章 数据类型、运算符和表达式 ............................................................. 7 3. 第四章 顺序程序设计 ................................................................................... 10 4. 第五章 选择程序设计 ................................................................................... 11 5. 第六章 循环控制 ........................................................................................... 14 6. 第七章 数组 ................................................................................................... 15 7. 第八章 函数 ................................................................................................... 18 8. 第九章 预处理命令 ....................................................................................... 21 9. 第十章 指针 ................................................................................................... 23 10. 第十一章 结构体与共用体 ........................................................................... 27 11. 第十二章 位运算 ........................................................................................... 30 12. 第十三章 文件 ............................................................................................... 30 五、 实验部分 ................................................................................................................. 32

1. 编程题 ............................................................................................................. 32 2. 填空题 ............................................................................................................. 40 3. 改错题 ............................................................................................................. 48 六、 真题训练(历届试题选编) ................................................................................. 55

1. 数据类型、运算符与表达式 ......................................................................... 55 2. 分支语句 ......................................................................................................... 59 3. 循环 ................................................................................................................. 66 4. 数组 ................................................................................................................. 74 5. 综合题 ............................................................................................................. 82 6. 程序改错 ......................................................................................................... 92 1) 要求 ................................................................................................................. 92 2) 习题 ................................................................................................................. 92 七、 教学大纲 ............................................................................................................... 103

1

二、 编程环境介绍

1. 前言:

C是最常见的一种高级程序设计语言,高等院校理工科专业都开设“C程序设计”课程作为程序设计入门语言。为此,福建省高校计算机水平考试委员会将其列入福建省高等院校计算机应用水平等级考试(二级C)考试科目,旨在让学生初步掌握程序设计的方法,为今后学习其他计算机课程打下基础,也为今后工作打下计算机应用基础。

目前,以Turbo C为平台介绍各种算法、试题解答的书还不多。笔者从2005年担任诚毅学院工科类专业的“C程序设计”课程教学,多年来注意搜集、整理、编写Turbo C有关的算法例题、试题解答,在课堂上进行融通讲解,系统地从数值处理、图形输出、数据处理、过程模拟、算式求值、文件(字符、)指针处理、数字组合、图形设计八个方面详细地介绍算法例题、试题解答程序,着重培养学生分析问题、解决问题、调试纠错的能力,让学生在扩大计算机知识面的同时,提高实际编程能力、操作能力。 编写仓促,错误之处难免,欢迎指正。

2. 编程环境介绍 时间:共120分钟。 编程环境:Turbo C2.0 常用快捷键:

? Alt键+菜单上的红色字母可打开相应的菜单,例如:

Alt+F 打开文件菜单(加载一个已存在的程序、保存程序均在此菜单下) Alt+R 打开运行菜单 ?

Alt+Tab 切换考试程序与turbo C Alt+Enter 切换turbo C窗口大小 ?

Alt+F5 查看程序运行结果 F5:全屏/恢复 F6:切换活动窗口

本学期作为非计算机专业学生具体要求

1-9章要求学生掌握理论的基础上自己设计程序 10章以后要求学生理解知识点,能够读懂程序

2

三、 福建省高等学校计算机应用水平等级考试 二级(C语言)考试大纲

I、考试目的

本考试考查考生以下知识与能力:

1.掌握C语言的基本概念和语法知识;

2.了解C语言程序与函数的结构特点,主函数及程序执行流程;

3.正确使用顺序、选择、循环三种结构,具有结构化程序设计的能力; 4.掌握常用算法,能运用算法描述工具——流程图;

5.能使用Turbo C集成开发环境,完成源程序的编写、编译,运行与调试程序;

6.具有综合运用以上知识编写程序,解决计算与数据处理类问题的初步能力。

II、考试内容

一.C语言基础

1.C语言特点(识记);

2.C语言程序基本组成(识记):

C语言程序的结构与主函数,程序的书写格式与规范; 3.基本数据类型:

标识符与基本数据类型(识记), 常量与变量(领会), 内存的概念(识记);

4.基本输入、输出函数(领会): 格式输入和格式输出函数, 非格式化输入、输出函数;

5.运算符与表达式(简单应用):

算术运算,增1与减1运算,关系运算,逻辑运算,条件运算, 位运算,赋值运算,类型转换,逗号运算,长度运算符, 运算符的优先级与结合性。

二.程序控制结构

1.C语言的语句(识记):

C语言语句的语法及书写规范; 2.顺序结构(领会):

程序设计的流程图,程序控制结构中的顺序结构,复合语句; 3.分支结构(简单应用):

if结构、if结构的多种形式,switch 结构与多分支结构;

3

期末复习题集

4.循环结构(综合应用):

当型循环,直到型循环,break语句与continue语句。

三.构造型数据

1.数组(综合应用):

一维数组,字符数组,二维数组; 2.结构类型:

结构类型的概念,结构类型定义及结构变量说明,结构变量的使用(领会), 结构变量的初始化,结构数组的初始化(识记); 3.联合类型(识记):

联合类型的概念,联合类型定义和联合变量说明,联合类型的使用; 4.枚举型(识记):

枚举型的定义和使用枚举型变量; 5.typedef的用途(识记): 使用typedef定义新类型名。

四.指针

1.指针与指针变量(识记):

指针的基本概念,指针变量的定义,指针变量的赋值; 2.指针运算符(领会):

地址运算符与指针运算符、间接寻址; 3.指针与数组(简单应用):

指针与一维数组,移动指针及两指针相减运算,指针比较, 指针与字符串, 指针与二维数组;

4.指针数组与指向指针的指针(识记):

指针数组,定义指针数组,指针数组的应用,

指向指针的指针,定义指向指针的指针变量,指向指针的指针变量的应用; 5.指针与结构(领会):

指向结构变量的指针变量,指向结构数组的指针变量。

五.函数

1.常见的系统库函数(识记): 输入、输出函数(stdio.h): printf, scanf, getchar, putchar, puts,gets; 字符与字符串函数(string.h):strcpy, strcat, strcmp, strlen; 简单数学函数(math.h):sqrt, fabs, sin, cos, exp, log, log10, pow; 2.用户自定义函数(简单应用):

函数定义、调用和说明,函数返回值,函数参数; 3.函数之间的数据传递(领会):

函数数据按数值传递,函数数据按地址传递,

利用函数返回值和外部变量进行函数数据传递,结构变量作为函数参数传递;

4

C语言练习题

4.函数的嵌套调用及递归调用(领会): 函数的嵌套调用、函数的递归调用; 5.局部变量与全局变量(识记):

局部变量与全局变量的定义、初始化及作用范围; 6.变量的存储类型与变量的初始化(领会): 局部变量与全局变量的生存期,

静态变量与动态变量的定义、初始化、作用范围及生存期; 7.编译预处理(领会): 文件包含,无参宏定义。

六.文件

1.文件的基本概念,C语言中的两种文件(识记);

2.文件的打开、关闭和文件结束测试,文件的读写,文件的定位(识记)。

七.算法与编程(综合应用)

1.用C表达式或函数计算相对应的数学表达式; 2.连加与连乘的计算,级数的计算; 3.冒泡法排序与选择法排序; 4.矩阵的简单运算与显示; 5.字符串操作; 6.文件编程应用。

八.使用Turbo C集成开发环境调试程序 1.源程序的编写、编辑与改错(领会); 2.集成环境下的求助Help(识记);

3.程序的编译与目标代码的生成(识记); 4.程序的调试(综合应用):

单步运行程序,运行到光标处,断点设置,变量内容的跟踪、显示与修改; 5.了解Turbo C程序的常见错误提示(识记)。

Ⅲ、考试说明

一.考试形式

采用无纸化上机考试;

考试环境: Windows XP 简体中文版,

Turbo C 2.0或以上集成环境(IDE); 考试时间: 90分钟。

二.试卷题型结构

1.选择题(20小题) 40%; 2.程序改错题(2小题) 20%; 3.程序填空题(2小题) 20%; 4.编程题(2小题) 20%。

5

期末复习题集

四、 理论习题

1. 第一章 第二章

1. C语言的函数体由( )括起来。

A) <> B) {} C) [] D) ()

2. 下面叙述错误的是()

A) 一个C源程序可由一个或多个函数组成 B) 构成C语言源程序的基本单位是语句 C) C源程序中大、小写字母是有区别的

D) 若一条语句较长,可分写在下一行或多行上

3. 下面叙述正确的是()

A) 每行最多只能写两条语句 C) 所有语句都必须以分号;结束 B) main()函数必须位于源程序文件的开头 D) 程序中必须含有自定义函数

4. C源程序中main()函数的位置()。

A) 必须位于程序的最前面 C) 必须在系统库函数后面 B) 必须在自定义函数前面 D) 可以在自定义函数后面

5. 结构化程序设计不包括( )。

A) 最优化 C) 模块化设计 B) 自顶而下,逐步细化 D) 结构化编码

6. 下面叙述中,( )不是结构化程序设计中的三种基本结构之一。

A) 数据结构 B) 选择结构 C) 循环结构 D) 顺序结构6

C语言练习题

2. 第三章 数据类型、运算符和表达式

1. ( )为非法的字符串常量

A) “056” B) ?123? C) “ “ 2. ( )为正确的用户标识符。 A) min-5 B) max_at C) 3_row 3. 以下( )是正确的变量名。 A) a.bee B) -p11 C) int 4. 以下( )是正确的变量名。 A) 5f B) if C) f.5 5. 以下( )是正确的常量。 A) E-5 B) 1E5.1 C) 'a12' 6. 以下( )是不正确的字符串常量。 A) 'abc' B) \C) \7. 以下( )是正确的字符常量。 A) \B) '\\\\' C) 'W' 8. char型变量存放的是( )。 A) ASCII代码值 C) 十进制代码值 B) 字符本身 D) 内码值

9. ( )为合法的常量。

A) 5,236 B) 1.23E+8 C) ‘b_k’ 10. ()为正确的字符常量

A) ‘\\084’

B) ‘bcd’ C) ‘165’ 11. 若有定义:int b=-15;则()为正确的赋值表达式。

A) *b=6 B) b=*5 C) b+10=-5 12. 若有定义:int x=2;则正确的赋值表达式是( )。 A) a-=(a*3) B) double(-a)

C) a*3

13. 若有定义:float x=2,y; int a=3 ;语句y=1*(x+a)/3;运行后,y的值为( )。A) 2.0 B) 1.666667 C) 1.0 14. 若有定义:int a,b=5;语句a=(b/2)+b%2;运行后,a的值为( )

A) 3 B) 4 C) 0 15. 下面叙述正确的是( ) A) 2/3与2%3等价 C) ++2与- -3等价 B) 5/(int)4.0与5/4等价

D) ++2与3等价

16. 若有定义:int a,b=6;语句a=--b;运行后,a、b的值分别是()。

A) 6 6 B) 5 6 C) 5 5 17. 若有定义:int i=3,j=6;则表达式(--i)*(j++)的值为( )。

D) “case”

D) union

D) p_11

D) _f5

D) 32766L

D) \

D) \

D) 3.21E-6.5

D) ‘@’

D) b+=b*3

D) a*4=3

D) 0

D) 2

D) 6 5

7

期末复习题集

A) 10 B) 18 C) 15 18. 语句x=(a=3,b=++a);运行后,x、a、b的值依次为( )。

A) 3,3,4 B) 4,4,3 C) 4,4,4 19. 已知int a='R'; 则正确的表达式是( )。 A) a=int(3e2) C) a=a+a=a+3

B) 2*a=a++ D) a

20. 已知char a='R'; 则正确的赋值表达式是( )。

A) a=(a++)%4 B) a+2=3 C) a+=256-- 21. 语句a=(3/4)+3%2;运行后,a的值为( )。 A) 0 B) 1

C) 2 22. 若有定义:int x,a;则语句x=(a=3,a+1);运行后,x、a的值依次为( )。

A) 3,3 B) 4,4 C) 4,3 23. 设整型变量a为5,使b不为2的表达式是( )。 A) b=(++a)/3 B) b=6-(--a)

C) b=a%2 24. 设单精度型变量f、g的值均为2.0,使f为4.0的表达式是( )。 A) f+=g B) f-=g+2 C) f*=g-6 25. 若有定义:int k,i=2,j=4;则表达式k=(++i)*(j--)的值是( )。 A) 8 B) 12 C) 6 26. 若有定义: int a=3;语句a+=a-=a*a;运行后,a的值为() A) -6 B) 0 C) -12 27. 若有定义:float x=3.5,y=5.5;则表达式()的值为2. A) (int)x+y%7 C) int(x+y)%7 B) (int)(x+y)%7 D) (x+y)%7

28. 若有定义:int b=-15; 则()为正确的赋值表达式。

A) b=*5 B) *b=6 C) b+10=-5 29. 下面叙述正确的是( )。 A) 2/3 与 2.0/3.0 等价 C) ++5 与 6 等价 B) (int)2.0/3 与 2/3 等价

D) 'A'与\等价

30. 若有定义int x=1,y=2,n=3;则()为正确的表达式。

A) x=y*3,y=(x+n)/y C) float(y/n) B) (x+y)(y+n) D) x=ny 31. 若有定义:int x,y,z;语句x=(y=z=3,++y,z+=y);运行后,x的值为() A) 7 B) 3 C) 8 32. 若有定义:float x=3.5;int z=8;则表达式 x+z%3/4 的值为( )。 A) 3.75 B) 3.5 C) 3 33. 若有定义:float x=3.5,y=3.6,则表达式()的值为6。 A) (int)x+(int)y C) int(x+y) B) (int)(x+y) D) x+y

D) 12

D) 3,4,3

D) a='\\078'

D) 3

D) 3,4

D) b=a/2

D) f/=g*10

D) 9

D) -3

D) b+=b*3

D) 6

D) 4

8

C语言练习题

34. 下面叙述正确的是()。

A) (3+9)++是正确的表达式 B) “abc”+”xxx”是正确表达式

C) c语言中整型与字符型变量的混合运算表达式的结果是整型 D) 模运算符%两边运算数的数据类型是任意的

35. 若有定义:int x;char c=?A?;则正确的赋值表达式是().说明‘A’的ASCII码的十进制值为65,‘a’

的ASCII码的十进制值为97 A) x=c+’ABC’ C) x=c+’CBA’ B) x=c+32 D) x=’ABC’ 36. 若有定义:char c1=?A?,c2=?B?;语句printf(“%d+%d=%d”,c1,c2,c1+c2); 运行后的结果为()。说明:‘A’的ASCII码的十进制值为65 A) 65+65=AB B) A+B=131 C) 65+66=131 D) A+B=AB 37. 下面叙述错误的是()。 A) 算术运算符中只有“*”、“/”优先级高于关系运算符 B) 模运算符“%”是C语言基本的算术运算符 C) 算术运算符中不包含“=”运算符

D) 自加和自减运算符只能用于变量,而不能用于常量或表达式 38. 下面叙述正确的是( )。

A) 强制类型转换运算的优先级高于算术运算 B) 若a和b是整型变量,(a+b)++是合法的 C) 'A'*'B' 是不合法的 D) \是合法的 39. 下面关于算术运算符的叙述,错误的是( )。

A) %(模运算符)的运算对象只能为整型量 B) 算术运算符的结合方向是\自左至右\

C) 自加和自减运算符的结合方向是\自右至左\D) 其运算对象不包含函数

9

期末复习题集

3. 第四章 顺序程序设计

1. Getchar()函数的功能是获取终端输入的( )

A) 一个字符 C) 一个整型变量表达式 B) 多个字符 D) 一个实型变量值

2. 只能向终端输出一个字符的是().

A) printf()函数 C) scanf()函数 B) getchar()函数 D) putchar()函数

3. 若有定义int a=8,b=5;要实现输出形式为:8*5=40,正确的printf()函数调用语句是()

A) printf(“%d*%d=%d\\n”,a,b,a*b); C) printf(“%d*%d=a*b\\n”,a,b); B) printf(“a*b=%d\\n”,a*b); D) printf(“a*b=a*b\\n”);

4. 若有定义float x;要从键盘输入数据6.02赋给x,则应选用()语句。

A) scanf(“%8.2f”,&x); C) scanf(“%f”,&x); B) scanf(“%4.2f”,&x); D) scanf(“%1.2f”,&x);

5. 若有定义:int x=1234,y=123,z=12;则语句printf(\运行后的输出结果为( )。

A) 123412312 C) 1234+1234+1234 B) 12341234123412341231231231212 D) 1234+123+12

6. 若有语句int a;char c;scanf(“=%c”,&a,&c);为将整数135赋给a,字符‘6’赋给c,正确的数据输

入方式是()。说明:代表换行,_代表空格 A) 135_6_ C) 1356 B) 135_6 D) 1356

7. 若有定义:int a;则表达式()不能用来判断a值为奇数是“真”,偶数是“假”

A) a%2==1 B) !(a%2==0) C) a%2 D) !(a%2)

8. 若有定义:int a;且表达式!a的值为0,则表达式()的值为1.

A) a= =0 C) !(a<0||a>0) B) a=0 D) a!=0

9. 若有定义:int a=1,b=2,c=3,d=4,t=2,k=2;语句(t=a

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

10. 已知 char a;使用scanf()函数输入一个字符给变量a,不正确的函数调用是( )。

A) scanf(\C) scanf(\B) scanf(\D) scanf(\

10

C语言练习题

4. 第五章 选择程序设计

1. 若有定义:int x=1,y=2,z=3;则表达式( )的值为0。

A) !((xy || x D) !

3. 以下运算符中优先级最高的是( )。 A) > B) ||

C) && D) +

4. 若有定义:int x=3,y=4;则表达式 !x||y 的值为( )。 A) 1 B) 0

C) 3 D) 4

5. 若有定义:int i=7,j=8;则表达式 i>=j||i

6. 若有定义:int x,a;赋值语句a=(x%3= =0)?0:1;与( )语句不等价。

A) If(!(x%3= =0)) a=1;else a=0;

C) If(x%3!=0) a=1; else a=0; B) If(x%3) a=0; else a=1; D) If(x%3= =0) a=0; else a=1; 7. 若有定义:int a=1,b=2,c=3,d=4,x=5,y=6;则表达式 (x=a>b)&&(y=c>d) 的值为( )。 A) 0 B) 1 C) 5 D) 6 8. 若有定义: int a=1,b=2,c=3,d=4,t=2,k=2;语句(t=a

D) 2

11. 若有定义:int a;且表达式!a的值为0,则表达式()的值为1。 A) a=0 C) !(a<0||a>0) B) a!=0 D) a==0 12. 以下程序段运行后x的值为( ) int a=3,b=6,x; x=(a==b)?a++;--b; A) 4 B) 2

C) 5 D) 6

13. 若有定义:int a=1,b=2,c=3;则执行以下程序段后a,b,c的值分别为( )。 if (a

{c=a;a=b;b=c;} A) a=1,b=2,c=3 C) a=2,b=3,c=3 B) a=2,b=3,c=1 D) a=2,b=1,c=1

11

期末复习题集

14. 以下程序段运行后变量a的值为( )。

int x=6,y=5; int a;

a=(--x==y++)?x:y+1; A) 0 B) 1

C) 6 D) 5

15. C语言对if嵌套语句的规定:else总是与( )配对。 A) 第一个if C) 缩进位置相同的if B) 之前最近的且尚未配对的if D) 之前最近的if 16. 以下程序段运行时,若从键盘输入5,则运行结果是()。int a,y=10;

scanf(“%d”,&a); if(a>10) y=a+6;

printf(“%d\\n”,y+a); A) 10 B) 16 C) 17. 以下程序的运行结果是()。

void main() {int a,b=2,c=6; a=3; if(a>6) a=a+b; else if(a==6) b=a+c; else a=b+c;

printf(\}

A) 8

B) 9

C) 18. 以下程序段的运行结果是().

int s = 15; switch(s/4) {case 1: printf(\case 2: printf(\case 3: printf(\default: printf(\}

A) Three Over B) One Over C)

15 5

Two Over D) 11

D) 6

D) Three

12

C语言练习题

19. 以下程序段的运行结果是()。

int s=15; switch(s/4) {default: printf(\ case 1: printf(\ break; case 2: printf(\}

A) Two

B) Over Two

C) Over One

D) One

13

期末复习题集

5. 第六章 循环控制

1. 下面叙述正确的是( )

A) 在for循环中,不能用break语句跳出循环体

B) For循环的循环体可包含多条语句,但必须用花括号{}括起来 C) For循环是先执行循环体语句,后判断表达式 D) For循环只能用于循环次数已经确定的情况

2. 若有定义:int i,x=0;语句for(i=1;i<=3;i++) x+=2;与下列( )程序段不等价。

A) i=1; for(;i<=3;i++) x+=2; C) for(i=1;i<=3;) {x+=2;i++;} B) i=1; for(;;i++) x+=2; D) i=1; for(;i<=3;) {x+=2;i++;}

3. 以下程序段运行后x的值为()

int i=0,x=0;

for(;i<=5;i++,i++) {x+=3;} A) 12 B) 6 C) 9 D) 15

4. 若有定义:int i,x; ( )不是死循环

A) for(i=10;;i--); C) for(x=5;x>0;x--); B) while(x=1); D) for(;;i+=2);

5. 以下程序运行后x的值为()。

int i=0,x=2; while(i++<=5) {x+=2; }

A) 8

B) 12

C) 14

D) 10

6. 对于整型变量x,与while(!x)等价的是( )。

A) while(x!=0) C) while(x!=1) B) while(x==0) D) while(~x)

7. 对于整型变量x和y,语句

for(x=0,y=0;(y!=123)&&(x<4);x++) y++;

中的“y++;”被执行( )。 A) 4次 B) 0次 C) 123次 D) 3次 8. 在c语言中while循环和do--while循环的主要区别是( )。

A) do--while循环体内可以使用break语句,while循环体内不能使用break语句

B) do--while循环体内可以使用continue语句,while循环体内不能使用continue语句 C) while的循环体至少无条件执行一次,do--while的循环体不是 D) do--while的循环体至少无条件执行一次,while的循环体不是 9. 设有整型变量x,下述语句( )不会出现死循环。

A) for(;;x+=1); C) while(1) {x++;} B) for(;(x=getchar())!='\\n';); D) for(x=10;;x--);

14

C语言练习题

6. 第七章 数组

1. 下面叙述错误的是()

A) 数组中每个元素都属于同一个数据类型 B) C语言数组长度在定义数组时可不作确定 C) C语言数组名称是数组在内存中的首地址

D) C语言规定可逐个引用数组元素但不能一次引用整个数组。 2. ()是正确的数组定义。

A) int n=5;int arr[n]; C)B) int n;n=5;int arr[n]; D)3. 下列数组声明中,正确的是( )。

A) int a[5]={0}; C)B) int a[]={0 1 2};

D)4. 已知 int a[10]; 则对a数组元素引用不正确的是( )。A) a[10] B) a[3+5] C)5. 设有如下数组定义: char str[8]={ \

则分配给数组str的存储空间是( )个字节。 A) 6 B) 7 C)6. 下列数组声明中,正确的是( )。 A) int a[10]; C)B) int n=10,a[n];

D)7. 若有定义:int a[3]={0,1,2};则a[1]的值为( )。

A) 0 B) 1 C)8. 有如下定义

int a[][3]={1,2,3,4,5,6,7,8};

则数组a的行数是( )。 A) 2 B) 3

C)9. 若有定义:int a[10],i=2; 能正确引用a数组元素的是( ).

A) a[9+i] B) a[10] C)10. 以下数组定义中,正确的是( )。 A) int a[2][3]={1,2,3,4,5,6,7};

B) int a[][]={{1,2,3},{4,5,6},{7,8,9}}; C) int a[2][]= {1,2,3,4,5,6}; D) int a[][4]= {6};

11. 以下能对一维数组a进行正确初始化的语句是( )。

A) int a[5]=(0,0,0,0,0); C)B) int a[5]=[0]; D)12. 以下程序段运行后x的值为( )。

int arr[10]; int N=5,arr[N];

int a[5]=0; int a[];

a[10-10] D) a[5]

8 D) 9

int N=10;int a[N];

int n;scanf(\

2 D) 3

4 D) 无法确定的

a[10-i] D) a(7)

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

期末复习题集

Int a[8]={1,2,3,4,5,6,7,8},i,x=0; For(i=1;i<8;i++,i++) x=x+a[i]; A) 18 B) 20

C) 16 D) 36

13. 若有定义:int arr[15],n=5;无法正确引用arr数组元素的是() A) arr[n] B) arr[0] C) arr[10+n] D) arr[15-n]

14. C语言中,二维数组元素在内存中的存放顺序是( )

A) 随机存放 C) 由用户自己定义 B) 按行存放 D) 按列存放

15. 以下程序段的运行结果是()

int t[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; printf(“%d\\n”,t[1][1]); A) 4 B) 3 C) 1 D)16. 以下程序段运行后x的值为() int a[]={1,2,3,4,5,6,7,8}; int i,x,*p; x=1; p=&a[1];

for(i=0;i<3;i++) x*=*(p+i); A) 24 B) 120

C) 1 D) 17. 若有定义:int a[3][4]={{1,2},{3,4},{5,6,7}};则a[1][1]的值为()。

A) 3 B) 1 C) 2 D) 18. 以下程序段运行后s的值是()。

int a[3][3]={1,2,3,1,2,3,1,2,3}; int i,j,s=0;

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

A) 15

B) 12

C) 14

D) 19. 设有如下程序段:

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

则执行该程序段后,s的值是( )。 A) 0 B) 1

C) 2 D) 20. 若有定义:int i=0,x=0;int a[3][3]={1,2,3,4,5,6,7,8,9};则以下程序段运行后x的值为( )。for (;i<3;i++) x+=a[i][2-i]; A) 0 B) 12 C) 15 D) 21. 以下程序段的运行结果是() char a[]=”abcdef”;

5

6

4

13

3

18 16

C语言练习题

char b[]=”xyz”; strcpy(a,b);

printf(“%c”,a[2]); A) z

B) y C) b D) c

22. 若有定义:char str1[10],str2[10]=”Fujian”;,能将字符串”Fujian”赋给数组str1的正确语句是()

A) strcpy(str2,str1);

C) strcopy(str1,str2); B) str1=”Fujian”; D) strcpy(str1,str2); 23. 以下程序段的运行结果是() char str[]={“FuJian”}; printf(“%d”,strlen(str)); A) 9 B) 7 C) 6 D) 8

24. 以下程序段的运行结果是( )。

char a[]=\char b[]=\char c[10]; strcpy(c,a); strcat(c,b); printf(\

A) abc xyz

B) abc

C) xyzabc

D) xyz

25. 以下程序段运行后a的值为()

int a=2;

a=strcmp(“miss”,”miss”); A) true B) 0

C) 1 D) -1

26. 设有以下变量定义:

char str1[]=\( )是正确的。

A) strcpy(str1,\C) strcpy(*str3,\

B) str2=\D) strcpy(str4[0],\

27. 以下程序段运行后屏幕输出为( )。

char a[]=\printf(\A) 5 B) 8

C) 3 D) 4

28. 若有定义:char a[]=\则以下程序段运行后屏幕输出为( )。

strcpy(a,b);

printf(\A) c B) z C) \\0 D) d 29. 若有定义:int a=2;则语句a=strcmp(\运行后a的值为( )。 A) 1 B) 0 C) -1 D) 2

17

期末复习题集

7. 第八章 函数

1. 以下程序的运行结果是( )

int a=2,b=3;

int min(int a, int b) { int c; c=a

main() { int a=4;

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

A) 2,3 B) 2 C) 4

2. C语言中,若缺省定义函数返回值类型,则改函数默认返回值类型是()

A) double B) int C) long

3. 以下程序的运行结果是()

int f(int c) { c+=2;

return c; }

main()

{ int a=2;c=5; a=f(a);

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

A) 4 5 B) 4 4 C) 2 5

4. C语言中,数组名作为函数调用的实参时,下面叙述正确的是()

A) 传递给形参的是数组第一个元素的值 B) 传递给形参的是数组元素的个数 C) 传递给形参的是数组中全部元素的值

D) 形参数组中各元素值的改变会使实参数组相对元素的值同时发生变化

5. 以下程序的运行结果是()。

int fun(int array[3][3]) { int j; for(j=0;j<3;j++) array[1][j]++; printf(“\\n”); }

main()

{ int j,a[3][3]={0,1,2,1,0,4,2,4,5}; fun(a);

D) 3

D) void

D) 2 4

18

C语言练习题

for(j=0;j<3;j++) printf(“-”,a[1][j]); printf(“\\n”); }

A) 2 1 5 B) 0 1 2

6. 以下程序的运行结果是()

int fun(int array[3][3]) { int j;

for(j=0;j<3;j++) array[1][j]++; printf(“\\n”); }

main() {

int j,a[3][3]={0,1,2,1,0,4,2,4,5}; fun(a);

for(j=0;j<3;j++) printf(“-”,a[1][j]); printf(“\\n”); }

A) 0 1 2 B) 1 0 4

7. 以下程序运行后屏幕输出为( )。 #include int f(int x,int y) { return(x+y); } main() { int a=2,b=3,c; c=f(a,b); printf(\ }

A) 0 B) 2+3=0

8. 以下程序运行后屏幕输出为( )。 #include int a=2,b=3; int max(int a,int b) { int c;

c=a>b?a:b; return(c); } main() { int a=4;

C) 1 0 4 C) 2 1 5 C) 3+2=5 D) 1 2 3

D) 1 2 3

D) 2+3=5

19

期末复习题集

printf(\

}

A) 2,3

B) 2

9. 以下程序的运行结果是( )。

int fun(int array[4][4]) { int j;

for(j=0;j<4;j++) printf(\ printf(\}

main()

{ int a[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0}; fun(a); }

A) 2 0 0 5 B) 1 0 0 4

10. 设有如下函数定义:

int fun(char *str) { char *p=str;

while ( *p != '\\0') p++; return (p-str); }

则以下语句执行后的输出结果是( )。 printf(\A) 7 B) 8

11. 以下程序运行后屏幕输出为( )。 #include void f(int i) { int a=2; a=i++; printf(\ } main() { int a=1,c=3; f(c); a=c++; printf(\ }

A) 4,3 B) 3,3

C) 3 C) 0 1 2 0 C) 9 C) 4,5 D) 4

D) 0 4 5 0

D) 10

D) 3,5

20

C语言练习题

8. 第九章 预处理命令

1. 若有定义:#define F 2+3 ,则表达式F*F的值为( )

A) 17 B) 11 C) 13 D) 25

2. 下面叙述错误的是()

A) “#define PRICE 30”命令的作用是定义一个与30等价的符号常量PRICE

B) “#include”命令的作用是在预处理时将stdio.h文件中的实际内容代替该命令 C) C源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 D) 宏定义也是C语句,必须在行末加分号

3. 下面叙述正确的是()

A) 预处理命令也是C语句,必须以分号结束 B) 宏展开不占用运行时间,只占用编译时间 C) 宏名必须用大写字母表示

D) 一个源程序只能有一个预编译处理命令行

4. 以下程序运行后,屏幕输出为( )。

#define MIN(a,b) ((a)<(b)?(a):(b)) main()

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

z=2*MIN(x,y); printf(\}

A) 2 B) 3 C) 4

5. 若有定义:#define PI 3,则表达式PI*2*2的值为( )。

A) 12 B) 4 C) 3

6. 若有以下宏定义,

#define MOD(x,y) x%y

则执行以下程序段后,z的值是( )。 int z,a=15,b=100; z=MOD(b,a); A) 100 B) 15 C) 11

7. 以下程序的运行结果是()。

#define X a+b main()

{ int a=3,b=4,s1; s1=2*X;

printf(\}

A) 6 B) 8 C) 10

D) 6 D) 不确定 D) 10 D) 14

21

期末复习题集

8. 若有定义:

typedef int NUM[100]; NUM n;

则()语句是正确的。

A) n[0]=2;

B) n=2;

C) NUM=2;

D) NUM=n;

9. 若有定义:

typedef int * INTEGER; INTEGER p;

则下面叙述正确的是()。

A) p是与INTEGE相同的类型 B) p是一个整型变量

C) 程序中可用INTEGER定义int类型指针变量 D) 程序中可用INTEGER定义int类型变量

10. 以下叙述中,正确的是( )。

A) “#define PRICE=30”定义了与30等价的符号常量PRICE B) 预编译处理命令行都必须以“#”开头 C) 宏名只能包含大写字母和数字字符

D) 在程序的一行上可以书写几个有效的宏定义

11. 以下的叙述中不正确的是( )。

A) 宏展开不占用运行时间,只占用编译时间 B) 宏名无类型

C) 宏名必须用大写字母表示

D) 预处理命令行都必须以#号开始

22

C语言练习题

9. 第十章 指针

1. 若有定义:int a=4,*p=&a;,则以下()均表示地址。

A) a,p B) a,*p C) &a,p

2. 若有定义:int *p1,*p2;,则不能用于指针变量p1、p2之间的运算符是()。

A) + B) = C) = =

3. 执行以下程序段的输出结果是( )。 int a=10,*p=&a; printf(\

A) 10 C) 变量a的地址 B) 11 D) 变量a的地址 + 1

4. 以下程序段运行后x的值为( )

int a[]={1,2,3},b[]={4,3,3}; int *p,*q ; int i,x; p=a;q=b;

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

if(*(p+i)= =*(q+i)) x=*(p+i)*2;

A) 不确定

B) 4 C) 6

5. 以下程序段运行后*(++p)的值为( )。 char a[5]=\ char *p; p=a;

A) 'w' C) 'o' B) 存放'w'的地址 D) 存放'o'的地址

6. 以下程序段运行后*(p+3)的值为( )。 char a[]=\ char *p; p=a;

A) 'd' C) 存放'd'的地址 B) '\\0' D) 'o'

7. 设有以下语句,则( )是对a数组元素的不正确引用,其中0≤i<10。 int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a;

A) a[p-a] B) *(&a[i]) C) p[i]

8. 以下程序段运行结果是()

int x[3]={1,2,3}; int *p;

D) &a,*p

D) –

D) 2

D) *(*(a+i))

23

期末复习题集

p=x;

for(p++;p<&x[2];p++) printf(“%d”,*p); A) 3

B) 2 3 C) 2 D) 1 2

9. 以下程序的运行结果是()。

main() {int x,y; int *p,*q,*t; x=23;y=45; p=&x;q=&y; t=p; p=q; q=t;

printf(\}

A) 23,23

B) 23,45

C) 45,45

D) 45,23

10. 下列程序段运行后,( )对数组a元素的引用是错误的。(其中0≤i<4, 0≤j<3)

int i,j,(*p)[3];

int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; p=a;

A) *(p[i]+j) C) *(*(a+i)+j) B) p[i][j] D) *(*(p+i)[j])

11. 若有定义:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)[4];p=a;,()对数组a元素的引用是正确的。

A) (**p)[2] B) **(p+4) C) *(p[2]+3) D) *(p[4])

12. 以下程序的运行结果是()

main() {

int a[3]={1,2,3}; int *num[3]; int **p,i;

for(i=0;i<3;i++) num[i]=&a[i];

p=num;

printf(“%d”,**p); } A) 1 B) num C) 3 D) &a[0]

13. 以下程序的运行结果是()

main()

{ char a[]=”137”,*p; for(p=a;p

24

C语言练习题

}

A) 137377

B) 7 C) 13737 D) 137

14. 以下程序段运行后*(p+1)的值为()

char a[]=”good”; char *p; p=a;

A) ‘o’ B) ‘g’ C) 不确定 D) a[1]的地址

15. 设有如下变量定义:

char aa[][3]={'a','b','c','d','e','f'}; char (*p)[3]=aa;

则以下程序段的运行结果是( )。 p++;

printf(\

A) a B) b

16. 以下程序段运行后x的值为( )。 int a[9]={1,2,3,4,5,6,3,8,9}; int *p,*q; int i,x; p=&a[0]; q=&a[8]; for(i=0;i<3;i++) if(*(p+i)==*(q-i)) x=*(p+i)*2;

A) 2 B) 4

17. 下面叙述错误的是()

一个变量的地址称为该变量的指针

任何指针变量都可以与空指针NULL进行比较 可以将一个整数值赋值给指针变量

一个指针变量只能指向同一类型的变量

18. ( )能正确定义一个指向函数的指针

A) (int *)p()

B) int *p()

19. 若函数fun的函数头为: int fun(int i, int j)

且函数指针变量p定义如下:

int(*p)(int i, int j);

则要使指针p指向函数fun的赋值语句是(A) p=*fun; B) p=fun;

20. C语言的基本数据类型包括()。

A) 整型、实型、逻辑型

C) c C) 6 C) int (*p()) 。 C) p=fun(i,j); B) 整型、实型、字符型D) d

D) 不确定

D) int (*p)()

D) p=&fun;

25

期末复习题集

C) 整型、实型、空类型 D) 整型、字符型、指针型 21. 对于基类型相同的两个指针变量之间,不能进行的运算是( )。

A) < B) =

22. 设有如下函数定义:

int fun(char *str) { char *p=str;

while ( *p != '\\0') p++; return (p-str); }

则以下语句执行后的输出结果是(printf(\A) 7 B) 8

23. 以下程序段运行后x的值为( )。 int a[]={1,2,3,4,5,6,7,8}; int i,x,*p; x=1; p=&a[2]; for(i=0;i<3;i++) x*=*(p+i);

A) 不确定

B) 24

。C) + C) 9 C) 120 D) - D) 10 D) 60 26

) C语言练习题

10. 第十一章 结构体与共用体

1. 若有定义:

struct data { char a; float b[3]; long c; }d1;

则变量d1的长度是( )。 A) 4 B) 17

2. 若有定义

struct teacher {

int num;

char name[10]; char sex; int age;

}t1={2001,”Li Ming”,’M’,35}; 则下列()对结构变量引用是正确的。 A) t1.name[0] B) t1->name[0]

3. 下列程序段运行后,表达式()的值为3。

struct point { int x; int y; }*p;

struct point a[3]={1,2,3,4,5,6}; p=a;

A) *(p+2) B) p[2].x

4. 若有定义:

struct teacher { int num; char sex; int age; }teacher1;

则下面叙述错误的是()。

A) num、sex、age都是结构变量teacher1的成员B) struct是结构类型的关键字 C) teahcer1是结构类型名

D)

struct teacher是用户定义的结构类型

5. 设有以下定义语句:

C) 12 C) t1->name D) t1.name

C) p[1].x D) 15

D) p[3].x

27

期末复习题集

struct student { int num;

char name[10]; float score; } wang,zhang;

则不正确的叙述是( )。

A) struct是结构体类型的关键字 B) zhang是结构体变量名 C) wang是结构体类型名

D) num,name,score都是结构体类型student的成员名

6. 设有以下定义语句:

struct student { int num;

char name[10]; float score; } wang,zhang;

则变量wang所占的内存字节数是( )。 A) 14 B) 16

7. 若有定义:

struct teacher {int num;

char name[10]; char sex; int age; float score; }teacher1;

则变量teacher1所占用的内存字节数是( )。 A) 5 B) 14

8. 以下程序段的运行结果是()

union

{ int num1; int num2; }s;

s.num1=20; s.num2=30;

printf(“%d”,s.num1); A) 2030 B) 30

9. 若有定义:

union u_type { int x;

float y[3]; char z;

C) 18 C) 19 C) 20 D) 20

D) 20

D) 50

28

C语言练习题

}a;

则变量a的长度是() A) 12

B) 15 C) 1 D) 4

10. 对枚举类型进行定义,不正确的是( )。

A) enum b{1, 2, 3}; C) enum c{D=3, E, F}; B) enum a{A, B, C}; D) enum d{X=0, Y=5, Z=9};

11. 若有定义:enum day{sun,mon,tue,wed,thu,fri,sat}; ,则枚举常量sun,mon的值分别为( );

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

12. 若有定义:enum num{a1,a2=3,a3,a4=10};,则枚举常量a2、a3的值分别为()。

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

13. 若有定义:

char ch; int j,k;

enum day{sun,mon,tue,wed,thu,fri,sat}; int s[sat];

则()对下列语句是否复合语法规则的判断是正确的。 sun=0; /*语句1*/ j=mon+tue; /*语句2*/ if(a[mon]>0) j++; /*语句3*/ A) 语句1、2、3均错误 C) 语句2正确,语句1和语句3错误 B) 语句1错误,语句2和语句3正确 D) 语句1、2、3均正确

14. ()是关于C语言数据类型的正确叙述。

A) 不允许使用空类型 C) 数组不是构造类型 B) 枚举类型不是基本类型 D) 变量使用前应定义相应的数据类型

15. 设有如下定义语句:

union u_type { int i;

double x; float f; };

struct str_type { char str[100];

union u_type u[2]; };

则语句“printf(\”的输出结果是( )。 A) 100 B) 116 C) 120 D) 200

29

期末复习题集

11. 第十二章 位运算

1. 对于整型变量x,与while(!x)等价的是( )。

A) while(x==0) C) while(x!=1) B) while(x!=0) D) while(~x)

2. 在对于无符号数的位运算中,操作数右移一位相当于( )。

A) 操作数除以2 C) 操作数除以4 B) 操作数乘以2 D) 操作数乘以4

3. 若有定义:int a=20,b=28,c;则执行语句c=(a^b)<<2;后c的值为( )。

A) 2 B) 5 C) 32

D) 92

12. 第十三章 文件

1. 若当前工作目录下有一文本文件test.txt,其内容为“cprogram”(不包含引号),则以下程序段的运行

结果是( ) FILE *fp; char *str;

if((fp=fopen(“test.txt”,”r”)!=NULL) printf(“%s”,str); fclose(fp); A) cpro B) gram C) cprog D) ogram

2. 下面程序运行后,文件d_f.dat的内容是()

main() {

FILE *fp;int i=10,j=20;

fp=fopen(“d_f.dat”,”w”); fprintf(fp,”%d ”,i); fclose(fp);

fp=fopen(“d_f.dat”,”a”); fprintf(“%d”,j); fclose(fp); }

A) 20 10 B) 10 C) 20 D) 10 20

3. ()不是文件读库函数

A) fgetc() B) fputs() C) fscanf() D) fread()

4. 下面程序运行后,屏幕显示write ok!,则下面叙述正确的是()。

main()

30

C语言练习题

{ FILE *fp; fp=fopen(“data.txt”,”wt”); if(fp!=NULL) { fprintf(fp,”%s\\n”,”File write successed!\\n”); fclose(fp);

printf(“write ok!\\n”); } }

A) 当前工作目录的data.txt文件已经关闭 B) 当前工作目录下找不到data.txt文件

C) 当前工作目录下存在data.txt文件,其中的内容是“write ok!”D) 当前工作目录的data.txt文件已经打开

5. 以下程序的功能是( )。

#include main()

{ FILE *fp; long int n;

fp=fopen(\ fseek(fp,0,SEEK_END); n=ftell(fp); fclose(fp);

printf(\}

A) 计算文件wj.txt的起始地址 B) 计算文件wj.txt的终止地址 C) 计算文件wj.txt内容的字节数 D) 将文件指针定位到文件末尾

31

期末复习题集

6. 标准函数fgets(s, n, f)的功能是( )。

A) 从文件f中读取长度为n的字符串存入指针s所指的内存

B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 C) 从文件f中读取n个字符串存入指针s所指的内存

D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存

五、 实验部分 1. 编程题

#include #include double func(double x) { /**/

return (3*x*sin(x)+tan(x))/(1.5+fabs(x));

/**/ }

void main() {

clrscr();

printf(\ printf(\ printf(\ getch(); }

#include

32

C语言练习题

int fun(int a[],int n,float *f) {

/**/

int i,count=0; float sum=0;

for(i=0;i

*f=sum/n; 求出平均值,将它存于指针f内存的地址对应的变量里

for(i=0;i

void main() {

int a[] = {23,40,8,32,18,2,9,16,27};

int i,k = sizeof(a)/sizeof(int); 计算数组元素个数,并存于k中 int count=0; float aver=0.0;

printf(\ for(i=0;i

printf(\ \ printf(\

以上语句可无视,输出垃圾信息而已

count=fun(a,k,&aver); 将aver的地址传给fun的第3个参数指针变量f,故通过f即可访问到main函数里的aver变量

printf(\ count is %d\\n\ getch(); }

#include #include double func(double x) { /**/

return (exp(x)+sin(x-6))/(x*x+1); /**/ }

void main()

33

期末复习题集

{

clrscr();

printf(\ printf(\ printf(\ getch(); }

#include #include

int find(int a[],int n,float x) {

/**/ int i,j=0;

double min=fabs(a[0]-x); 初始化min为数组中某元素与x差值的绝对值,此处用a[0]相应的用于记录与x差值的绝对值最小的元素的小标的j初始化为0

for(i=0;ifabs(a[i]-x)) {min=fabs(a[i]-x);j=i;} return a[j]; 返回符合条件的元素值 /**/}

void main() {

int a[] = {23,40,8,32,18,2,9,16,27};

int i,k,n = sizeof(a)/sizeof(int);计算数组元素个数 float x=20.3;初始化x的值 printf(\ for(i=0;i

printf(\ \ printf(\

以上输出垃圾信息的语句再次无视

k=find(a,n,x);调用find函数,注意参数的传递,a是数组首地址,n元素个数 printf(\ getch(); }

34

C语言练习题

#include #include double fun1(float x) { /**/

if(x<3) return sin(x);

else if(x==3) return x;注意判断两个数相等用两个等号,一个等号为赋值操作 else return cos(2*x+1); /**/ }

void main() {

float x; double y; clrscr();

printf(\ scanf(\ y = fun1(x);

printf(\ getch(); }

#include #include

int fun(int bg,int fn) 观察main函数可知bg,fn存放的是2个边界自然数的值 {

/**/

int i,j,k,count=0;

for(i=bg;i<=fn;i++)枚举bg和fn之间的各个自然数

{判断一个数i是素数只要证明其不能被2和它的平方根之间的数整除即可 k=sqrt(i); 求i的平方根

for(j=2;j<=k;j++)枚举2和平方根之间的数

if(i%j==0) break; 若找到一个数能被i整除,则说明i不是素数退出循环 if(j>k) count++; 若在上面的循环过程中未有一个数能被i整除,则退出循环时j必大于k,由此可说明找到一个素数,故让count++记录找到的素数数量 }

return count;返回找到的素数个数 /**/ }

void main()

35

期末复习题集

{

int count;

count=fun(100,500);

printf(\ getch(); }

#include #include double fun1(float x) {

/*运行结果与示例不符,若要与示例相同则 1.0/3 改成1/3 */ if(x<3) return (pow(2.5+fabs(x),1.0/3)/(sin(x)+3)); else return x; /**/ }

void main() {

float x; double y; clrscr();

printf(\ scanf(\ y = fun1(x);

printf(\ getch(); }

#include double fun(int n) {

36

C语言练习题

/**/ int i,j=1;

double sum=0;

for(i=1;i<=n;i++)求累加和咯,j控制正负号变化 {

sum+= 1.0/(i*(2*i+1))*j; 看到分数要注意到将分子或分母转化成浮点型,如1.0 j*=-1; }

return sum; /**/ }

void main() {

int n;

printf(\ scanf(\

printf(\ getch(); }

#include #include double fun1(float x) { /**/

if(x<10) return sqrt(2.5+cos(x))/(x*sin(x)+3); else return x*x; /**/ }

void main() {

float x; double y; clrscr();

printf(\

37

期末复习题集

scanf(\ y = fun1(x);

printf(\ getch(); }

#include #include

int bTrue(int a[][4],int n) { /**/

方法一: int i,j;

for(i=0;i

if(a[i][j]!=a[j][i])return 0; 比较过程中只要出现a[i][j]!=a[j][i]的情况即说明,不是对称矩阵,返回0

return 1;若在以上for循环过程中,没执行return语句,则说明是对称矩阵,返回1 /**/ }

void main() {

int a[4][4],i,j; int bT;

printf(\ for(i=0; i<4; i++) for(j=0; j<4; j++)

scanf(\ bT = bTrue(a,4); 4为数组行数 if( bT == 1 )

printf(\ else

printf(\ getch(); }

38

C语言练习题

#include #include double fun1(float x) { /**/

if(x<100) return (3*log10(x)-3)/(sin(x)+3); else return x-100; /**/ }

void main() {

float x; double y; clrscr();

printf(\ scanf(\ y = fun1(x);

printf(\ getch(); }

#include #include int fun(int a[],int n) {

/**/

int i,j; j用于记录与平均值偏差最大的元素的下标

float sum=0,max; 下面要求平均值,最好定义成浮点型 for(i=0;i

max=fabs(a[0]-sum); 初始化max为数组中某元素与平均值差的绝对值,此处用a[0] j=0; 同时将j初始化为0

for(i=0;i

39

期末复习题集

新max的值及差值最大元素下标的值

if(max

void main() {

int a[] = {10,22,8,33,17,5,9,13,27};

int i,n = sizeof(a)/sizeof(int); 求数组元素个数 int k;

printf(\ for(i=0;i

printf(\ \

printf(\以上打印数组信息

k=fun(a,n); 调用fun函数,其中a为数组名,n传递数组元素个数,k接收返回值 printf(\ getch(); }

2. 填空题

#include #include void main() {

/**/ int /**/ a,b,temp; 由以下scanf语句,知此处应填int整型 scanf(\

if (a

while /**/ (--a>b) /**/ 此处设置循环条件,a必须不断自减1来枚举区间(a,b)之间的

40

C语言练习题

数,同时当a==b时则不再进行判断 {

if(a%3==0) 满足条件输出数值 printf(\ }

printf(\ getch(); }

#include

double fun(/**/ int n /**/) 观察fun函数调用该函数传递的数值及题目可知此处应定义一个整型形参变量,变量名由函数体里未被定义的变量确定 {

double y = 0.0; int i,j;

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

{y = y +/**/ 1.0/(8+3*i) /**/; 注意计算结果有小数部分,此处分子要写成1.0 }

return (/**/ y /**/); }

void main() {

clrscr();

printf(\ getch(); }

#include void main() {

int m,n;

for(m=1; /**/ m<=5; /**/ m++) 外循环控制输出5层*号,内循环控制每层如何输出*号 { printf(\

41

期末复习题集

for(n=1;n<= /**/ 2*(m-1); /**/ n++) 输出*号前的空格 printf(/**/ “ ” /**/);

for(n=9;n>=m*2-1;n--) 输出每层* 号 printf(\ }

getch(); }

#include main() {

void fun(int); int v=300;

fun(/**/ v /**/); 将纸币数额传递给fun函数的形参 getch(); }

void fun(int m) m存放要兑换的纸币数额 {

int c1,c2;

以下for循环枚举1毛和2毛的各种可能取值,然后判断当前可能取值是否符合条件,符合的话就输出

for(c1=1;/**/ c1<=m/10 /**/ ;c1++) 全部为1角的情况下,c1最多可取m/10或30 { for(c2=1;c2<=15;c2++) 全部为2角的情况下,c1最多可取15或m/20 if(c1*10+c2*20==/**/ m /**/ ) 符合条件就输出 printf(\ } }

#include #include void main() {

int num1,num2,ans,flag; char op; clrscr();

42

C语言练习题

printf(\

scanf(\注意加取地址符&和变量的顺序 flag=0;用于标记用户输入是否出错 /**/ switch(op) /**/ {

case '+': ans=num1+num2; break; case '-': ans=num1-num2; break; case '*': ans=num1*num2; break; case '/': ans=num1/num2; break; default:

{ printf(\用户输入格式错误flag置为1 }

if /**/ (!flag) /**/ 用户输入正确的情况下将结果打印出来 printf(\ getch(); }

#include #include void main() {

char src[40],tag[40];

void ch_pw( ); 因为ch_pw()定义在main函数后,故此处进行了函数原型声明 printf(\

gets(src);接受用户输入的字符串存入到src内

strcpy(tag,src); 将src内存放的字符串复制到tag内 ch_pw( tag ); 将tag做为实参传递给ch_pw函数 printf(\ printf(\ getch(); }

void ch_pw(/**/ char str[] /**/) 形参接收函数被调用时传递过来的字符串,形参名由下面函数体内未被定义的字符数组str得来,形参是数组是定义可不指定元素个数,在函数体内定义一定要指定 {

char tab[4][2]={{'a','d'},{'s','f'},{'d','a'},{'f','s'}};存放要转换的字符和转换成什么字符 int j=0,i;

while( str[j] ) 遍历字符数组str的各个元素,直到str[j]==0即str[j]==?\\0?为止,因为?\\0?的ASCII码值刚好就是0

43

期末复习题集

{

for(i=0;i<=3;i++) 遍历tab数组每行下标为0的元素,判断其是否与当前访问的str[j]相等,若相等则把str[j]转换成相应行下标为1的元素 {

if(str[j]==tab[i][0]) {

/**/ str[j] /**/=tab[i][1] ; break; } }

/**/ j++ /**/ ; 要继续判断下一个元素,故下标应自增1 } }

#include #include void main() {

char str[80]; 由下面的puts(str)可知,将符合条件的字符存放在了str数组内 char c; int i;

/**/ i=0; /**/ 控制str下标的变化 printf(\

while((c=getchar())!='\\n') 接收用户的输入,getchar函数每次接受一个字符,并将其赋值给c,再判断c是否等于?\\n?即回车,不等的话就执行花括号内的语句,相等的话则退出循环,因此该while循环就是不断接收用户输入的字符,直到遇到回车为止 {

if(c>='A'&&c<='Z'||c>='a'&&c<='z') 当前输入的字符若满足条件,则将其存到字符数组str内

/**/ str[i++]=c; /**/此句相当于{str[i]=c;i++;} 将c赋值给str[i]后,要让i自增1得到下个准备接收符合条件的数组元素的下标 }

str[i]= /**/ '\\0'; /**/ 字符串都要以?\\0?做为其结束标志 puts(str); getch(); }

44

C语言练习题

#include #include #define N 9

void ivs(int a[ ]) {int i,temp;

for(i=0;/**/ i

/**/ a[N-1-i]=temp /**/; } }

void main() {int arr[N],i;

printf(\ for(i=0; i

scanf(\ ivs(/**/ arr /**/);

printf(\ for(i=0; i

printf(\ \ printf(\ getch(); }

#include #include void main() {

/**/ char /**/ str[80]; 易知str应为字符数组 int i,len, sum=0;

printf(\

gets(str);接收用户输入的字符到数组str内

len = strlen(str); 算出str内存放的字符串所包含的字符个数

for(i=0; i

if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')当前字符是字母的话,啥事都不做,此处给个 ; 代表一个空语句,如果觉得很恶心,你写个continue;也行,更酷的是写个sum=sum; /**/ ; /**/ else 符合条件,进行记数

45

期末复习题集

/**/ sum++; /**/ }

printf(\ getch(); }

#include #include void main() {

int hcf(int,int); int a,b,k;

printf(\ b: \

scanf(\注意scanf的格式,此处输入用空格或回车隔开 k=hcf(/**/ a,b /**/); printf(\ getch(); }

辗转相除法 :1. a ÷ b,令r为所得余数(0≤r<b)若 r = 0,算法结束;b 即为答案。 2. 互换:置 a←b,b←r,并返回第一步。 int hcf(int x,int y) {

int r;

r=x%y; while( r!=0 ) { x=y;

y=/**/ r /**/; r=x%y ; }

return (/**/ y /**/); }

#include #include void main()

46

C语言练习题

{

char s1[100], s2[100]; int i,len;

printf(\

gets(s1); 接收用户输入的字符到数组str内

len = strlen(s1); 算出str内存放的字符串所包含的字符个数

for(i=0; i

{由下面的puts(s2)可知,要将转换后的字符串存放在s2里,故下面if else语句中执行的赋值语句应赋值给s2[i]

if( s1[i] >= '1' && s1[i] <= '9') 当前字符是1~9之间的字符则将其-1 /**/ s2[i]=s1[i]-1; /**/

else if( s1[i] == '0' ) 当前字符是?0?将其转换为?9?,注意此处应给的是字符?9?而不是数字,即单引号不要忘了

/**/ s2[i]='9'; /**/ else

s2[i] = s1[i]; }

s2[i] =/**/ '\\0' /**/; 字符串以?\\0?做为结束标志 puts(s2); getch(); }

#include #include

void sct(char s1[],/**/ char s2[] /**/) 由main函数里的函数调用可知,此处应再设一个字符型数组

{ 让p1指向数组s1,并通过while循环使其指向s1里存放的字符串末尾,然后再通过p2将字符另一个字符串的内容连接到s1的末尾 char * p1,*p2;

p1=/**/ s1 /**/; 让p1指向数组s1 p2=s2;

while(*p1) 通过while循环可使p1指向字符串结尾,因字符串结尾是?\\0?其值为0,故当*p1==?\\0?时即*p1==0此时就跳出while循环 p1++;

while(*p2) 将字符串s2连接到s1末尾 *(p1++) = *(p2++); }

void main() {

char str1[60]=\

sct(/**/ str1 /**/ ,str2); 将数组做为形参,写数组名即可

47

期末复习题集

printf(\ getch(); }

3. 改错题

#include void main() {

int a,b,c;

/**/ float f; /**/ f为小数类型,具体下方f的输出用%f可看出为float 类型 clrscr();

printf(\

scanf(\变量a,b必须取地址,除非数组名不取地址,因数组名就是地址

f=/**/ (float)a/b; /**/ a,b均为整数,要获得结果的小数部分必须进行强制类型转换 c=(int)((f-(int)f)*10);

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

#include

void find(/**/int m /**/)参数类型必须指出, 具体main函数中调用find函数的参数k为int类型,所以对应的参数m也是int类型 {

int a1,a2;

a1=m; 求m的个位 a2=m/10; 求m的十位

if(m%3==0 &&(/**/ a1==4 || a2==4 /**/))如果m能被3整除且个位或者十位是4 printf(\则输出m }

void main() { int k;

for(k=10;k<=99;k++)k从10到99,一一尝试

/**/ find( k ) /**/;调用函数find,函数的作用是寻找满足条件的数 getch(); }

48

C语言练习题

#include void main() {

/**/ int a,tag; /**/语法错误c语言的变量区分大小写,程序中用到小写tag,此处改为小写 int num1=0,num2=0; num1和num2分别为大于个数和小于个数的计数器,程序开始归零 clrscr();

printf(\

scanf(\语法错误变量a需取地址,输入第一个数 tag=a;将第一个数放入tag中

while(a)程序以0结束,循环的条件为:只要不输入0 { scanf(\程序循环输入数字,存入a

/**/ if(!a) /**/ continue;逻辑错误,程序执行的条件,a不为0 else if(atag) num2++;如果a中数比tag大,计数器num2增加1 }

printf(\ getch(); }

#include

long int fsum(int n) fsum函数用于求阶乘 {

long int k; if(n==1)

/**/ k=1 /**/;逻辑错误,1的阶乘为1 else

k=n*fsum(n-1);n的阶乘为n-1的阶乘乘以n return (/**/ k /**/);逻辑错误,运算结果在k中 }

void main() { int i;

long int sum; sum=0;

for(i=1;i<=9;/**/ i++,i++ /**/)语法错误for语句格式不符 sum+=fsum(i);

printf(\ getch(); }

49

期末复习题集

#include void main() { int i,a=0;

/**/char c1,c2; /**/ 语法错误c1,c2为字符类型,程序中用getchar()获取 clrscr();

printf(\ c2=getchar();

/**/ for(i=1;i<=7;i++) /**/语法错误for语句中间为; { c1=getchar(); a=a*2+c1-'0'; }

/**/ if (c2=='1') /**/ a=(-1)*a;如果依照题意c2=='1',a是负数 printf(\ getch(); }

#include void main( ) {

int i,n;

/**/ n = 0; /**/n为计数器,从0开始

for(i=10;i<=100;i++)判断10-99是否是对称数

if(i/10==i) i/10得到十位,i得到个位,若相等则是对称数 {printf(\输出对称数 n++;计数器增加1

if(/**/ n%9==0 /**/)语法错误表示相等的关系用双等号; printf(\9个数一行输出,换行 }

for(i=100;i<=999;i++)判断100-999是否是对称数

if(/**/ i/100==i /**/) i/100得到百位,i得到个位,若相等则是对称数 {printf(\ n++;

if(n%9==0)

printf(\ } getch(); }

50