c程序设计第四版(谭浩强)第九章答案
C语言程序设计第四版谭浩强课后习题答案完整版《C语言程序设计》精品课程

C语言程序设计第四版谭浩强课后习题答案完整版《C语言程序设计》精品课程1. 5请参照本章例题,编写一个C程序,输出以下信息:**************************Very Good!**************************解:mian(){printf(“**************************”);printf(“\n”);printf(“Very Good!\n”);printf(“\n”);printf(“**************************”);}1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。
解:mian(){int a,b,c,max;printf(“请输入三个数a,b,c:\n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max max=b;if(maxmax=c;printf(“最大数为:“%d”,max);}第三章3.6写出以下程序运行的结果。
main(){char c1=’a’,c2=’b’,c3=’c’,c4=’1’,c5=’6’;printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);printf(“\t\b%c %c”,c4,c5);}解:aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabcAㄩN3.7 要将'China'译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母'A'后面第4个字母是'E'.'E'代替'A'。
因此,'China'应译为'Glmre'。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
谭浩强c语言9章课后习题答案

printf(" 习题9.3 求三角形的面积\n=================================\n");
printf("请输入三角的三边,用空格隔开:\n");
float a,b,c,s,area;
scanf("%f%f%f",&a,&b,&c);
printf(" 请输入三个数(用空格隔开):\n");
int a,b,c,max;
scanf("%d%d%d",&a,&b,&c);
MAX(a,b,c,max);
printf(" 最大的数为:\n%d",max);
return 0;
}
string[i]+=1;
else if(string[i]=='z'||string[i]=='Z')
string[i]-=25;
}
}
#endif
printf("输出文本行为:\n%s",string);
printf("请输入三个数(用空格隔开):\n");
scanf("%f%f%f",&a,&b,&c);
printf("每行一个数:\n");
printf(FORMAT1,a);
printf("每行两个数:\n");
printf(FORMAT2,a,b);
printf(" 请输入三个数(用空格隔开):\n");
(完整版)《C语言程序设计》课后习题答案(第四版)谭浩强(可编辑修改word版)

