C语言程序设计谭浩强重点笔记

时间:2019-05-12 11:25:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言程序设计谭浩强重点笔记》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言程序设计谭浩强重点笔记》。

第一篇:C语言程序设计谭浩强重点笔记

C语言设计 学习笔记

早晨: 06:40

起床

07:20——08:20 上午: 08:30——10:30 10:50——11:30 中午: 12:00——02:00

下午: 02:30——04:30

晚上: 05:30——08:00 08:00——09:00 09:00——11:00

11:30

英语 1小时

新概念英语(单词、语法、听读背)大学英语(单词、语法、听读背)

计算机基础 2小时 计算机科学技术导论 计算机组成原理 微机原理及接口技术

Intel微处理器结构编程与接口 深入理解计算机系统 80x86汇编语言程序设计

8086-8088宏汇编语言程序设计教程 BIOS研发技术剖析 自己动手写操作系统 操作系统原理

Windows操作系统原理 Windows内部原理系列 Windows程序内部运行原理 计算机网络第五版

午休

计算机应用及编程

Windows用户管理指南、AD配置指南、网络专业指南、Windows即学即会教程

Windows下32位汇编语言程序设计、C#编程 锻炼、晚餐 辅导

专业基础 2小时

大学数学、大学物理、电机及拖动、电力电子技术、通信技术 休息

目 录

第一章 C语言概述.................................................................................................................................1.1 C程序结构特点16................................................................................................................1.2 C程序上机步骤17...................................................................................................................第二章 程序的灵魂——算法23............................................................................................................2.1 算法24.....................................................................................................................................2.2 算法的三种基本结构...............................................................................................................2.3 结构化程序设计方法42..........................................................................................................第三章 数据类型 运算符与表达式48..................................................................................................3.1 C语言的基本元素48...............................................................................................................3.2 C的数据类型48.......................................................................................................................3.3 常量与变量48..........................................................................................................................3.4 基本类型...................................................................................................................................3.5 变量63.....................................................................................................................................3.6 不同类型数据间的混合运算...................................................................................................3.7 函数的调用过程(补充).......................................................................................................第四章 最简单的C程序设计——顺序程序设计77...........................................................................4.1 字符数据的输入输出...............................................................................................................第五章 选择结构的程序设计97............................................................................................................第六章 循环结构程序设计.....................................................................................................................6.1 语句标号...................................................................................................................................6.2 break语句和continue语句......................................................................................................第七章 数组132......................................................................................................................................7.1 构造类型...................................................................................................................................7.2 数组133...................................................................................................................................7.3 二维数组...................................................................................................................................7.4 字符串——字符数组...............................................................................................................7.5 字符串处理函数 #include ......................................................................................第八章 函数153......................................................................................................................................8.1 c程序的结构154......................................................................................................................8.2 函数调用参数传递...................................................................................................................8.3 函数变量的作用范围...............................................................................................................8.4 变量的存储类别.......................................................................................................................第九章 预处理命令197........................................................................................................................9.1 预编译命令作用.....................................................................................................................第十章 指针211....................................................................................................................................10.1 变量的访问方式...................................................................................................................10.2 指针变量...............................................................................................................................第十一章 结构体270............................................................................................................................11.1 结构体270............................................................................................................................11.2 声明结构体类型变量的方法271........................................................................................11.3 结构体变量引用273............................................................................................................11.4 结构体变量初始化...............................................................................................................11.5 结构体数组275....................................................................................................................11.6 结构体类型指针...................................................................................................................11.7 链表283................................................................................................................................11.8 共用体 297...........................................................................................................................11.9 枚举类型301........................................................................................................................11.10 用typedef定义的类型304................................................................................................第十二章 位运算308............................................................................................................................12.1 位段 315...............................................................................................................................第十三章 文件319................................................................................................................................13.1 文件319................................................................................................................................13.2 文件的分类319....................................................................................................................13.3 C语言对文件的处理方法319.............................................................................................13.4 文件结构体类型321............................................................................................................13.5 文件结构体数组和指针321................................................................................................13.6 文件的操作321....................................................................................................................13.7 文件的定位333....................................................................................................................13.8 出错检测335........................................................................................................................13.9 小结336................................................................................................................................第十四章 C++对C的扩充 338...........................................................................................................14.1 C++的特点338.....................................................................................................................14.2 C++的输入输出 339.............................................................................................................14.3 C++的输出cout.....................................................................................................................14.4 C++的输入 cin 341...............................................................................................................14.4 函数的重载342....................................................................................................................14.5 带缺省参数的函数344........................................................................................................14.6 变量的引用类型345............................................................................................................14.7 内置函数 348.......................................................................................................................14.8 作用域运算符349................................................................................................................第一章 C语言概述

1.1 C程序结构特点16

1、C程序的基本构件——函数。

2、一个函数由函数首部和函数体两部分构成。

 函数首部一般包括函数类型、函数名、函数参数等。

 函数体一般包括声明部分和执行部分。其中:在声明部分中定义所用到的变量;执行部分则由若干个语句组成。

3、C程序只有一个main函数,且总是从main函数开始执行。

4、C语言语句必须以“;”结束。

5、用/*

*/作为注释。

6、C编译器一般自顶向下顺序编译C源程序,如果被调函数定义在主调函数之后位置时,要在主调函数前,给出被调函数的原型说明。以便编译器在编译被调函数的调用语句时,对调用语句进行参数检查。

如果不进行原型说明,则无法通过编译检查。

原型说明:类型说明 函数名(参数类型,参数类型,„„)

7、头文件——头文件包含了C语言的标准函数库的原型说明。

C语言通过使用#include <>预处理命令,将库函数的原型说明插入到源文件中。

1.2 C程序上机步骤17

1、编辑源文件.c;

2、编译成目标文件.obj;

3、连接——将目标程序和库函数及其他目标程序连接起来,生产可执行文件,文件扩展名为.exe;

4、执行。

结构体、共用体、枚举型。

3、指针类型:用于存储地址的一类数据类型。

4、空类型:

编译器根据变量的数据类型,给变量分配存储单元。

3.3 常量与变量48

1、符号常量——符号常量在其作用域内不能改变,也不能被赋值。#define 符号常量(大写)常量

2、变量——变量由变量名和变量值标识。数据类型 变量;

 变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存地址,当程序访问变量值时,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。

3.4 基本类型

1、整形数据在内存中的存放,是以补码形式存放的。

2、实型数据:单精度 双精度。 在内存中以指数形势存放。

 若数据超过有效位,则超过C语言规定有效位的数据将被舍去,故产生误差。

3、字符型数据:用一个字节存储单元存储。即将字符的ASCII码存储到内存单元中。

 用单引号括起来的一个字符。

 转义字符——特殊字符常量或者控制字符常量,它们都以“”开头。 Char、unsigned char区别:char用7位数表示,最大表示编码为127的字符;unsigned char用8位数表示,最大表示编码为255的字符。 字符数据与整型数据可以相互赋值。

 字符数据可以以字符数据输出,也可以以整型数据形式输出。

4、字符串常量:C语言中,必须是用字符数组来保存字符串常量。在内存中顺序存储。

 用一对双引号括起来的字符序列。

(2)一般把建立存储空间的声明称为变量定义,把不需要建立存储空间的声明成为变量声明。

3.6 不同类型数据间的混合运算

 不同类型数据进行混合运算时,不同类型的数据要先转换成同一类型,按照类型级别由低到高(char,short—int——unsigned—long—double;float—double)的顺序进行转换。

 强制类型转换——(类型名)表达式。强制类型转换也就是将存储数据的内存单元强制转换为另一种数据类型的单元大小。即强制将存放数据的内存单元改变。

 赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值变量的类型。一般短类型转换为长类型时,进行符号扩展;长类型转换为短类型时,仅赋值低位,难以保证数据的正确性。

3.7 函数的调用过程(补充)

 C函数其实就是一个程序模块。

 C函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令,将用到的CPU寄存器压入堆栈。在返回时定义了恢复现场指令,将堆栈数据恢复到CPU寄存器。

 在调用函数时,一般利用堆栈传递输入参数;利用EAX传递输出参数,注意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,在使用输出参数前,不要改变EAX的值。

第四章 最简单的C程序设计——顺序程序设计77 4.1 字符数据的输入输出

1、C语言没有输入输出语句,IO操作通过调用系统函数实现。

2、在程序的开头,要有:#include “stdio.h”或 #include ,预定义语句,用来引用头文件,在编译时将头文件中的函数原型声明添加到源文件中。

stdio.h 输入输出语句

2、数组——数组必须先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序执行时分配存储空间,在未被赋值初始化之前其值随机。

3、C语言只能逐个引用数组元素,不能一次引用整个数组。

4、数组引用是“数组名+下标”引用,数组下标均为整数。如a[2]。

7.3 二维数组

1、数组元素为数组。

2、在内存中,C语言的二维数组中数组元素的存放顺序是按行存放的。

3、二维数组引用是“数组名+下标+下标”。如a[1][2]。

7.4 字符串——字符数组

1、一般用来标识字符串结尾。占用一个字符变量空间。

2、用字符串赋值字符数组时,C编译器在字符串后自动加赋给字符数字。

3、字符数组可以一次引用整个字符串数组。如整个字符串(数组)的输入输出,用%s格式,且在输入字符数组时,用数组名代表数组的首地址,对于二维数组,仅仅写行下标不写列下标,也可以代表给行数组的首地址。

在用%s输入输出字符串数组时,遇到结束。

7.5 字符串处理函数 #include

1、gets(字符数组名)

从键盘输入一个字符串(以回车结束),并返回字符数组的起始地址。如get(str)。

2、puts(字符数组名/字符串)

将数组中的字符串(结尾的字符序列)输出到终端上,输完换行。如puts(str),puts(“ok”)。

3、strcpy(目的字符数组1名,源字符串/字符数组2名)拷贝时,将“”一起拷贝过去。

4、strcat(字符数组1名,字符串/字符数组2名)将字符串/字符数组2连接到字符数组1中。

 在某个复合语句中定义的变量。

2、全局变量——在函数之外定义的变量。有效范围是从定义变量的位置开始到源文件结束。

8.4 变量的存储类别

变量的存储类别,即生存期。内存中供用户使用的存储空间包括:程序区、静态存储区、动态存储区。

1、静态存储区——在编译时分配空间,在程序运行完后才释放存储空间。存储静态局部变量和全局变量。

 局部静态变量在编译时赋初值,在执行时可改变该值,但该存储空间一直保存到程序结束。

 定义局部静态变量,如果没有赋初值,编译时会自动赋默认初值。 局部静态变量只能在定义它的函数中使用。 全局变量都是静态的。

 利用extern 外部变量方式表示变量的定义在别的文件中,提示编译器遇到此变量时,在其他模块中寻找其定义。而函数则是利用函数原型来声明。 用static 关键字说明一个不能在其他源文件中引用的全局变量。即静态全局变量在声明它的整个文件都是可见的,但是在文件之外是不可见的。

2、动态存储区——仅在在执行时分配空间,用完后释放存储空间。存放自动变量和形式参数。

 寄存器变量——用register关键字说明。寄存器变量对寄存器的占用是动态的。

第九章 预处理命令197 9.1 预编译命令作用

预编译命令主要完成宏定义、文件包含、条件编译三种功能。

1、宏定义——指用一个指定的标识符(名字)来代表一个字符串。在预编译时,将宏名替代成字符串的过程称为宏展开。如:

 # define PI 3.1415926 定义宏, # undef PI

终止宏定义的作用域。

 #define V(a,b,c)a*b*c 定义带参数的宏。当宏展开时,将引用宏名语句中的实参字符串代替宏定义的形参字符串。int v =V(2,3,4)则宏展开后为:int v= 2*3*4;

2、文件包含——指一个源文件可以将另一个源文件的全部内容包含进来。如:  #include “文件名”或

#include <文件名>  编译预处理时,将包含文件的全部内容复制到源文件中。在编译时作为一个源程序来编译。

3、条件编译——在预编译处理时,确定编译时要编译的部分。如:

0

而数组名的值不可以改变。

6、函数的指针专门用来存放函数的入口地址,当把函数的地址赋值给它时,它就指向该函数的入口地址。

声明格式:数据类型(*指针变量名)()如:int(*P)();

赋值格式:p=max; 注max为定义的函数名;函数名代表该函数的入口地址。引用格式:c=(*p)(a,b);等价——c=max(a,b);

7、只能将变量已分配的地址赋值给指针变量,不能直接将整数赋值给指针变量。

8、指针变量可以有null值,防止指针误作用。

第十一章 结构体270 11.1 结构体270

1、作用——将不同类型的数据组合成一个有机的整体。

2、结构体的定义——结构体是一种数据结构,按照某种规则定义,将若干个不同数据类型(也可相同)的数据项的组合成的一个有机整体。

3、声明结构体类型的形式:struct 结构体类型名字 {成员列表};  成员列表形式:类型符 成员名

如:int num;

11.2 声明结构体类型变量的方法271

1、先定义结构体类型:struct 结构体类型名字 {成员列表};再定义结构体变量:struct结构体类型名字 结构体变量名。

2、可在定义结构体类型时,定义结构体类型变量。struct 结构体类型名字 {成员列表}结构体类型变量1,结构体类型变量2,„„;

11.3 结构体变量引用273

1、不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量成员分别赋值。

2、结构体变量成员引用方式:结构体变量名.成员名

3、如果结构体变量成员是另一个结构体变量,则要用若干个成员运算符,一级一级找到最低一级的成员。

11.8 共用体 297

1、共用体指将几种不同类型的变量存储在同一段内存单元中。

2、共用体变量的存储单元大小等于最长成员变量所占内存的长度

3、共用体变量中起作用的是最后一次存放成员。

4、共用体类型声明方式:union 公用体类型名称 {成员变量列表};

5、共用体变量声明方式:(1)union 公用体类型名称 {成员列表}共用体变量;(2)先声明共用体类型,然后声明共用体变量,union 公用体类型名称 共用体变量。

11.9 枚举类型301

1、枚举类型——指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内的一个。

2、声明枚举类型:enum 枚举类型名称 {枚举常量列表};

3、声明枚举变量:enum 枚举类型名称 枚举类型变量;

 普通文件——指磁盘文件。

2、从操作系统的角度看:每一个与主机相关联的输入输出设备都可看作一个文件。

(1)根据文件的组织形式分为:顺序存取文件 和 随机存取文件。(2)根据文件的存储形式分为:ASCII文件 和 二进制文件。

13.3 C语言对文件的处理方法319 C语言中对文件的存取是以字符(字节)为单位的,一个输入输出流就是一个字节流或二进制流。

文件的存储方式分为缓冲文件系统和非缓冲文件系统。区别是缓冲文件系统是系统自动开辟缓冲区,非缓冲文件系统是由程序为每个文件设定缓冲区。

ANSI C标准只采用 缓冲文件系统 来处理文件。

13.4 文件结构体类型321 缓冲文件系统中,每个被使用的文件都在内存中开辟一个FILE结构体类型的区,用来存放文件的有关信息(文件名字、文件状态、当前位置、缓冲区等有关信息),FILE结构体类型原型:  typedef struct{

short level;

/*缓冲区“满”或“空”的程度*/

unsigned flags;/*文件状态标志*/

char fd;

/*文件描述符*/

unsigned char hold;/*如无缓冲区不读取字符*/

short bsize;

/*缓冲区的大小*/

unsigned char *buffer;/ *数据缓冲区的位置*/

unsigned char *curp;/*指针,当前的指向*/

unsigned istemp;/*临时文件,指示器*/

short token;/*用于有效性检查*/}FILE;

13.5 文件结构体数组和指针321 FILE *fp——声明了一个指向FILE类型结构体的指针变量。

buffer:是一个指针。对fread 来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址(均指起始地址)。

size:

要读写的字节数。

count: 要进行读写多少个size字节的数据项。fp:

文件型指针。

6、格式化读写函数:

 fprintf(文件指针,格式字符串,输出表列);  fscanf(文件指针,格式字符串,输入表列);

注意:

用fprintf和fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。

7、以“字”或者整数为单位读写函数:  putw(int i,FILE * fp);  int i = getw(FILE * fp);

8、以“字符串”为单位读写文件的函数:

 fgets(str,n,fp);从fp指向的文件读出n-1个字符,在最后加一个’’。返回值:str的首地址。如果遇到EOF则读入结束。

 fputs(“china”,fp);把字符串写入到fp指向的文件。第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的′\0′不输出。

13.7 文件的定位333

1、将文件当前的位置指针重新返回到文件的开头位置:无返回值。 rewind(fp);执行后,将文件的位置指针重新定位到文件的开头。

2、随机读写:改变文件的位置指针,一般用于二进制文件。 fseek(文件类型指针,位移量,起始点);无返回值。起始点:文件开头

SEEK_SET

0

文件当前位置

SEEK_CUR

文件末尾

SEEK_END

putw()把一个字输出到指定文件

fread()从指定文件中读取数据项

fwrite()把数据项写到指定文件中

fscanf()从指定文件按格式输入数据

fprintf()按指定格式将数据写到指定文件中

第十四章 C++对C的扩充 338 14.1 C++的特点338

1、C++保留了C语言原有的所有优点,增加了面向对象的机制。

2、C++源文件以.cpp为后缀。

3、除了可以用 /*……*/ 形式的注释行外,还允许使用以// 开头的单行注释。

4、除了可以用printf函数输出信息外,还可以用cout进行输出。cout的作用是将<<运算符右侧的内容送到输出设备中输出。使用cout需要用到头文件iostream.h,在程序的第一行用#include命令将该头文件“包含”进来。

 cout <<“ This is a c++ program.n” ;

14.2 C++的输入输出 339 C++为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成的,代表C++的输出流,cin是由c和in两个单词组成的,代表C++的输入流。它们是在头文件iostream.h中定义的。在键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。

14.3 C++的输出cout

