C语言

更新时间:2024-03-31 18:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

郑州大学现代远程教育

《C语言程序设计》课程

学习指导书

柳宏川 编

第1章 绪论

(一)本章学习目标

掌握结构化程序设计的思想,结构化流程图描述,算法设计基础和良好程序设计风格。 (二)本章重点、要点

C语言特点,算法概念及NS图形描述,结构化程序设计思想,三种基本结构:顺序结构、选择结构和循环结构,使用良好的程序设计风格。 (三)练习题

1_1.什么是低级语言? 1_2.什么是高级语言?

1_3.面向过程语言的特点是什么? 1_4.什么是算法? 1_5.算法有什么特点?

1_6.结构化算法的基本结构有哪些? 1_7.结构化程序设计的标准有哪些?

第2章 C语言程序的开发过程

(一)本章学习目标

熟悉C程序开发环境,熟练掌握调试工具的使用,掌握C语言程序结构与语法规则。 (二)本章重点、要点

C程序开发环境工具的使用,C语言程序结构与语法规则。 (三)Turbo C 的操作指南

开发一个C语言程序一般包括3个主要步骤:编辑,编译和连接。掌握调试C语言程序的全过程。

? 编辑:根据求解算法,开发人员使用文本编辑器编辑代码,生成源程序代码,扩展

- 1 -

?

? ? ? 1) 2) ? ?

名为.C。

编译:编译时,编译器首先检查源程序中每条语句的词法和语法。当发现错误时,在屏幕上显示错误的位置、错误类型等相关信息。根据错误信息,重新使用编辑器进行查错并修改,然后重新编译直到所有的词法和语法错误都被排除。正确编译后产生二进制目标文件,扩展名为.OBJ。

连接:编译后产生的目标文件是可重定位的程序模块,但不能直接运行。连接是将目标程序、库函数和其它目标程序连接到一起,生成可执行的程序。扩展名为.EXE。 运行:源代码经过编译、连接,生成可执行程序后,就可以进行程序的运行了。 编译过程发现的错误可分为两类。

一类是局部语法错误。例如,缺失了分号、逗号,或者引用了错误的数据对象。 另一类是程序内部上下文关系方面的错误。例如,需要使用的数据对象没有定义。 连接时,也可能产生错误。例如,连接文件找不到等,具体不再叙述。

源代码经过编译、连接,生成可执行程序后,还需要进行测试。测试的目的是发现程序的错误。一般通过输入一些实际数据来验证程序执行结果的正确性。如果程序执行中出现问题,或发现程序的输出结果不正确,需要设法找到出错的原因,并修改源程序,重新进行编译、连接,再测试和调试,不断反复,直到程序正确无误。

第3章 基本数据类型

(一)本章学习目标

熟练掌握标识符的概念,基本数据(整型、实型、字符型等),常量,转义符,变量,变量的赋值。 (二)本章重点、要点

标识符的组成规则,基本数据类型及对应的名称(整型、实型、字符型等),常量,转义符,变量,变量名,变量的赋值等。 (三)练习题

3_1.基本整型数据的输出。 3_2.实型数据的输出。 3_3.字符型数据的输出。

3_4.C语言标识符的命名规则如何? 3_5.C语言的基本数据类型有哪些? 3_6.什么是常量? 3_7.什么是变量?

3_8.转义字符有什么作用?举例说明。

3_9.字符串常量与字符常量的表示有什么不同?

- 2 -

第4章 算术运算符与算术表达式

(一)本章学习目标

掌握算术运算符,优先级,结合方向,表达式等基本概念,熟练使用C的算术表达式描述问题。

(二)本章重点、要点

算术运算符,优先级,结合方向,表达式,用算术表达式正确描述问题。 (三)练习题

4_1.输出整数num的个位数、十位数和百位数。 4_2.设y=|x|1/2。当x的值为5.678时,计算y的值。

4_3.编写程序,输入圆的半径,求该圆的面积与周长(保留三位小数)。 4_4.输入两个整数,求二者的平方和及平方差。

4_5.输入一个大写英文字母,求其后继(后面相邻)字母。规定:“Z”的后继是“A”。

第5章 C语言程序的输出与输入

(一)本章学习目标

掌握C语言语句、学会函数调用,使用格式化输出函数printf和格式化输入函数scanf准确完成输入和输出操作,掌握ASCII码和转义符的概念并正确运用。 (二)本章重点、要点

C语言语句,函数调用,格式化输出函数printf()、转义符,ASCII码,格式化输入函数scanf(),putchar()函数,getchar()函数等内容。 (三)练习题

5_1.编写程序求多项式 ax3+bx2+c的值( 键盘输入a=2, b=3, c=4, x=1.414)。

5_2.已知华氏温度,根据公式:C = 5/9(F-32),求摄氏温度C(结果保留两位小数)。 5_3.使用宏定义定义符号常量 PI,其值为3.14159,并使用符号常量,求圆半径r=2.456

- 3 -

时的圆周长、圆面积。

5_4.用getchar()分别输入?A?,?B?,?C?,并赋值给a,b,c, 然后将其转换成对应的小写字母,用putchar()将其输出。 5_5.若a=3,b=4,c=5,编写程序,要求用一个scanf()函数完成输入,按以下要求的格式输出: x1=a+b+c= 3+ 4+ 5= 12 x2=a-b-c= 3- 4- 5= -6

第6章 流程控制—选择控制结构

(一)本章学习目标

掌握关系运算符,逻辑运算符,赋值运算符的运算规则,正确理解并熟练掌握运算符的优先级和结合方向,进一步理解C语言的表达式。熟练掌握if语句,switch语句continue语句和break语句的语法结构,正确使用语句实现应用要求,掌握C代码嵌套结构。

(二)本章重点、要点

关系运算符,逻辑运算符,赋值运算符、优先级、结合方向,表达式。if语句,switch语句continue语句和break语句,结构的嵌套。 (三)练习题

6_1.使用if语句,求解两个数中的最大值。

6_2.使用switch语句,求解简单算术表达式的值。

6_3.使用嵌套的if语句,判断一个整数能否被3或5整除。 6_4.使用嵌套的switch语句,判断一个整数能否被3或5整除。

6_5.输入一个字符,若输入的为大写英文字母,则输出其对应的小写英文字母;若输入的为小写英文字母,则输出其对应的大写英文字母;若输入的非英文字母,则原样输出。 6_6.编写程序,输入一个年份,判断其是否为闰年。

第7章 流程控制—循环控制结构

(一)本章学习目标

熟练掌握三种循环控制语句:while语句,do…while语句,for语句的语法并正确运用,能正确进行循环的嵌套,掌握continue语句,break语句,goto语句的使用方法。准确掌握循环初始条件、循环终止条件、循环体和循环变量的概念。

