admin管理员组

文章数量:1531341

2023年12月26日发(作者:)

第一章 C语言概述

1.1、选择题

(1)一个C语言程序是由()组成。

A. 一个主程序及若干个子程序 B. 一个主程序

C. 一个主函数及若干个子函数 D. 一个主函数

(2) 一个C语言程序总是从()开始执行。

A. 主过程 B. 主函数

C. 子程序 D. 主程序

(3) main函数在源程序中的位置()。

A. 必须在最开始 B. 必须在子函数的后面

C. 可以任意 D. 必须在最后

(4) 一个C程序的执行是从()。

A. 本程序的第一个函数开始,到最后一个函数结束

B. 本程序的main函数开始,到最后一个函数结束

C. 本程序的main函数开始,通常也在main函数结束

D. 本程序的第一个函数开始,到main函数结束

(5) 以下叙述不正确的是()。

A. 一个C程序可由一个或多个函数组成

B. 一个C程序必须包含一个main函数

C. 在C程序中,注释只能位于一条语句的最后面

D. C程序的基本组成单位是函数

1.2、编程题

(1)参照本章例题,编程输出如下信息:

**********

Very good!

**********

(2)编写一个C程序,输出以下信息:

*****

*Turbo C *

* * * * *

1.3 请根据自己的认识,写出C语言的主要特点。

1.4 简述C程序主要由哪些部分构成?

1.5 用户编写的C程序上机运行要经过哪些步骤?

第二章 基本数据类型和表达式

2.1 单项选择题

(1) 以下不能用作变量名的是()

A)_26 B)case C)scanf D)Double

(2) 以下合法的八进制数是()

A)0135 B)068 C)013.45 D)o7

(3) 若变量已正确定义,以下非法的表达式是()

A)a/=b+c B)a%(4.0) C)a=1/2*(x=y=20,x*3) D)a=b=c

(4) 设x为int类型,其值为11,则表达式:(x++*1/3)的值是()

A)3 B)4 C)11 D)12

(5) 若题中各变量已正确定义并赋值,下面符合C语法的表达式是()

A)a%=7.6; B)a++,a=7+b+c C)int(12.3)%4 D)a=c+b=a+7

(6) 设k和x均为int型变量,且k=7,x=12,则能使值为3的表达式是()

A)x%=k%=5 B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)- (k%=5)

(7) 能正确表示数学公式|sin(x)|,的C语言表达式是()

A)sqrt(abs(sin(x*π/180)))

C)sqrt(sin(x))

B)sqrt(abs(sin(x*3.14/180)))

D)sqrt (fabs (sin(x*3.14/180)))

x(8) 以下变量x、y、z均为double型且已正确赋值,不能正确表示代数式yz的C语言表达式是()

A)x/y*z B)x*(1/(y*z)) C)x/y*1/z D)x/y/z

(9) 以下叙述中正确的是()

A) A)C程序中,赋值运算符的优先级最低。

B) B)若a是浮点型变量,C程序中允许进行以下赋值:a=10,因此,浮点型变量中允许存放整型数。

C) C)若a和b类型相同,在执行了赋值a=b后b中的值将放入a中,b中的值将丢失。

D) D)在C程序中,除号运算符“/”两边的类型相同时才能进行相除运算。

(10))有以下程序:

#include

void main(void)

{int k=2,i=2,m;

m=(k+=j*=k++); printf(" %d , %dn ", m , j);

}

执行后的输出结果是()

A)8,6 B)8,3 C)6,4 D)7,4

(11)有以下程序:

#include

void main(void)

{unsigned a=32768;int b;

b=a;

printf("b=%dn" , b);

}

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

A)b=32768 B)b=32767 C)b=-32768 D)b=-1

(12)有以下程序段:

int a=1234;

printf("%2dn",a);

其输出结果是()

A)12 B)34 C)1234 D)输出宽度不足,无结果

(13)已有定义和语句:double a,b,c;

scanf(" %lf%lf%lf ",&a,&b,&c);

要求给a、b、c分别输入10.0、20.0、30.0,不正确的输入形式是()

A)10.0↙ B)10.0↙ C)10 20↙ D)10.0,20.0,30.0↙

20.0↙ 20 30↙ 30.0↙

30.0↙

(14)已有定义语句:int x=3,y=4,z=5; ,则值为0的表达式是()

A)x>y++ B)x<=++y C)x!=y+z>y-z D)y%z>=y-z

(15)x为奇数时值为“真”,x为偶数时值为“假”的表达式是()

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

(16)已有定义语句:int m=0,n=1; 执行表达式(m=5<3) &&(n=7>9)后,n的值是()

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

(17)以下选项中非法的字符常量是

A) ′ 12′ B) ′ 0xff′ C) ′ , ′ D) ′ ′

(18)表达式′ 9′-′ 3′的值是()

A)整数6 B)字符6 C)表达式不合法,无确定值 D)字符9

(19)以下不能将变量n清零的表达式是()

A)n=n&~n B)n=n&0 C)n=n^n D)n=n|n

(20)putchar函数可以向屏幕输出一个()

A)整型变量值 B)浮点型变量值 C)字符串 D)字符或字符变量值

(21).若int a , b , c;则为它们输入数据的正确输入语句是()

A)read(a , b , c); B)scanf(" %d %d %d " ,a , b , c);

C)scanf(" %D%D%D ",&a , &b , &c); D)scanf(" &d &d &d ",&a , &b , &c);

(22)执行语句:printf(" | %10.5f | n",12345.678);的输出是()

A)|2345.67800| B)|12345.6780| C)|12345.67800| D)|12345.678|

(23)若有以下程序段,其输出结果是()

int a=0,b=0,c=0;

c = (a – = a – 5) , (a = b , b + 3 );