1、cout必须和输出运算符<<一起使用。<< 在这里不作为位运算的左移运算符,而是起插入的作用,例如:cout<<“Hello!n”;的作用是将字符串“Hello!n” 插入到输出流cout中,也就是输出在标准输出设备上。

2、也可以不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用与n相同。endl的含义是end of line,表示结束一行。

0

存。在C++中,这种输入操作称为“提取”(extracting)或“得到”(getting)。>> 常称为“提取运算符”。

2、cin要与 >> 配合使用。例如:

3、C++为流输入输出提供了格式控制,如:dec(用十进制形式),hex(用十六进制形式),oct(用八进制形式),还可以控制实数的输出精度等。

14.5 函数的重载342

1、C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不同,而且函数类型也可不同,这就是函数的重载,即一个函数名多用。

2、系统会根据参数的类型和个数找到与之匹配的函数,并调用不同的函数。

14.6 带缺省参数的函数344 C++允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。

例如某一函数的首部可用如下形式:

void fun(int a,int b,int c=100)在调用此函数时如写成fun(2,4,6),则形参a,b,c的值分别为2,4,6(这是与过去一样的)。如果写成fun(2,4),即少写了最后一个参数,由于在函数定义时已指定了c的缺省值为100,因此a,b,c的值分别为2,4,100。请注意:赋予缺省值的参数必须放在形参表列中的最右端。例如:

void f1(float a,int b,int c=0,char d=′a′)(正确)void f2(float a,int c=0,char d=′a′,int b)

(不正确)注意:不要同时使用重载函数和缺省参数的函数,因为当调用函数时少写一个参数,系统无法判定是利用重载函数还是利用缺省参数的函数,会发生错误。

14.7 变量的引用类型345

1、“引用”(reference)是C++的一种新的变量类型,是对C的一个重要扩充。它的作用是为一个变量起一个别名。

2、假如有一个变量a,想给它起一个别名b,可以这样写:

int a;

实参把变量名传给形参。i的名字传给引用变量a,这样a就成了i的别名。同理,b成为j的别名。a和i代表同一个变量,b和j代表同一个变量。在swap函数中使a和b的值对换,显然,i和j的值同时改变了。

当读者看到&a这样的形式时,怎样区别是声明引用变量还是取地址的操作呢?请记住,当&a的前面有类型符时(如int &a),它必然是对引用的声明;如果前面无类型符(如&a),则是取变量的地址。

14.8 内置函数 348 调用函数时需要一定的时间,如果有的函数需要频繁使用,则所用时间会很长,从而降低程序的执行效率。C++提供一种提高效率的方法,即在编译时将所调用函数的代码嵌入到主调函数中。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数。

例如:

#include inline int max(int a,int b,int c)//这是一个内置函数,求3个整数中的最大者

{ if(b>a)a=b;if(c>a)a=c;return a;} void main(){int i=7,j=10,k=25,m;m=max(i,j,k);cout<<“max=”<

14.9 作用域运算符349

1、作用域运算符∷,∷aa表示全局作用域中的变量。

2、不能用∷ 访问函数中的局部变量。

425-

第二篇:C语言程序设计笔记

C语言程序设计的概论:

什么是程序设计:

编译环境 程序设计就是用户告诉计算机按程序员的思路一步一步的去工作

而C语言程序设计就是,通过c这门语言与计算机通信,并告诉计算机应如何工作

在微机上广泛使用的C语言编译系统有Microsoft C、Turbo C、Borland C等。虽然它们的基本部分都是相同的,但还是有一些差异,所以请大家注意自己所使用的C编译系统的特点和规定(参阅相应的手册)。我们所有使用的环境是WIN-TC(WINDOWS2000操作系统)。

简单的C程序 例1.1 main(){ printf(“This is a c program.n”);} 本程序的作用是输出一行信息: This is a c program 注意:

每一个C程序都必须有main()函数 函数体内由大括弧{ }括起来 大括弧内每条语句后必须有一个分号

符号和字母,都要用半角格式的(必须切换到英文输入法输入符号字母)Printf()输出函数

n 转义字母,代表换行(回车)

/* */注释符

试一试: 参照例题,编写一个C程序,输出以下信息: * * * * * * * * * * * * * * * * * * * very good!* * * * * * * * * * * * * * * * * * *

Printf(“******n”);n转意字符,代表换行 数据类型 1.2.3.整型:12, 0 ,-3 实型:4.6 ,-1.23 字符型:’a’ , ‘b’

算术运算符 1.2.3.4.5.+ 加法运算符-减法运算符 * 乘法运算符 / 除法运算符 % 求余运算符

算术运算符的优先级同数学:先括号,后乘除,再加减 题目:求两个数的余数的程序

什么是变量 : 其值可改变的量称为变量,也把变量看成用来装数据的容器 变量的作用 : 增加程序的灵活度,可以说任何一个程序基本上都用到了变量度 如何定义变量: 数据类型 变量名; int a;数据类型 变量名1,变量名2,„变量名N;float a,b,c;char c1,c2;变量命名规则:

只能以字母、数字、下划线三种字符组成,且第一个字符必须为字母或下划线。

在C语言中,变量名是区分大小写的。

int a=3 int A=4 变量命名的良好习惯──见名知意: 例如:年龄 intAge/intNl 变量数据类型:

int 代表整型类型 范围:-32768~32768 float 代表实型 范围:-3.14×10-38~ 3.14×1038 有效数字:6~7 char 代表字符型 该类型变量只能容纳一个字符 变量的赋值: int a=3 int a=3.4 错误 float a=3.4 char a=’c‘

或:int a =3,b=4;注意:定义什么类型的变量就赋什么类型的数据

%d 以整型的形式输出

printf()输出函数 :

例: printf(“this is what?”)直接把双引号内的字符串原样输出 printf(“this is what? n ”)n 转意字符 不原样输出该字符串,而是起到换行作用,将当前位置移到下一行开头

b 退格

„„„

Printf(“this is %d ”,i)%d 用来代替“,”后面的变量,并指定该变量以什么类型输出

%d 按整型输出

%f 按实型输出

%c 以字符形式输出,只输出一个字符 例:

scanf(“%d%d”,&a,&b)让用户输出两个整放,放到变量a,b中.注意:

变量前一定要加& 输入多个变量时,可用空格或回车间隔,但不能用”,” 1.用户输入圆半径,输出圆的周长和面积

2.用户输入两个整数,求两个数的和,差,积,余 3.用户输入两门成绩,输出总分,平均分 1.2.3.4.5.6.每一个C程序都必须有main()函数 函数体内由大括弧{ }括起来 大括弧内每条语句后必须有一个分号 符号和字母,都要用半角格式的

Printf()输出函数 n 转义字母,代表换行 /* */注释符

7.C语言结构化程序设计的三种基础结构介绍 8.关系运算符和关系表达式 9.逻辑运算符和逻辑表达式 10.if语句 11.条件运算符 选择结构是根据条件有选择的执行程序代码!如果(用户输入的密码是:123)输出:“密码正确” 否则

输出:“密码错误” if(判断式){判断式成立时所执行的语句} else {判断式不成立时所执行的语句} 说明: 只有当判断式成立时才会执行语句块1 否则执行语句块2 两者不会同时执行或不执行 关系运算符

所谓的“关系运算”实际上是”比较运算” C语言提供如下6种关系运算符

< 小于

<= 小于等于

> >= == 是否等于

!= 是否不等于 优先级

前四种关系运算符优先级相同,后两种也相同,但前4种大于后2种 关系运算符的优先级低于算术运算符 关系运算符的优先级低于赋值运算符 试一试:

用户输入密码,如密码是123,则输出恭喜你,登录成功,否则输出不要试我密码哦.!注意知识点: 提示:

If语句和}后都没有分号结束符

else 后没有条件表达式

如果IF或ELSE后的语句块只有一句的话,{} 可省略!

如果不满足IF后面的条件,什么都不做的话,可以省略else 题目: 根据上网用户输入的年龄,决定弹出信息,如年龄小于18则弹出“你太小了,还不能到网吧上网哦”否则弹出“OK,没问题祝你玩的愉快”; :

用户输入数,判断输出是奇数还是偶数

逻辑运算符

C 提供的三种逻辑运算符

&& 与(相当于and 且)

|| 或(相当于or 或)

!非(相当于not 取反)

例:

a&&b 若a,b为真,则a&&b为真

a||b 若a,b之一为真,则a||b为真

!a 若a为真,则!a为假 运算符优先级!(非)算术运算符 关系运算符 && 和 || 赋值运算符 由高往低 条件运算符

若if 语句中,在表达式为”真”,和”假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理,例:若有以下if语句: if(a>b)max = a;else max =b;可以用下面的条件运算符来处理

max =(a>b)? a:b;多分支选择结构

如果用IF ELSE的话。虽然可以做出徕,但要用到众多的IF ELSE非常的烦琐。像这种多分支的选择,我们一般采用下面的语句 switch(变量){ case 值1: 代码; break;

„„„..case 值n: 代码; break;default:语句 N;//当变量不等于上面所有值时,执行default后的语句; } 注意: 1.break退出{} 2.case 后只能跟一个值,而不能是一个表达式 3.switch(变量)后没有”;” {}前后都没有”;” 三种选择语句的比较 If //只有条件成立时执行

I f else //适用于只有两种情况出现,要么执行A,要么执行B Switch //适合多种情况,且变量是精确值时 注意

If(a>b>c)错误 If(a>b&&a>c)正确 字符一定要加’’引起来 Case,后不能是表示式 Default 后面不必加break

第三篇:C语言程序设计(谭浩强)第四版_课后答案精讲

第一章 程序设计和C语言 【第15页】 1-5

#include int main(){ printf(“**************************nn”);

printf(“

Very Good!nn”);

printf(“**************************n”);

return 0;} 1-6 #include int main(){int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max

max=b;if(max

max=c;printf(“The largest number is %dn”,max);return 0;} 第2章算法——程序的灵魂 【第36页】暂无答案

第3章最简单的C程序设计——顺序程序设计 【第82页】 3-1

#include #include int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);

printf(“p=%fn”,p);return 0;} 3-2-1 #include #include int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5);

// 一次存5年期

p2=p*(1+2*r2)*(1+3*r3);

// 先存2年期,到期后将本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);

// 先存3年期,到期后将本息再存2年期

p4=p*pow(1+r1,5);

// 存1年期,到期后将本息存再存1年期,连续存5次

p5=p*pow(1+r0/4,4*5);

// 存活期存款。活期利息每一季度结算一次

printf(“p1=%fn”,p1);

// 输出按第1方案得到的本息和

printf(“p2=%fn”,p2);

// 输出按第2方案得到的本息和

printf(“p3=%fn”,p3);

// 输出按第3方案得到的本息和

printf(“p4=%fn”,p4);

// 输出按第4方案得到的本息和

printf(“p5=%fn”,p5);

// 输出按第5方案得到的本息和

return 0;} 3-2-2 #include #include int main(){double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5);

// 一次存5年期

p2=p*(1+2*r2)*(1+3*r3);

// 先存2年期,到期后将本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);

// 先存3年期,到期后将本息再存2年期

p4=p*pow(1+r1,5);

// 存1年期,到期后将本息存再存1年期,连续存5次

p5=p*pow(1+r0/4,4*5);

// 存活期存款。活期利息每一季度结算一次

printf(“p1=%fn”,p1);

// 输出按第1方案得到的本息和

printf(“p2=%fn”,p2);

// 输出按第2方案得到的本息和

printf(“p3=%fn”,p3);

// 输出按第3方案得到的本息和

printf(“p4=%fn”,p4);

// 输出按第4方案得到的本息和

printf(“p5=%fn”,p5);

// 输出按第5方案得到的本息和

return 0;} 3-2-3 #include #include int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5);

// 一次存5年期

p2=p*(1+2*r2)*(1+3*r3);

// 先存2年期,到期后将本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);

// 先存3年期,到期后将本息再存2年期

p4=p*pow(1+r1,5);

// 存1年期,到期后将本息存再存1年期,连续存5次

p5=p*pow(1+r0/4,4*5);

// 存活期存款。活期利息每一季度结算一次

printf(“p1=%10.2fn”,p1);

// 输出按第1方案得到的本息和

printf(“p2=%10.2fn”,p2);

// 输出按第2方案得到的本息和

printf(“p3=%10.2fn”,p3);

// 输出按第3方案得到的本息和

printf(“p4=%10.2fn”,p4);

// 输出按第4方案得到的本息和

printf(“p5=%10.2fn”,p5);

// 输出按第5方案得到的本息和

return 0;} 3-3.#include #include int main(){float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(“m=%6.2fn”,m);return 0;} 3-4 #include int main(){int c1,c2;c1=197;c2=198;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%dn”,c1,c2);return 0;} 3-5 #include int main(){int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“%f %e”,&x,&y);scanf(“%c%c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);return 0;} 3-6 #include int main(){char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“passwor is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;} 3-7 #include int main(){float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h∶”);scanf(“%f,%f”,&r,&h);

//要求输入圆半径r和圆柱高h

l=2*pi*r;

//计算圆周长l s=r*r*pi;

//计算圆面积s sq=4*pi*r*r;

//计算圆球表面积sq vq=3.0/4.0*pi*r*r*r;

//计算圆球体积vq vz=pi*r*r*h;

//计算圆柱体积vz printf(“圆周长为:

l=%6.2fn”,l);printf(“圆面积为:

s=%6.2fn”,s);

printf(“圆球表面积为:

sq=%6.2fn”,sq);printf(“圆球体积为:

v=%6.2fn”,vq);printf(“圆柱体积为:

vz=%6.2fn”,vz);return 0;} 3-8-1 #include int main(){

int c1,c2;

//整型定义

printf(“请输入两个整数c1,c2:”);

scanf(“%d,%d”,&c1,&c2);

printf(“按字符输出结果:n”);

printf(“%c,%cn”,c1,c2);

printf(“按ASCII码输出结果为:n”);

printf(“%d,%dn”,c1,c2);

return 0;} 3-8-2 #include int main(){

char c1,c2;

//定义字符型变量

int i1,i2;

printf(“请输入两个字符c1,c2:”);

scanf(“%c,%c”,&c1,&c2);

i1=c1;

i2=c2;

printf(“按字符输出结果:n”);

printf(“%c,%cn”,i1,i2);

printf(“按整数输出结果:n”);

printf(“%d,%dn”,c1,c2);

return 0;} 3-8-3 #include int main(){

char c1,c2;

int i1,i2;

printf(“请输入两个整数i1,i2:”);

scanf(“%d,%d”,&i1,&i2);

c1=i1;

c2=i2;

printf(“按字符输出结果:n”);

printf(“%c,%cn”,c1,c2);

printf(“按整数输出结果:n”);

printf(“%d,%dn”,c1,c2);

return 0;} 3-8 #include int main(){ char c1,c2;printf(“请输入两个字符c1,c2:”);c1=getchar();c2=getchar();

//定义整型变量

//赋值给整型变量

//定义为字符型

//定义为整型

//将整数赋值给字符变量

printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c %cn”,c1,c2);return 0;} 第4章选择结构程序设计【第111页】 4-4-1 #include int main(){

int a,b,c;

printf(“请输入三个整数:”);

scanf(“%d,%d,%d”,&a,&b,&c);

if(a

if(b

printf(“max=%dn”,c);

else

printf(“max=%dn”,b);

else if(a

printf(“max=%dn”,c);

else

printf(“max=%dn”,a);

return 0;} 4-4-2 #include int main(){ int a,b,c,temp,max;

printf(“请输入三个整数:”);

scanf(“%d,%d,%d”,&a,&b,&c);

temp=(a>b)?a:b;

/*将a和b中的大者存入temp中*/

max=(temp>c)?temp:c;

/*将a和b中的大者与c比较,取最大者*/

printf(“三个整数的最大数是%dn”,max);

return 0;} 4-5-2 #include #include #define M 1000 int main(){

int i,k;

printf(“请输入一个小于%d的整数i:”,M);

scanf(“%d”,&i);

while(i>M)

{printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);

scanf(“%d”,&i);

}

k=sqrt(i);

printf(“%d的平方根的整数部分是:%dn”,i,k);

return 0;} 4-5 #include #include #define M 1000 int main(){

int i,k;

printf(“请输入一个小于%d的整数i:”,M);

scanf(“%d”,&i);

if(i>M)

{printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);

scanf(“%d”,&i);

}

k=sqrt(i);

printf(“%d的平方根的整数部分是:%dn”,i,k);

return 0;} 4-6.#include int main(){ int x,y;

printf(“输入x:”);

scanf(“%d”,&x);

if(x<1)

/* x<1 */

{ y=x;

printf(“x=%3d,y=x=%dn” ,x,y);

}

else if(x<10)

/* 1=

printf(“x=%d, y=2*x-1=%dn”,x,y);} else

/* x>=10 */ { y=3*x-11;

printf(“x=%d, y=3*x-11=%dn”,x,y);}

return 0;} 4-7-1 #include int main(){

int x,y;

printf(“enter x:”);

scanf(“%d”,&x);

y=-1;

if(x!=0)

if(x>0)

y=1;

else

y=0;

printf(“x=%d,y=%dn”,x,y);return 0;} 4-7-2 #include int main(){

int x,y;

printf(“please enter x:”);

scanf(“%d”,&x);

y=0;

if(x>=0)

if(x>0)y=1;

else y=-1;

printf(“x=%d,y=%dn”,x,y);return 0;} 4-8 #include int main()

{ float score;

char grade;

printf(“请输入学生成绩:”);

scanf(“%f”,&score);

while(score>100||score<0){printf(“n 输入有误,请重输”);scanf(“%f”,&score);}

switch((int)(score/10))

{case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;case 5: case 4: case 3: case 2: case 1: case 0: grade='E';}

printf(“成绩是 %5.1f,相应的等级是%cn ”,score,grade);return 0;} 4-9 #include #include int main(){