- 4 -

(二)本章重点、要点

循环控制语句:while语句,do…while语句,for语句,循环初始条件、循环终止条件、循环体和循环变量,循环的嵌套,辅助控制语句,continue语句,break语句,goto语句。 (三)练习题

7_1.用while语句,求连加式1 + 2 + ... + n( n > 2)的值。 7_2.用do…while语句,求连加式1 + 2 + ...+ n( n > 2)的值。 7_3.求解奇数的连加式1 + 3 + 5 + ... + n ( n > 10 )的值。 7_4.将如图所示的三角形图案显示到屏幕上。 7_5.判断一个整数是否为素数。

第8章 函数(一)

(一)本章学习目标

熟知函数的结构,正确进行函数定义,掌握函数头部,函数体,函数的返回值等概念,理解函数的功能,理解函数参数的意义,掌握有参函数的调用和无参函数的调用,掌握运用函数调用的方式,掌握函数的声明方法,理解函数的原型的概念。 (二)本章重点、要点

函数的定义,函数头部,函数体,函数的值,返回语句,函数的功能,函数的调用,有参函数的调用,无参函数的调用,函数调用的方式,函数的声明与函数的原型。 (三)练习题

8_1.编写程序,通过调用函数imin,求两个表达式的最小值。

8_2.编写程序,通过调用PtrStar函数,输出4行“@”号,每行10个。 8_3.编写程序,输入一个年份,通过调用函数判断其是否为闰年。

8_4.编写程序,输入两个数,输出其中绝对值最大的数。要求:求绝对值和求最大值分别使用函数完成,在求最大值的函数中调用求绝对值的函数。。 8_5.编写函数,完成显示下列所示的三角形图案, 行数由函数参数决定。

8_6.编写程序,通过调用【实例8_5】中的函数,输出三个三角形的图案。

- 5 -

第9章 数组

(一)本章学习目标

张确使用一维数组和二维数组去解决问题。学会使用数组作为函数参数、数组元素作为函数的参数和数组名作为函数参数的方法。 (二)本章重点、要点

一维数组,一维数组的定义,一维数组元素的引用,一维数组在内存中的存储,一维字符数组的说明。二维数组,维数组的定义,二维数组元素的引用,二维数组在内存中的存储。数组作为函数参数,数组元素作为函数的参数,数组名作为函数参数。 (三)练习题

9_1.用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数

9_2.将一个一维数组a[9]中各元素值按行的顺序放入二维数组b[3][3]中。 9_3.将一个二维数组b[5][5]中各元素值列优先的顺序放入一维数组a[25]中。 9_4.有一个m×n矩阵,各元素值由随机数产生,求其转置矩阵并输出。 9_5.有一个m×n矩阵,找出最大元素值及其最大元素值所在的行、列位置。 9_6.将矩阵M(n,n)对角线上的元素置为1,其余元素置为0。

第10章 结构体与共用体

(一)本章学习目标

掌握并正确使用结构体类型、结构体与数组,共用体,共用体类型。 (二)本章重点、要点

结构体类型的定义,结构体变量的定义,结构体变量的引用,结构体成员变量的引用,结构体变量的初始化。结构体与数组,共用体,共用体类型和共用体变量的定义,共用体变量的引用。 (三)练习题

10_1.设有学生信息如下:学号(长整型)、姓名(字符串型)、年龄(整型)、课程1成绩(实型)、课程2成绩(实型)、课程3成绩(实型)、课程4成绩(实型)、课程5成绩(实

- 6 -

型)、课程6成绩(实型)、课程7成绩(实型)、总分(实型)、平均分(实型)。试编写程序,输入3个学生的上述信息,计算每个学生的总分、平均分,然后输出每个学生学号、姓名、总分、平均分。

10_2.设有学生信息如下:学号(长整型)、姓名(字符串型)、出生年月(其中含有年份、月份、日,均为整型)。试编写程序,输入5个学生的上述信息,输出所有学生的学号、姓名和年龄。

第11章 指针(一)

(一)本章学习目标

变量的指针与指针变量,指针变量的定义与引用,指针变量的引用。 (二)本章重点、要点

变量的指针与指针变量,指针变量的定义与引用,指针变量的引用。 (三)练习题

11_1.编写函数用指针变量按从小到大的顺序输出三个整数。

11_2.输入n(不大于20)个单精度数存入一维数组,编写函数用指针变量处理数组元素的方式将其逆序存放后输出。n从键盘输入。

11_3.利用指针编写函数用选择法对整数数组排序(降序)。

11_4.利用指针编写程序,从键盘上输入一串字符(以回车键为结束),将其以字符串形式存入一维字符数组,然后再输出该字符型数组中的字符串。 11_5.利用指针编写一个函数计算一个字符串的长度。

第12章 文件

(一)本章学习目标

掌握文件的概念并正确使用文件,掌握文件的打开与关闭方式,使用函数对文件进行读写操作。

(二)本章重点、要点

文件,文件名, 普通文件和设备文件,ASCII文件和二进制文件,流文件,文件指针,文件的打开与关闭,文件打开函数,文件关闭函数。文件的读/写操作,字符读/写函数,字符串读/写函数。文件的数据块读/写函数,格式化读/写函数,文件检测函数,文件的随机

- 7 -

读写。 (三)练习题

12_1.利用文本编辑软件在磁盘上建立一个有n个学生的学号、姓名及英语、数学和计算机三门课程成绩的数据文件。编写程序将建立的数据文件读出且求出每个学生的平均成绩。 12_2用定义结构类型的方法,编写程序建立一个具有学生学号、姓名、总分和联系电话的记录文件。 12_3编写程序,利用第12_2建立的记录文件,从键盘上输入一个学号,查寻该位同学信息。 12_4编写程序,将第12_3题建立的文件复制到另一个文件。

第13章 运算符与表达式

(一)本章学习目标

深入理解运算符和表达式,掌握位运算方法。 (二)本章重点、要点

运算符与表达式,赋值运算符,复合赋值运算符,赋值表达式,赋值运算符的优先级和结合方向。逗号运算符与逗号表达式,逗号表达式的求解顺序,逗号运算符的优先级,逗号运算符的扩展形式。条件运算符与条件表达式,条件运算符的求解顺序,条件运算符的优先级,条件运算符的结合方向,条件表达式的其它形式。自增自减运算符,前置运算,后置运算,自增自减运算符的优先级与结合方向,位运算,位运算符,位运算的功能,与位运算有关的复合赋值运算符,不同长度的数据的位运算,表达式的求解。 (三)练习题

13_1.利用条件运算符实现大小写字母的转换。