printf(" %d , %d , %dn ",a , b , c);

A)3,0,–10 B)0,0,5 C) –10,3, –10 D)3,0,3

(24)若a为int类型,且a=125,执行下列语句后的输出是()

printf(" %d , %o , %x n ",a,a+1,a+2)

A)125,175,7D B)125,176,7F C)125,176,7D D)125,175,2F

2.2 设圆半径为5,编写程序,求圆的周长和面积。

2.3设a = 3 , b = 4 , c = 5 , d = 1.2 , e = 2.23 , f = – 43.56 , 编写程序,使程序输出为:

a =

3 , b = 4

, c = * * 5

d = 1.2

e =

2.23

f = – 43.5600

* *

(其中表示空格)

2.4.执行下列程序,按指定方式输入(其中表示空格),能否得到指定的输出结果?若不能,请修改程序,使之能得到指定的输出结果。

输入:2

3

4↙

输出:a = 2 , b = 3 , c = 4

x = 6 , y = 24

程序:

#include

void main(void)

{

int a , b, c ,x ,y;

scanf(" %d , %d , %d ", a , b , c);

x = a*b ;

y=x*c;

printf(" %d %d %d ",a , b , c);

printf(" x=%fn ",x , " y=%fn" , y);

}

第三章 控制流

3.1输入一个华氏温度,要求输出摄氏温度。公式为:

C=(F-32)*5/9

要求:输出要有文字说明,保留2位小数。

3.2有一函数:

x (x<1)

y= 2x-1 (1≤x<10)

3x-11 (x≥10)

写一程序,输入x值,输出y值。

3.3输入4个整数,要求按由小到大的次序输出。

3.4求二次方程ax2+bx+c=0的根。

3.5运输公司对用户计算运费。公司规定,路程越远,每公里运费越低。标准如下:

S<250km 没有折扣

250≤S<5002%折扣

500≤3<10005折扣

10000≤S<20008%折扣

2000≤S<300010%折扣

3000≤S15%折扣

设每公里每吨货物的基本运费为P,货物重为W,距离为S,折扣为d,分别用if结构和switch结构编一程序求总运费F,计算公式为:

F=P*W*s*(1-d)

-3.6 用π/4≈1-1/3+1/5-1/7+1/9-…公式求π的近似值,直到最后一项的绝对值小于106为止。

3.7有一个数列:1/2,2/3,3/5,5/8,8/13,13/21,……试编程序,求数列的前100项之和。

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

3.9打印所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为

153=13+53+43。

3.10猴子吃桃就问题。猴子第一天摘下若干桃子,当即吃了一半又加一个,第二天早上又将剩下的桃子吃掉一半又加一个。以后每天早上都吃了前一天剩下的一半加一个。到第10天早上时想吃,就只剩下一个桃子了。求第一天共摘多少桃子。

3.11一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?

3.12用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。

3.13用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。

3.14打印以下图案。

*

***

*****

*******

*****

***

*

3.15两个乒乓球队进行比赛,各队出三人,每人与对方队的一人进行一场比赛,甲队出A、B、C三人,乙队出X、Y、Z三人。编程找出所有可能的对阵情况。抽签之后,有人向队员打听对阵情况,A说他不和X比,C说他不和X、Z比,编程找出三对手名单。

第四章 算法

4.1什么是算法?试从日常生活中找个例子,描述它们的算法。

4.2结构化程序设计的基本思想是什么?

4.3用流程图表示求解以下问题的算法:

(1) (1)

依次将10个数输入,找出其中的最小数。

(2) (2)

有3个数,要求按由大到小的顺序打印出来。

(3) (3)

判断一个数n能否同时被3和5整除。

(4) (4)

将100到200之间的素数打印出来。

(5) (5)

求二次方程ax2+bx+c=0的根

4.4软件测试的目的是什么?

4.5什么是软件测试的白盒法和黑盒法?

第五章 数组和指针

5.1 输入a1、a2、………、a10,计算bi=(a2i-1+a2i)/2 i=1、2、…、10

5.2 编程将一个数组中的数据按逆序重新存放。例如,原来顺序是1、2、3、4、5,现在改为5、4、3、2、1。

5.3 已由一个排好序的整数数组,输入一个数据,要求按原来排序的顺序将这个整数插入到数组中去。

5.4 编程将两个从小到到排好序的一维数组归并成一个有序的一维数组。

5.5 n个人围成一圈,依次编号从1到n。从编号为1的人开始从1到3报数,凡报数是3的人退出圈子,编程输出依次出列的人的编号。

5.6 编程将一个整数形式的数字字符串(可能含符号位)转换成一个整数输出。

5.7 编程把一个输入的十进制整数转换为任意进制的数。

5.8-编程检查输入的字符串是否满足以下两个条件:(1)字符串中左括号“(”的个数与右括号“)”的个数相等(2)从首字符开始起顺序查找,任何时候右括号“)”的个数都不能超过左括号。

5.9 编程将一个字符串中的所有大写字母变成小写,而小写字母变成大写,其余字符不变。

5.10输入30个学生的平均成绩和姓名,按照平均成绩由高到低的顺序输出每个学生的姓名和平均成绩。

5.11建立两个4×4的整数矩阵A和B,编程求矩阵A和B的和(和矩阵的元素等于两个相加的矩阵的相应元素之和)。

5.12找到一个二维数组的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能不存在鞍点。

5.13不使用stracat函数,分别用数组和指针编程将两个字符串连接成一个字符串。

5.14编程从一个字符串中删除子字符串,两个字符串都由键盘输入。

以下习题要求用指针方法处理

5.15 输入3个整数,按从小到大的顺序输出。

5.16 有n个人围成一圈,顺序排号,从第1个人开始从1到m报数,凡数到m的人出列,问最后留下的是原来圈中第几号的人员。