int num,indiv,ten,hundred,thousand,ten_thousand,place;

//分别代表个位,十位,百位,千位,万位和位数

printf(“请输入一个整数(0-99999):”);

scanf(“%d”,&num);

if(num>9999)

place=5;

else if(num>999)

place=4;

else if(num>99)

place=3;

else if(num>9)

place=2;

else place=1;

printf(“位数:%dn”,place);

printf(“每位数字为:”);

ten_thousand=num/10000;

thousand=(int)(num-ten_thousand*10000)/1000;

hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;

ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;

indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);

switch(place)

{case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);

printf(“n反序数字为:”);

printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);

break;

case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);

printf(“n反序数字为:”);

printf(“%d%d%d%dn”,indiv,ten,hundred,thousand);

break;

case 3:printf(“%d,%d,%d”,hundred,ten,indiv);

printf(“n反序数字为:”);

printf(“%d%d%dn”,indiv,ten,hundred);

break;

case 2:printf(“%d,%d”,ten,indiv);

printf(“n反序数字为:”);

printf(“%d%dn”,indiv,ten);

break;

case 1:printf(“%d”,indiv);

printf(“n反序数字为:”);

printf(“%dn”,indiv);

break;

}

return 0;} 4-10-1 #include int main(){

int i;

double bonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+100000*0.05;

bon6=bon4+100000*0.03;

bon10=bon6+400000*0.015;

printf(“请输入利润i:”);

scanf(“%d”,&i);

if(i<=100000)

bonus=i*0.1;

else if(i<=200000)

bonus=bon1+(i-100000)*0.075;

else if(i<=400000)

bonus=bon2+(i-200000)*0.05;

else if(i<=600000)

bonus=bon4+(i-400000)*0.03;

else if(i<=1000000)

bonus=bon6+(i-600000)*0.015;

else

bonus=bon10+(i-1000000)*0.01;

printf(“奖金是: %10.2fn”,bonus);

return 0;} 4-10-2 #include int main(){

int i;

double bonus,bon1,bon2,bon4,bon6,bon10;

int branch;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf(“请输入利润i:”);

scanf(“%d”,&i);

branch=i/100000;

if(branch>10)branch=10;

switch(branch)

{ case 0:bonus=i*0.1;break;

case 1:bonus=bon1+(i-100000)*0.075;break;

case 2:

case 3: bonus=bon2+(i-200000)*0.05;break;

case 4:

case 5: bonus=bon4+(i-400000)*0.03;break;

case 6:

case 7:

case 8:

case 9: bonus=bon6+(i-600000)*0.015;break;

case 10: bonus=bon10+(i-1000000)*0.01;

}

printf(“奖金是 %10.2fn”,bonus);

return 0;} 4-11 #include int main(){int t,a,b,c,d;

printf(“请输入四个数:”);

scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);

printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);

if(a>b)

{ t=a;a=b;b=t;}

if(a>c)

{ t=a;a=c;c=t;}

if(a>d)

{ t=a;a=d;d=t;}

if(b>c)

{ t=b;b=c;c=t;}

if(b>d)

{ t=b;b=d;d=t;}

if(c>d)

{ t=c;c=d;d=t;}

printf(“排序结果如下: n”);

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

return 0;} 4-12 #include int main(){

int h=10;

float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;

printf(“请输入一个点(x,y):”);

scanf(“%f,%f”,&x,&y);

d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);

/*求该点到各中心点距离*/

d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);

d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);

d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);

if(d1>1 && d2>1 && d3>1 && d4>1)

h=0;/*判断该点是否在塔外*/

printf(“该点高度为 %dn”,h);

return 0;} 第5章循环结构程序设计【第140页】 5-2 #include #include

// 程序中用到数学函数fabs,应包含头文件math.n int main(){

int sign=1,count=0;

// sign用来表示数值的符号,count用来统计循环次数

double pi=0.0,n=1.0,term=1.0;

// pi开始代表多项式的值,最后代表π的值, n代表分母,term代表当前项的值

while(fabs(term)>=1e-8)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{

pi=pi+term;

// 把当前项term累加到pi中

n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

term=sign/n;

// 求出下一项的值term

count++;

// count累加1

}

pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(“pi=%10.8fn”,pi);

// 输出π的近似值

printf(“count=%dn”,count);

// 输出循环次数

return 0;} 5-3 #include int main(){

int p,r,n,m,temp;

printf(“请输入两个正整数n,m:”);

scanf(“%d,%d,”,&n,&m);

if(n

{

temp=n;

n=m;

m=temp;

}

p=n*m;

while(m!=0)

{

r=n%m;

n=m;

m=r;

}

printf(“它们的最大公约数为:%dn”,n);

printf(“它们的最小公约数为:%dn”,p/n);

return 0;} 5-4 #include int main(){

char c;

int letters=0,space=0,digit=0,other=0;

printf(“请输入一行字符:n”);

while((c=getchar())!='n')

{

if(c>='a' && c<='z' || c>='A' && c<='Z')

letters++;

else if(c==' ')

space++;

else if(c>='0' && c<='9')

digit++;

else

other++;

}

printf(“字母数:%dn空格数:%dn数字数:%dn其它字符数:%dn”,letters,space,digit,other);

return 0;

} 5-5 #include int main(){

int a,n,i=1,sn=0,tn=0;

printf(“a,n=:”);

scanf(“%d,%d”,&a,&n);

while(i<=n)

{

tn=tn+a;/*赋值后的tn为i个 a组成数的值*/

sn=sn+tn;/*赋值后的sn为多项式前i项之和*/

a=a*10;

++i;

}

printf(“a+aa+aaa+...=%dn”,sn);

return 0;

} 5-6 #include int main()

{double s=0,t=1;

int n;

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

{

t=t*n;

s=s+t;

}

printf(“1!+2!+...+20!=%22.15en”,s);

return 0;} 5-7 #include int main(){

int n1=100,n2=50,n3=10;

double k,s1=0,s2=0,s3=0;

for(k=1;k<=n1;k++)/*计算1到100的和*/

{s1=s1+k;}

for(k=1;k<=n2;k++)/*计算1到50各数的平方和*/

{s2=s2+k*k;}

for(k=1;k<=n3;k++)/*计算1到10的各倒数和*/

{s3=s3+1/k;}

printf(“sum=%15.6fn”,s1+s2+s3);

return 0;} 5-8 #include int main(){

int i,j,k,n;

printf(“parcissus numbers are ”);

for(n=100;n<1000;n++)

{

i=n/100;

j=n/10-i*10;

k=n%10;

if(n==i*i*i + j*j*j + k*k*k)

printf(“%d ”,n);

}

printf(“n”);

return 0;

} 5-9-1 #define M 1000

/*定义寻找范围*/ #include int main(){

int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;

int i,a,n,s;

for(a=2;a<=M;a++)

/* a是2-1000之间的整数,检查它是否完数 */

{n=0;

/* n用来累计a的因子的个数 */

s=a;

/* s用来存放尚未求出的因子之和,开始时等于a */

for(i=1;i

/* 检查i是否a的因子 */

if(a%i==0)

/* 如果i是a的因子 */ {n++;

/* n加1,表示新找到一个因子 */

s=s-i;

/* s减去已找到的因子,s的新值是尚未求出的因子之和 */

switch(n)

/* 将找到的因子赋给k1...k9,或k10 */

{case 1:

k1=i;break;

/* 找出的笫1个因子赋给k1 */

case 2:

k2=i;break;

/* 找出的笫2个因子赋给k2 */

case 3:

k3=i;break;

/* 找出的笫3个因子赋给k3 */

case 4:

k4=i;break;

/* 找出的笫4个因子赋给k4 */

case 5:

k5=i;break;

/* 找出的笫5个因子赋给k5 */

case 6:

k6=i;break;

/* 找出的笫6个因子赋给k6 */

case 7:

k7=i;break;

/* 找出的笫7个因子赋给k7 */

case 8:

k8=i;break;

/* 找出的笫8个因子赋给k8 */

case 9:

k9=i;break;

/*找出的笫9个因子赋给k9 */

case 10:

k10=i;break;

/* 找出的笫10个因子赋给k10 */

} }

if(s==0)

{

printf(“%d ,Its factors are ”,a);

if(n>1)printf(“%d,%d”,k1,k2);

/* n>1表示a至少有2个因子 */

if(n>2)printf(“,%d”,k3);

/* n>2表示至少有3个因子,故应再输出一个因子 */

if(n>3)printf(“,%d”,k4);

/* n>3表示至少有4个因子,故应再输出一个因子 */

if(n>4)printf(“,%d”,k5);

/* 以下类似 */

if(n>5)printf(“,%d”,k6);

if(n>6)printf(“,%d”,k7);

if(n>7)printf(“,%d”,k8);

if(n>8)printf(“,%d”,k9);

if(n>9)printf(“,%d”,k10);

printf(“n”);}

}

return 0;} 5-9-2 #include int main(){int m,s,i;

for(m=2;m<1000;m++)

{s=0;

for(i=1;i

if((m%i)==0)s=s+i;

if(s==m)

{printf(“%d,its factors are ”,m);

for(i=1;i

if(m%i==0)printf(“%d ”,i);

printf(“n”);

}

}

return 0;} 5-10 #include int main(){

int i,n=20;

double a=2,b=1,s=0,t;

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

{

s=s+a/b;

t=a,a=a+b,b=t;

}

printf(“sum=%16.10fn”,s);

return 0;

} 5-11 #include int main(){

double sn=100,hn=sn/2;

int n;

for(n=2;n<=10;n++)

{

sn=sn+2*hn;

/*第n次落地时共经过的米数*/

hn=hn/2;

/*第n次反跳高度*/

}

printf(“第10次落地时共经过%f米n”,sn);

printf(“第10次反弹%f米n”,hn);

return 0;

} 5-12 #include int main(){

int day,x1,x2;

day=9;

x2=1;

while(day>0)

{x1=(x2+1)*2;

/*第1天的桃子数是第2天桃子数加1后的2倍.*/

x2=x1;

day--;

}

printf(“total=%dn”,x1);

return 0;} 5-13 #include #include int main(){

float a,x0,x1;

printf(“enter a positive number:”);

scanf(“%f”,&a);

x0=a/2;

x1=(x0+a/x0)/2;

do

{x0=x1;

x1=(x0+a/x0)/2;

}while(fabs(x0-x1)>=1e-5);

printf(“The square root of %5.2f is %8.5fn”,a,x1);

return 0;} 5-14 #include #include int main(){double x1,x0,f,f1;

x1=1.5;

do

{x0=x1;

f=((2*x0-4)*x0+3)*x0-6;

f1=(6*x0-8)*x0+3;

x1=x0-f/f1;

}while(fabs(x1-x0)>=1e-5);

printf(“The root of equation is %5.2fn”,x1);

return 0;} 5-15 #include #include int main(){float x0,x1,x2,fx0,fx1,fx2;

do

{printf(“enter x1 & x2:”);

scanf(“%f,%f”,&x1,&x2);

fx1=x1*((2*x1-4)*x1+3)-6;

fx2=x2*((2*x2-4)*x2+3)-6;

}while(fx1*fx2>0);

do

{x0=(x1+x2)/2;

fx0=x0*((2*x0-4)*x0+3)-6;

if((fx0*fx1)<0)

{x2=x0;

fx2=fx0;

}

else

{x1=x0;

fx1=fx0;

}

}while(fabs(fx0)>=1e-5);

printf(“x=%6.2fn”,x0);

return 0;} 5-16 #include int main(){int i,j,k;

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

{for(j=0;j<=2-i;j++)

printf(“ ”);

for(k=0;k<=2*i;k++)

printf(“*”);

printf(“n”);

}

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

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

printf(“ ”);

for(k=0;k<=4-2*i;k++)

printf(“*”);

printf(“n”);

}

return 0;

} 5-17 #include

int main(){

char i,j,k;

/*是a的对手;j是b的对手;k是c的对手*/

for(i='x';i<='z';i++)

for(j='x';j<='z';j++)

if(i!=j)

for(k='x';k<='z';k++)if(i!=k && j!=k)

if(i!='x' && k!='x' && k!='z')

printf(“A--%cnB--%cnC--%cn”,i,j,k);

return 0;

} 第6章利用数组处理批量数据 【第168页】 6-1 #include #include int main(){int i,j,n,a[101];

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

a[i]=i;

a[1]=0;

for(i=2;i

for(j=i+1;j<=100;j++)

{if(a[i]!=0 && a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

}

printf(“n”);

for(i=2,n=0;i<=100;i++)

{ if(a[i]!=0)

{printf(“%5d”,a[i]);

n++;

}

if(n==10)

{printf(“n”);

n=0;

}

}

printf(“n”);

return 0;} 6-2 #include int main(){int i,j,min,temp,a[11];

printf(“enter data:n”);

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

{printf(“a[%d]=”,i);

scanf(“%d”,&a[i]);

}

printf(“n”);

printf(“The orginal numbers:n”);

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

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

printf(“n”);

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

{min=i;

for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

printf(“nThe sorted numbers:n”);

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

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

printf(“n”);

return 0;} 6-3 #include int main(){ int a[3][3],sum=0;int i,j;

printf(“enter data:n”);

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

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

scanf(“%3d”,&a[i][j]);

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

sum=sum+a[i][i];

printf(“sum=%6dn”,sum);

return 0;} 6-4 #include int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};

int temp1,temp2,number,end,i,j;

printf(“array a:n”);

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

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

printf(“n”);

printf(“insert data:”);

scanf(“%d”,&number);

end=a[9];

if(number>end)

a[10]=number;

else

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

{if(a[i]>number)

{temp1=a[i];a[i]=number;for(j=i+1;j<11;j++)

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

printf(“Now array a:n”);

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

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

printf(“n”);

return 0;} 6-5 #include #define N 5 int main(){ int a[N],i,temp;

printf(“enter array a:n”);

for(i=0;i

scanf(“%d”,&a[i]);

printf(“array a:n”);

for(i=0;i

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

for(i=0;i

//循环的作用是将对称的元素的值互换

{ temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

}

printf(“nNow,array a:n”);

for(i=0;i

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

printf(“n”);

return 0;}

6-6 #include #define N 10 int main(){ int i,j,a[N][N];

for(i=0;i

{a[i][i]=1;

a[i][0]=1;

}

for(i=2;i

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

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

printf(“%6d”,a[i][j]);

printf(“n”);

}

printf(“n”);

return 0;} 6-7 #include int main(){ int a[15][15],i,j,k,p,n;

p=1;

while(p==1)

{printf(“enter n(n=1--15):”);

scanf(“%d”,&n);

if((n!=0)&&(n<=15)&&(n%2!=0))

p=0;

}

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

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

a[i][j]=0;

j=n/2+1;

a[1][j]=1;

for(k=2;k<=n*n;k++)

{i=i-1;

j=j+1;

if((i<1)&&(j>n))

{i=i+2;

j=j-1;

}

else

{if(i<1)i=n;

if(j>n)j=1;

}

if(a[i][j]==0)

a[i][j]=k;

else

{i=i+2;

j=j-1;

a[i][j]=k;

}

}

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

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

printf(“%5d”,a[i][j]);

printf(“n”);

}

return 0;} 6-8 #include #define N 4 #define M 5

/* 数组为4行5列 */ int main(){

int i,j,k,a[N][M],max,maxj,flag;

printf(“please input matrix:n”);

for(i=0;i

/* 输入数组 */

for(j=0;j

scanf(“%d”,&a[i][j]);

for(i=0;i

{max=a[i][0];

/* 开始时假设a[i][0]最大 */

maxj=0;

/* 将列号0赋给maxj保存 */

for(j=0;j

/* 找出第i行中的最大数 */

if(a[i][j]>max)

{max=a[i][j];

/* 将本行的最大数存放在max中 */

maxj=j;

/* 将最大数所在的列号存放在maxj中 */

}

flag=1;

/* 先假设是鞍点,以flag为1代表 */

for(k=0;k

if(max>a[k][maxj])

/* 将最大数和其同列元素相比 */

{flag=0;

/* 如果max不是同列最小,表示不是鞍点令flag1为0 */

continue;}

if(flag)

/* 如果flag1为1表示是鞍点 */ {printf(“a[%d][%d]=%dn”,i,maxj,max);

/* 输出鞍点的值和所在行列号 */

break;}

}

if(!flag)

/* 如果flag为0表示鞍点不存在 */

printf(“It is not exist!n”);

return 0;} 6-9 #include #define N 15 int main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;

char c;

printf(“enter data:n”);

scanf(“%d”,&a[0]);

i=1;

while(i

{scanf(“%d”,&a[i]);

if(a[i]>=a[i-1])

i++;

else

printf(“enter this data again:n”);

}

printf(“n”);

for(i=0;i

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

printf(“n”);

while(flag)

{printf(“input number to look for:”);

scanf(“%d”,&number);

sign=0;

top=0;

//top是查找区间的起始位置

bott=N-1;

//bott是查找区间的最末位置

if((numbera[N-1]))//要查的数不在查找区间内

loca=-1;

// 表示找不到

while((!sign)&&(top<=bott))

{mid=(bott+top)/2;

if(number==a[mid])

{loca=mid;

printf(“Has found %d, its position is %dn”,number,loca+1);

sign=1;

}

else if(number

bott=mid-1;

else

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);;

printf(“continu or not(Y/N)?”);

scanf(“ %c”,&c);

if(c=='N'||c=='n')

flag=0;

}

return 0;

} 6-10 #include int main(){int i,j,upp,low,dig,spa,oth;

char text[3][80];

upp=low=dig=spa=oth=0;

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

{ printf(“please input line %d:n”,i+1);

gets(text[i]);

for(j=0;j<80 && text[i][j]!='';j++)

{if(text[i][j]>='A'&& text[i][j]<='Z')

upp++;

else if(text[i][j]>='a' && text[i][j]<='z')

low++;

else if(text[i][j]>='0' && text[i][j]<='9')

dig++;

else if(text[i][j]==' ')

spa++;

else

oth++;

}

}

printf(“nupper case: %dn”,upp);

printf(“lower case: %dn”,low);

printf(“digit

: %dn”,dig);

printf(“space

: %dn”,spa);

printf(“other

: %dn”,oth);return 0;} 6-11 #include int main(){ char a[5]={'*','*','*','*','*'};

int i,j,k;

char space=' ';

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

{ printf(“n”);

printf(“

”);

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

printf(“%c”,space);

for(k=0;k<5;k++)

printf(“%c”,a[k]);

}

printf(“n”);

return 0;} 6-12a-c #include int main(){ int j,n;

char ch[80],tran[80];

printf(“input cipher code:”);

gets(ch);

printf(“ncipher code :%s”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

tran[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

tran[j]=219-ch[j];

else

tran[j]=ch[j];

j++;

}

n=j;

printf(“noriginal text:”);

for(j=0;j

putchar(tran[j]);

printf(“n”);

return 0;} 6-12b #include int main(){int j,n;

char ch[80];

printf(“input cipher code:n”);

gets(ch);

printf(“ncipher code:%sn”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

ch[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

ch[j]=219-ch[j];

else

ch[j]=ch[j];

j++;

}

n=j;

printf(“original text:”);

for(j=0;j

putchar(ch[j]);

printf(“n”);

return 0;} 6-13 #include int main(){ char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]='';

printf(“nThe new string is:%sn”,s1);

return 0;} 6-14 #include int main(){ int i,resu;

char s1[100],s2[100];

printf(“input string1:”);

gets(s1);

printf(“ninput string2:”);

gets(s2);

i=0;

while((s1[i]==s2[i])&&(s1[i]!=''))i++;

if(s1[i]=='' && s2[i]=='')

resu=0;

else

resu=s1[i]-s2[i];

printf(“nresult:%d.n”,resu);

return 0;} 6-15 #include #include int main(){ char s1[80],s2[80];

int i;

printf(“input s2:”);

scanf(“%s”,s2);

for(i=0;i<=strlen(s2);i++)

s1[i]=s2[i];

printf(“s1:%sn”,s1);

return 0;} 第7章用函数实现模块化程序设计 【第218页】 7-1-1 #include int main(){int hcf(int,int);

int lcd(int,int,int);

int u,v,h,l;

scanf(“%d,%d”,&u,&v);

h=hcf(u,v);

printf(“H.C.F=%dn”,h);

l=lcd(u,v,h);

printf(“L.C.D=%dn”,l);

return 0;} int hcf(int u,int v){int t,r;if(v>u)

{t=u;u=v;v=t;} while((r=u%v)!=0)

{u=v;

v=r;} return(v);} int lcd(int u,int v,int h)

{

return(u*v/h);

} 7-1-2 #include int Hcf,Lcd;int main(){void hcf(int,int);

void lcd(int,int);

int u,v;

scanf(“%d,%d”,&u,&v);

hcf(u,v);

lcd(u,v);

printf(“H.C.F=%dn”,Hcf);

printf(“L.C.D=%dn”,Lcd);

return 0;} void hcf(int u,int v){int t,r;if(v>u)

{t=u;u=v;v=t;} while((r=u%v)!=0)

{u=v;

v=r;

} Hcf=v;} void lcd(int u,int v)

{

Lcd=u*v/Hcf;

} 7-2 #include #include float x1,x2,disc,p,q;int main(){void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(“input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);printf(“equation: %5.2f*x*x+%5.2f*x+%5.2f=0n”,a,b,c);disc=b*b-4*a*c;printf(“root:n”);if(disc>0)

{

greater_than_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);

} else if(disc==0)

{equal_to_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);

} else

{smaller_than_zero(a,b);

printf(“x1=%f+%fitx2=%f-%fin”,p,q,p,q);

} return 0;} void greater_than_zero(float a,float b){x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);} void equal_to_zero(float a,float b){

x1=x2=(-b)/(2*a);} void smaller_than_zero(float a,float b){

p=-b/(2*a);

q=sqrt(-disc)/(2*a);} 7-3 #include int main(){int prime(int);