// 一次存 5 年期 // 先存 2 年期,到期后将本息再存 3 年期 // 先存 3 年期,到期后将本息再存 2 年期 // 存 1 年期,到期后将本息存再存 1 年期,连续存 5 次 // 存活期存款。活期利息每一季度结算一次
// 输出按第 1 方案得到的本息和 // 输出按第 2 方案得到的本息和 // 输出按第 3 方案得到的本息和 // 输出按第 4 方案得到的本息和 // 输出按第 5 方案得到的本息和
s=r*r*pi; sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h; printf("圆周长为: printf("圆面积为: printf("圆球表面积为: printf("圆球体积为: printf("圆柱体积为: return 0; }
//计算圆面积 s //计算圆球表面积 sq //计算圆球体积 vq //计算圆柱体积 vz l=%6.2f\n",l); s=%6.2f\n",s); sq=%6.2f\n",sq); v=%6.2f\n",vq); vz=%6.2f\n",vz);
3-2-2 #include <stdio.h> #include <math.h> 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;
3-8 #include <stdio.h> int main() { char c1,c2; printf("请输入两个字符 c1,c2:"); c1=getchar(); c2=getchar(); printf("用 putchar 语句输出结果为:"); putchar(c1); putchar(c2); printf("\n"); printf("用 printf 语句输出结果为:"); ห้องสมุดไป่ตู้rintf("%c %c\n",c1,c2); return 0; }
C程序设计第四版Chap9(新)-谭浩强

21
结构体数组
struct student s[ ] = { {10001001,"张三",20, "M",{1985,1,1},"XXX",123456 }, {……}, {……} };
2013 - 2014 Lu & Xiao. All rights reserved.
2013 - 2014 Lu & Xiao. All rights reserved.
25
结构体指针
指针的基类型可以是一个结构体类型。 例如: struct student s1,*ps; …… ps = &s1;
2013 - 2014 Lu & Xiao. All rights reserved.
2013 - 2014 Lu & Xiao. All rights reserved.
15
第9章
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8
结构体
结构体类型 结构体变量定义及成员引用 结构体变量的初始化 结构体数组 结构体指针 单向链表概念 单向链表建立、查找、遍历、插入、删除 typedef定义类型别名
1
第 9章
结构体
2013 - 2014 Lu & Xiao. All rights reserved.
2
第9章
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8
结构体
结构体类型 结构体变量定义及成员引用 结构体变量的初始化 结构体数组 结构体指针 单向链表概念 单向链表建立、查找、遍历、插入、删除 typedef定义类型别名
c程序设计 谭浩强 第9章

几点使用说明
第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使 用方式
① 使用宏定义时所带的实参可以是常量、已被赋值 的变量名或者表达式。 例:将前面的示例程序改写为交互式输入半径值的方 式。 #define PI 3.1415926536 #define area(r) (PI*r*r) void main( ) { float r; printf("Input:r=?\n"); scanf("%f",&r); printf("Area=%f\n",area(r)); }
6
有关宏的定义和使用要注意以下几点:
第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使 用方式
⑥ 如果宏定义中的字符序列过长,在一行中放不 下,可在该行末尾加续行符“\”,后随一个换 行符。 #define LONG_STRING this is a very long \ ↙ string that is used as an example ⑦ 可以用宏定义来表示数据类型。 #define MAX 100 #define ENTRY struct entrytype 在程序中可用ENTRY定义变量: ENTRY table[MAX],* p;
4
有关宏的定义和使用要注意以下几点:
第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使 用方式
④ 宏定义可以嵌套。例如: #define PI 3.1415926 #define TWOPI ( 2*PI ) 在预处理后,语句 c1=TWOPI * r; 便替换成 c1=( 2 * 3.1415926 ) * r; ⑤ 宏替换只是按原来的定义“机械地”进行替 换,不管替换后的结果是对还是错。例如: #define A 3+2 那么 5/A 被替换成 5/3+2
(完整版)《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51。
4.1最简单的C语言程序举例61.4.2C语言程序的结构101。
5运行C程序的步骤和方法121。
6程序设计的任务141-5 #include 〈stdio。
h>int main (){ printf ("**************************\n\n”); printf(" Very Good!\n\n”);printf (”**************************\n”);return 0;}1—6#include <stdio.h>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〈b)max=b;if (max〈c)max=c;printf("The largest number is %d\n",max);return 0;}第2章算法—-程序的灵魂162。
1什么是算法162。
2简单的算法举例172。
3算法的特性212。
4怎样表示一个算法222。
4。
1用自然语言表示算法222。
4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4。
4用N S流程图表示算法282。
4。
5用伪代码表示算法312。
4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计373。
1顺序程序设计举例373.2数据的表现形式及其运算393。
2.1常量和变量393.2。
2数据类型423.2.3整型数据443。
2。
4字符型数据473。
2.5浮点型数据493。
2。
6怎样确定常量的类型513。
C程序设计(第四版)谭浩强_课后习题答案_共11章

第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>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<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>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); // 存活期存款。
C语言程序设计-谭浩强-第9章预处理命令

17/14
§9.1 宏定义 宏体可缺省,表示宏名
不带参数宏定义
定义过或取消宏体
一般形式: 宏体] 一般形式: #define 宏名 [宏体 宏体 功能:用指定标识符 宏名)代替字符序列 宏体) 用指定标识符(宏名 代替字符序列(宏体 功能 用指定标识符 宏名 代替字符序列 宏体
如 #define 定义位置:任意YES 1 一般在函数外面) 定义位置 任意(一般在函数外面 任意 一般在函数外面 #define 例 NO 0 YES #define 1 作用域:从定义命令到文件结束 作用域 从定义命令到文件结束 main() #define PI 3.1415926 #define OUT printf(“Hello,World”); { …….. YES原作用域 #undef可终止宏名作用域 可 } 格式: 格式: #undef 宏名 #undef YES 宏展开:预编译时,用宏体替换宏名 用宏体替换宏名---不作语法检查 宏展开:预编译时 用宏体替换宏名 不作语法检查 #define YES 0 max() 引号中的内容与宏名相同也不置换 YES新作用域 {…….. if(x==YES)WIDTH 80 如 例 #define WIDTH 80 printf(“correct!\n”); 例 #define 宏定义可嵌套, 宏定义可嵌套,不能递归 } else if (x==NO)( WIDTH+40 ) printf(“error!\n”); #define #define LENGTH 3.14159 例 #define PI LENGTH WIDTH+40 宏定义中使用必要的括号() 宏定义中使用必要的括号() 展开后: if(x==1) 展开后var=LENGTH*2; : var=LENGTH*2;printf(“correct!\n”); (×) printf(“2*PI=%f\n”,PI*2); 例 #define MAX MAX+10 × else 宏展开: 宏展开: :printf(“2*PI=%f\n”,3.14159*2); 宏展开 宏展开:var= ((x==0) ) * 2;printf(“error!\n”); 宏展开: if 80+40 宏展开 :var= 80+40*2;
C程序设计(谭浩强)课后习题答案选讲9

偷懒做法:不对原数组进行排 序,重新建立一个数组,每次 从原数组中挑选最大的值,存 入新数组,并将原数组中相应 值置0. 注意:小数据量可以,大数据 量时,务必用排序算法。
//保存数据 FILE* fp_stu_sort = fopen("stu_sort.txt", "w"); if (!fp_stu_sort) { printf("can not open stu_sort.txt\n"); } for (int i = 0; i < STUDENT_NUM; i++) { fprintf(fp_stu_sort, "%s\t%s\t", stu3[i].number, stu3[i].name); for (int j = 0; j < COURSE_NUM; j++) { fprintf(fp_stu_sort, "%f\t", stu3[i].course[j]); } fprintf(fp_stu_sort, "%f\n", stu3[i].mean); } fclose(fp_stu_sort);
//创建文件 employee emp = {"John", "001", "male", 27, "科大西区", 10000, "good", "Ph.D."}; FILE* employee_data = fopen("employee_data.txt", "w"); if (!employee_data) { printf("can not open employee_data.txt\n"); } fprintf(employee_data, "%s\n%s\n%s\n%d\n%s\n%d\n%s\n%s\n", , emp.number, emp.sex, emp.age, emp.address, emp.salary, emp.health, emp.culture); fclose(employee_data);
c程序设计第四版谭浩强课后答案

c程序设计第四版谭浩强课后答案谭浩强的《C程序设计》第四版是一本广泛使用的C语言教材,它详细介绍了C语言的基本概念和编程技巧。
课后答案对于学习者来说是一个重要的参考资源,可以帮助他们检验自己的学习成果和理解程度。
以下是一些可能的课后答案的概述,但请注意,由于具体问题和答案可能因版本和出版社的不同而有所变化,以下内容仅供参考。
第一章:C语言概述- 问题1:C语言的主要特点是什么?答案:C语言是一种结构化语言,具有高级语言的特点,同时具备汇编语言的许多功能。
它具有可移植性、简洁性、高效性等特点。
- 问题2:C语言的发展历史是什么?答案:C语言由丹尼斯·里奇在20世纪70年代初期开发,最初用于UNIX操作系统的编写。
随着UNIX操作系统的普及,C语言也逐渐流行起来。
第二章:数据类型、运算符和表达式- 问题1:C语言中的基本数据类型有哪些?答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float)和双精度型(double)。
- 问题2:什么是运算符优先级?答案:运算符优先级决定了在表达式中不同运算符的执行顺序。
例如,乘法和除法的优先级高于加法和减法。
第三章:控制语句- 问题1:C语言中的控制语句有哪些?答案:C语言中的控制语句包括条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue、return、goto)。
- 问题2:for循环的基本结构是什么?答案:for循环的基本结构是:```cfor (初始化表达式;条件表达式;迭代表达式) {// 循环体}```第四章:数组- 问题1:一维数组的声明和初始化方式有哪些?答案:一维数组的声明方式是指定数组名和数据类型,初始化方式可以是静态初始化或动态初始化。
- 问题2:多维数组与一维数组有什么区别?答案:多维数组可以看作是数组的数组,具有多个索引维度,而一维数组只有一个索引维度。
(完整版)《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31。
4最简单的C语言程序51.4。
1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤和方法121.6程序设计的任务141—5 #include 〈stdio.h〉int main ( ){printf (”**************************\n\n"); printf(" Very Good!\n\n");p rintf (”**************************\n");return 0;}1—6#include 〈stdio.h〉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〈b)max=b;if (max〈c)max=c;printf(”The largest number is %d\n”,max);return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172。
3算法的特性212。
4怎样表示一个算法222。
4。
1用自然语言表示算法222。
4。
2用流程图表示算法222。
4。
3三种基本结构和改进的流程图262。
4.4用N S流程图表示算法282。
4.5用伪代码表示算法312。
4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计373。
1顺序程序设计举例373.2数据的表现形式及其运算393.2。
1常量和变量393.2.2数据类型423.2.3整型数据443。
2。
4字符型数据473。
2.5浮点型数据493。
2。
6怎样确定常量的类型513。
2.7运算符和表达式523。
C程序设计(第四版)(谭浩强)完整版 课后习题答案