13_2.使用for循环求1至100的和。要求将所有的命令放入一个for循环结构。 13_3.将下列符号函数使用一个条件表达式完成。

13_4.若int a=0,b=1,c=2,判断下列表达式执行后a,b,c及表达式的值 (1) 逻辑表达式 a++&&b++&&c++ (2) 逻辑表达式 ++a&&b++&&c++ (3) 逻辑表达式 ++a&&--b&&c++ (4) 逻辑表达式 a++||b++||c++ (5) 逻辑表达式 ++a||b++||c++ (6) 逻辑表达式 a++||--b||c++

(7) 逻辑表达式 a++||b++&&(c-=2) (8) 逻辑表达式 a++&&b++||(c-=2) (9) 逻辑表达式 ++a&&b++||(c-=2)

- 8 -

13_5.若a=1,b=2,c=3,d=4,m=1,n=3,则逻辑表达式 (m=a>b)&&(n=c>d) 13_6.解释x != 0.0 && y/x > 1.0的功能。

第14章 变量的存储

(一)本章学习目标

掌握变量的存储概念,理解变量的类别和作用域。 (二)本章重点、要点

变量的存储单元,整型变量在内存中的存储,字符型变量在内存中的存储,实型变量在内存中的存储。变量的作用域,内部变量,外部变量,变量的生存期,auto变量,全局变量,static变量,register变量。 (三)练习题

14_1.在C语言中,变量的存储类别有哪4种? 14_2.什么是外部变量?其特点有哪些? 14_3.寄存器变量有什么特点? 14_4.什么是变量的作用域? 14_5.什么是变量的生存期?

第15章 指针(二)

(一)本章学习目标

深入理解指针,掌握高层次指针应用,掌握链表的使用。 (二)本章重点、要点

指针与数组,一维数组与一维数组指针,二维数组的指针及数组元素的访问,字符串指针。指针数组,指针数组,指向指针的指针,main函数的参数,函数指针。结构体指针,指向结构体的指针,指向结构体数组的指针,存储管理函数。链表,链表的概念,单链表的基本操作。

- 9 -

(三)练习题

15_1.编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。 15_2.调用MaxMin函数,返回数组的最大值和最小值。

第16章 函数(二)

(一)本章学习目标

深入理解函数,从存储方面解释函数的调用。 (二)本章重点、要点

函数调用时的内存,函数的活动,程序运行时存储空间的划分,函数的活动记录。参数的传递机制,C语言参数传递,指针参数,数组参数。递归函数,直接递归与间接递归,递归函数的调用过程。 (三)练习题

16_1.设计一个函数把两个整数形参中较大的那个数的地址作为函数值返回,并编写主函数实现调用。

16_2.编写函数,比较两个字符串大小。若相等返回0,大于时返回1,否则返回-1。

第17章 预处理命令

(一)本章学习目标

正确理解预处理命令的概念,掌握预处理命令的使用方法。 (二)本章重点、要点

宏定义,无参宏定义,带参宏定义,宏的作用域。带参的宏与函数的区别,文件包含,条件编译,“# ifdef”命令,“# ifndef”命令,“# if”命令,条件编译和条件语句的比较。 (三)练习题

17_1.C语言的预处理有哪些?

- 10 -

17_2.预处理命令在书写格式上有什么要求?

17_3.#include <文件名>和#include “文件名”有什么不同? 17_4. 条件编译和条件语句有什么区别?

参考答案

第1章 绪论

1_1.什么是低级语言?

答:低级语言较依赖于所在的计算机系统,也称为面向机器的语言。使用低级语言编写的程序,移植性较差。低级语言主要包括机器语言和汇编语言。

机器语言是由二进制代码“0”和“1”组成的若干个数字串。用机器语言编写的程序,称为机器语言程序。机器语言程序能够被计算机直接识别并执行。但是,程序员直接编写或维护机器语言程序是很难完成的。

汇编语言是一种借用助记符表示的程序设计语言。汇编语言的每条指令都对应着一条机器语言代码。汇编语言也是面向机器的,即不同类型的计算机系统使用的汇编语言也不同。 1_2.什么是高级语言?

答:高级语言编写的程序易读,易修改,移植性好。但使用高级语言编写的程序不能直接在机器上运行,必须经过语言处理程序的转换,才能被机器识别。按照转换方式的不同,可将高级语言分为解释型和编译型两大类。 1_3.面向过程语言的特点是什么?

答:(1) 采用模块分解与功能抽象的方法,自顶向下,逐步求精。 (2) 按功能划分为若干个基本的功能模块,形成一个树状结构。各模块间的关系尽可能简单,功能上相对独立。每一个功能模块内部都是由顺序、选择或循环三种基本结构组成。 1_4.什么是算法?

答:问题的求解过程,是对数据对象的加工过程。问题的求解过程包括两个方面的内容,即对问题涉及的“数据”进行描述和对“加工过程”进行描述。对“数据”的描述,称为“数据结构”,对“加工过程”的描述,称为算法。 1_5.算法有什么特点? 答:算法具有以下特点:

(1) 有穷性。一个算法包含的操作步骤是有穷的,而不能是无穷的,并且操作时一般还要求是合理可行的。

(2) 确定性。算法的每个操作都是确定的,而不应该具有二义性。 (3) 有零个或多个输入。“输入”指的是执行算法时,需要从外界获取的必要信息。

(4) 有一个或多个输出。算法的目的是为了得到计算的结果。一般地,计算结果即为输出。没有输出的算法是没有意义的。

(5) 有效性。算法的每一个操作都应能有效地执行,并得到确定的结果。 1_6.结构化算法的基本结构有哪些?

答:(1) 顺序结构。 (2) 选择结构。(3) 循环结构。 1_7.结构化程序设计的标准有哪些?

答:一个结构化的程序,应遵循下面的标准:

(1) 程序符合“正确第一,效率第二”的质量标准。

(2) 程序由“模块”组成,模块之间可以跳转但不能随意地跳转。

- 11 -

(3) 程序只有一个入口,一个出口。

(4) 程序由顺序结构、选择结构和循环三种结构组成。 (5) 程序没有死循环。

第2章 C语言程序的开发过程 2_1.在屏幕上输出一行信息 。 2_2.求两个数的平均值。

2_3.输入两个整数,求二者的最大值。 (五)参考答案

【实验程序2_1】 在屏幕上输出一行信息 。 /*程序功能:在屏幕上输出一行信息*/ #include int main ( ) {

printf (\; return 0; }

2_2. 求两个数的平均值。

/*程序功能:求两个数的平均值*/ # include int main ( ) {

float num1, num2, average; num1 = 97.45; num2 = 15.3;