5.17 编写程序将一个不确定位数的正整数进行三位分节后输出,如输入1234567,输出1,234,567。

5.18 输入n个整数,组成一个一维数组,以第k个数为界,把后面的数前移k个位置,即最后n-k个数变成最前面的n-k个数。原来的最前面的k个数据移到最后变成最后k个数据。例如,数组原来有数组元素1、2、3、4、5、6,假设k为2,则交换后结果为3、4、5、6、1、2。要求总共只能使用一个数组。

5.19 有5个预先设定的关键单词。编程输入一行字符串,从前到后查找其中出现的关键单词及出现次数。

5.20 输入一个数字字符串,将其转换为整数输出。

vij5.21 输入矩阵s(3×4)和矩阵t(4×5),编程计算它们的乘积v。已知:sk14iktkji=1,2,3

j=1,2,3,4,5

5.22插入排序(在输入过程中完成排序)。任意顺序输入10个整数,把输入的第1个数放在数组的第1个位置上。以后每读入个数都和已存入的数进行比较,确定该数按照从小到大的顺序在数组应处的位置。把原处于该位置上以及后面的所有数都后移一个位置,把新输入的数填入空出来的位置上。这样数组中的数总是从小到大来排列的。10个数输入完以后输出数组。

5.23全班30个学生,输入每个学生的平均成绩和姓名,按照成绩从高到低输出学生姓名和平均成绩。

5.24输入一个字符串,判断是否是回文。“回文”指顺读和逆读都一样的字符串。如“abcdcba”。

5.25输入两个字符串s和t,判断s中是否包含字符串t。

5.26从一个字符串中删除指定字符。要求字符串和指定删除的字符都从键盘输入。

5.27全班有30个学生,输入每个学生姓名、出生日期、学号、专业等信息;编程实现查找查找学生操作,要求输入待查找学生学号,输出该学生基本信息。

第六章 结构与联合类型

6.1 编程实现两个复数的加法和减法运算。

6.2 定义一个结构类型表示日期,编程输入今天的日期,输出明天的日期。

6.3 定义一个结构类型表示日期,输入年号和该年的第几天的天数,输出该天的日期。

6.4 定义一个结构类型表示日期,输入一个日期,输出该天是当年的第几天。

6.5 有10个学生,每个学生的数据包括:学号、姓名、3门课程的成绩,输入10个学生的数据,求每个学生的平均成绩,并按平均成绩由高到低输出学生的姓名、学号和平均成绩。

6.6 有10个学生,每个学生的数据包括:学号、姓名、3门课程的成绩,输入10个学生的数据,求每个学生的平均成绩计算平均成绩在85分以上的人数。

6.7 编程,输入10个用户的姓名和电话号码,并按照姓名的字典顺序输出用户的姓名和电话号码。

6.8 建立一个10个人的学生情况登记表,每个学生的信息包括:学号、姓名、性别、出生日期(结构类型)、政治面貌,政治面貌可以是党员、团员或群众;对于党员,要求填写入党时间(结构类型)、入党地点和入党介绍人姓名;对于团员,要求填写入团时间和入团介绍人;对于群众,不需要填写其它附加内容。编程输入这些学生的信息,并输出指定学号的学生的姓名、政治面貌和入党(团)时间。

6.9 分配房间问题,按房间容量从小到大的次序输入20各房间号和房间容量组成结构数组。在然后输入若干班号和各班人数,以输入班号为0周围输入结束的标志。对于每个班,按照输入的次序按人数分配最合适的房间。输出班号、人数、有无房间分配、及分配的房间号、容量。注意一个班只能分配一个房间,一个房间只能分配给一个班。

第七章 其他数据类型和预处理

7.1 输入一个日期,计算当天是该年的第几天?要求其中月份设计成枚举类型数据。

7.2 输入某单位每个职工的职工号和工资(以元为单位,不含小数位)编程求发工资时,每位职工工资所需的不同人民币的张数。并计算该单位职工的工资总和,以及累计所需要的不同人民币的张数。

7.3 编写一个程序,求三个数中的最大数,要求用带参数的宏实现。

7.4 编程将用户输入的一个字符串中的大小写字母互换,即大写字母转换为小写字母,小写字母转换为大写字母。要求定义判断是大写、小写字母的宏以及大小写相互转换的宏。

7.5 编程求三角形的面积,三角形的面积计算公式为areas(sa)(sb)(sc)其中s1(abc),a、b、c为三角形的边长。定义两个带参数的宏,一个用于求s,另一个求2area。

7.6 分析下列变量a、b、c分别占用多少字节的空间,并编程计算它们各自占据的字节数。

struct {

int i:5;

int :6;

unsigned j:7;

}a;

struct {

int i:5;

int:0;

unsigned j:7;

}b;

struct {

int i:5;

unsigned int j;

int k:7;

}c;

第八章 函数

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

8.2 编写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。

8.3 编写一个程序,已知一个圆筒的半径、外径和高,要求调用函数计算该圆筒的体积。

8.4 编写一个求水仙花数的函数,求100到999之间的全部水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方的和等于该数。例如:153就是一个水仙花数:

153=1*1*1+5*5*5+3*3*3

8.5 编写一个函数,将给定的一个二维数组(3×4)转置,即行列互换。

8.6 编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

8.7 求方程ax2+bx+c=0的根,从主函数输入a、b、c的值,并用三个函数分别求当b2-4ac

大于0、等于0和小于0时的根,并输出结果。

8.8 一只球从100米高度自由落下,每次落地后反跳回到原高度的一半再落下。求它在第10次落地时共经过多少米?第10次反跳多高?

8.9 编写一个函数,将两个字符串连接起来。