int n;

printf(“input an integer:”);

scanf(“%d”,&n);

if(prime(n))

printf(“%d is a prime.n”,n);

else

printf(“%d is not a prime.n”,n);

return 0;} int prime(int n)

{int flag=1,i;

for(i=2;i

if(n%i==0)

flag=0;

return(flag);

} 7-4 #include #define N 3 int array[N][N];int main(){ void convert(int array[][3]);int i,j;printf(“input array:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);printf(“noriginal array :n”);for(i=0;i

{for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);

} convert(array);printf(“convert array:n”);for(i=0;i

{for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);

} return 0;} void convert(int array[][3]){int i,j,t;for(i=0;i

for(j=i+1;j

{t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

} } #include #include int main(){void inverse(char str[]);char str[100];printf(“input string:”);scanf(“%s”,str);inverse(str);printf(“inverse string:%sn”,str);return 0;} void inverse(char str[]){char t;

int i,j;

for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)

{t=str[i];

str[i]=str[j-1];

str[j-1]=t;

} } 7-6 #include int main(){void concatenate(char string1[],char string2[],char string[]);char s1[100],s2[100],s[100];printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);concatenate(s1,s2,s);printf(“nThe new string is %sn”,s);return 0;} void concatenate(char string1[],char string2[],char string[]){int i,j;for(i=0;string1[i]!='';i++)

string[i]=string1[i];for(j=0;string2[j]!='';j++)

string[i+j]=string2[j];string[i+j]='';} 7-7 #include int main(){void cpy(char [],char []);char str[80],c[80];printf(“input string:”);gets(str);cpy(str,c);printf(“The vowel letters are:%sn”,c);return 0;} void cpy(char s[],char c[]){ int i,j;

for(i=0,j=0;s[i]!='';i++)

if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||

s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')

{c[j]=s[i];

j++;

}

c[j]='';} 7-8 #include #include int main(){char str[80];void insert(char []);printf(“input four digits:”);scanf(“%s”,str);insert(str);return 0;} void insert(char str[]){int i;for(i=strlen(str);i>0;i--)

{str[2*i]=str[i];

str[2*i-1]=' ';

} printf(“output:n%sn”,str);} 7-9 #include int letter,digit,space,others;int main(){void count(char []);char text[80];printf(“input string:n”);gets(text);printf(“string:”);puts(text);letter=0;digit=0;space=0;others=0;count(text);printf(“nletter:%dndigit:%dnspace:%dnothers:%dn”,letter,digit,space,others);return 0;} void count(char str[]){int i;for(i=0;str[i]!='';i++)if((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z'))

letter++;else if(str[i]>='0' && str [i]<='9')

digit++;else if(str[i]==32)

space++;else

others++;} 7-10 #include #include int main(){int alphabetic(char);int longest(char []);int i;char line[100];printf(“input one line:n”);gets(line);printf(“The longest word is :”);for(i=longest(line);alphabetic(line[i]);i++)

printf(“%c”,line[i]);printf(“n”);return 0;} int alphabetic(char c){if((c>='a' && c<='z')||(c>='A'&&c<='z'))

return(1);else

return(0);} int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)

if(alphabetic(string[i]))

if(flag)

{point=i;

flag=0;

}

else

len++;

else

{flag=1;

if(len>=length){length=len;

place=point;

len=0;}

} return(place);} 7-11 #include #include #define N 10 char str[N];int main(){void sort(char []);int i,flag;for(flag=1;flag==1;)