C程序设计(第四版)(谭浩强)第一章课后习题答案#include<stdio.h>//预编译.代码均调试成功,若有失误大多不是代码问题.自已找找.int main(){printf("Welcome to \n");return 0; //与int main对应,为了程序可移植性,建议全用int main + return 0;.}#include<stdio.h>int main(){int a,b,sum;a=5;b=4;sum=a+b;printf("The sum is %d .\n",sum);return 0;}P008 1.3 调用函数比较两个数的大小.#include<stdio.h>int main(){int max(int x,int y); //被调用函数在主函数后面,用前先声明.int a,b,c;scanf("%d,%d",&a,&b); //输入时要按格式来,此处的逗号,用空格会发生错误.c=max(a,b); //a,b作为实参传入被调用函数中.printf("The max is %d .\n",c);return 0;}int max(int x,int y) //定义了两个形参.{int z; //z属于局部变量,可与主函数中相同名字.if (x>y)z=x;elsez=y;return(z); //z作为整个程序的出口值,赋给主函数中的c.}P015 0.6 三个数的大小.(数字0表示课后练习题)#include<stdio.h>int main(){int a,b,c,d; //d是用于存储最大值的.int max(int x , int y , int z); //测试可知,在VS2008中,可以不预先声明.printf("Please input 3 numbers :\n");scanf("%d %d %d",&a,&b,&c);d=max(a,b,c); //调用函数中有三个形参,这里需要传入三个实参,才可运算.printf("The max is :%d .\n",d); // d可以换成max(a,b,c).}int max(int x , int y , int z){int m;if (x>y && x>z) //求三者之大的一种方法.m=x;if (y>x && y>z)m=y;if (z>y && z>x)m=z;return (m); //返回值m给主函数中的d.}C程序设计(第四版)(谭浩强)第2章课后习题答案算法——程序的灵魂#include<stdio.h>int main(){int i,s=1; //在执行数值操作前一定要先有个初值.for(i=1;i<6;i++) //这里是到6.{s=s*i; //相乘}printf("The sum is %d .\n",s);return 0;}#include<stdio.h> //作出要求:换成1到11间奇数相乘.int main(){int i,s=1; //在执行数值操作前一定要先有个初值.for(i=1;i<12;i++) //这里是到,但题目要求的是取单数.也可以是i=i+2{if(i%2!=0) //i对取模,值为非为奇数;为则为偶数.s=s*i;elsecontinue; //跳过这个for循环的这一次,执行下一次.}printf("The sum is %d .\n",s);return 0;}P019 2.2 按要求输出80分以上的学生信息.暂时没法做.P019 2.3 判断2000-2500年中的闰年,并输出.年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是365.2423天(目前)。
《C语言程序设计》课后习题答案第四版谭浩强