8.10 编写一个函数,输入一个4位正整数,输出该4位数的4个数字的字符,要求数字之间空一个空格。如输入1990,应输出“1 9 9 0”。

8.11 编写一个函数,输入一行字符,将此字符串中最长的单词输出。

8.12 编写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。

8.13 编写一个函数,输入一个十进制数,输出相应的十六进制数。

8.14 使用指针,编写一个求串长的递归函数。

8.15 使用指针,输入一个字符串,要求用递归方法实现以相反的顺序输出该字符串。

8.16 编写一个函数,将一个链表按逆序排列,即将链头当链尾,链尾当链头。

8.17 设有两个链表,每个链表的结点都包括姓名、学号、住址、专业等信息,要求编写一个函数把两个链表合并成一个链表,按学号升序排列。

8.18 编写一个函数,创建一个学生信息的双向循环链表;链表中每个结点包括学号、姓名、成绩等信息。

8.19 有两个链表a和b,设结点中包括学号、姓名等信息。编程从链表a中删除与链表b中学号相同的那些结点。

8.20 编程,实现任意长度的两个正整数的加法运算。

8.21 编写一个函数,创建一个一个学生信息的单向有序链表;链表中每个结点包括学号、姓名、成绩等信息,链表中结点按照学号从小到大排列。

第九章 文件

9.1 将一个文本文件按二进制进行读操作,会出现什么问题?换行符在文件中占几个字节,其值是什么?

9.2 如果打开一个文件后,程序在结束前会出现什么现象?并请解释你所发现的现象。

9.3 你认为可能有几种情况使得以读方式打开一个文件出现故障,写方式打开文件的故障呢?

9.4 如果在操作系统下可以用命令copy PRN 将文件送到打印机上打印出来。请你设计一个C语言程序完成这个程序的打印。

9.5 设计一个函数LineCount()计算一个文本文件的行数。

9.6 编程,输入的一系列书信息(书名,作者,出版社,单价,库存数目,类别等),把这些信息保存到文件book,dat中。

9.7 编写一个程序,当用户输入一个关键字后,从按照9.6题要求建立好的data文件中找出所有包含该关键字的书的信息。

9.8 将题9.6中建立好的文件内容按照单价由高到低排序,将排好序的内容存入到文件中。

9.9 不改变题9.6建立好的文件的内容,建立一个文件的索引文件,该索引文件按照书名建立索引,文件中存储每本书的书名以及该书的信息记录在文件中的记录号,例如文件的某个数据值为{“C Programming

Language”,10}表示书名为“C Programming Language”的信息是文件中的第10个数据项。

9.10编写一个程序,输入一个文件名,按照十六进制在屏幕上输出文件的内容。

9.11编写一个程序,输入一个文件名,统计该文件的长度(字节数)。

9.12编写一个程序,输入一个文件名,将文件的内容反序后重新存储到一个新的文件中。

第十章 综合程序设计

10.1 编写一个程序,输入购买的商品的单价和数量,输出清单并统计总金额。

10.2 编写一个航班售票系统,要求完成以下功能:

(1)假设该民航有若干航班,要求实现增加航班和取消某个航班的功能。

(2)查询:根据用户提出的终到站查询航班号、售票情况等航班信息;也可根据航班号,列出该航班已订票的乘客名单。

(3)订票:根据航班号为客户订票,如该航班有余票,则为客户订票;如该航班已满员,则显示相应信息。

(4)退票:按乘客要求退出已预定的机票。

10.3 编写一个银行账户管理相系统,要求建立二进制文件存储银行账户信息,其中每个用户账户信息中要求保存账户、用户身份证号码、用户姓名、用户地址、账户金额等,完成以下功能:

(1)录入新账户;

(2)查询账户情,根据输入的账户查询用户情况和账户金额;

(3)修改账户信息,要求用户输入账户,根据用户需要修改除了账户之外的其余信息;

(4)删除账户:根据输入的账户找到要删除的账户信息以后,经确认后删除该账户信息;

10.4 编写一个扑克牌发牌的程序,将除了大小王之外的52张牌发成四墩

10.5 编写一个计算24点的游戏的程序

第一章 C语言概述

1.1、CDCCC

1.2、编程题

(1)解:

main()

{

printf(" * * * * * * * * * * n");

printf("n");

printf(" Very Good! n");

printf("n");

printf(" * * * * * * * * * * n");

}

运行结果:

* * * * * * * * * *

Very Good!

* * * * * * * * *

(2)(略)

1.3 (略)

1.4 (略)

1.5(略)

第二章基本数据类型和表达式

2.1、BABAB DDABD CCDAC ABADD DCBB

2.2 (略)

2.3 (略)

2.4(略)

第三章控制流

3.1

解:

main()

{

float c,f;

printf("请输入一个华氏温度:n");

scanf("%f",&f);

c=(5.0/9.0)*(f-32); //注意5和9要用实型表示,否则5/9值为零

printf("摄氏温度为:%5.2fn",c);

}

运行结果:

请输入一个华氏温度:

78

摄氏温度为:25.56

3.2

解:

main()