{printf(“input string:n”);

scanf(“%s”,&str);

if(strlen(str)>N)

printf(“string too long,input again!”);

else

flag=0;

} sort(str);printf(“string sorted:n”);for(i=0;i

printf(“%c”,str[i]);printf(“n”);return 0;} void sort(char str[]){int i,j;char t;for(j=1;j

for(i=0;(i

if(str[i]>str[i+1])

{t=str[i];

str[i]=str[i+1];

str[i+1]=t;

} } 7-12 #include #include int main(){float solut(float a,float b,float c,float d);float a,b,c,d;printf(“input a,b,c,d:”);scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);printf(“x=%10.7fn”,solut(a,b,c,d));return 0;}

float solut(float a,float b,float c,float d){float x=1,x0,f,f1;do

{x0=x;

f=((a*x0+b)*x0+c)*x0+d;

f1=(3*a*x0+2*b)*x0+c;

x=x0-f/f1;

} while(fabs(x-x0)>=1e-3);return(x);} 7-13 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;int main(){ int i,j;

float h;

float s_var(void);

float highest();

void input_stu(void);

void aver_stu(void);

void aver_cour(void);

input_stu();

aver_stu();

aver_cour();

printf(“n NO.cour1

cour2

for(i=0;i

{printf(”n NO %2d “,i+1);

for(j=0;j

printf(”%8.2f“,score[i][j]);

printf(”%8.2fn“,a_stu[i]);

}

printf(”naverage:“);

for(j=0;j

printf(”%8.2f“,a_cour[j]);

cour3

cour4 cour5

avern”);

printf(“n”);

h=highest();

printf(“highest:%7.2f

NO.%2d

course %2dn”,h,r,c);

printf(“variance %8.2fn”,s_var());

return 0;} void input_stu(void){int i,j;

for(i=0;i

{printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

scanf(“%f”,&score[i][j]);

} } void aver_stu(void){int i,j;

float s;

for(i=0;i

{for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;

} } void aver_cour(void){int i,j;

float s;

for(j=0;j

{s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;

} } float highest(){float high;

int i,j;

high=score[0][0];

for(i=0;i

for(j=0;j

if(score[i][j]>high){high=score[i][j];

r=i+1;

c=j+1;}

return(high);} float s_var(void){int i;

float sumx,sumxn;

sumx=0.0;

sumxn=0.0;

for(i=0;i

{sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];

}

return(sumx/N-(sumxn/N)*(sumxn/N));} 7-14 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;int main(){ int i,j;

float h;

float s_var(void);

float highest();

void input_stu(void);

void aver_stu(void);

void aver_cour(void);

input_stu();

aver_stu();

aver_cour();

printf(“n NO.cour1

cour2

cour3

cour4

cour5

for(i=0;i

{printf(”n NO %2d “,i+1);

for(j=0;j

printf(”%8.2f“,score[i][j]);

printf(”%8.2fn“,a_stu[i]);

}

printf(”naverage:“);

for(j=0;j

printf(”%8.2f“,a_cour[j]);

printf(”n“);

h=highest();

printf(”highest:%7.2f

NO.%2d

course %2dn“,h,r,c);

avern”);

printf(“variance %8.2fn”,s_var());

return 0;} void input_stu(void){int i,j;

for(i=0;i

{printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

scanf(“%f”,&score[i][j]);

} } void aver_stu(void){int i,j;

float s;

for(i=0;i

{for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;

} } void aver_cour(void){int i,j;

float s;

for(j=0;j

{s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;

} } float highest(){float high;

int i,j;

high=score[0][0];

for(i=0;i

for(j=0;j

if(score[i][j]>high){high=score[i][j];

r=i+1;

c=j+1;}

return(high);} float s_var(void){int i;

float sumx,sumxn;

sumx=0.0;

sumxn=0.0;

for(i=0;i

{sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];

}

return(sumx/N-(sumxn/N)*(sumxn/N));} 7-15 #include #include #define N 10 int main()

{void input(int [],char name[][8]);

void sort(int [],char name[][8]);void search(int ,int [],char name[][8]);int num[N],number,flag=1,c;

char name[N][8];

input(num,name);

sort(num,name);

while(flag==1)

{printf(“ninput number to look for:”);

scanf(“%d”,&number);

search(number,num,name);

printf(“continue ot not(Y/N)?”);

getchar();

c=getchar();

if(c=='N'||c=='n')

flag=0;

} return 0;

} void input(int num[],char name[N][8]){int i;

for(i=0;i

{printf(“input NO.: ”);

scanf(“%d”,&num[i]);

printf(“input name: ”);

getchar();

gets(name[i]);

} }

void sort(int num[],char name[N][8]){ int i,j,min,templ;

char temp2[8];

for(i=0;i

{min=i;

for(j=i;j

if(num[min]>num[j])min=j;

templ=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=templ;

strcpy(name[min],temp2);

}

printf(“n result:n”);

for(i=0;i

printf(“n %5d%10s”,num[i],name[i]);} void search(int n,int num[],char name[N][8])

{int top,bott,mid,loca,sign;

top=0;

bott=N-1;

loca=0;

sign=1;

if((nnum[N-1]))

loca=-1;

while((sign==1)&&(top<=bott)){mid=(bott+top)/2;

if(n==num[mid])

{loca=mid;

printf(“NO.%d , his name is %s.n”,n,name[loca]);

sign=-1;

}

else if(n

bott=mid-1;

else

top=mid+1;}

if(sign==1 || loca==-1)

printf(“%d not been found.n”,n);

}

7-16 #include #define MAX 1000 int main(){ int htoi(char s[]);

int c,i,flag,flag1;

char t[MAX];

i=0;

flag=0;

flag1=1;

printf(“input a HEX number:”);

while((c=getchar())!='' && i

{if(c>='0' && c<='9'||c>='a' && c<='f'||c>='A' && c<='F')

{flag=1;

t[i++]=c;

}

else if(flag)

{t[i]='';

printf(“decimal number %dn”,htoi(t));

printf(“continue or not?”);

c=getchar();

if(c=='N'||c=='n')

flag1=0;

else

{flag=0;

i=0;

printf(“ninput a HEX number:”);

}

}

}

return 0;

}

int htoi(char s[])

{ int i,n;

n=0;

for(i=0;s[i]!='';i++)

{if(s[i]>='0'&& s[i]<='9')

n=n*16+s[i]-'0';

if(s[i]>='a' && s[i]<='f')

n=n*16+s[i]-'a'+10;

if(s[i]>='A' && s[i]<='F')

n=n*16+s[i]-'A'+10;

}

return(n);

} 7-17 #include int main(){ void convert(int n);

int number;

printf(“input an integer: ”);

scanf(“%d”,&number);

printf(“output: ”);

if(number<0)

{putchar('-');putchar(' ');

/* 先输出一个‘-’号和空格 */

number=-number;

}

convert(number);

printf(“n”);

return 0;} void convert(int n){ int i;

if((i=n/10)!=0)

convert(i);

putchar(n%10+'0');

putchar(32);} 7-18 #include int main(){int sum_day(int month,int day);int leap(int year);int year,month,day,days;printf(“input date(year,month,day):”);scanf(“%d,%d,%d”,&year,&month,&day);printf(“%d/%d/%d ”,year,month,day);days=sum_day(month,day);

/* 调用函数sum_day */ if(leap(year)&&month>=3)

/* 调用函数leap */

days=days+1;printf(“is the %dth day in this year.n”,days);return 0;} int sum_day(int month,int day)

/* 函数sum_day:计算日期 */

{int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int i;

for(i=1;i

day+=day_tab[i];

/* 累加所在月之前天数 */

return(day);

}

/* 函数leap:判断是否为闰年 */ int leap(int year){int leap;

leap=year%4==0&&year%100!=0||year%400==0;

return(leap);} 第8章善于利用指针 【第291页】 8-1 #include int main(){ void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf(“input three integer n1,n2,n3:”);scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2)swap(p1,p2);if(n1>n3)swap(p1,p3);if(n2>n3)swap(p2,p3);printf(“Now,the order is:%d,%d,%dn”,n1,n2,n3);return 0;} void swap(int *p1,int *p2)

{int p;

p=*p1;*p1=*p2;*p2=p;

} #include #include int main(){void swap(char *,char *);char str1[20],str2[20],str3[20];printf(“input three line:n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);printf(“Now,the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);return 0;} void swap(char *p1,char *p2){char p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);} 8-3 #include int main(){ void input(int *);

void max_min_value(int *);

void output(int *);

int number[10];

input(number);

max_min_value(number);

output(number);

return 0;} void input(int *number)

{int i;

printf(“input 10 numbers:”);

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

scanf(“%d”,&number[i]);

} void max_min_value(int *number)

{ int *max,*min,*p,temp;

max=min=number;

for(p=number+1;p

if(*p>*max)max=p;

else if(*p<*min)min=p;

temp=number[0];number[0]=*min;*min=temp;

if(max==number)max=min;

temp=number[9];number[9]=*max;*max=temp;

} void output(int *number)

{int *p;

printf(“Now,they are:

”);

for(p=number;p

printf(“%d ”,*p);

printf(“n”);

}

8-4 #include int main()

{void move(int [20],int,int);

int number[20],n,m,i;printf(“how many numbers?”);scanf(“%d”,&n);printf(“input %d numbers:n”,n);for(i=0;i

scanf(“%d”,&number[i]);printf(“how many place you want move?”);scanf(“%d”,&m);move(number,n,m);printf(“Now,they are:n”);for(i=0;i

printf(“%d ”,number[i]);printf(“n”);return 0;} void move(int array[20],int n,int m)

{int *p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p--)

*p=*(p-1);

*array=array_end;

m--;

if(m>0)move(array,n,m);

} 8-5 #include int main(){int i,k,m,n,num[50],*p;printf(“ninput number of person: n=”);scanf(“%d”,&n);p=num;for(i=0;i

*(p+i)=i+1;

i=0;

k=0;

m=0;

while(m

{if(*(p+i)!=0)k++;

if(k==3)

{*(p+i)=0;

k=0;

m++;

}

i++;

if(i==n)i=0;

} while(*p==0)p++;printf(“The last one is NO.%dn”,*p);return 0;} 8-6 #include int main(){int length(char *p);int len;char str[20];printf(“input string: ”);scanf(“%s”,str);len=length(str);printf(“The length of string is %d.n”,len);return 0;}

int length(char *p)

{int n;n=0;while(*p!='')

{n++;

p++;

} return(n);} 8-7 #include #include int main(){void copystr(char *,char *,int);

int m;char str1[20],str2[20];printf(“input string:”);gets(str1);printf(“which character that begin to copy?”);scanf(“%d”,&m);if(strlen(str1)

printf(“input error!”);else

{copystr(str1,str2,m);

printf(“result:%sn”,str2);

} return 0;} void copystr(char *p1,char *p2,int m)

{int n;n=0;while(n

{n++;

p1++;

} while(*p1!='')

{*p2=*p1;

p1++;

p2++;

} *p2='';} 8-8 #include int main(){int upper=0,lower=0,digit=0,space=0,other=0,i=0;char *p,s[20];printf(“input string: ”);while((s[i]=getchar())!='n')i++;p=&s[0];while(*p!='n')

{if(('A'<=*p)&&(*p<='Z'))

++upper;

else if(('a'<=*p)&&(*p<='z'))

++lower;

else if(*p==' ')

++space;

else if((*p<='9')&&(*p>='0'))

++digit;

else

++other;

p++;

} printf(“upper case:%d

lower case:%d”,upper,lower);printf(“

space:%d

digit:%d

other:%dn”,space,digit,other);

第四篇:谭浩强版C语言期末考试

一 选择题(24分,每小题2分)

1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。

A 存放读入数据项的存储区

B 存放读入数据的地址或指向此地址的指针 C 一个指向所读文件的文件指针

D 一个整形变量,代表要读入的数据项总数

2.以下程序的输出结果为()。main(){

int i=010,j=10;

printf(“%d,%dn”,i++,j--);}

A 11,9 B 9,10 C 8,10 D 9,9

3.设a为int型变量,执行下列赋值语句后,a的取值分别是()。a=125.534;a=20.0/3;a=(int)125.521%4;a=5<<2;

A 125,6,31,1 B 125,6,1,20 C 125,6.666666,31,20 D 125.534,6.666666,2,20

4.设i和k都是int类型,则for循环语句()。for(i=0,k=-1;k=1;i++,k++)printf(“****n”);A 循环结束的条件不合法 B 循环体一次也不执行 C 循环体只执行一次 D 是无限循环

5.以下程序的输出结果为()。main(){

char c;

int i;

for(i=65;i<68;i++)

{

c=i+32;

switch(c)

{

case 'a':

case 'b':

case 'c':printf(“%c,”,c);break;

default:printf(“end”);

}

} }

A a,b,c,end

B a,a,a,end

C a,a,a,D a,b,c,6.函数调用语句:fseek(fp,-10L,2);的含义是()。

A 将文件位置指针从文件末尾处向文件头的方向移动10个字节 B 将文件位置指针从当前位置向文件头的方向移动10个字节 C 将文件位置指针从当前位置向文件末尾方向移动10个字节

D 将文件位置指针移到距离文件头10个字节处

7.以下程序的输出结果为()。main(){

int i=0,j=0;

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]=0;

printf(“%sn”,s1);}

A side B country C sidetry D countryside

8.下列说法不正确的是()。

A 主函数main中定义的变量在整个文件或程序中有效 B 不同函数中,可以使用相同名字的变量 C 形式参数是局部变量

D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效

9.在下列程序段中,枚举变量 c1的值是()。enum color { red,yellow,blue=4,green,white}c1;c1=yellow;c1=white;A 1 B 3 C 5 D 6

10.设有说明 int(*ptr)();其中标识符ptr是()。

A 是一个指向整形变量的指针

B 是一个指针,它指向一个函数值是int的函数 C 是一个函数名 D定义不合法

11.定义由n个指向整形数据的指针组成的数组p,其正确的方式为()。

A int p;B int(*p)[n];C int *p[n];D int(*p)();

12.具有相同类型的指针类型变量p与数组a,不能进行的操作是()。

A p=a;B *p=a[0];C p=&a[0];D p=&a;

二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)

1.参加位运算的数据可以是任何类型的数据。

()

2.若有定义和语句: int a;char c;float f;scanf(“%d,%c,%f”,&a,&c,&f);

若通过键盘输入:10 A 12 5 则a=10,c=‘A’,f=12.5。

()

3.C语言把文件看作是一个字符(字节)的序列。

()

4.若有宏定义:

#define S(a,b)t=a;a=b;b=t 由于变量t没定义,所以此宏定义是错误的。

()

5.在Turbo C中,下面的定义和语句是合法的: file *fp;fp=fopen(“a.txt”,“r”);

()

6.若有定义: char s[ ]=“china”;

则Turbo C系统为数组s开辟6个字节的内存单元。

()

7.若有定义和语句:

int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;for(i=0;i<3;i++)

sum+=a[i][2-i];则sum=21。

()

8.若有定义和语句: struct student {

int num;

char name[10];

float score;}

s[5]={{1,“lili”,98.5},{9,“xiaohua”,66}},*p=s;printf(“%d”,*p++);输出结果是1。

()

9.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。

()

10.在Turbo C中,此定义和语句是合法的: enum aa{ a=5,b,c}bb;bb=(enum aa)5;

()三 写出下列程序的运行结果(36分,每小题6分)1.main(){

int i=29,j=6,k=2,s;

s=i+i/j%k-9;//s=i+(i/j)%k-9

printf(“s=%dn”,s);} 2.main(){

int x=31,y=2,s=0;

do

{

s-=x*y;

x+=2;y-=3;

}

while(x%3==0);//先执行,后判断

printf(“x=%dty=%dts=%dn”,x,y,s);} 3.main(){

int a[6]={10,20,30,40,50,60},i;

invert(a,0,5);

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

printf(“%d,”,a*i+);

printf(“n”);}

invert(int s[ ],int i,int j)//倒置 {

int t;

if(i

{

invert(s,i+1,j-1);//函数自身的嵌套调用,形成循环

t=s[i];

s[i]=s[j];

s[j]=t;

} }

4.#include

main(){

char str[ ]=“The C program”,c;

int i;

for(i=2;(c=str[i])!='';i++)

{

switch(c)

{

case 'g': ++i;break;//由于++i,跳过了g后面的1个字母

case 'o': continue;

default: printf(“%c”,c);continue;

}

printf(“*”);

}

printf(“n”);} 5.struct w //结构体 {

char low;

char high;};

union u //共用体 {

struct w byte;

short word;}uw;

main(){

int result;

uw.word=0x1234;

printf(“word value:%04xn”,uw.word);

printf(“high byte:%02xn”,uw.byte.high);

printf(“low byte:%02xn”,uw.byte.low);

uw.byte.low=0x74;

printf(“word value:%04xn”,uw.word);

result=uw.word+0x2a34;

printf(“the result:%04xn”,result);}

6.main(){

char *s2=“I love China!”,**s1=&s2;

char *s3,c,*s4=“w”;

s3=&c;

*s3='H';

s2=s2+2;

printf(“%st%ct%st%cn”,s2,*s3,s4,**s1);}

四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)

1.百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main(){

int hb,hm,hl,n=0;

for(hb=0;hb<=100;hb+=(1))

for(hm=0;hm<=100-hb;hm+=(2))

{

hl=100-hb-(3);

if(hb/3+hm/2+2*(3)==100)

{

n++;

printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl);

}

}

printf(“n=%dn”,n);} 2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。#define N 10

char str[N];

void main(){

int i,flag;

for(flag=1;flag==1;)

{

scanf(“%s”,str);

flag=0;

printf(“n”);

}

sort(___(4)___);

for(i=0;i

{

printf(“%c”,str[i]);

}

printf(“n”);}

sort(char str[N]){

int i,j;

char t;

for(j=1;j

for(i=0;i<10-j;i++)

if(str[i]>str[i+1])

{

t=str[i];

____(5)____;

____(6)____;//交换位置

} }

3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)

例如,矩阵为: //冒泡排序 3 0 0 3 2 5 7 3 1 0 4 2 则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。

add(int m,int n,int arr[]){

for(i=0;i

for(j=0;j

sum=sum+____(7)____;

for(j=0;j

for(i=1;____(8)____;i++)

sum=sum+arr[i*n+j];

return(sum);} 4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。#define N 10 main(){

void maxmin(int arr[],int *pt1,int *pt2,int n);

int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;

p1=&a;

p2=&b;

maxmin(array,p1,p2,N);

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

void maxmin(int arr[],int *pt1,int *pt2,int n){

int i;

*pt1=*pt2=arr[0];

for(i=1;i

{

if(arr[i]>*pt1)

____(9)____;

if(arr[i]<*pt2)

____(10)____;

} }

答案

一 选择题(24分,每小题2分)1.(B)2.(C)3.(B)4.(D)5.(D)6.(A)7.(D)8.(A)9.(D)10.(B)11.(C)12.(D)二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)1.(×)2.(√)

3.(√)4.(×)

5.(×)6.(√)

7.(√)8.(×)

三 写出下列程序的运行结果(36分,每小题6分)1.s=20

2.x=35 y=-4 s=-29 3.60,50,40,30,20,10, 4.e C pr*am 5.word value:1234 6.love China!H w l

high byte:12

low byte:34

word value:1274

the result:3ca8

四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)1.(1)3(2)2(3)hm hl

2.(4)str(5)str[i]=str[i+1](6)str[i+1]=t 3.(7)arr[i*n+j](8)i

选择题

1.一个C程序的执行是从 a。

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

B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束

2.以下叙述正确的是 c。

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

D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 3.以下叙述不正确的是 d。A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数

D)在C程序中,注释说明只能位于一条语句的后面 4.C语言规定:在一个源程序中,main函数的位置 c。

A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 5.一个C语言程序是由 b。

A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成 6.C语言中的语句需要 b 符号作为结尾。A): B)C)。D)// 7.C 语言程序中可以对程序进行注释,注释部分用符号_c _括起来。A)‘{‘ 和’}’ B)‘[‘和’]’ C)“/*”和”*/” D)“*/”和”/*” 8.C语言中注释的位置 c。

A)必须在程序的最开始 B)必须在程序的结尾 C)可以在程序的任何位置 D)不可以写到main函数里面

9.C语言程序能够在不同的操作系统下面运行,这说明c语言具有很好的 c。A)适应性 B)移植性 C)兼容性 D)操作性

10.C语言经过编译后生成的文件的后缀是 b。A).c B).cpp C).exe D).obj 11.C语言编译程序的首要工作是 a。

A)检查C语言程序的语法错误 B)检查C语言程序的逻辑错误 C)检查程序的完整性 D)同时检查语法和逻辑错误

12.C语言经过链接后生成的文件的后缀是 c。A).c B).cpp C).exe D).obj 13.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 c。A)必须为字母 B)必须为下划线

C)必须为字母或下划线 D)可以是字母、数字和下划线中任一种字符 14.若以下选项中的变量已正确定义,则正确的赋值语句是 c。A)x1=26.8%3;B)1+2=x2;C)x3=0x12;D)x4=1+2=3;15.设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是 b。

A)x=x*100+0.5/100.0 B)x=(x*100+0.5)/100.0 C)x=(int)(x*100+0.5)/100.0 D)x=(x/100+0.5)*100.0 16.下列C语言中运算对象必须是整型的运算符是 a。A)%= B)/ C)= D)*= 17.若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是 a。A)0 B)0.5 C)1 D)2 18.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是 D。

A)把x和y按从大到小排列 B)把x和y按从小到大排列 C)无确定结果 D)交换x和y中的值

19.下列变量定义中合法的是 a。

A)short _a=1-.le-1;B)double b=1+5e2.5;C)long do=0xfdaL;D)float 2_and=1-e-3;20.若变量已正确定义并赋值,符合C语言语法的表达式是 a。

A)a=b=7 B)a=7+b+c,a++ C)int(12.3%4)D)a=a+7=c+b 21.若有float x;则sizeof(x)和sizeof(float)两种描述 A。A)都正确 B)都不正确 C)前者正确 D)后者正确

22.有整型变量x,单精度变量y=5.5,表达式x=(float)(y*3+((int)y)%4)执行后,x的值 为(b)。

A)17 B)17.500000 C)17.5 D)16 23.已知float x=1,y;则y=++x*++x的结果是 a。A)y=9 B)y=6 C)y=1 D)表达式是错误的 24.下列关于单目运算符++、--的叙述中正确的是 D。A)它们的运算对象可以是任何变量和常量

B)它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C)它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D)它们的运算对象可以是char型变量、int型变量和float型变量 25.已定义ch为字符型变量,下列赋值语句中错误的是 c。A)ch='';B)ch=62+3;C)ch=NULL;D)ch='xaa';26.假定有以下变量定义,则能使值为3的表达式是 d。int k=7,x=12;A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5 D)(x%=k)-(k%=5)27.设有“int x=11;”则表达式(x++*1/3)的值是 a。A)3 B)4 C)11 D)12 28.已定义c为字符型变量,则下列语句中正确的是 c。A)c=’97’ B)c=“97” C)c=97 D)c=“a” 29.sizeof(float)是 c。

A)一个双精度型表达式 B)一个整型表达式 C)一种函数调用 D)一个不合法的表达式

30.有以下定义语句: double a,b;int w;long c;若各变量已正确赋值,则下列选项中正确的表达式是 c。A)a=a+b=b++ B)w%((int)a+b)C)(c+w)%(int)a D)w=a=b 31.若变量a是int类型,并执行了语句:a=‘A’+1.6;,则正确的叙述是 c。A)a的值是字符C B)a的值是浮点型

C)不允许字符型和浮点型相加 D)a的值是字符’A’的ASCII值加1 32.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是 d。A)6.500000 B)6 C)5.500000 D)6.000000 33.在下列选项中,不正确的赋值语句是 d。A)++t;B)n1=(n2=(n3=0));C)k=i==j;D)b+c=1;34.已知char a;int b;float c;double d;则表达式a+b * c-d的结果为__d __型。A)char B)int C)float D)double 35.若x 为int型变量,则执行语句x=10;x+=x=x-x后,x的值为__a ____。A)0 B)10 C)20 D)30 36.若x、a、b、c均 为int型变量,则执行表达式x=(a = 4, b = 8, c = 12)后,x的 4 值为__c__。

A)4 B)8 C)12 D)24 37.在C程序中,x + y是_____、x + y;是___a____。

A)表达式、语句 B)表达式、表达式 C)语句、语句 D)语句、表达式 38.假设变量a是整型,b是实型,c是双精度型,则表达式30+a+c*b的值的数据类型是 c。

A)int B)float C)double D)不确定

39.在C语言中,char型数据在内存中的存储形式是 d。A)补码 B)反码 C)原码 D)ASCII码

40.执行下列程序片段时输出结果是 c。int x=13,y=5;printf(“%d”,x%=(y/=2));A)3 B)2 C)1 D)0 41.执行语句scanf(“%c%c%c”,&c1,&c2,&c3),输入abc时,变量c1、c2、c3的值分别为 a。A)'a', 'b', 'c' B)'a','b', '' C)'a', '', 'b' D)'a','','c'

42.设c1,c2均是字符型变量,则以下不正确的函数调用为 d。A)scanf(“c1=%cc2=%c”,&c1,&c2);B)c1=getchar();C)putchar(c2);D)putchar(c1,c2);43.下列函数中能够向终端输出一个字符或字符型变量值的是 d。A)gets B)puts C)getchar D)putchar 44.若有下列语句 char c=’A’; printf(“%d”,c);则输出的结果是 c。

A)A B)c C)65 D)错误的语句

45.下列程序输入’a’字母后,执行程序后输出的结果是 b。#include int main(){ char c;c=getchar();c=c-32;printf(“%cn”,c);return 0;} A)65 B)A C)97 D)a 46.程序流程图中带箭头的线段表示 b。

A)处理操作 B)数据流 C)控制流 D)调用关系 47.程序流程图中的菱形框表示 c。A)输入 B)输出 C)判断 D)循环 48.下面的流程图是 d 结构的程序设计。A)顺序 B)顺序加选择 C)判断 D)循环

49.NS图完全取消了 a,不允许有随意的控制流,全部算法写在一个矩形框内。A)流程线 B)输出 C)判断 D)循环 50.以下描述中正确的是 c。

A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C)do-while循环至少要执行一次循环语句 D)do-while循环中,根据情况可以省略while 51.逻辑运算符两侧运算对象的数据类型 d。

A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据

52.下列运算符中优先级最高的是 b。(非,算术,关系,AND,或,赋值运算符)A)< B)十 C)&& D)!= 53.能正确表示“当x 的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是 c。A)(x>=1)&&(x<=10)&&(x> = 200)&&(x<=210)B)(x>=1)||(x<=10)||(x>=200)||(x<=210)c)(x>=1)&&(x<=10)||(x>= 200)&&(x<=210 D)(x > =1)||(x< =10)&&(x> = 200)||(x<=210)54.判断char型变量

ch

是否为大写字母的正确表达式是 c。A)' A' <=ch<='z' B)(ch> = 'A')&(ch<=' Z')C)(ch>=' A')&&(ch<='Z')D)(' A' < = ch)AND('Z'> = ch)55.设x,y 和z是int型变量,且x = 3,y= 4,z= 5,则下面表达式中值为0的是 d。A)'y'&&'y' B)x < =y C)x||y+z&&y-z D)!(x=y && ch<'B'&&!Y)的值是 c。A)0 B)语法错 C)1 D)“假” 57.若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数 表达式的值 为“假”。则以下不能满足要求的表达式是 a。A)A%2==1 B)!(A%2 = =0)C)!(A%2)D)A%2 58.若有程序段如下: a=b=c=0;x=35;if(!a)x--;else if(b);if(c)x=3;else x=4;执行后,变量x的值是 b。A)34 B)4 C)35 D)3 59.定义:int x=7,y=8,z=9;后,则下面表达式为0的是 d。A)' x ' && ' y ' B)x<=y C)x||y+z&&y-z D)!((x

printf(“It is the %dth day.”,x);return 0;} A)是死循环 B)循环执行2次 C)循环执行1次 D)有语法错误