第1章程序设计和C语言1什么是计算机程序1什么是计算机语言1语言的发展及其特点3最简单的C语言程序5最简单的C语言程序举例6语言程序的结构10运行C程序的步骤与方法12程序设计的任务141-5 #include <>int main ( ){ printf ("**************************\n\n"); printf(" Very Good!\n\n");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<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂16什么是算法16简单的算法举例17算法的特性21怎样表示一个算法22用自然语言表示算法22用流程图表示算法22三种基本结构和改进的流程图26用N S流程图表示算法28用伪代码表示算法31用计算机语言表示算法32结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 顺序程序设计举例37数据的表现形式及其运算39常量和变量39数据类型42整型数据44字符型数据47浮点型数据49怎样确定常量的类型51运算符和表达式52语句57语句的作用和分类57最基本的语句——赋值语句59 数据的输入输出65输入输出举例65有关数据输入输出的概念67 用printf函数输出数据68用scanf函数输入数据75字符数据的输入输出78习题823-1 #include <>#include <>int main(){float p,r,n;r=;n=10;p=pow(1+r,n); printf("p=%f\n",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=;r3=;r2=;r1=;r0=;p1=p*((1+r5)*5); #include <> #include <>int main(){float d=300000,p=6000,r=,m;m=log10(p/(p-d*r))/log10(1+r);printf("m=%\n",m);return 0;}3-4#include <>int main(){int c1,c2;c1=197;c2=198;printf("c1=%c,c2=%c\n",c1,c2); printf("c1=%d,c2=%d\n",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=%c\n",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%c\n",c1,c2,c3,c4,c5); return 0;}3-7#include <>int main (){float h,r,l,s,sq,vq,vz;float pi=;printf("请输入圆半径r,圆柱高h∶");scanf("%f,%f",&r,&h); #include <> int main(){ int x,y;printf("输入x:");scanf("%d",&x);if(x<1) /* x<1 */{ y=x;printf("x=%3d, y=x=%d\n" ,x,y);}else if(x<10) /* 1=<x<10 */{ y=2*x-1;printf("x=%d, y=2*x-1=%d\n",x,y);}else /* x>=10 */{ y=3*x-11;printf("x=%d, y=3*x-11=%d\n",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;elsey=0;printf("x=%d,y=%d\n",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=%d\n",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("成绩是 %,相应的等级是%c\n ",score,grade);return 0;}4-9#include <>#include <>int main(){int num,indiv,ten,hundred,thousand,ten_thousand,place; .=%d\n",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!=%\n",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=%\n",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<a;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<m;i++)if ((m%i)==0) s=s+i;if(s==m){printf("%d,its factors are ",m); for (i=1;i<m;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=%\n",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=%d\n",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 % is %\n",a,x1); return 0;}5-14#include <>#include <>int main(){double x1,x0,f,f1;x1=;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 %\n",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=%\n",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--%c\nB--%c\nC--%c\n",i,j,k); return 0;}第6章利用数组处理批量数据142怎样定义和引用一维数组142怎样定义一维数组143怎样引用一维数组元素144一维数组的初始化145一维数组程序举例146怎样定义和引用二维数组148怎样定义二维数组149怎样引用二维数组的元素150 二维数组的初始化151二维数组程序举例152字符数组154怎样定义字符数组154字符数组的初始化155怎样引用字符数组中的元素155 字符串和字符串结束标志156 字符数组的输入输出159使用字符串处理函数161字符数组应用举例165习题1686-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<sqrt(100);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=%6d\n",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 5int main(){ int a[N],i,temp;printf("enter array a:\n"); for (i=0;i<N;i++)scanf("%d",&a[i]);printf("array a:\n");for (i=0;i<N;i++)printf("%4d",a[i]);for (i=0;i<N/2;i++) 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]!='\0';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++;elseoth++;}}printf("\nupper case: %d\n",upp); printf("lower case: %d\n",low); printf("digit : %d\n",dig); printf("space : %d\n",spa); printf("other : %d\n",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]!='\0'){ 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];elsetran[j]=ch[j];j++;}n=j;printf("\noriginal text:");for (j=0;j<n;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:%s\n",ch); j=0;while (ch[j]!='\0'){ 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];elsech[j]=ch[j];j++;}n=j;printf("original text:");for (j=0;j<n;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]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("\nThe new string is:%s\n",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]!='\0'))i++; if (s1[i]=='\0' && s2[i]=='\0')resu=0;elseresu=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++)。
C程序设计第九章课后答案