average = (num1 + num2) / 2;

printf ( \ return 0; }

2_3.输入两个整数,求二者的最大值。 # include

int imax ( int x, int y ) {

if ( x > y )

return x; /*若x>y,返回x的值*/ else

return y; /*否则,返回y的值*/ }

int main ( ) {

int num1, num2, MaxValue;

scanf ( \输入两个整数*/ MaxValue = imax ( num1, num2 );

/*调用imax函数,计算结果赋值给MaxValue*/

printf ( \

- 12 -

return 0; }

第3章 基本数据类型

3_1.基本整型数据的输出。 # include int main ( )

{ int num1, num2 = 16; num1 = 15;

printf ( \

printf ( \

printf ( \ printf ( \ return 0; }

3_2.实型数据的输出。 # include int main ( )

{ float a = 1.23, b;b = 45.0;

printf ( \ printf ( \

printf ( \

printf ( \ printf ( \ return 0; }

3_3.字符型数据的输出。 # include int main ( ) {

char ch = 'a';

printf( \输出变量ch当前的值*/ printf( \输出字符“b”*/

printf( \输出字符变量ch当前值的ASCII码值*/ printf( \输出字符“b”的ASCII码值*/ return 0; }

3_4.C语言标识符的命名规则如何? 答:标识符是由系统或程序设计者为数据对象指定的名字。标识符是以英文字母(a~z,A~Z)或者下划线“_”开头,可以包含英文字母、数字(0~9)或下划线的,连续的字符序列。例如,字符串A,a,num1,_3c等都是 3_5.C语言的基本数据类型有哪些?

答:C语言的基本数据类型有:整型(int)、实型(float和double)、字符型(char)和枚举型(enum)。 3_6.什么是常量?

- 13 -

答:在程序的运行过程中,其值不能被改变的量,称为常量。由常量的名字,可以确定其含义。因此,常量也称为字面量。例如,12,3.29,'a',\都是C语言的常量。 3_7.什么是变量?

答:在程序运行的过程中,其值可以改变的量称为变量。每一个变量都必须有一个名字,即变量名。变量的命名应遵循标识符的命名规则。 3_8.转义字符有什么作用?举例说明。

答:在C语言中,还有一类特殊的字符常量,这种字符是以反斜杠(\\)开头的。字符“\\”将其后面的字符转变成另外的意义,因而称为转义字符。转义字符一般表示ASCII字符集中不可打印的控制字符和特定功能的字符。例如, ?\\141?的含义是,将八进制的“141”(十进制的“97”)转换成ASCII码值为97的字符,?\\141?等价于字符?a?。?\\n?表示换行,将当前位置移到下一行开头。

3_9.字符串常量与字符常量的表示有什么不同?

答:字符串常量是用一对双撇号括起来的字符序列。例如,\love China\\Program\\都是字符串常量。字符常量指的是用一对单撇号括起来的单个字符。例如,???,?A?,?8?,都是字符常量。

第4章 算术运算符与算术表达式

4_1.输出整数num的个位数、十位数和百位数。 # include int main ( ) {

int num = 456;

printf(\ return 0; }

4_2.设y=|x|1/2。当x的值为5.678时,计算y的值。 # include # include int main ( ) {

double x, y; x = 5.678;

y = sqrt ( fabs ( x ) ); printf ( \ return 0; }

4_3.编写程序,输入圆的半径,求该圆的面积与周长(保留三位小数)。 /*程序功能:输入圆的半径,计算圆的面积与周长*/ # include int main ( ) {

float radius, area, circum; printf ( \ scanf ( \

area = 3.14 * radius * radius;

- 14 -

circum = 2 * 3.14 * radius;

printf ( \

printf ( \ return 0; }

4_4.输入两个整数,求二者的平方和及平方差。 /*程序功能:计算两个整数的平方和与平方差*/ # include int main ( ) {

int num1, num2;

int SquareDif, SquareSum;

printf ( \scanf ( \

SquareSum = num1 * num1 + num2 * num2; SquareDif = num1 * num1 - num2 * num2;

printf( \printf( \return 0; }

4_5.输入一个大写英文字母,求其后继(后面相邻)字母。规定:“Z”的后继是“A”。 /*程序功能:求大写英文字母的后继*/ # include int main ( ) {

char ch, BackCh;

printf ( \ ch = getchar ( );

BackCh = ( ch - 64 ) % 26 + 65;

printf ( \ return 0; }

第5章 C语言程序的输出与输入

32

5_1.编写程序求多项式 ax+bx+c的值( 键盘输入a=2, b=3, c=4, x=1.414)。 # include int main ( ) {

float a,b,c,x,y;

printf ( \

scanf ( \数据之间以空格分隔*/ y = a*x*x+b*x*c;

printf ( \ getchar(); getchar(); return 0;

- 15 -

}

变化二:

# include int main ( ) {

float a,b,c,x,y;

printf ( \

scanf ( \数据之间以空格分隔*/ y = a*x*x+b*x*c;

printf ( \ getchar(); getchar(); return 0; }

变化三:

# include int main ( ) {

int a,b,c; float x,y;

printf ( \

scanf ( \数据之间以空格分隔*/ y = a*x*x+b*x*c;

printf ( \ getchar(); getchar(); return 0; }

运行结果参见变化二的结果图。

5_2.已知华氏温度,根据公式:C = 5/9(F-32),求摄氏温度C(结果保留两位小数)。 #include int main ( ) {

float f,c;

printf ( \ scanf ( \

c = 5.0/9*(f-32); /* 因为整除的原因,使用了5.0,而不是5 */ printf ( \ return 0; }

5_3.使用宏定义定义符号常量 PI,其值为3.14159,并使用符号常量,求圆半径r=2.456时的圆周长、圆面积。 #include #define PI 3.14159 int main ( ) {

- 16 -

float r,c,s;

printf ( \ scanf ( \ c = 2*PI*r; s = PI*r*r;

printf ( \ return 0; }

注:也可以采用赋值的方式对r赋值2.456。

5_4.用getchar()分别输入‘A’,‘B’,‘C’,并赋值给a,b,c, 然后将其转换成对应的小写字母,用putchar()将其输出。 #include #include int main ( ) { char a,b,c;

printf ( \输入时ABC之间不能有空格! */ a=getchar(); b=getchar(); c=getchar(); a = a+32;

b = b-'A'+'a'; c = tolower(c); printf ( \

putchar(a);putchar('\\n'); printf ( \

putchar(b);putchar('\\n'); printf ( \

putchar(c);putchar('\\n'); return 0; }

5_5.若a=3,b=4,c=5,编写程序,要求用一个scanf()函数完成输入,按以下要求的格式输出:

x1=a+b+c= 3+ 4+ 5= 12 x2=a-b-c= 3- 4- 5= -6 #include #include int main ( ) { int a,b,c;

printf ( \ scanf(\ printf ( \ scanf(\ printf ( \ scanf(\

- 17 -

printf ( \ printf ( \ return 0; }

第6章 流程控制—选择控制结构

6_1.使用if语句,求解两个数中的最大值。 /*程序功能:输入两个数,输出其中的大者*/ # include int main ( ) { int num1, num2;

printf ( \scanf ( \if ( num1 >= num2 )

{ printf ( \ } else {

printf ( \ }

return 0; }

6_2.使用switch语句,求解简单算术表达式的值。 int main ( )

{ int num1, num2, result; char ch;

printf ( \\

scanf ( \

switch ( ch ) /*根据ch的值,选择分支执行*/ {case '+':

result = num1 + num2;

break; /*求和完毕,退出当前switch语句*/ case '-':

result = num1 - num2;

break; /*求差完毕,退出当前switch语句*/ case '*':

result = num1 * num2;

break; /*求积完毕,退出当前switch语句*/ case '/':

result = num1 / num2;

break; /*求商完毕,退出当前switch语句*/ default:

printf ( \}

printf ( \

- 18 -

return 0; }

6_3.使用嵌套的if语句,判断一个整数能否被3或5整除。 # include int main ( )

{ int num; printf ( \a number: \ scanf ( \

if ( num % 3 == 0) /*num能被3整除*/ {

if ( num % 5 == 0 ) /*num既能被3整除,又能被5整除*/ printf ( \ else /*num能被3整除,但不能被5整除*/

printf ( \ }

else /*num不能被3整除*/ {

if ( num % 5 == 0 ) /*num不能被3整除,但能被5整除*/ printf ( \else /*num既不能被3整除,也不能被5整除*/

printf ( \}

return 0; }

6_4.使用嵌套的switch语句,判断一个整数能否被3或5整除。 # include int main ( )

{ int num; printf ( \ scanf ( \ switch ( num % 3 == 0 ) {case 0:

switch ( num % 5 == 0 ) {case 0:

printf ( \break; case 1:

printf ( \ break; } break; case 1:

switch ( num % 5 == 0 ) { case 0:

printf ( \break;

- 19 -

case 1:

printf ( \break; }

break; }

return 0; }

6_5.输入一个字符,若输入的为大写英文字母,则输出其对应的小写英文字母;若输入的为小写英文字母,则输出其对应的大写英文字母;若输入的非英文字母,则原样输出。 # include int main ( )

{ char ch1, ch2;

printf ( \ scanf ( \

switch ( ch1 >= 65 && ch1 <= 90 ) { case 0: /*非大写英文字母*/

switch ( ch1 >= 97 && ch1 <= 122 ) {

case 0: /*非小写英文字母*/ ch2 = ch1;

break;

case 1: /*是小写英文字母*/ ch2 = ch1 - 32; break; } break;

case 1: /*是大写英文字母*/ ch2 = ch1 + 32; break; }

printf ( \ return 0; }

6_6.编写程序,输入一个年份,判断其是否为闰年。

分析:一个年份,当且仅当符合下列两个条件之一的,即是闰年。 能被4整除,但不能被100整除的年份。例如,1992年、2008年。 能被400整除的年份。例如,2000年、2400年。

用flag的值,表示是否为闰年。如果flag的值为1,表示闰年;如果是0,表示非闰年。 # include int main ( )

{ int year, flag;

printf ( \scanf ( \

- 20 -

if ( year % 4 == 0 ) {

if ( year % 100 != 0 ) flag = 1; else

{ if ( year % 400 == 0 ) flag = 1; else

flag = 0; } } else

flag = 0; if ( flag )

printf ( \else

printf ( \return 0; }

第7章 流程控制—循环控制结构

7_1.用while语句,求解连加式1 + 2 + ?+ n( n > 2)的值。 # include int main( ) {

int i = 1,sum = 0 ,n;

printf( “Input a number: ” ); scanf (“%d”,&n); while( i <= n ) {

sum = sum + i;i=i+1; }

printf( “1 + 2 + ... + %d = %d\\n”,n,sum ); return 0; }

7_2.用do?while语句,求连加式1 + 2 + ...+ n( n > 2)的值。 # include int main ( ) {

int i = 1, n; long product = 1; printf ( \scanf ( \do {

product = product * i;

- 21 -

i = i + 1;

} while ( i <= n ); /*累乘i,直到i超过n为止*/ printf ( \... * %d = %ld\\n\return 0; }

7_3.求解奇数的连加式1 + 3 + 5 + ... + n ( n > 10 )的值。 # include int main ( ) {

int i, sum = 0; int n;

printf ( \ scanf ( \

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

sum = sum + i; }

printf ( \ return 0; }

7_4.将如图所示的三角形图案显示到屏幕上。 分析:

需要循环输出3行“*”;

第i行需要输出3-i个空格和2i-1个“*”。 可选用双层的嵌套循环。外层循环控制重复输出行;内层循环实现在相应行输出若干空格和若干“*”。

# include # include int main ( ) {

int i, j;

for ( i = 1; i <= 3; i = i +1 ) {

for ( j = 1; j <= 3 - i; ) {

printf ( \ j = j + 1;

} /*第i行输出3 - i个空格*/ j = 1;

while ( j <= 2 * i - 1 ) {

printf ( \ j = j + 1;

} /*第i行输出2 * i - 1个“*”*/

- 22 -

printf ( \换行*/ } return 0; }

7_5.判断一个整数是否为素数。 # include int main ( ) {

int i, num;

printf ( \scanf ( \

for ( i = 2; i < num/2; i = i +1 ) {

if ( num % i == 0 ) /*num能被i整除,所以num不是素数*/ {

printf ( \

break; /*num的素性已经测定,终止循环,此时i < num*/ } }

if ( i == num ) /*循环是自然终止的,即没有执行break语句*/ printf ( \return 0; }

第8章 函数(一)

8_1.编写程序,通过调用函数imin,求两个表达式的最小值。 # include

int imin ( int x, int y ) {

if ( x > y ) return y; else return x; }

int main ( ) {

int num1, num2, result;

scanf ( \

result = imin ( num1 + num2, num1 * num2 ); printf ( \ result = imin ( 5 * 6, 4.6 );

printf ( \ return 0; }

8_2.编写程序,通过调用PtrStar函数,输出4行“@”号,每行10个。

- 23 -

# include void PrtStar ( )

{ printf ( \}

int main ( ) {

int i = 0;

while ( i < 4 ) {

PrtStar ( ); i = i + 1; }

return 0; }

运行结果为:

8_3.编写程序,输入一个年份,通过调用函数判断其是否为闰年。 #include

int leap(int year) 运行结果1为: {

int flag;

if ( year % 4 == 0 ) {

if ( year % 100 != 0 ) flag = 1; else

{ 运行结果2为: if ( year % 400 == 0 ) flag = 1; else

flag = 0; } } else

flag = 0; return flag; }

int main ( ) {

int year, flag;

printf ( \ scanf ( \ if ( leap( year )==1 )

printf ( \ else

- 24 -

printf ( \ return 0; }

8_3.变化一:

#include int leap(int year) {

int flag = 0;

if (( year % 4 == 0 )&&( year % 100 != 0 )) flag = 1;

if ( year % 400 == 0 ) flag = 1; return flag; }

int main ( ) {

int year, flag;

printf ( \ scanf ( \

if ( leap( year )==1 )

printf ( \ else

printf ( \ return 0; }

运行结果参见8_3的运行结果。 8_3.变化二:

#include int leap(int year) {

return ((( year % 4 == 0 )&&( year % 100 != 0 ))||( year % 400 == 0 )); }

int main ( ) {

int year, flag;

printf ( \ scanf ( \ if ( leap( year )==1 )

printf ( \ else

printf ( \ return 0; }

- 25 -

运行结果参见8_3的运行结果。 8_3.变化三:

#include int leap(int year) {

return ((!( year % 4)&&( year % 100 ))||(!( year % 400))); }

int main ( ) {

int year, flag;

printf ( \ scanf ( \ if ( leap( year )==1 )

printf ( \ else

printf ( \ getchar(); getchar(); return 0; }

运行结果参见8_3的运行结果。

8_4.编写程序,输入两个数,输出其中绝对值最大的数。要求:求绝对值和求最大值分别使用函数完成,在求最大值的函数中调用求绝对值的函数。。 # include

float absolute ( float x ) {

if ( x > 0 ) return x; else

return -x; }

float fmax ( float x, float y ) {

if ( absolute(x) < absolute(y) ) return y; else

return x; }

int main ( ) {

float num1, num2, result;

scanf ( \ result = fmax ( num1, num2 );

printf ( \ return 0;

- 26 -

}

8_5.编写函数,完成显示下列所示的三角形图案, 行数由函数参数决定。 #include void star(int n) {

int i, j;

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

for ( j = 1; j <= n - i; ) {

printf ( \ j = j + 1;

} /*第i行输出n - i个空格*/ j = 1;

while ( j <= 2 * i - 1 ) {

printf ( \ j = j + 1;

} /*第i行输出2 * i - 1个\ printf ( \换行*/ } }

int main ( ) {

star(5); return 0; }

8_6.编写程序,通过调用【实例8_5】中的函数,输出三个三角形图案。 #include void star(int n) {

int i, j;

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

for ( j = 1; j <= n - i; ) {

printf ( \ j = j + 1;

} /*第i行输出n - i个空格*/ j = 1;

while ( j <= 2 * i - 1 ) {

printf ( \ j = j + 1;

- 27 -

} /*第i行输出2 * i - 1个\ printf ( \换行*/ } }

int main ( ) {

int i;

for(i=4;i<7;i=i+1) star(i); getchar(); return 0; }

运行结果为:

注:本例打印了3个不同行数的三角形,大家可以打印三个相同的三角形。 第9章 数组

9_1.用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数

#include #include #include int main ( ) {

int a,c[15];

srand(time(0)); /* 此处用于初始化随机数函数 */ for(a=0;a<15;a=a+1) c[a]=rand()1; for(a=0;a<15;a=a+1) {

if(a%5==0) printf(\ printf ( \ }

return 0; }

注:因为是随机数,每次运行结果可能不同。

9_2.将一个一维数组a[9]中各元素值按行的顺序放入二维数组b[3][3]中。 #include #include #include int main ( ) {

int i,j,a[9],b[3][3]; srand(time(0)); for(i=0;i<9;i=i+1) a[i]=rand();

- 28 -

for(i=0;i<9;i=i+1)

printf ( \ printf(\

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

for(j=0;j<3;j=j+1)

printf ( \ printf(\ }

return 0; }

9_3.将一个二维数组b[5][5]中各元素值按列优先的顺序放入一维数组a[25]中。 #include int main ( )

{ int i,j,k,a[25],b[5][5]; srand(time(0)); for(i=0;i<5;i=i+1) for(j=0;j<5;j=j+1) b[i][j]=rand(); for(i=0;i<5;i=i+1) {

for(j=0;j<5;j=j+1)

printf ( \ printf(\ }

printf(\ k=0;

for(i=0;i<5;i=i+1) for(j=0;j<5;j=j+1) { a[k]=b[j][i]; k=k+1; }

for(i=0;i<24;i=i+1) printf ( \ return 0; }

9_4.有一个m×n矩阵,各元素值由随机数产生,求其转置矩阵并输出。 #include #include #include int main ( )

- 29 -

{ int i,j,a[4][5],b[5][4]; srand(time(0)); for(i=0;i<3;i=i+1) for(j=0;j<4;j=j+1) a[i][j]=rand(); for(i=0;i<3;i=i+1) for(j=0;j<4;j=j+1) b[j][i]=a[i][j];

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

printf ( \ printf(\ }

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

printf ( \ printf(\ }

return 0; }

9_5.有一个m×n矩阵,找出最大元素值及其最大元素值所在的行、列位置。 #include int main ( )

{ int i,j,a[4][5],max,row,column; srand(time(0)); for(i=0;i<3;i=i+1) for(j=0;j<4;j=j+1) a[i][j]=rand();

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

printf ( \ printf(\ }

max=a[0][0]; row=0; column=1;

for(i=0;i<3;i=i+1) for(j=0;j<4;j=j+1) if(max

- 30 -

column=j; }

printf(\ return 0;

} 注:输出的行、列号为该元素的行下标和列下标值。 9_6.将矩阵M(n,n)对角线上的元素置为1,其余元素置为0。 #include #include #include int main ( )

{ int i,j,a[5][5]; for(i=0;i<4;i=i+1) for(j=0;j<4;j=j+1) if(i==j) a[i][j]=1; else

a[i][j]=0;

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

printf ( \ printf(\ }

getchar(); getchar(); return 0; }

第10章 结构体与共用体

10_1.设有学生信息如下:学号(长整型)、姓名(字符串型)、年龄(整型)、课程1成绩(实型)、课程2成绩(实型)、课程3成绩(实型)、课程4成绩(实型)、课程5成绩(实型)、课程6成绩(实型)、课程7成绩(实型)、总分(实型)、平均分(实型)。试编写程序,输入3个学生的上述信息,计算每个学生的总分、平均分,然后输出每个学生学号、姓名、总分、平均分。 #include #include struct STUDENT { long num;

char name[20]; int age;

float course1; float course2; float course3; float course4; float course5; float course6;

- 31 -

float course7; float average; float total; }stu[3];

int main ( ) {

int i;

printf(\

printf(\);

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

scanf(\ &stu[i].course1,&stu[i].course2,&stu[i].course3,&stu[i].course4, &stu[i].course5,&stu[i].course6,&stu[i].course7);

stu[i].total=stu[i].course1+stu[i].course2+stu[i].course3+stu[i].course4+ stu[i].course5+stu[i].course6+stu[i].course7; stu[i].average=stu[i].total/7; }

printf(\ for(i=0;i<3;i=i+1)

printf(\al);

return 0; }

运行结果为:

10_2.设有学生信息如下:学号(长整型)、姓名(字符串型)、出生年月(其中含有年份、月份、日,均为整型)。试编写程序,输入5个学生的上述信息,输出所有学生的学号、姓名和年龄。

#include #include #include #define N 5 struct DATE { int year; int month; int day; };

struct STUDENT { long num;

char name[20];

struct DATE birthday; }stu[N];

int main ( )

- 32 -

{

int i,age; time_t tt; struct tm *t;

printf(\

printf(\ for(i=0;i

scanf(\ &stu[i].birthday.month,&stu[i].birthday.day); printf(\ time(&tt);

t=localtime(&tt); for(i=0;i

age=1900+t->tm_year-stu[i].birthday.year;

printf(\ }

return 0; }

第11章 指针(一)

11_1.编写函数用指针变量按从小到大的顺序输出三个整数。 void sort3(int *x,int *y,int *z) {

int t; if(*x>*y) {

t=*x; *x=*y; *y=t; }

if(*x>*z) {

t=*x; *x=*z; *z=t; }

if(*y>*z) {

t=*y; *y=*z; *z=t; }

printf(\}

- 33 -

11_2.输入n(不大于20)个单精度数存入一维数组,编写函数用指针变量处理数组元素的方式将其逆序存放后输出。n从键盘输入。 #include

void sottf(float a[],int n) {

int *p=a,*q=a+n-1,t; for(;p

t=*p; *p=*q; *q=t; } }

int main ( ) {

float a[20]; int k,n;

scanf(\ for(i=0;i

scanf(\sottf(a,n);

for(i=0;i

printf(\ printf(\return 0; }

11_3.利用指针编写函数用选择法对整数数组排序(降序)。 void sott(int a[],int n) {

int k,j,t;

for(k=0;k

t=k;

for(j=k+1;j

if(*(a+t)<*(a+j)) t=j; if(t!=k) {

j=*(a+t); *(a+t)=*(a+k); *(a+k)=j; } } }

11_4.利用指针编写程序,从键盘上输入一串字符(以回车键为结束),将其以字符串形式

- 34 -

存入一维字符数组,然后再输出该字符型数组中的字符串。 #include int main ( ) {

char a[100]; char ch; int i,n=0;

while((ch=getchar())!=’\\n’) a[n++]=ch; a[n]=’\\0’;

for(i=0;i

printf(\return 0; }

11_5.利用指针编写一个函数计算一个字符串的长度。 int sl(chat *p) {

int *q=p;

while(*q!=’\\0’) q++; return (q-p); }

第12章 文件

12_1.利用文本编辑软件在磁盘上建立一个有n个学生的学号、姓名及英语、数学和计算机三门课程成绩的数据文件。编写程序将建立的数据文件读出且求出每个学生的平均成绩。 #include #define N 5 struct student {

int num;

char name[10]; float eng; float mat; float com; }stu[N]; int main ( ) {

FILE *fp; int i;

float ave=0;

if ( ( fp = fopen ( \{

printf ( \exit ( 0 ); }

- 35 -

for(i=0;k

fread ( &stu[i], sizeof ( struct student ), 1, fp ); ave=stu[i].eng+ stu[i]. mat+stu[i]. com ;

printf(\ }

fclose ( fp ); return 0; }

12_2用定义结构类型的方法,编写程序建立一个具有学生学号、姓名、总分和联系电话的记录文件。

#include #define N 5 struct student {

int num;

char name[10]; float score; int tel; }stu[N]; int main ( ) {

FILE *fp; int i;

if ( ( fp = fopen ( \{

printf ( \exit ( 0 ); }

printf ( \for ( i = 0; i < N; i = i + 1 )

scanf ( \fwrite ( &stu[0], sizeof ( struct student ), N, fp ); fclose ( fp ); return 0; }

12_3编写程序,利用第12_2建立的记录文件,从键盘上输入一个学号,查寻该位同学信息。 #include #define N 5 struct student {

int num;

char name[10]; float score;

- 36 -

int tel; }stu;

int main ( ) {

FILE *fp; int i,n;

if ( ( fp = fopen ( \{

printf ( \exit ( 0 ); }

scanf ( \

for ( i = 0; i < N; i = i + 1 ) {

fread ( &stu, sizeof ( struct student ), 1, fp ); if(stu. num ==n) break; }

if(i

printf( \else

printf(\fclose ( fp ); return 0; }

12_4编写程序,将第12_3题建立的文件复制到另一个文件。 #include int main ( ) {

FILE *fp1,*fp2; char ch;

if ( ( fp1 = fopen ( \{

printf ( \exit ( 0 ); }

if ( ( fp2 = fopen ( \{

printf ( \exit ( 0 ); }

ch = fgetc (fp1); while ( !feof(fp1) ) {

ch = fgetc (fp1);

- 37 -

fputc(ch, fp2); }

fclose ( fp1 ); fclose ( fp2 ); return 0; }

第13章 运算符与表达式

13_1.利用条件运算符实现大小写字母的转换。 #include #define N 40 int main ( ) {

char ch[N]=\ int i;

printf(\ for ( i = 0; i < N; i ++ ) printf ( \ printf ( \

for ( i = 0; i < N; i ++ ) ch[i]=

(ch[i]>='A'&&ch[i]<='Z')?ch[i]+32:(ch[i]>='a'&&ch[i]<='z')?ch[i]-32:ch[i]; printf(\ for ( i = 0; i < N; i ++ ) printf ( \ printf ( \ return 0; }

13_2.使用for循环求1至100的和。要求将所有的命令放入一个for循环结构。 #include int main ( ) {

int i,sum;

for ( i = 1,sum = 0; i <= 100;sum+=i,i++ ); printf ( \ return 0; }

13_3.将下列符号函数使用一个条件表达式完成。 x > 0 ? 1 : ( x == 0 ? 0 : -1) 或者 x > 0 ? 1 : (x == 0 ? 0 : -1

13_4.若int a=0,b=1,c=2,判断下列表达式执行后a,b,c及表达式的值。 逻辑表达式 a++&&b++&&c++,执行后,a=1,b=1,c=2,表达式的值为0。 逻辑表达式 ++a&&b++&&c++,执行后,a=1,b=2,c=3,表达式的值为1。 逻辑表达式 ++a&&--b&&c++,执行后,a=1,b=0,c=2,表达式的值为0。

逻辑表达式 a++||b++||c++,执行后,a=1,b=2,c=2,表达式的值为1(a++为后置)。

- 38 -

逻辑表达式 ++a||b++||c++,执行后,a=1,b=1,c=2,表达式的值为1。 逻辑表达式 a++||--b||c++,执行后,a=1,b=0,c=3,表达式的值为1。 逻辑表达式 a++||b++&&(c-=2),执行后,a=1,b=2,c=0,表达式的值为0。 逻辑表达式 a++&&b++||(c-=2),执行后,a=1,b=1,c=0,表达式的值为0。 逻辑表达式 ++a&&b++||(c-=2),执行后,a=1,b=2,c=2,表达式的值为1。

13_5.若a=1,b=2,c=3,d=4,m=1,n=3,则逻辑表达式 (m=a>b)&&(n=c>d)执行后,m=0,n=3。因为,赋值表达式“(m=a>b)”的值为0,无论表达式“(n=c>d)”的值为真还是为假,整个逻辑表达式“(m=a>b)&&(n=c>d)”的值均为0,所以表达式“(n=c>d)”不被求解,变量n保持了原来的值3。

13_6.解释x != 0.0 && y/x > 1.0的功能。

当 x = 0时,这个表达式仍然可以计算,不会出现“除 0 错误”。 第14章 变量的存储

14_1.在C语言中,变量的存储类别有哪4种?

答:有auto变量,全局变量,static变量和register变量。 14_2.什么是外部变量?其特点有哪些?

答:在函数外部定义的变量为外部变量。外部变量不属于任何一个函数,可以被文件中多个函数共用。作用域:从变量的定义位置开始,到变量所在的源文件结束。 14_3.寄存器变量有什么特点?

答:C语言允许将部分内部变量的值存放在CPU的寄存器中,需要使用时,直接从寄存器取出变量的值参加运算。这种变量称为register变量,也称为寄存器变量。寄存器的存取速度高于内存的存取速度,合理地使用register变量,可以提高程序的执行效率 14_4.什么是变量的作用域?

答:C语言中,变量的有效范围称为变量的作用域。作用域是从程序静态行文角度描述变量的。

14_5.什么是变量的生存期?

答:一个变量,从某次被分配存储空间起,到该次分配的存储空间被释放之间的时间,称为该变量的生存期。 第15章 指针(二)

15_1.编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。 #include int main() {

int y,m,d,i,days;

int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int leap(int);

printf(\ scanf(\ if(leap(y)) month[2]++; days=d;

for(i=1;i

printf(\

- 39 -

getch(); return 0; }

int leap(int year) {

return (!(year@0)||(!(year%4)&&year0)); }

15_2.调用MaxMin函数,返回数组的最大值和最小值。 # include #define N 10

void MaxMin ( int arr[], int n, int * pmax, int * pmin ); int main ( ) {

int a[N], i; int max, min;

for ( i = 0; i < N; i ++ ) scanf ( \ MaxMin ( a, N, &max, &min );

printf ( \ getchar(); getchar(); return 0; }

void MaxMin ( int arr[ ], int n, int * pmax, int * pmin ) {

int i;

* pmax = arr[0]; * pmin = arr[0];

for ( i = 0; i < n; i ++ ) {

if ( * pmax < arr[i] ) * pmax = arr[i];

else if ( * pmin > arr[i] ) *pmin = arr[i]; } }

运行结果为:

第16章 函数(二) 16_1.设计一个函数把两个整数形参中较大的那个数的地址作为函数值返回,并编写主函数实现调用。

int * max(int *x,int *y) { if(*x>*y) return x; return y; }

int main ( )

- 40 -

{ int x,y,*m;

scanf ( \ m=max (&x, &y);

printf ( \ return 0; }

16_2.编写函数,比较两个字符串大小。若相等返回0,大于时返回1,否则返回-1。 int sl(chat *p, chat *q)

{ while((*p==*q)&&(*p!=0)&&(*q!=0))

{ p++; q++; }

if (*p>*q) return 1; if (*p<*q) return -1; return 0; }

第17章 预处理命令

17_1.C语言的预处理有哪些?

答:ANSI C提供的预处理功能主要有三种:宏定义、文件包含和条件编译。 17_2.预处理命令在书写格式上有什么要求? 答:预处理命令以符号“#”开头,单独占一行。

17_3.#include <文件名>和#include “文件名”有什么不同?

答:#include <文件名> ,是标准方式。预处理程序直接到一个或者几个指定的目录中寻找所需要的文件。这种方式通常用于包含系统提供的头文件,系统到存放C库函数头文件所在的目录中寻找包含的文件。

#include “文件名” ,预处理程序首先在源文件所在的目录中寻找被包含的文件。如果找不到,再按标准方式到指定的目录中寻找。 17_4. 条件编译和条件语句有什么区别?

答:使用条件语句,一方面,由于所有语句都要被编译,都要生成相应的目标代码,因此整个程序的目标代码比较长;另一方面,由于条件语句也是语句,也需要占据计算机的时间,因此,程序的运行时间较长。

使用条件编译,可以减少被编译的语句,从而减少目标代码的长度,进而减少运行的时间,但条件编译占用预编译处理的时间。

- 41 -

《C语言程序设计》课程考试模拟试卷

一、单项选择题(每题1分,共70分,请将正确答案写入表格中)

1.在以下关于C语言的叙述中,正确的说法是(): A. C语言比汇编语言快

B. C语言比FORTRAN语言快

C. C语言比FORTRAN语言和汇编语言都快 D. C语言比FORTRAN语言慢

2.下列常数中不能作为C的常量的是() A. 0x4 B. 2.5e-2 C. 33 D. 03A

二、简答题(每题5分,共10分) 1.什么是常量?

2.C语言的基本数据类型有哪些?

三、编程题(每题10分,共20分) 1.编写程序:

使用冒泡法,对数组ia(1)=8,ia(2)=6,ia(3)=9,ia(4)=3,ia(5)=2,ia(6)=7 从小到大排序,并在一行上输出。

2. 编写程序:

输入两个正整数m和n,求其最大公约数

- 42 -

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

Top