61.对switch后括号内的表达式,叙述正确的是 c。A)只能是数字 B)可以是浮点数 C)只能是整型数据或字符型数据 D)以上叙述都不对

62.下列关于switch和break语句的说法中正确的是 b。A)break语句只能用在switch语句中 B)在switch语句中,可以根据需要决定是否使用break语句 C)在switch语句中必须使用break语句 D)以上选项都不正确 63.以下正确的描述是 b。

A)continue语句的作用是结束整个循环的执行 B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句或continue语句的作用相同 D)从多层循环嵌套中退出时, 只能使用goto语句

64.以下说法中错误的是 d。

A)C语言总是从main函数开始执行 B)函数在程序中出现的先后位置与其被调用的顺序无关 C)一个完整的C程序可由若干个C源程序文件组成

D)main函数的定义必须出现在所有其他函数之前,否则将产生运行错误 65.C语言规定,函数返回值的类型是 c。

A)由return语句中表达式的类型所决定 B)由调用该函数的主调函数所具有的类型决定 C)由定义该函数时所指定的函数类型决定 D)由系统随机决定 66.以下说法中正确的是 b。

A)main函数和其他函数间可相互调用 B)main函数可以调用其他函数,但其他函数不能调用main函数 C)因为main函数可不带参数,所以其后的参数小括号能省略 D)根据情况可以不写main函数

67.以下函数定义中正确的是 b。A)fun(float x,y)B)

fun(int x, int y)C)

fun(int x, int y);D)void fun(int x, int y){ return x+y;} { return x+y;} { return x+y;} { return x+y;} 68.以下说法中正确的是 b。

A)在一个函数的执行过程中又出现对其他函数的调用,则称此函数为递归函数。B)递归函数中必须存在递归结束的条件

C)函数的递归调用可以提高程序的执行效率 D)递归函数中必须出现return语句 69.以下有关“递归函数”说法中正确的是 a。

A)既允许直接递归调用,也允许间接递归调用 B)只允许直接递归调用 C)既不允许直接递归调用,也不允许间接递归调用 D)只允许间接递归调用

70. C语言中,函数调用时若实参是数组名,则传递给被调函数对应形参的是 d。A)整个数组 B)数组元素的个数

C)数组占用的内存单元个数 D)数组在内存中存放的首地址

71.C语言中,函数调用时若实参是数组名,则被调函数对应形参 c。A)可以是相应类型简单变量 B)必须是相应类型数组名 C)可以是相应类型数组名 D)必须是相应类型的指针变量 72.以下说法中错误的是 d。

A)数组元素可以作为函数实参 B)指针可以作为函数的形参 C)结构变量可以作为函数参数 D)结构指针变量不能作为函数参数

73.C语言中,以下叙述中错误的是 a。A)主函数中定义的变量是全局变量

B)同一程序中,全局变量和局部变量可以同名 C)全局变量的作用域从定义处开始到本源程序文件结束 D)局部变量的作用域被限定在其所定义的局部范围中 74.在一个源程序文件中定义的全局变量,其作用域为 b。

A)整个源程序文件 B)从定义处开始到本源程序文件结束 C)整个主函数 D)所处C程序的所有源程序文件中 75.在C函数中,局部变量的隐含存储类型是 a。A)auto B)static C)register D)extern 76.在C程序中,如果限定一个局部变量只能在所定义的范围中起作用,那么这个变量的存储类型 a。

A)只能是auto B)只能是extern C)可以是auto或static D)可以是extern或static 填空题

1.在C语言中所提供的数据结构是以数据类型形式出现的,其中的基本类型包括int 型 即 整形、float型即_ 单精度浮点型、double型即 双精度浮点型、char型即 字符型 等。2.C语言中的标识符只能由三种字符组成,它们是 字母、数字 和 下划线。

3.C程序中的字符常量是用单引号括起来的一个字符;除此之外,还允许用一种特殊形式的字符常量,是以 反斜杠 开头,被称为转义字符。

4.字符串常量是一对双引号括起来的字符序列,且以 ‘’ 结束。5.常量是指在程序执行过程中其值 不能 _改变的量。6.变量是指在程序执行过程中其值 可以改变 的量。7.C实型变量分为 单精度 _和 双精度 _两类。

8.转义字符'n'表示 换行,使光标移到屏幕上下一行开头。9.一个字符变量在内存中占 1 字节。

10.一个字符数据既可以以字符形式输出,也可以以 整数 形式输出。11.字符串常量是用_ “” _括起来的字符序列。

12.在进行运算时,不同类型的数据必须_ 先强制类型转换 _,然后进行运算。13.可以利用_ 强制类型转换 _运算符将一个表达式的值转换成指定的类型。

14.有两种类型转换,一种是在运算时不必用户指定,系统自动进行类型转换;另一种是 用户自己定义的转换(强制类型转换)。15.两个整数相除的结果是_ 整数。16.求模运算符(%)只能用于 整数 _操作数。17.一个表达式的最后加上一个 ; 就成了一个语句。18.若int x = 3,则执行表达式x*= x+= xb;//(b=7)a = a-b;//(a=9)printf(“a=%d, b=%d n”, a,b);return 0;} A=9;b=7 3.写出以下程序运行的结果 , c = 3。#include int main(){ int a, b, c;a =(b =(c = 3)* 5)*5;printf(“a=%d, b=%d, c=%d n”, a, b, c);return 0;} A=75,b=15,c=3

4.下面程序的功能是输出100至200之间的不能被3整除的数,请填空使程序完整。int main(){ int n;for(n=100;n<=200;n++){ if(n%3==0)else

{printf(“%d ”,n);} } return 0;} 5.下面程序完成的功能是,在全班50个学

生中,征集慈善募捐,当总数达到2000元时就结束。请判断下面程序的正误,如果错误请改正过来(只有一处错误)。

int main(){ float amount,total;int i;for(i=1,total=0;i<=50;i++){ scanf(“%f”,&amount);total=total+amount;if(total>=2000)break;}

printf(“%f ”,total);return 0;}

6.执行程序之后,输入2↙6↙3↙,以下程序运行后的输出结果是。(↙表示回车)#include int main(){ int a,b,c,d;printf(“请输入三个整数:n”);scanf(“%d%d%d”,&a,&b,&c);if(a>b)d=a;//d=2 else d=b;if(c>d)d=c;printf(“%dn”,d);return 0;} D=6 7.s+=n;11 } printf(“n=%dn”,n);return 0;} N=5 8.下面程序的功能是:求1!+2!+3!+„+10!,请填空使程序完整。int main(){ int n;double s=0,t=1;for(n=1;n<=10 n++){ t=t*n;t++;}

printf(“%e”, t);return 0;}

9.请给出程序运行结果。int main(){ int i;for(i=1;i<=5;i++)printf(“%d ”,sub(i));

printf(“n”);以下程

后的输

果是。#include int main(){ int n,s;s=n=0;while(s<=10){ n++;return 0;} int sub(int n){ int a;if(n==1)return 1;a=n+sub(n-1);return a;} 1 3 6 10 15 10.请给出程序运行结果。int m=10;int main(){ int fun(int x,int y);int a=7,b=6;

printf(“%dn”,fun(a,b)/m);return 0;} int fun(int x,int y){ int m=2;return x*y-m;} 4 11.以下程序的功能是求一个3*4矩阵中最小元素。请填空。

fun(int a[][4]){ int i,j,k,min=10000;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]

min=a[i][j];return min;} int main(){ int a[3][4]={1,2,3,-22,5,6,-3,8,9,-8,22,10};int k;k= fun(a)printf(“%dn”,k);return 0;} 12.下面程序的功能是:用户从键盘输入两个float型数据a和b,计算并输出a除以b的商。请判断下面程序的正误,如果错误请改正过来。float cal(float a, b){ float x;

x=a/b;//注意这样编程输入时

要输入带小说点,要不这一步做的是取整运算;// return x;} int main(){ float a,b;scanf(“%f %f”,&a,&b);printf(“商=%fn”,cal(a,b));return 0;} 5.下面程序的功能是:输出全局变量a、b两者的最小值。请判断下面程序的正误,如果错误请改正过来。(int a=8,b=7;既然是全局变量,应该写到前面,至少在main前)

int min(int x,int y){ int z;z=x

return 0;} int a=8,b=7

编程题

1.编写一个程序,求满足以下条件的最大的n值。12+22+32+„n2≤10001.#include int main(){ int b,a;a=0;while(b<=10001);{ b=b+a*a;a=a+1;} printf(“%dn”,a);return 0;} 2.编写一个程序,输入三条线段的长度,判断这三条线段能否构成一个直角三角形。#include int main(){ int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if(a>b&&a>c){if((a*a)==(b*b+c*c))printf(“长度为abc的三条边能构成直角三角形n”);else printf(“长度为abc的三条边不能构成直角三角形n”);} else if(b>a&&b>c){ if((b*b)==(a*a+c*c))printf(“长度为abc的三条边能构成直角三角形n”);else

printf(“长度为abc的三条边不能构成直角三角形n”);} else if(c>a&&c>b){ if((c*c)==(a*a+b*b))printf(“长度为abc的三条边能构成直角三角形n”);else printf(“长度为abc的三条边不能构成直角三角形n”);} return 0;} 3.判断用户输入的字符是数字字符、字母字符还是其它字符。

4.从键盘输入3名学生的5门成绩,分别找出每个学生的最高成绩,用循环嵌套。5.编写函数,删除字符串中的所有数字字符。6.分别求出1-100之间奇数之和、偶数之和。7.输入三个不同的整数,输出三个整数中的最大数。#include int main(){ int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if(a>b&&a>c)printf(“最大值为%dn”,a);if(b>a&&b>c)printf(“最大值为%dn”,b);if(c>a&&c>b)printf(“最大值为%dn”,c);return 0;}

第五篇:C语言谭浩强第四版例题

例1.1 要求在屏幕上输入以下一行信息.This is a C program.编写程序: #include

// 这是编译预?处理命令 int main()

// 定义主函数

{

// 函数开始的标志

printf(“This is a C program.n”);

// 输出所指定的一行信息

return 0;

// 函数执行完毕时返回函数值0 }

例1.2 求两个整数之和.编写程序: #include

// 这是编译预处理命令

int main()

// 定义主函数 {

// 函数开始

int a,b,sum;

// 本行是程序的声明部分,定义a、b、sum为整型变量

a = 123;

// 对变量a赋值

b = 456;

// 对变量b赋值

sum = a + b;

// 进行a+b 的运算,并把结果存放在变量sum中

printf(“sum is %dn”,sum);

// 输出结果

return 0;

// 使函数返回值为0 }

// 函数结束

例1.3 求两个整数的较大者.编写程序: #include int main()

// 定义主函数 {

// 主函数体开始

int max(int x,int y);

// 对被调用函数max的声明

int a,b,c;

// 定义变量a,b,c scanf(“%d,%d”,&a,&b);

// 输入变量a和b的值

c = max(a,b);

// 调用max函数,将得到的值赋给c

printf(“max=%dn”,c);

// 输出c的值

return 0;

// 返回函数值为0 }

int max(int x,int y)

//定义max函数,函数值为整型, 形式参数x和y为整型

{ int z;

// max函数中的声明部分,定义本函数中用到的变量z为整型

if(x > y)z = x;else z = y;return(z);

//将z的值返回,通过max带回到调用函数的位置 } 例2.1 求1×2×3×4×5 编写程序: #include int main(){ int i,t;t=1;i=2;while(i<=5){

t=t*i;

i=i+1;} printf(“%dn”,t);return 0;} 例2.2 有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。编写程序:

例2.19 求 编写程序: #include int main(){

int sign=1;

double deno=2.0,sum=1.0,term;

// 定义deno,sum,term为双精度变量

while(deno<=100)

{

sign=-sign;

term=sign/deno;

sum=sum+term;

deno=deno+1;

}

printf(“%fn”,sum);

return 0;}

例3.1 有人用温度计测量出用华氏法表示的温度(如 F,今要求把它转换为以摄氏法表示的温度(如 C)。

编写程序: #include int main(){

float f,c;

// 定义f和c为单精度浮点型变量

f=64.;

// 指定f的值

c=(5.0/9)*(f-32);

// 利用公式计算c的值

printf(“f=%fnc=%fn”,f,c);

// 输出c的值

return 0;} 例3.2

计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1

(2)一年期定期,年利率为r2(3)存两次半年定期,年利率为r3

请分别计算出一年后按三种方法所得到的本息和。编写程序: #include int main(){

float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;

p1 = p0 *(1 + r1);

p2 = p0 *(1 + r2);

p3 = p0 *(1 + r3/2)*(1 + r3/2);

printf(“p1=%fnp2=%fnp3=%fn”,p1,p2,p3);

return 0;} 11111123499100例3.3 给定一个大写字母,要求用小写字母输出。编写程序: #include int main(){

char c1,c2;

c1='A';

// 将字符'A'的ASCII代码放到c1变量中

c2=c1+32;

// 得到字符'a'的ASCII代码,放在c2变量中

printf(“%cn”,c2);

// 输出c2的值,是一个字符

printf(“%dn”,c2);

// 输出c2的值,是字符'a'的ASCII代码

return 0;}

例3.10 改写例3.3程序,使之可以适用于任何大写字母.从键盘输入一个大写字母,在显示屏上显示对应的小写字母.编写程序: #include int main(){

char c1,c2;

c1=getchar();

// 从键盘读入一个字符,赋给字符变量c1

c2=c1+32;

// 得到字符'a'的ASCII代码,放在字符变量c2中

putchar(c2);

// 输出c2的值,是一个字符

putchar('n');

return 0;}

#include int main(){

char c1,c2;

c1=getchar();

// 从键盘读入一个大写字符,赋给字符变量c1

c2=c1+32;

// 得到对应的小写字符的ASCII代码,放在字符变量c2中 printf(“大写字母:%cn小写字母:%cn”,c1,c2);// 输出c1,c2的值---大小写字符

return 0;}

例3.4 给出三角形的三边长,求三角形面积。编写程序: #include #include int main(){

double a,b,c,s,area;

// 定义各变量,均为double型

a=3.67;

// 对边长a赋值

b=5.43;

// 对边长b赋值

c=6.21;

// 对边长c赋值

s=(a+b+c)/2;

// 计算s

area=sqrt(s*(s-a)*(s-b)*(s-c));

// 计算area

printf(“a=%ftb=%ft%fn”,a,b,c);

// 输出三边a,b,c的值

printf(“area=%fn”,area);

// 输出面积area的值

return 0;}

例3.5 求ax

2 bx

 c

0

方程的根。a、b、c由键盘输入

b ac

>0  4编写程序: #include #include

// 程序中要调用求平方根函数sqrt

int main()

{double a,b,c,disc,x1,x2,p,q;

// disc是判别式sqrt(b*b-4ac)

scanf(“%lf%lf%lf”,&a,&b,&c);

// 输入实型变量的值要用格式声明“%f”

disc=b*b-4*a*c;

if(disc<0)printf(“This equation hav't real rootsn”);

else

{ p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;x2=p-q;

// 求出方程的两个根

printf(“x1=%7.2fnx2=%7.2fn”,x1,x2);

// 输出方程的两个根

}

return 0;}

例3.6 用%f输出实数,只能得到6位小数.编写程序: #include int main(){double a=1.0;printf(“%fn”,a/3);return 0;} 例 3.7 float型数据的有效位数.编写程序: #include int main(){double a;a=10000/3.0;printf(“%fn”,a);return 0;}

例3.8 先后输出BOY三个字符。编写程序: #include int main(){

char a='B',b='O',c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar('n');

return 0;}

#include int main(){

char a,b,c;

a='B';b='O';c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar('n');

return 0;}

// 定义3个字符变量,并初始化

// 向显示器输出字符B

// 向显示器输出字符O

// 向显示器输出字符Y

// 向显示器输出一个换行符

// 定义3个字符变量

// 给3个字符变量赋值

// 向显示器输出字符B

// 向显示器输出字符O

// 向显示器输出字符Y

// 向显示器输出一个换行符

例3.9 从键盘输入BOY三个字符,然后把它们输出到屏幕。编写程序: #include int main()

{ char a,b,c;

// 定义字符变量a,b,c

a=getchar();

// 从键盘输入一个字符,送给字符变量a

b=getchar();

// 从键盘输入一个字符,送给字符变量b

c=getchar();

// 从键盘输入一个字符,送给字符变量c

putchar(a);

// 将变量a的值输出

putchar(b);

putchar(c);

putchar('n');

return 0;}

#include int main()

{

putchar(getchar());

putchar(getchar());

putchar(getchar());

putchar('n');

return 0;}

// 将变量a的值输出

// 将变量a的值输出

// 换行

// 将接收到的字符输出

// 将接收到的字符输出

// 将接收到的字符输出

例4.1 在例3.5的基础上对程序进行改进。题目要求是求

c

方程的根。axbx 02由键盘输入a,b,c。假设a,b,c的值任意,并不保证

b

4ac

0

。需要在程序中进行判别,如果

b 2

ac

0

,就计算并输出方程的两个实根, 4否则就输出“方程无实根”的信息。

编写程序: #include #include

// 程序中要调用求平方根函数sqrt

int main()

{double a,b,c,disc,x1,x2,p,q;

// disc是判别式sqrt(b*b-4ac)

scanf(“%lf%lf%lf”,&a,&b,&c);

// 输入双精度浮点型变量的值要用格式声明“%lf”

disc=b*b-4*a*c;

if(disc<0)printf(“This equation hav't real rootsn”);

else

{ p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;x2=p-q;

// 求出方程的两个根

printf(“real roots:nx1=%10.6fnx2=%10.6fn”,x1,x2);

// 输出方程的两个根

}

return 0;}

例4.2 输入两个实数,按代数值由小到大的顺序输出这两个数。编写程序: #include int main(){

float a,b,t;

scanf(“%f,%f”,&a,&b);

if(a>b)

{

t=a;

a=b;

b=t;

}

printf(“%5.2f,%5.2fn”,a,b);

return 0;}