C程序设计谭浩强第九章课后答案1#include<stdio.h>struct Days{int year;int month;int day;};int main(){int mds[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,d;struct Days a;printf("请输入年、月、日\n");scanf("%d,%d,%d",&a.year,&a.month,&a.day);d=a.day;for(i=0;i<a.month-1;i++)d+=mds[i];if((a.year%4==0&&a.year%100!=0||a.year%400==0)&&a.month>2) d++;printf("%d月%d日是%d年的第%d天\n",a.month,a.day,a.year,d);return 0;}2#include<stdio.h>struct Days{int year;int month;int day;};int main(){int days(struct Days a);struct Days a;printf("请输入年、月、日\n");scanf("%d,%d,%d",&a.year,&a.month,&a.day);printf("%d月%d日是%d年的第%d天\n",a.month,a.day,a.year,days(a));return 0;}int days(struct Days a){int mds[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,d;d=a.day;for(i=0;i<a.month-1;i++)d+=mds[i];if((a.year%4==0&&a.year%100!=0||a.year%400==0)&&a.month>2)d++;return d;}3#include<stdio.h>struct Student{int num;char name[20];int score[3];};int main(){void print(struct Student a[]);struct Student a[5];int i,j;printf("请依次输入5名学生的学号:\n");for(i=0;i<5;i++)scanf("%d",&a[i].num);printf("请依次输入5名学生的姓名:\n");for(i=0;i<5;i++)scanf("%s",a[i].name);printf("请依次输入5名学生的成绩:\n");for(i=0;i<5;i++)for(j=0;j<3;j++)scanf("%d",&a[i].score[j]);print(a);return 0;}void print(struct Student a[]){struct Student *p=a;printf("学号姓名语文数学英语\n");for(;p<a+5;p++)printf("00%d %-14s %4d %4d %4d\n",p->num,p->name,p->score[0],p->score[1],p->score[2]) ;}4#include<stdio.h>struct Student{int num;char name[20];int score[3];};int main(){void print(struct Student a[]);void input(struct Student a[]);struct Student a[5];input(a);print(a);return 0;}void input(struct Student a[]){int i,j;printf("请依次输入5名学生的学号:\n");for(i=0;i<5;i++)scanf("%d",&a[i].num);printf("请依次输入5名学生的姓名:\n");for(i=0;i<5;i++)scanf("%s",a[i].name);printf("请依次输入5名学生的成绩:\n");for(i=0;i<5;i++)for(j=0;j<3;j++)scanf("%d",&a[i].score[j]);}void print(struct Student a[]){struct Student *p=a;printf("学号姓名语文数学英语\n");for(;p<a+5;p++)printf("00%d %-14s %4d %4d %4d\n",p->num,p->name,p->score[0],p->score[1],p->score[2]) ;}#include<stdio.h>struct Student{int num;char name[20];int score[3];};int main(){void print(struct Student a[]);void input(struct Student a[]);struct Student a[10];input(a);print(a);return 0;}void input(struct Student a[]){int i,j;printf("请依次输入10名学生的学号:\n");for(i=0;i<10;i++)scanf("%d",&a[i].num);printf("请依次输入10名学生的姓名:\n");for(i=0;i<10;i++)scanf("%s",a[i].name);printf("请依次输入10名学生的成绩:\n");for(i=0;i<10;i++)for(j=0;j<3;j++)scanf("%d",&a[i].score[j]);}void print(struct Student *p,av){struct Student *p=a;printf("学号姓名语文数学英语平均成绩\n");printf("00%d %-14s %4d %4d %4d %4d\n",p->num,p->name,p->score[0],p->score[1],p->scor e[2],av);}。
(完整版)《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言11.1什么是计算机程序11。
2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4。
2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf (”**************************\n\n"); printf(" Very Good!\n\n”);p rintf (”**************************\n”); return 0;}1-6#include <stdio。
h〉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<b)max=b;if (max〈c)max=c;printf(”The largest number is %d\n",max);return 0;}第2章算法—-程序的灵魂162。
1什么是算法162。
2简单的算法举例172.4.2用流程图表示算法222。
4。
3三种基本结构和改进的流程图262。
4.4用N S流程图表示算法282。
4。
5用伪代码表示算法312。
4.6用计算机语言表示算法322。
5结构化程序设计方法34习题36第章最简单的C程序设计-—顺序程序设计37 3。
1顺序程序设计举例373。
2数据的表现形式及其运算393。
2.1常量和变量393。
2。
2数据类型423.2。
3整型数据443。
2。
4字符型数据473。
2.5浮点型数据493。
2。
6怎样确定常量的类型513。
2.7运算符和表达式523.3C语句573.3。
1C语句的作用和分类573。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>#include<stdlib.h>/*int days(inty,intm,int d) //计算天数{int days=0,i;int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(y%4==0&&y%100!=0||y%400==0) //判断是否为闰年a[1]+=1;if(m==1)return days;else{for(i=0;i<m-1;i++)days+=a[i];days+=d;return days;}}struct date{int year;int month;int day;int days;}a;int main(){printf("enter date:");scanf("%d %d %d",&a.year,&a.month,&a.day);a.days=days(a.year,a.month,a.day);printf("%d年%d月%d日是该年的第%d天\n",a.year,a.month,a.day,a.days); }*//*#define N 10 //第3、4题时N为5,第5题时N为10 struct student{intnum;char name[20];float score[3];float ave; //第3、4、5题共用一个结构体类型}stu[N];*/void print(struct student a[]){inti;printf("学号姓名\t三门课成绩\n");for(i=0;i<N;i++)printf("%ld %s\t%-5.1f %-5.1f %-5.1f\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].sc ore[2]);}int main(){inti;printf("请输入%d个学生的信息:学号、姓名、三门课成绩:\n",N);for(i=0;i<N;i++)scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].sc ore[2]);print(stu);}*//*void print(struct student a[]){inti;printf("学号姓名\t三门课成绩\n");for(i=0;i<N;i++)printf("%ld %s\t%-5.1f %-5.1f %-5.1f\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].sc ore[2]);}void input(struct student a[]) //在上一题的基础上编写input函数{inti;printf("请输入%d个学生的信息:学号、姓名、三门课成绩:\n",N);for(i=0;i<N;i++)scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].sc ore[2]);}int main(){input(stu);print(stu);*//*测试数据10101 wu 70 71 9010102 chen 60 64 9010103 guo 80 78 9010104 lu 80 64 9010105 xu 60 65 9010106 huang 90 78 9010107 chen 70 66 9010108 rong 90 72 9010109 yang 50 63 9010110 zhang 50 71 90*//*int main(){inti,m=0;float average=0;printf("请输入%d个学生的信息:学号、姓名、三门课成绩:\n",N);for(i=0;i<N;i++){scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].sc ore[2]);stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;average+=stu[i].ave/N;}for(i=1;i<N;i++)if(stu[i].ave>stu[m].ave)m=i;printf("三门课程总平均成绩为:%5.1f\n成绩最高的学生是:\n学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",average,stu[m].num,stu[m].name,stu[m].score[0],stu[m].score[1],stu[m].score[2],st u[m].ave);}*//*#define N 13 //定义人数struct a{intnum; //原来的序号int count; //报数数目struct a *next;};int main(){inti,j=1;struct a *p1,*p2,b[N];p1=b;for(i=0;i<N;i++){b[i].num=i+1; //定义序号为1到13if(i==N-1)b[i].next=&b[0]; //将最后一个节点的指针变量指向第一个节点elseb[i].next=&b[i+1]; //将每个节点的指针变量指向下一个节点}while(p1->next!=p1) //p1的next成员指向自己时表明只剩最后一个人{p1->count=j; //报数if(j==2)p2=p1; //p2的作用是标记报数为2的人if(j==3){j=1;p2->next=p1->next;//将报数为3的next成员赋值给上一个报数为2的next成员,使之指向下一个报数为1的//成员;}elsej+=1;p1=p1->next; //p1指向下一个count不为3的成员}printf("最后留在圈子的人原来的序号为:%d\n",p1->num);}*//*# define L sizeof(struct student)struct student{longnum;float score;struct student *next;};int n;struct student *creat(void) //生成单向动态链表的函数{struct student *head;struct student *p1,*p2;n=0;p1=p2=malloc(L);scanf("%ld,%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n+=1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=malloc(L);scanf("%ld,%f",&p1->num,&p1->score);}p2->next=NULL;return head;}void print(struct student *head) //输出链表的函数{struct student *p=head;printf("\nnow,these records are:\n");while(p!=NULL){printf("%ld %5.1f\n",p->num,p->score);p=p->next;}}struct student *del1(struct student *head,longnum) //删除指定节点的函数,方法一,指定删除节点的数据{struct student *p1,*p2;p1=head;if(p1->num==num)return head=p1->next;else{while(p1->num!=num){p2=p1;p1=p1->next;}p2->next=p1->next;p1->next=NULL;return head;}}struct student *del2(struct student *head,int n) //方法二,指定删除节点序号{struct student *p1,*p2;inti=1;p1=head;if(i==n)return head=p1->next;else{while(i++<n){p2=p1;p1=p1->next;}p2->next=p1->next;p1->next=NULL;return head;}}int main(){struct student *head;longnum; //int n;head=creat();print(head);printf("\n输入要删除学生的学号:"); //printf("\n输入要删除节点序号:");scanf("%ld",&num); //scanf("%d",&n);head=del1(head,num); //head=del2(head,n);print(head);}*//*# define L sizeof(struct student)struct student{longnum;float score;struct student *next;};int n;struct student *creat(void) //生成单向动态链表的函数{struct student *head;struct student *p1,*p2;n=0;p1=p2=malloc(L);scanf("%ld,%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n+=1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=malloc(L);scanf("%ld,%f",&p1->num,&p1->score);}p2->next=NULL;return head;}void print(struct student *head) //输出链表的函数{struct student *p=head;printf("\nnow,these records are:\n");while(p!=NULL){printf("%ld %5.1f\n",p->num,p->score);p=p->next;}}struct student *del1(struct student *head,longnum)//删除指定节点的函数,num为指定删除节点的数据{struct student *p1,*p2;p1=head;if(p1->num==num)return head=p1->next;else{while(p1->num!=num){p2=p1;p1=p1->next;}p2->next=p1->next;p1->next=NULL;return head;}}struct student *insert(struct student *head,struct student *p,int n) //插入节点的函数,n为新节点序号{struct student *p1,*p2;inti=1;p1=head;if(i==n){p->next=p1;head=p;}else{while(i++<n){p2=p1;p1=p1->next;}p2->next=p;p->next=p1;}return head;}int main(){struct student *head,*p;int n;longnum;head=creat();print(head);printf("\n输入要删除学生的学号:");scanf("%d",&num);head=del(head,num);print(head);p=malloc(L);//为插入的新节点开辟单元,否则p的值不确定printf("\n输入要添加学生的学号,成绩,序号:");scanf("%ld,%f,%d",&p->num,&p->score,&n);head=insert(head,p,n);print(head);}*//*# define L sizeof(struct student)struct student{intnum;float score;struct student *next;};int n;struct student *creat(void) //生成单向动态链表的函数{struct student *head;struct student *p1,*p2;n=0;p1=p2=malloc(L);scanf("%d %f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n+=1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=malloc(L);scanf("%d %f",&p1->num,&p1->score);}p2->next=NULL;return head;}void print(struct student *head) //输出链表的函数{struct student *p=head;printf("\nnow,these records are:\n");while(p!=NULL){printf("%d %5.1f\n",p->num,p->score);p=p->next;}}struct student *sort(struct student *head) //建立链表排序函数{struct student *p1,*p2;int t;float s;p1=head;p2=p1->next;while(p1&&p2)//不能写为p1,否则当p1指向最后一个结点时,最后一句循环语句出问题{while(p2){if(p1->num>p2->num){t=p1->num;s=p1->score;p1->num=p2->num;p1->score=p2->score;p2->num=t;p2->score=s;p2=p2->next;}else //不能省略else语句,否则遇到p1->num<p2->num时无限循环p2=p2->next;}p1=p1->next;p2=p1->next;}return head;}struct student *cat(struct student *head1,struct student *head2) //建立链表合并函数{struct student *p,*t;p=head1;while(p){t=p; //循环结束时t将指向a链表的最后一个指针p=p->next;}t->next=head2;return head1;}int main(){struct student *a,*b;printf("输入链表a:\n");a=creat();printf("输入链表b:\n");b=creat();print(sort(cat(a,b)));}*//*测试数据10018 8910016 6410014 8110012 940 010017 6710015 6810013 7610011 850 0*//*# define L sizeof(struct student)struct student{longnum;char name[20];struct student *next;};int n;struct student *creat(void) //生成单向动态链表的函数{struct student *head;struct student *p1,*p2;n=0;p1=p2=malloc(L);scanf("%ld %s",&p1->num,p1->name);head=NULL;while(p1->num!=0){n+=1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=malloc(L);scanf("%ld %s",&p1->num,p1->name);}p2->next=NULL;return head;}void print(struct student *head) //输出链表的函数{struct student *p=head;printf("\n现在链表a为:\n");while(p!=NULL){printf("%ld %s\n",p->num,p->name);p=p->next;}}struct student *delsame(struct student *a,struct student *b) //从a中删去与b相同学号的节点{struct student *p1,*p2,*p3;longnum;ints,k=0;p3=p1=a;p2=b;while(p1){s=0;num=p1->num;while(p2){if(p2->num!=num)p2=p2->next;else{s=1;break;}}if(s==1)p3->next=p1->next; //若a最后一个相同,p3的指针数据为null else{p3=p1; //每找到一个与b不相等的指针时,p3指向它k+=1; //每找到一个与b不相等的指针时,k累加1if(k==1) //找到第一个与b不相等的指针时,将头指针赋值给aa=p1;}p1=p1->next; //p1指向下一个指针p2=b; //p2重新指向链表b开头}if(k==0) //k=0表明a,b链表相同,返回null return a=NULL;elsereturn a;}int main(){struct student *a,*b;printf("输入链表a:\n");a=creat();printf("输入链表b:\n");b=creat();a=delsame(a,b);print(a);}*//*#define L sizeof(structinf)structinf{longnum;int age;char name[20];char sex;structinf *next;};int n;structinf *creat(void) //生成单向动态链表的函数{structinf *head;structinf *p1,*p2;n=0;p1=p2=malloc(L);scanf("%ld %s %c %d",&p1->num,p1->name,&p1->sex,&p1->age);head=NULL;while(p1->num!=0){n+=1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=malloc(L);scanf("%ld %s %c %d",&p1->num,p1->name,&p1->sex,&p1->age);}p2->next=NULL;return head;}void print(structinf *head) //输出链表的函数{structinf *p=head;printf("\nnow,theseinf are:\n");while(p!=NULL){printf("%ld %s %c %d\n",p->num,p->name,p->sex,p->age);p=p->next;}}structinf *delage(structinf *head,int a) //删除指定年龄节点的函数{structinf *p1,*p2;p1=head;while(p1->age==a)p1=p1->next;head=p1;p2=p1;while(p1->next!=NULL){if(p1->age==a){p2->next=p1->next;p1=p1->next;}else{p2=p1;p1=p1->next;}}if(p1->age==a)p2->next=NULL;return head;}int main(){structinf *head;int a;head=creat();print(head);printf("\n输入要删除的年龄:");scanf("%d",&a);head=delage(head,a);print(head);}*//*测试数据10009 chen f 2410010 wang m 2810011 li f 2810012 zhao m 2810013 chen f 2410014 wei m 2510015 yang f 2610016 tian m 2810016 tian m 2810017 mei f 2710018 liu m 2810019 chen f 24*/。