{ int x,y;

printf(" 输入 x:");

scanf("%d",&x);

if(x<1)

{

y=x;

printf(" X=%d,Y=X=%d n",x,y);

}

else if(x<10)

{

y=2*x-1;

printf(" X=%d,Y=2*X-1=%d n",x,y);

}

else

{

y=3*x-11;

printf(" X=%d,Y=3*x-11=%d

}

}

运行结果:

1:输入 X:4

X=4,Y=2*X-1=7

2:输入 X:-1

X=-1,Y=X=-1

3:输入 X:20

X=20,Y=3*x-11=49

3.3

解:

main()

{

int t,a,b,c,d;

printf("请输入四个数:");

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

printf("nn 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(b>c)

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

if(b>d)

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

if(c>d)

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

printf("n排序后的结果如下:n");

printf(" %d %d %d %d n",a,b,c,d);

}

n",x,y);

3.4

实际上应该有以下几种可能:

(1) (1)

a=0,不是二次方程。

(2) (2)

b^2-4ac=0,有两个相等实根。

(3) (3)

b^2-4ac>0,有两个不等实根。

(4) (4)

b^2-4ac<0,有两个共轭复根。

据此编写程序如下:

#include

main()

{ float a,b,c,d,disc,x1,x2,realpart,imagpart;

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

printf(“The equation”);

if (fabs(a)<=le-6)

printf(“is not a quadratic”);

else

disc=b*b-4*a*c;

if (fabs(disc)<=le-6)

printf(“has two equal roots:%8.4fn”,-b/(2*a));

else if (disc)>le-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);

}

}

程序中用disc代表b^2-4ac,先计算disc的值,以减少以后的重复计算。对于判断b^2-4ac是否等于0时,要注意一个问题:由于disc(即b^2-4ac)是实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:if (disc==0)……因为这样可能会出现本来是零的量,由于上述误差而被判别为不等于零而导致结果错误。所以采取的办法是判别disc的绝对值(abs(disc))是否小于一个很小的数(例如10^-6),如果小于此数,就认为disc=0。程序中以realpart代表实部p,以imagpart代表虚部q,以增加可读性。

3.5

分析此问题,折扣的变化是有规律的:折扣的“变化点”都是250的倍数(250,500,1000,2000,3000)。利用这一特点,可以在横轴上加一种坐标c,c的值为s/250。C代表250的倍数。当c<1时,表示s<250,无折扣;1<= c<= 2时,表示250<= s <500,折扣d=2%;

2<= c <4时,d=5%;4<= c <8时,d =8%;8<= c <12时,d =10%;c >12时,d =15%;

据此写出程序如下:

main()

{

int c,s;

float p,w,d,f;

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.0);

printf(“freight=%15.4f”,f);

}

运行情况如下:

100,20,300

freight=588000.0000

请注意:c、s是整型变量,因此c=s/250为整数。当s>=3000时,令c=12,而不使c随s增大,这是为了在switch语句中便于处理,用一个case可以处理所有s>=3000的情况。

3.6(略)

3.7

解:

main()

{

int n,t,number=20;

float a=2,b=1,s=0;

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

{

s=s+a/b;

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

}

printf("总和=%9.6fn",s);

}

3.8(略)

3.9

解:

main()

{

int i,j,k,n;

printf("水仙花数是:");

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

{

i=n/100;

j=n/10-i*10;

k=n%10;

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

{

printf("n%d",n);

}

}

}

3.10

解:

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day>0)

{

x1=(x2+1)*2;

x2=x1;

day--;

}

printf("桃子总数=%dn",x1);

}

3.11

解:

main()

{

float sn=100.0,hn=sn/2;

int n;

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

{

sn=sn+2*hn;

hn=hn/2;

}

printf(“第十次落地是共经过的米数为:%f”,sn);

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

}

3.12

解:

#include

main()

{

float x,x0,f,f1;

x=1.5;

do

{

x0=x;

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

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

x=x0-f/f1;

}

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

printf("方程的根=%6.2fn",x);

}

3.13

解:

#include

main()

{

float x0,x1,x2,fx0,fx1,fx2;

do

{

printf("请输入x1,x2的值:n");

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("方程的根是%6.2fn",x0);

}

3.14

解:

#include

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");

}

}

3.15

解:

main()

{

char i,j,k;

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("顺序为:na--%ctb--%ctc--%cn",i,j,k);

}

}

}

}

运行结果:

顺序为:

a—z b—x c—y

第五章数组和指针

5.2

解:

#define N 5

main()

{

int a[N]={8,6,5,4,1},i,temp;

printf("n初始数组: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("n 交换后的数组:n");

for(i=0;i

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

}

5.3

解:

main()

{

int a[11]={1,4,6,9,13,16,19,28,40,100};

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

printf("初始数组如下:");

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

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

printf("n");

printf("输入插入的数据:");

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;

}

}

}

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

printf("%6d",a[i]);

}

5.4

解:

#include

#define M 6

#define N 4

void func(int a[], int b[], int c[])