例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。编写程序: #include int main(){

float a,b,c,t;

scanf(“%f,%f,%f”,&a,&b,&c);

if(a>b)

{

t=a;

a=b;

b=t;

}

// 实现a和b的互换

if(a>c)

{

t=a;

a=c;

c=t;

}

// 实现a和c的互换

if(b>c)

{

t=b;

b=c;

c=t;

}

// 实现b和c的互换

printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);

return 0;}

例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。编写程序: #include int main(){

char ch;

scanf(“%c”,&ch);

ch=(ch>='A' && ch<='Z')?(ch+32): ch;

printf(“%cn”,ch);

return 0;} 例4.5有一函数: 1(x0) y0(x0)1(x0)

编一程序,输入一个x值,要求输出相应的y值。编写程序: 程序1: #include int main(){

int x,y;

scanf(“%d”,&x);

if(x<0)

y=-1;

else

if(x==0)y=0;

else y=1;

printf(“x=%d,y=%dn”,x,y);

return 0;} 程序2: #include int main(){

int x,y;

scanf(“%d”,&x);

if(x>=0)

if(x>0)y=1;

else

y=0;

else

y=-1;

printf(“x=%d,y=%dn”,x,y);

return 0;}

例4.6 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为 60分以下。成绩的等级由键盘输入。编写程序: #include int main(){

char grade;

scanf(“%c”,&grade);

printf(“Your score:”);

switch(grade)

{ default: printf(“data error!n”);break;

case 'A': printf(“85~100n”);break;

case 'B': printf(“70~84n”);break;

case 'C': printf(“60~69n”);break;

case 'D': printf(“<60n”);break;

}

return 0;}

例4.7 编写程序,用switch语句处理菜单命令。

在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。

编写程序: #include int main(){

void action1(int,int),action2(int,int);

char ch;

int a=15,b=23;

ch=getchar();

switch(ch)

{

case 'a':

case 'A': action1(a,b);break;

case 'b':

case 'B': action2(a,b);break;

default: putchar('a');

}

return 0;}

void action1(int x,int y){

printf(“x+y=%dn”,x+y);}

void action2(int x,int y){

printf(“x*y=%dn”,x*y);}

例4.8 写一程序,判断某一年是否闰年。编写程序: 程序1: 程序2: #include

#include int main()

int main(){

{

int year,leap;

int year,leap;

scanf(“%d”,&year);

scanf(“%d”,&year);

if(year%4==0)

if(year%4!=0)

{

if(year%100==0)

{

if(year%400==0)

leap=1;

else

leap=0;

}

else

leap=1;

}

else

leap=0;

if(leap)

printf(“%d is ”,year);

else

printf(“%d is not ”,year);

printf(“a leap year.n”);

return 0;

}

leap=0;

else if(year%100!=0)

leap=1;

else if(year%400!=0)

leap=0;else

leap=1;if(leap)

printf(“%d is ”,year);else

printf(“%d is not ”,year);printf(“a leap year.n”);return 0;}

#include

程序3: int main(){

int year,leap;

printf(“enter year:”);

scanf(“%d”,&year);

if((year%4==0 && year%100!=0)||(year%400==0))

leap=1;

else

leap=0;

if(leap)

printf(“%d is ”,year);

else

printf(“%d is not ”,year);

printf(“a leap year.n”);

return 0;}

程序4: #include

#include int main(){

int year;

bool leap;

scanf(“%d”,&year);

if(year%4==0)

{

if(year%100==0){

if(year%400==0)

leap=true;

else

leap=false;}

else

leap=true;

}

else

leap=false;

if(leap==true)

printf(“%d is ”,year);

else

printf(“%d is not ”,year);

printf(“a leap year.n”);

return 0;

} 例4.9 求 ax

c 

0

方程的解。bx编写程序: #include #include int main(){

double a,b,c,disc,x1,x2,realpart,imagpart;

scanf(“%lf,%lf,%lf”,&a,&b,&c);

printf(“The equation ”);

if(fabs(a)<=1e-6)

printf(“is not a quadraticn”);

else

{

disc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf(“has two equal roots:%8.4fn”,-b/(2*a));

else

if(disc>1e-6)

{

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf(“has distinct real roots:%8.4f and %8.4fn”,x1,x2);

}

else

{

realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf(“ has complex roots:n”);

printf(“%8.4f+%8.4fin”,realpart,imagpart);

printf(“%8.4f-%8.4fin”,realpart,imagpart);

}

}

return 0;}

例4.10 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。编写程序: #include int main(){

int c,s;

float p,w,d,f;

printf(“please enter price,weight,discount:”);

// 提示输入的数据

scanf(“%f,%f,%d”,&p,&w,&s);

// 输入单价、重量、距离

if(s>=3000)c=12;

else

c=s/250;

switch(c)

{

case 0:

d=0;break;

case 1:

d=2;break;

case 2:

case 3:

d=5;break;

case 4:

case 5:

case 6:

case 7:

d=8;break;

case 8:

case 9:

case 10:

case 11: d=10;break;

case 12: d=15;break;

}

f = p * w * s *(1-d / 100);

printf(“freight=%10.2fn”,f);

return 0;}

// 3000km以上为同一折扣

// 3000km以下各段折扣不同,c的值不相同

// c=0,代表250km以下,折扣d=0

// c=1,代表250到500km以下,折扣d=2% // c=2和3,代表500到1000km以下,折扣d=5% // c=4-7,代表1000到2000km以下,折扣d=8% // c=8-11,代表2000到3000km以下,折扣d=10% // c12,代表3000km以上,折扣d=15% // 计算总运费

// 输出总运费,取两位小数

例5.1求1+2+3+„+100,即 n1编写程序:

#include int main(){

int i=1,sum=0;

// 定义变量i的初值为1,sum的初值为0

while(i<=100)

// 当i>100,条件表达式i<=100的值为假,不执行循环体

{

// 循环体开始

sum=sum+i;

// 第一次累加后,sum的值为1

n100

i++;

}

printf(“sum=%dn”,sum);

return 0;}

例5.2 用do…while语句求:编写程序:

#include int main(){ int i=1,sum=0;do

{

sum=sum+i;

i++;}while(i<=100);printf(“%dn”,sum);return 0;}

// 加完后,i的值加1,为下次累加作准备

// 循环体结束

// 输出1+2+3„+100的累加和 1001+2+3+…+100,即 nn例5.3 while和do---while循环的比较。编写程序:

(1)用while循环 #include int main(){ int i,sum=0;printf(“please enter i,i=?”);scanf(“%d”,&i);while(i<=10)

{

sum=sum+i;

i++;};printf(“sum=%dn”,sum);return 0;}

(2)用do„while循环 #include int main(){ int i,sum=0;printf(“please enter i,i=?”);scanf(“%d”,&i);do

{

sum=sum+i;

i++;}while(i<=10);printf(“sum=%dn”,sum);return 0;}

例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。编写程序:

#include #define SUM 100000 int main(){

float amount,aver,total;

int i;

for(i=1,total=0;i<=1000;i++)

{

printf(“please enter amount:”);

scanf(“%f”,&amount);

total= total+amount;

if(total>=SUM)break;

}

aver=total/i;

printf(“num=%dnaver=%10.2fn”,i,aver);

return 0;}

例5.5 要求输出100~200之间的不能被3整除的数。编写程序:

#include int main(){int n;for(n=100;n<=200;n++)

{if(n%3==0)

continue;

printf(“%d ”,n);

} printf(“n”);return 0;}

例5.6 输出以下4*5的矩阵。编写程序:

#include int main(){

int i,j,n=0;

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

for(j=1;j<=5;j++,n++){ if(n%5==0)printf(“n”);

//控制在输出5个数据后换行

printf(“%dt”,i*j);}

printf(“n”);

return 0;} #include int main(){

int i,j,n=0;

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

for(j=1;j<=5;j++,n++){ if(n%5==0)printf(“n”);

//控制在输出5个数据后换行

if(i==3 && j==1)break;

//遇到第3行第1列,终止内循环

printf(“%dt”,i*j);}

printf(“n”);

return 0;} #include int main(){

int i,j,n=0;

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

for(j=1;j<=5;j++,n++){ if(n%5==0)printf(“n”);

//控制在输出5个数据后换行

if(i==3 && j==1)continue;

//遇到第3行第1列,提前结束执行本次内循环体

printf(“%dt”,i*j);}

printf(“n”);

return 0;} 1111例5.7用

47公式求 

的近似值,直到发现某一项的绝对值小于510*6 为止(该项不累计加)。编写程序:

#include #include int main(){

int sign=1;

// sign用来表示数值的符号

double pi=0.0,n=1.0,term=1.0;

// pi代表π,n代表分母,term代表当前项的值

while(fabs(term)>=1e-8)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{

pi=pi+term;

// 把当前项term累加到pi中

n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

term=sign/n;

// 求出下一项的值term

}

pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(“pi=%10.8fn”,pi);

// 输出π的近似值

}

#include #include int main(){

int sign=1;

// sign用来表示数值的符号

int t=0;

// t 代表当前执行循环体的次数

double pi=0.0,n=1.0,term=1.0;// pi代表π,n代表分母,term代表当前项的值

while(fabs(term)>=1e-6)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{t=t+1;

// 每进入一次循环体,t的值加1

pi=pi+term;

// 把当前项term累加到pi中

n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

term=sign/n;

// 求出下一项的值term

}

pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(“pi=%10.6fn”,pi);

// 输出π的近似值

}

例5.8 求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即:(n1)F11(n2)F21 FFF(n3)n1n2n

编写程序:

#include int main(){

int f1=1,f2=1,f3;

int i;

printf(“%12dn%12dn”,f1,f2);

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

{

f3=f1+f2;

printf(“%12dn”,f3);

f1=f2;

f2=f3;} return 0;}

#include int main(){

int f1=1,f2=1;

int i;

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

{

printf(“%12d %12d ”,f1,f2);

if(i%2==0)printf(“n”);

f1=f1+f2;

f2=f2+f1;

}

return 0;}

// 每个循环中输出2个月的数据,故循环20次即可 // 输出己知的两个月的兔子数 // 计算出下一个月的兔子数,并存放在f1中 // 计算出下两个月的兔子数,并存放在f2中

例5.9输入一个大于3的整数n,判定它是否素数(prime,又称质数)。编写程序:

#include int main(){int n,i;

printf(“please enter a integer number,n=?”);

scanf(“%d”,&n);

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

if(n%i==0)break;

if(i

else printf(“%d is a prime number.n”,n);

return 0;} #include #include int main(){int n,i,k;

printf(“please enter a integer number:n=?”);

scanf(“%d”,&n);

k=sqrt(n);

for(i=2;i<=k;i++)

if(n%i==0)break;

if(i<=k)printf(“%d is not a prime number.n”,n);

else printf(“%d is a prime number.n”,n);

return 0;} 例5.10 求100~200间的全部素数。编写程序:

# include # include int main(){int n,k,i,m=0;

for(n=101;n<=200;n=n+2)

// n从100变化到200,对每个n进行判定

{ k=sqrt(n);

for(i=2;i<=k;i++)

if(n%i==0)break;

// 如果n被i整除,终止内循环,此时i

if(i>=k+1)

// 若j>=k+1,表示n未被整除

{printf(“%d ”,n);

// 应确定n是素数

m=m+1;

// m用来控制换行,一行内输出10个录素数

}

if(m%10==0)printf(“n”);

// m累计到10的倍数,换行

}

printf(“n”);

return 0;

} 例5.11 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。

A B C D E F G …… W X Y Z

编写程序:

#include int main(){char c;

c=getchar();

// 输入一个字符给字符变量c

while(c!='n')

// 检查c的值是否换行符'n'

{if((c>='a' && c<='z')||(c>='A' && c<='Z'))

// c如果是字母

{ if(c>='W' && c<='Z' || c>='w' && c<='z')c=c-22;

// 如果是26个字母中最后4个字母之一

else c=c+4;

// 如果是前面22个字母之一,就使c加4,即变成其后第4个字母

}

printf(“%c”,c);

// 输出己改变的字符

c=getchar();

// 再输入下一个字符给字符变量c

}

printf(“n”);

return 0;}

#include int main(){char c;

while((c=getchar())!='n')

// 输入一个字符给字符变量c并检查它c的值是否换行符

{if((c>='A' && c<='Z')||(c>='a' && c<='z'))

// c如果是字母

{ c=c+4;

// 只要是字母,都先加4

if(c>='Z' && c<='Z'+4 || c>'z')

// 如果是26个字母中最后4个字母之一

c=c-26;

// c的值改变为26个字母中最前面的4个字母中对应的字母

}

printf(“%c”,c);

// 输出己改变的字符

}

printf(“n”);

return 0;}

例6.1 对10个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。编写程序:

#include int main(){

int i,a[10];

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

a[i]=i;

for(i=9;i>=0;i--)

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

printf(“n”);

return 0;}

例6.2 用数组处理求Fibonacci数列问题 编写程序:

#include int main(){

int i;

int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1];

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

{

if(i%5==0)printf(“n”);

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

}

printf(“n”);

return 0;}

例6.3 有10个地区的面积,要求对它们按由小到大的顺序排列。编写程序:

#include int main(){

int a[10];

int i,j,t;

printf(“input 10 numbers :n”);

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

scanf(“%d”,&a[i]);

printf(“n”);

for(j=0;j<9;j++)

for(i=0;i<9-j;i++)

if(a[i]>a[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf(“the sorted numbers :n”);

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

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

printf(“n”);

return 0;}

// 进行9次循环,实现9趟比较// 在每一趟中进行9-j次比较

// 相邻两个数比较

例6.4 将一个二维数组行和列的元素互换,存到另一个二维数组中。

14123a456

编写程序:

#include int main(){

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

int b[3][2],i,j;

printf(“array a:n”);

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

{

for(j=0;j<=2;j++)

{

printf(“%5d”,a[i][j]);

b[j][i]=a[i][j];

}

printf(“n”);

}

printf(“array b:n”);

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

{

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

printf(“%5d”,b[i][j]);

printf(“n”);

}

return 0;}

b2536例6.5 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。编写程序:

#include int main(){int i,j,row=0,colum=0,max;

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

// 定义数组并赋初值

max=a[0][0];

// 先认为a[0][0]最大

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

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

if(a[i][j]>max)

// 如果某元素大于max,就取代max的原值

{max=a[i][j];

row=i;

// 记下此元素的行号

colum=j;

// 记下此元素的列号

}

printf(“max=%dnrow=%dncolum=%dn”,max,row,colum);

return 0;}

例6.6 输出一个已知的字符串。编写程序:

#include int main(){char c[15]={'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};

int i;

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

printf(“%c”,c[i]);

printf(“n”);

return 0;}

例6.7 输出一个菱形图。编写程序:

#include int main(){char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};

int i,j;

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

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

printf(“%c”,diamond[i][j]);

printf(“n”);

}

return 0;} 例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。编写程序:

#include int main()

{

char string[81];

int i,num=0,word=0;

char c;

gets(string);

// 输入一个字符串给字符数组string

for(i=0;(c=string[i])!='';i++)

// 只要字符不是''就继续执行循环

if(c==' ')word=0;

// 如果是空格字符,使word置0

else if(word==0)

// 如果不是空格字符且word原值为0

{word=1;

// 使word置1

num++;

// num累加1,表示增加一个单词

}

printf(“There are %d words in this line.n”,num);

//输出结果

return 0;}

例6.9 有3个字符串,要求找出其中最大者。编写程序: #include #include int main(){

char str[3][20];

// 定义二维字符数组

char string[20];

// 定义一维字符数组,作为交换字符串时的临时字符数组

int i;

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

gets(str[i]);

// 读入3个字符串,分别给str[0],str[1],str[2]

if(strcmp(str[0],str[1])>0)

// 若str[0]大于str[1]

strcpy(string,str[0]);

// 把str[0]的字符串赋给字符数组string

else

// 若str[0]小于等于str[1]

strcpy(string,str[1]);

// 把str[1]的字符串赋给字符数组string

if(strcmp(str[2],string)>0)

// 若str[2]大于string

strcpy(string,str[2]);

// 把str[2]的字符串赋给字符数组string

printf(“nthe largest string is:n%sn”,string);

// 输出string

return 0;}

例7.1 输出以下的结果,用函数调用实现。

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

How do you do!

****************** 编写程序:

#include int main(){void printstar();

void print_message();

printstar();

print_message();

printstar();

return 0;} void printstar()

{ printf(“******************n”);} void print_message()

{printf(“ How do you do!n”);}

例7.2 输入两个整数,要求输出其中值较大者。要求用函数来找到大数。编写程序:

#include int main(){ int max(int x,int y);

int a,b,c;

printf(“please enter two integer numbers:”);

scanf(“%d,%d”,&a,&b);

c=max(a,b);

printf(“max is %dn”,c);}

int max(int x,int y)

// 定义max函数 {

int z;

// 定义临时变量

z=x>y?x:y;

// 把x和y中大者赋给z

return(z);

// 把z作为max函数的伦值带回main函数 } 例7.3将例7.2稍作改动,将在max函数中定义的变量z改为float型。函数返回值的类型与指定的函数类型不同,分析其处理方法。编写程序:

#include int main(){int max(float x,float y);

float a,b;

int c;

scanf(“%f,%f,”,&a,&b);

c=max(a,b);

printf(“max is %dn”,c);

return 0;} int max(float x,float y){float z;

z=x>y?x:y;

return(z);}

例7.4 输入两个实数,用一个函数求出它们之和。编写程序: 程序1:

#include int main(){float add(float x, float y);

float a,b,c;printf(“Please enter a and b:”);scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);return 0;}

float add(float x,float y)

{float z;

z=x+y;

return(z);}

程序2:

#include float add(float x,float y)

{float z;

z=x+y;

return(z);}

void main(){ float a,b,c;printf(“Please enter a and b:”);scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);}

例7.5 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。编写程序: 程序1:

#include int main(){ int max4(int a,int b,int c,int d);

// 对max4的函数声明

int a,b,c,d,max;

printf(“Please enter 4 interger numbers:”);

// 提示输入4个数

scanf(“%d %d %d %d”,&a,&b,&c,&d);

// 输入4个数

max=max4(a,b,c,d);

// 调用max4函数,得到4个数中的最大者

printf(“max=%d n”,max);

// 输出4个数中的最大者

return 0;}

int max4(int a,int b,int c,int d)

// 定义max4函数

{int max2(int a,int b);

// 对max2的函数声明

int m;

m=max2(a,b);

// 调用max2函数,得到a和b两个数中的大者,放在m中

m=max2(m,c);

// 调用max2函数,得到a,b,c三个数中的大者,放在m中

m=max2(m,d);

// 调用max2函数,得到a,b,c,d四个数中的大者,放在m中

return(m);

// 把m作为函数值带回main函数 } int max2(int a,int b)

// 定义max2函数

{if(a>=b)

return a;

// 若a>=b,将a为函数返回值

else

return b;

// 若a

程序4: #include void main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(“Please enter 4 interger numbers:”);

scanf(“%d %d %d %d”,&a,&b,&c,&d);

max=max4(a,b,c,d);

printf(“max=%d n”,max);}

int max4(int a,int b,int c,int d){int max2(int a,int b);return max2(max2(max2(a,b),c),d);

} int max2(int a,int b){ return(a>b?a:b);

} 程序2:

#include int main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(“Please enter 4 interger numbers:”);

scanf(“%d %d %d %d”,&a,&b,&c,&d);

max=max4(a,b,c,d);

printf(“max=%d n”,max);

return 0;}

int max4(int a,int b,int c,int d){int max2(int a,int b);int m;

m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);} int max2(int a,int b){

return(a>b?a:b);} 程序3:

#include void main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(“Please enter 4 interger numbers:”);

scanf(“%d %d %d %d”,&a,&b,&c,&d);

max=max4(a,b,c,d);

printf(“max=%d n”,max);}

int max4(int a,int b,int c,int d){int max2(int a,int b);int m;

m=max2(max2(max2(a,b),c),d);

/* 仔细分析此行 */ return(m);} int max2(int a,int b){ return(a>b?a:b);

} 程序4:

#include void main(){ int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf(“Please enter 4 interger numbers:”);

scanf(“%d %d %d %d”,&a,&b,&c,&d);

max=max4(a,b,c,d);

printf(“max=%d n”,max);}

int max4(int a,int b,int c,int d){int max2(int a,int b);return max2(max2(max2(a,b),c),d);

} int max2(int a,int b){ return(a>b?a:b);

} 例7.6 有5个学生坐在一起

 问第5个学生多少岁?他说比第4个学生大2岁  问第4个学生岁数,他说比第3个学生大2岁  问第3个学生,又说比第2个学生大2岁  问第2个学生,说比第1个学生大2岁  最后问第1个学生,他说是10岁  请问第5个学生多大

编写程序:

#include int main(){ int age(int n);

printf(“NO.5,age:%dn”,age(5));

//输出第5人的年龄

return 0;}

int age(int n)

//定义递归函数

{int c;

if(n==1)

// 如果n等于1

c=10;

// 年龄为10

else

// 如果n不等于1

c=age(n-1)+2;

// 年龄是前一人的年龄加2(如第4人年龄是第3人年龄加2)

return(c);

// 返回年龄 }

例7.7 用递归方法求n!。编写程序:

#include int main(){ int fac(int n);

int n;

int y;

printf(“input an integer number:”);

scanf(“%d”,&n);

y=fac(n);

printf(“%lld!=%dn”,n,y);

return 0;} int fac(int n){

int f;

if(n<0)

printf(“n<0,data error!”);

else if(n==0||n==1)

f=1;

else f=fac(n-1)*n;

return(f);}

例7.8 Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动一盘子的步骤。编写程序:

#include int main(){

void hanoi(int n,char one,char two,char three);

// 对hanoi函数的声明

int m;

printf(“input the number of diskes:”);

scanf(“%d”,&m);

printf(“The step to move %d diskes:n”,m);

hanoi(m,'A','B','C');} void hanoi(int n,char one,char two,char three)

// 定义hanoi函数

// 将n个盘从one座借助two座,移到three座

{

void move(char x,char y);

// 对move函数的声明

if(n==1)

move(one,three);

else

{

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

} }

void move(char x,char y)

// 定义move函数

{

printf(“%c-->%cn”,x,y);}

例7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。编写程序:

#include int main()

{int max(int x,int y);

int a[10],m,n,i;

printf(“enter 10 integer numbers:”);

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

scanf(“%d”,&a[i]);

printf(“n”);

for(i=1,m=a[0],n=0;i<10;i++)

{ if(max(m,a[i])>m)

// 若max函数返回的值大于m

{m=max(m,a[i]);

// max函数返回的值取代m原值

n=i;

// 把此数组元素的序号记下来,放在n中

}

}

printf(“The largest number is %dnit is the %dth number.n”,m,n+1);

} int max(int x,int y)

{ return(x>y?x:y);} 例7.10 有一个一维数组score,内放10个学生成绩,求平均成绩。编写程序:

#include int main(){ float average(float array[10]);

// 函数声明

float score[10],aver;

int i;

printf(“input 10 scores:n”);

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

scanf(“%f”,&score[i]);

printf(“n”);

aver=average(score);

// 调用average函数

printf(“average score is %5.2fn”,aver);

return 0;}

float average(float array[10])

// 定义average函数

{int i;

float aver,sum=array[0];

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

sum=sum+array[i];

// 累加学生成绩

aver=sum/10;

return(aver);} 例7.11 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。编写程序:

#include int main(){float average(float array[ ],int n);float score1[5]={98.5,97,91.5,60,55};float score2[10]={67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5};printf(“The average of class A is %6.2fn”,average(score1,5));printf(“The average of class B is %6.2fn”,average(score2,10));return 0;} float average(float array[ ],int n){int i;

float aver,sum=array[0];

for(i=1;i

sum=sum+array[i];

aver=sum/n;

return(aver);}

例7.12用选择法对数组中10个整数按由小到大排序。编写程序:

#include int main(){void sort(int array[],int n);int a[10],i;printf(“enter array:n”);for(i=0;i<10;i++)

scanf(“%d”,&a[i]);sort(a,10);printf(“The sorted array:n”);for(i=0;i<10;i++)

printf(“%d ”,a[i]);printf(“n”);return 0;}

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

for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;} } 例7.13 有一个3×4的矩阵,求所有元素中的最大值。编写程序:

#include int main(){ int max_value(int array[][4]);

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

printf(“Max value is %dn”,max_value(a));

return 0;} int max_value(int array[][4]){int i,j,max;max=array[0][0];for(i=0;i<3;i++)

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

if(array[i][j]>max)max=array[i][j];return(max);} 例7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。编写程序:

#include float Max=0,Min=0;

// 定义全局变量Max,Min int main(){ float average(float array[ ],int n);

float ave,score[10];

int i;

printf(“Please enter 10 scores:”);

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

scanf(“%f”,&score[i]);

ave=average(score,10);

printf(“max=%6.2fnmin=%6.2fnaverage=%6.2fn”,Max,Min,ave);

return 0;} float average(float array[ ],int n)

// 定义函数,有一形参是数组

{int i;

float aver,sum=array[0];

Max=Min=array[0];

for(i=1;i

{if(array[i]>Max)Max=array[i];

else if(array[i]

sum=sum+array[i];

}

aver=sum/n;

return(aver);} 例7.15 若外部变量与局部变量同名,分析结果。编写程序:

#include int a=3,b=5;

// a,b是全局变量 int main(){ int max(int a,int b);

// 函数声明。a,b是形参

int a=8;

// a是局局部变量

printf(“max=%dn”,max(a,b));

// 变量a是函数中定义的局部变量a return 0;}

int max(int a,int b)

// a,b是函数形参

{ int c;c=a>b?a:b;

// 把a和b中的大者存放在c中

return(c);} 例7.16 考察静态局部变量的值。编写程序:

#include int main(){ int f(int);int a=2,i;for(i=0;i<3;i++)

printf(“%dn”,f(a));return 0;} int f(int a){ auto int b=0;

static c=3;

b=b+1;

c=c+1;

return(a+b+c);} 例7.17 输出1到5的阶乘值。编写程序:

#include int main(){ int fac(int n);int i;for(i=1;i<=5;i++)

printf(“%d!=%dn”,i,fac(i));return 0;} int fac(int n){ static int f=1;

f=f*n;

return(f);}

例7.18 调用函数,求3个整数中的大者。编写程序:

#include int main(){int max();

extern int A,B,C;

// 把外部变量A,B,C的作用域扩展到从此处开始

printf(“Please enter three integer numbers:”);scanf(“%d %d %d”,&A,&B,&C);printf(“max is %dn”,max());return 0;} int A ,B ,C;

// 定义外部变量A,B,C

int max()

{int m;m=A>B?A:B;if(C>m)m=C;return(m);} 例7.19 给定b的值,输入a和m,求a*b和am的值。编写程序: 文件file1.c #include int A;

int main()

{int power(int);

int b=3,c,d,m;

printf(“enter the number a and its power m:n”);

scanf(“%d,%d”,&A,&m);

c=A*b;

printf(“%d*%d=%dn”,A,b,c);

d=power(m);

printf(“%d**%d=%dn”,A,m,d);

return 0;}

文件file2.c extern A;int power(int n){int i,y=1;

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

y*=A;

return(y);} 例7.20 有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。编写程序:

file1.c(文件1)#include int main(){extern void enter_string(char str[]);extern void delete_string(char str[],char ch);extern void print_string(char str[]);

// 以上3行声明在本函数中将要调用的已在其他文件中定义的3个函数

char c,str[80];enter_string(str);

// 调用在其他文件中定义的enter_string函数

scanf(“%c”,&c);delete_string(str,c);

// 调用在其他文件中定义的delete_string函数

print_string(str);

// 调用在其他文件中定义的print_string函数

return 0;

}

file2.c(文件2)//#include void enter_string(char str[80]){

gets(str);

}

file3.c(文件3)//#include void delete_string(char str[],char ch){int i,j;for(i=j=0;str[i]!='';i++)

if(str[i]!=ch)

str[j++]=str[i];str[j]='';}

file4.c(文件4)//#include void print_string(char str[]){ printf(“%sn”,str);}

例8.1 通过指针变量访问整型变量。编写程序:

#include int main(){ int a=100,b=10;

// 定义整型变量a,b,并初始化

int *pointer_1, *pointer_2;

// 定义指向整型数据的指针变量pointer_1, pointer_2

pointer_1=&a;

// 把变量a的地址赋给指针变量pointer_1

pointer_2=&b;

// 把变量b的地址赋给指针变量pointer_2

printf(“a=%d,b=%dn”,a,b);

// 输出变量a和b的值

printf(“*pointer_1=%d,*pointer_2=%dn”,*pointer_1,*pointer_2);

return 0;}

例8.2 输入a和b两个整数,按先大后小的顺序输出a和b。编写程序:

#include int main(){ int *p1,*p2,*p,a,b;

printf(“please enter two integer numbers:”);

scanf(“%d,%d”,&a,&b);

// 输入两个整数

p1=&a;

// 使p1指向变量a

p2=&b;

// 使p2指向变量b

if(a

// 如果a

{p=p1;p1=p2;p2=p;}

// 使p1与p2的值互换

printf(“a=%d,b=%dn”,a,b);

// 输出a,b

printf(“max=%d,min=%dn”,*p1,*p2);

// 输出p1和p2所指向的变量的值

return 0;}

例8.3 题目要求同例8.2,即对输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。编写程序:

#include int main(){void swap(int *p1,int *p2);

int a,b;

int*pointer_1,*pointer_2;

printf(“please enter a and b:”);

scanf(“%d,%d”,&a,&b);

pointer_1=&a;

pointer_2=&b;

if(a

printf(“max=%d,min=%dn”,a,b);

return 0;}

void swap(int *p1,int *p2){int temp;

temp=*p1;

*p1=*p2;

*p2=temp;} 例8.4 对输入的两个整数按大小顺序输出。编写程序:

#include int main(){void swap(int *p1,int *p2);

int a,b;

int*pointer_1,*pointer_2;

printf(“please enter two integer numbers:”);

scanf(“%d,%d”,&a,&b);

pointer_1=&a;

pointer_2=&b;

if(a

printf(“max=%d,min=%dn”,a,b);

return 0;}

void swap(int *p1,int *p2){int *p;

p=p1;

p1=p2;

p2=p;} 例8.5 输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。编写程序:

#include int main(){ void exchange(int *q1, int *q2, int *q3);

// 函数声明

int a,b,c,*p1,*p2,*p3;

printf(“please enter three numbers:”);

scanf(“%d,%d,%d”,&a,&b,&c);

p1=&a;p2=&b;p3=&c;

exchange(p1,p2,p3);

printf(“The order is:%d,%d,%dn”,a,b,c);

return 0;}

void exchange(int *q1, int *q2, int *q3)

// 定义将3个变量的值交换的函数

{void swap(int *pt1, int *pt2);

// 函数声明

if(*q1<*q2)swap(q1,q2);

// 如果a

if(*q1<*q3)swap(q1,q3);

// 如果a

if(*q2<*q3)swap(q2,q3);

// 如果b

}

void swap(int *pt1, int *pt2)

// 定义交换2个变量的值的函数

{int temp;

temp=*pt1;

// 换*pt1和*pt2变量的值

*pt1=*pt2;

*pt2=temp;}

例8.6 有一个整型数组a,有10个元素,要求输出数组中的全部元素。编写程序:(1)下标法。#include int main(){int a[10];

int i;

printf(“please enter 10 integer numbers:”);

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

scanf(“%d”,&a[i]);

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

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

printf(“%n”);

return 0;}(2)通过数组名计算数组元素地址,找出元素的值 #include int main(){int a[10];

int i;

printf(“please enter 10 integer numbers:”);

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

scanf(“%d”,&a[i]);

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

printf(“%d ”,*(a+i));

//通过故数组名和元素序号计算元素地址,再找到该元素

printf(“n”);

return 0;}(3)用指针变量指向数组元素

#include int main(){int a[10];

int *p,i;

printf(“please enter 10 integer numbers:”);

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

scanf(“%d”,&a[i]);

for(p=a;p<(a+10);p++)

printf(“%d ”,*p);

// 用指针指向当前的数组元素

printf(“n”);

return 0;}

例8.7 通过指针变量输出整型数组a的10个元素。编写程序:

#include int main(){ int *p,i,a[10];

p=a;

printf(“please enter 10 numbers:”);

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

scanf(“%d”,p++);

for(i=0;i<10;i++,p++)

printf(“%d ”,*p);

printf(“n”);

return 0;}

#include int main(){ int i,a[10],*p=a;

printf(“please enter 10 integer numbers:”);

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

scanf(“%d”,p++);

p=a;

for(i=0;i<10;i++,p++)

printf(“%d ”,*p);

printf(“n”);

return 0;}

例8.8 将数组a中n个整数按相反顺序存放 编写程序:

#include int main(){void inv(int x[ ],int n);int i,a[10]={3,7,9,11,0,6,7,5,4,2};printf(“The original array:n”);for(i=0;i<10;i++)

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

// 输出未交换时数组各元素的值

printf(“n”);inv(a,10);

printf(“The array has been inverted:n”);for(i=0;i<10;i++)

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

printf(“n”);return 0;}

void inv(int x[ ],int n)

{int temp,i,j,m=(n-1)/2;

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

{j=n-1-i;

temp=x[i];x[i]=x[j];x[j]=temp;

}

return 0;}

// 调用inv函数,进行交换 // 输出交换后数组各元素的值 // 形参x是蚊数组名

// 把x[i]和x[j]交换

下载C语言程序设计谭浩强重点笔记word格式文档
下载C语言程序设计谭浩强重点笔记.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    谭浩强C语言第八章答案.doc(范文模版)

    8.1 # include int yueshu(int m,int n); int beishu(int m,int n); int main { int a,b,Y,B; printf("输入两个数字:n"); scanf("%d%d",&a,&b); Y=yueshu(a,b); B=beis......

    C语言程序设计教程第二版答案 高教版 谭浩强 张基温(五篇材料)

    C语言程序设计教程第二版 高等教育出版社 谭浩强 张基温 唐永炎 等 第1章 1.1 请叙述什么是高级语言? 高级语言主要是指和机器硬件环境无关的程序设计语言。 1.2 什么是过......

    《C++面向对象程序设计》谭浩强版复习总结

    第一章 C++ 基础 endl 换行并刷新输出流 setw(n) 设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符 setprecision 定义浮点数的精度 left,r......

    C语言程序设计

    1. Problem A: Hello world! Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。 Input 无 Output 请输出: Hello Da_min, He......

    C 语言程序设计

    《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业......

    《C程序设计》重点总结

    Ainy晴 C語言 最後加粗一下重點! 第二章 算法 1.計算計算法分兩類: 數值運算算法:求數值解 非數值運算算法:排序、檢索、管理 2.算法特性:有窮性、確定性、零或多輸入、一或多輸......

    《C程序设计》重点总结

    C语言 最后加粗一下重点! 第二章 算法 1.计算计算法分两类: 数值运算算法:求数值解 非数值运算算法:排序、检索、管理 2.算法特性:有穷性、确定性、零或多输入、一或多输出、有......

    经典C语言程序设计例题

    经典C语言程序设计例题 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组......