{

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

while(i

{

if(a[i]

{

c[k]=a[i];

i++;

k++;

}

else

{

c[k]=b[j];

j++;

k++;

}

}

while(i

{

c[k]=a[i];

i++;

k++;

}

while(j

{

c[k]=b[j];

j++;

k++;

}

}

void main()

{

int i;

int a[M]={2,5,8,11,20,35};

int b[N]={1,6,15,60};

int c[M+N];

func(a,b,c);

printf("归并结果:");

for(i=0; i

printf("%d",c[i]);

pritnf("n");

}

5.6

解:

#include

#include

#include

void main()

{

int i,base,len;

char num[20];

float s=0;

printf("输入数进制(小于等于16):");

scanf("%d",&base);

printf("该进制的一个整数:");

scanf("%s",num);

len=strlen(num);

i=len-1;

while(i>=0)

{

switch(num[i])

{

case 'A':

case 'a':s=s+10*pow((float)base, (float)(len-i-1));break;

case 'B':

case 'b':s=s+11*pow((float)base, (float)(len-i-1));break;

case 'C':

case 'c':s=s+12*pow((float)base, (float)(len-i-1));break;

case 'D':

case 'd':s=s+13*pow((float)base, (float)(len-i-1));break;

case 'E':

case 'e':s=s+14*pow((float)base, (float)(len-i-1));break;

case 'F':

case 'f':s=s+15*pow((float)base, (float)(len-i-1));break;

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':s=s+(num[i]-'0')*pow((float)base, (float)(len-i-1));break;

}

i--;

}

printf("十进制结果:%gnn",s);

}

5.7

解:

#include

char itc(int n)

{

char c;

if(n>=0 && n<=9)

c='0'+n;

else

c='a'+n-10;

return c;

}

void main()

{ int i=0;

int base,n,j,num[20];

scanf("%d",&base);

do

{

i++;

num[i]=n%base;

n=n/base;

}while(n!=0)

printf("转换的结果:");

for(j=i; j>=1; j--)

printf("%c",itc(num[j]));

printf("n");

}

5.13

/ * 连接两个字符串(不用’strcat’)*/

main()

{

char s1[80],s2[40];

int i=0,j=0;

printf("n 请输入字符串1:");

scanf("%s",s1);

}

printf("n 请输入字符串2:");

scanf("%s",s2);

while(s1[i]!='0')

i++;

while(s2[j]!='0')

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

s1[i]='0';

printf("n 连接后字符串为:%s",s1);

5.15

解:

void swap(int *p1,int *p2)

{

int p;

p=*p1;

*p1=*p2;

*p2=p;

}

main()

{

int n1,n2,n3;

int *pointer_1,*pointer_2,*pointer_3;

printf("请输入三个整数 n1,n2,n3:");

scanf("%d,%d,%d",&n1,&n2,&n3);

pointer_1=&n1;

pointer_2=&n2;

pointer_3=&n3;

if(n1>n2) swap(pointer_1,pointer_2);

if(n1>n3) swap(pointer_1,pointer_3);

if(n2>n3) swap(pointer_2,pointer_3);

printf("排序后三个整数为:%d,%d,%dn",n1,n2,n3);

}

5.16

解:/*n个人循环报数缝m退出,求最后一人是几号*/

#define nmax 50

main()

{

int i,j,k,n,m,num[nmax],*p;

printf("请输入人数n:");

scanf("%d",&n);

printf("报数:");

scanf("%d",&m);

p=num;

for(i=0;i

*(p+i)=i+1;

i=0;//i为每次循环时的计数变量

j=0;//j为计数变量

k=0;//k为退出人数

while(k

{

if(*(p+i)!=0) j++;

if(j==m)

{

*(p+i)=0;//退出的人编号为0

j=0;

k++;

}

i++;

if(i==n) i=0;//报到尾后i恢复尾0

}

while(*p==0) p++;

printf("%d个人中最后留下的是第%d号.n",n,*p);

}

5.17

解:

#include

#include

char *separate(int);

char *exchange(int);

void main()

{

int num;

char *p;

printf("输入一个整数:");

scanf("%d",&num);

p=separate(num);

printf("输出结果:%sn",p);

}

char *separate(int num)

{

char *p1,*p2=exchange(num),*p3,*pt;

int count=1;

p1=p2;

while(*p2++!='0')

{

p3=p2-1;

p2=p2-2;

}

while(p2>p1)

{

if(count==3)

{

pt=p3;

while(pt>=p2)

*(pt+1)=*pt--;

*p2=',';

count=1;

}

count++;

p2--;

}

return p1;

}

char *exchange(int num)

{

char *p,*p1,*p2,temp;

p=p1=p2=(char *)malloc(20*sizeof(char));

while(num!=0)

{

*(p2++)num%10+'0';

num/=10;

}

*(p2--)='0';

while(p2>p1)

{

temp=*p2;

*p2--=*p1;

*p1++=temp;

}

return p;

}

5.18

解:

void move(int *arry,int n,int m)

{

int *p,arry_end;

arry_end=*(arry+n-1);

for(p=arry+n-1;p>arry;p--)

*p=*(p-1);

*arry=arry_end;

m--;

if(m>0) move(arry,n,m);

}

main()

{

int number[20],n,m,i;

printf("共有多少个数?");

scanf("%d",&n);

printf("后移多少个数?");

scanf("%d",&m);

printf("请以,号为间隔输入%d个数。n",n);

for(i=0;i

scanf("%d,",&number[i]);

scanf("%d",&number[n-1]);

move(number,n,m);

printf("移动后顺序为:n");

for(i=0;i

printf("%d,",number[i]);

printf("%dn",number[n-1]);

}

5.19

解:

#include

char words[]={"elapse","elucidate","elude","embody","embrace"};

void main()

{

char s[20],char *w;

int i,j,n=0;

printf("输入单词:");

scanf("%s",s);

printf("相匹配的单词:n");

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

{

for(w=words[i],j=0; s[j]!='0' && *w!='0' && *w==s[j]; j++,w++)

if(s[j]=='0')

{

n++;

printf("t%sn",words[i]);

}

}

printf("相匹配的单词个数:%dnn",n);

}

第六章结构与联合类型

6.1(2)

解:

#include

struct complex

{

int r;

int v;

};

void main()

{

struct complex c1,c2,c;

printf(“输入第一个复数n”);

printf(“实部:”);

scanf(“%d”,&c1.r);

pritnf(“虚部:”);

scanf(“%d”,$c1.v);

printf(“输入第二个复数n”);

printf(“实部:”);

scanf(“%d”,&c2.r);

pritnf(“虚部:”);

scanf(“%d”,$c2.v);

c.r=c1.r*c2.r-c1.v*c2.v;

c.v=c1.r*c2.v+c1.v*c1.r;

printf(“两复数相乘:”);

if(c.v<0)

printf(“%d%din”,c.r,c.v);

else

pritnf(“%d+%din”,c.r,c.v);

}

6.2

解:

#include

srtuct ydate

{

int day;

int month;

int year;

};

int leap(struct ydate d)

{

if((%4==0 && %100!=0) || (%400==0))

return 1;

else

return 0;

}

int numdays(struct ydate d)

{

int day;

static int daytab[]={31,28,31,30,31,30,31,31,30,31,30,31};

if(leap(d) && ==2)

day=29;

else

day=daytab[-1];

return day;

}

void mian()

{

struct ydate today,tomorrow;

printf(“日期格式为:年.月.日n”);

printf(“今天是:”);

scanf(“%d.%d.%d”,&,&,&);

if(!=numdays(today))

{

=;

=;

=+1;

}

else if(==12)

{

=;+1

=1;

=1;

}

else

{

=;

=+1;

=1;

}

printf(“明天是:%d.%d.%dnn”,,,);

}

6.4

解:

struct

{

int year;

int month;

int day;

date;

};

main()

{

int days;

printf(“请输入日期(年,月,日)”);

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

switch()

{

case 1; days=; break;

case 2; days=+31; break;

case 3; days=+59; break;

case 4; days=+90; break;

case 5; days=+120; break;

case 6; days=+151; break;

case 7; days=+181; break;

case 8; days=+212; break;

case 9; days=+243; break;

case 10; days=+273; break;

case 11; days=+304; break;

case 12; days=+334; break;

}

if((%4==0 && %100!=0 || %400==0) && >=3)

day+=1;

printf(“n%d月 %d日是 %d年的第 %d天.”,,,,,days);

}

6.7

解:

#include

#include

#define N 5

struct person

{

char name[10];

char num[10];

};

void getdata(struct person *sp)

{

int i;

printf(“输入姓名和电话号码:n”);

for(i=0; i

{

printf(“第%d个人:”i+1);

scanf(“%s%s”,sp[i].name,sp[i].num);

}

}

void getsort(struct person *sp)

{

int l,j,k;

struct person temp;

for(l=0; l

{

k=l;

for(j=l+1; j

{ if(struct(sp[k].name,sp[j].name)>0)

k=j;

temp=sp[k];

sp[k]=sp[l];

sp[l]=temp;

}

}

}

void outdata(struct person *sp)

{

int l;

pritnf(“输出结果:n”);

printf(“姓名 电话号码n”);

printf(“------ --------”);

for(l=0; l

printf(“%-8s%-8sn”,sp[l].name,sp[l].num);

}

void main()

{

struct person sp[N];

getdata(sp);

getsort(sp);

outdata(sp);

}

第七章其他数据类型和预处理

7.2

解:

#include

enum demo {m1000,m500,m100,m50,m20,m10,m5,m2,m1};

void main()

{

long totalpay=0;

int m[]={1000,500,100,50,20,10,5,2,1};

int n,j,wage;

enum deno d;

int no,total[9],value;

for(d=m1000; d<=m1; d++)

total[d]=0;

printf(“输入职工数:”);

scanf(“%d”,&n);

for(j=0; j

{

printf(“职工号,工资:”);

scanf(“%d,%d”,&no,&wage);

totalpay+=wage;

printf(“人民币张数:”);

for(d=m1000; d

{

value=eage/m[d];

printf(“%d”,value);

total[d]+=value;

wage%=m[d];

}

printf(“n”);

}

printf(“总金额:%dn”,totalpay);

pirntf(“总张数:”);

for(d=m1000; d<=m1; d++)

printf(“%d”,total[d]);

printf(“n”);

}

7.3

解:

#include

#define max2(a,b) (a>b?a:b)

#define max3(a,b,c) max2(a,b)>c?max2(a,b):c

void main()

{

int a,b,c;

float x,y,z;

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

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

printf(“最大整数为:%dn”,max3(a,b,c));

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

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

printf(“最大实数为:%gn”,max3(x,y,z));

}

7.4

解:

#include

#define isupper(c) ((c)>=’A’ && (c)<=’z’)

#define islower(c) ((c)>=’a’ && (c)<=’z’)

#define tolower(c) (isupper(c)?((c)+(‘a’-‘A’)):(c))

#define toupper(c) (islower(c)?((c)-(‘a’-‘A’)):(c))

void main()

{

char s[20];

int i;

printf(“输入字符串:”);

scanf(“%s”,s);

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

if(isupper(s[i]))

s[i]=tolower(s[i]);

else if(islower(s[i]))

s[i]=toupper(s[i]);

printf(“转换的结果:%sn”,s);

}

7.5

解:

#include

#include

#define s(a,b,c) ((a+b+c)/2)

#define AREA(a,b,c) (aprt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c)))

void main()

{

folat x,y,z,s;

printf(“输入c,y,z:”);

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

if(x+y>z && x+z>y && y+z>x)

{

s=AREA(x,y,z);

printf(“三角形面积=%gn”,s);

}

else

printf(“三边长不能构成一个三角形n”);

}

第八章函数

8.1

解:设两个整数为u和v,则求最大公约数的算法

最小公倍数=u*v /最大公约数。据此编出程序如下:

int hcf(int u,int v)

{

int a,b,t,r;

if(u>v)

{t=u;u=v;v=t;}

a=u;b=v;

while((r=b%a)!=0)

{b=a;a=r;}

return(a);

}

int lcd(int u,int v,int h)

{

return(u*v/h);

}

main()

{

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

}

8.2

解:

/* 判断整数是否为素数 */

int prime(int number)

{

int flag=1,n;

for(n=2;n

if(number%n==0)

flag=0;

return(flag);

}

main()

{

int number;

printf("请输入一个正整数:n");

scanf("%d",&number);

if(prime(number))

printf("n %d 是素数。",number);

else

printf("n %d 不是素数。",number);

}

8.6

解:

/* 字符串反序存放 */

#include

#include

void inverse(char *str)

{

char t;

int i,j;

for(i=0,j=strlen(str);i

{

t=str[i];

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

str[j-1]=t;

}

}

main()

{

char str[100];

printf("输入字符串:n");

scanf("%s",str);

inverse(str);

int k=strlen(str);

printf("转换后的字符串是:%sn",str);

}

8.7

解:

#include

float x1,x2,disc,p,q;

void greater_than_zero(float a,float b)

{

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

}

void equal_to_zreo(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);

}

main()

{

float a,b,c;

printf("n 输入方程式的系数:a,b,c:n");

scanf("%f,%f,%f",&a,&b,&c);

printf("n 方程是:%5.2f*x*x+%5.2f*x+%5.2f=0n",a,b,c);

disc=b*b-4*a*c;

printf("方程的解是:n");

if(disc>0)

{

greater_than_zero(a,b);

printf("X1=%5.2ftX2=%5.2fnn",x1,x2);

}

else if(disc==0)

{

zero(a,b);

printf("X1=%5.2ftX2=%5.2fnn",x1,x2);

}

else

{

smaller_than_zero(a,b);

printf("X1=%5.2f+%5.2fitX2=%5.2f-5.2fin",p,q,p,q);

}

}

8.10

解:

/* 在四个数字字符串中加空格 */

void insert(char *str)

{

int i;

for(i=strlen(str);i>0;i--)

{

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

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

}

printf("n 结果是:n%s",str);

}

main()

{

char str[80];

printf("请输入含有四个数字的字符串:n");

scanf("%s",str);

insert(str);

}

8.11

解:认为单词是全由字母组成的字符串。函数alphabetic判断当前字符是否为字母,是返回1,否则返回0。Longest函数查找最长单词。Flag=0表示未开始,flag=1表示开始计数,len为当前单词长度,length为最长单词。Poit记录当前单词的起始位置。

#include

#include

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,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;

}

main()

{

int i;

char line[100];

printf("输入一行文本。n");

gets(line);

printf("n最长的单词是:");

for(i=longest(line);alphabetic(line[i]);i++)

printf("%c",line[i]);

printf("n");

}

8.13

解:/*十六进制转换为十进制*/

#include

#include

#define MAX 1000

int htoi(char *s)

{

int i,n;

n=0;

for(i=0;s[i]!='0';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;

}

main()

{

int c,i,flag,flag1;

char t[MAX];

i=0;

flag=0;

flag1=1;

printf("n输入十六进制数:");

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

{

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

{

flag=1;

t[i++]=c;

}

else if(flag)

{

t[i]='0';

printf("n十进制数:%dn",htoi(t));

printf("继续吗?");

c=getchar();

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

flag1=0;

else

{

flag=0;

i=0;

printf("n输入十六进制数:");

}

}

解:

}

}

8.16

#define NULL0

struct line

{

int num;

struct line *next;

}

main()

{

int len=1,j;

struct line *p1, *p2, *head, *new, *newhead;

p1=p2=head=(struct line *)malloc(sizeof(struct line));

printf(“请输入链表中各结点的数据(输入0代表结束):n结点值:”);

scanf(“%d”,&p1->num);

while(p1->num!=0)

{

p1=(struct line *)malloc(sizeof(struct line));

printf(“结点值:”);

scanf(“%d”,&p->num);

if(p1->num==0)

p2->next=NULL;

else

{

p2->next=p1;

p2=p1;

len++;

}

}

p1=head;

printf(“n原链表: n”);

do

{

pirntf(“%4d”,p1->num);

if(p1->next!=NULL)

p1=p1->next;

}

while(p1->next!=NULL)

for(j=0; j

{

p2=p1=head;

while(p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(j==0)

newhead=new=p1;

else

nes=new->next=p1;

p2->next=NULL;

}

printf(“nn新链表:n”);

p1=newhead;

for(j=0; j

{

printf(“%4d”,p1->num);

p1=p1->next;

}

printf(“n”);

}

8.17

解:

#include

#define NULL0

#define LEN sizeof(struct student)

struct student

{

long num;

int score;

struct student *next;

};

struct student listA,listB;

int n,sum=0;

main()

{

struct student *creat();

struct student *insert();

void printf();

struct student *ahead,*bhead,*abh;

ahead=creat();

sum=n;

bhead=creat();

sum=sum+n;

sbh=insert(ahead,bhead);

print(abh);

}

struct student *creat()

{

struct student *p1,*p2, *head;

n=0;

p1=p2=(struct student *)malloc(LEN);

printf(“输入学生的学号和成绩,n”);

printf(“如果输入的学号为0,则停止输入n”);

scanf(“%ld,%d”,&p1->num,&p1->score);

head=NULL;

while(p1-

{

n++;

if(n===1)

head=p1;

else

p2->next=p1;

p2=p1;

p1=(struct student *)malloc(LEN);

scanf(“%ld,:%d”,&p1->num,&p1->score);

}

p2->next=NULL;

retrun(head);

}

struct student *insert(ah,bh)

struct student *ah, *bh;

{

struct student *pa1, *pa2, *pb1, *pb2;

pa2=pa1=ah;

pb2=pb1=bh;

do

{

while(pb1->num>pa1->num && pa1->next!=NULL)

{

pa2=pa1;

pa1=pa1->next;

}

if(pb1-num)

{

if(ah==pa1)

ah=pb1;

else

pa2-

pb1=pb1->next;

pb2->next=pa1;

pa2=pb2;

pb2=pb1;

}

}

while((pa1-

if(pb1-pa1-next==NULL)

pa1-

return(ah);

}

boid pirnt(head)

struct student *head;

{

struct student *p;

printf(“n共有%d条记录,它们是:n”,sum);

p=head;

if(p!=NULL)

do

{

printf(“%ld,%dn”,p->num,p->score);

p=p->next;

}

while(p!=NULL)

}

本文标签: 输入输出要求程序字符串