c语言程序设计何钦铭颜晖第10章函数与程序结构
C语言程序设计(第3版)何钦铭-颜-晖-第9章--结构

第9章结构【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个局部。
解答:struct complex{float real;float imaginary;};【练习9-2】人的出生日期由年、月、日组成,请在例 9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。
解答:struct date{int year;int month;int day;};struct student{int num;char name[10];struct date birthday;int computer,english,math;double average;};【练习9-3】例 9-1 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序?解答:#include<stdio.h>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i, n;double math_sum,english_sum,computer_sum;struct student s1;printf("Input n:");scanf("%d", &n);printf("Input the student's number, name and course scores:\n"); math_sum=english_sum=computer_sum=0;for(i=1;i<=n;i++){printf("No.%d:",i);scanf("%d%s%d%d%d",&s1.num,,&s1.math,&s1.english,&s1 puter);math_sum+=s1.math;english_sum+=s1.english;computer_sum+=s1 puter;}printf("math_ave:%.2lf\nenglish_ave:%.2lf\ncomputer_ave:%.2lf\n", math_sum/n,english_sum/n,computer_sum/n);return 0;}【练习9-4】定义一个包含 5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
C语言程序设计 (何钦铭 ) 高教版 第2版 课后习题解答资料

修改程序,观察语法错误、逻辑错误及改
C语言程序的调试、运行步骤
正方法。 ² 语法错误:可以删除一个分号,使编
编辑
编译
连接
运行
开始
源程序 .c / .cpp
目标程序 .obj
可执行程序 .exe
结果
语法 错误
连接 错误
运行 错误
译出现错误提示,改正之,再编译。 类比写文章有错别字。 ² 逻 辑 错 误 : 将 sum=sum+i 改 为 sum=sum-i,编译、连接、运行,发现 运行结果不符合题目要求。找出错误
int celsius, fahr; fahr = 150; celsius = 5 * (fahr – 32) / 9; printf("fahr = %d, celsius = %d\n", fahr, celsius); return 0; }
2-5 算 术 表 达 式 5*(fahr-32)/9 能 改 写 成 5(fahr-32)/9 吗 ? 为 什 么 ? 如 果 将 其 改 写 为 5/9*(fahr-32),会影响运算结果吗? 解答:
5(fahr-32)/9 不是合法的 C 表达式,因为不能省略运算符*;5/9*(fahr-32)的值为 0。
2-6 一个物体从 100 米的高空自由落下,编写程序,求它在前 3 秒内下落的垂直距离。设重 力加速度为 10m/s2。 解答: #include <stdio.h> int main(void) {
sum = 0 i=1
假 i <= 100?
真
真
假
i能被6整除?
sum = sum + i
i=i+1
C语言程序设计(何钦铭_颜晖_主编)ppt课件

printf("%d, %x\n", 012, 012);
return 0;
}
0……01010
精选ppt课件2021
32
例6-2(2) 输入整型数据
# include <stdio.h> int main(void) {
int a, b;
input a, b: 17 17 15 17 f, 17
printf("input a, b:");
'\n' '\101' '\x41' 'A'
所有字符都可以用转义字符表示
精选ppt课件2021
26
6.2.2 变量
在程序运行过程中,其值可以被改变的量。
变量必须先定义,后使用 定义变量时要指定变量名和数据类型 变量应该先赋值,后引用
精选ppt课件2021
27
变量名:合法的标识符
变量的定义
整型、实型、字符型数据的存储
6.1.2 基本数据类型
整型、实型、字符型
精选ppt课件2021
4
6.1.1 数据的存储-整型数据
设整数在内存中用2个字节存储
1 000 0001 1000 0001 0 000 0001 1000 0001
符号位 1:负数 0:正数
精选ppt课件2021
5
数值的表示方法-原码 反码 补码
16或32位
short [int] unsigned short [int] 16位
long [int] unsigned long [int]
32位
有符号 short
1 000 0000 0000 0000 -32768 -215
c语言程序设计第10章课件

a.birthday.year a.birthday.month a.birthday.day
结 构 体 变 量 a 的 各 成 员 可 分 别 表 示 为 a.num、 、a.sex、a.birthday、a.score
9.1 结构体
16
9.1.2 结构体变量的定义与初始化
【例9.6】编写一个统计选票的程序。
scanf("%d/%d/%d",&today.year,&today.month,
&today.day);
printf("Today:%d/%d/%d\n",p->year,p->month,
p->day);
}
9.1 结构体
22
9.1.3 结构体的指针
tab数组
3. 指向结构体数组的指针
【例9.7】利用结构体指针输出一组化学 元素名称及其原子量。
“红领巾”真好
厦门市松柏第二小学 吴小蔚
第9章 结构体与共用体
2
9.1 结构体 9.2 共用体 9.3 枚举类型与类型命名
9.1 结构体
3
9.1.1 结构体与结构体类型的定义
信息管理
一个学生的信息有学号、姓名、性别、年龄、住 址、成绩等。
一本图书的信息有分类编号、书名、作者、出版社、 出版日期、价格、库存量等。
struct date { int year, month, day;}; struct student { char num[8], name[20], sex;
struct date birthday; float score; }a={"9606011","Li ming",'M',{1977,12,9},83},b,c;
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 习题11 课后答案

//差几分钟
//差几秒
6. *编写函数:把两个链表合并成一个链表,并返回新练表(的表头)-----提高篇 //定义链表结构—职工信息表 struct zg{ char *name; int salary; struct zg *next; } (struct zg* ) merge( struct zg *list1, struct zg *list2) { struct zg *p; for( p=list1; p->next!=NULL; p->next=list2; return list1; } 7. *复制链表 L 到新链表 NEW 上。 (新链表NEW仅有一个表头指针,其余节点需要新建---提高篇 (struct zg*) copy( struct zg *L) { if( L==NULL) { //若源链表是空表,则返回 NULL return NULL; } //L 非空,则逐个复制到 NEW 中 struct zg *NEW, *tail, *p,*q; p= p->next) ; //p 指向链表 list1 的尾部(尾部特征是 next 指针为空)
8~11 略 12. 写一函数,得到一个 16 位二进制数中的任何一位的数值。即给定一个长度为 2B 的整数 x,和一个位数 k,该函数返 回 x 转换成二进制数后的第 k(k=0,1,…,15)位数字 ???????????????? 15 。 。 。 6543210 分析:利用位运算规则:0 或 1 与 0 做按位与&运算,都是 0;0 或 1 与 1 做&运算,都是它本身。 故对给定的 x 和 k, 只需将 x 与一个 16 位二进制数(第 k 位为 1,其余 15 位为 0)按位与即可:若 x 中的第 k 位是 0, 则计算结果是 16 个 0,转换为十进制数就是 0;若 x 中第 k 位是 1,则计算结果是 15 个 0,第 k 位是 1,转换成十进制 数一定不等于 0. 与 x 做按位与的整数是:第 k 位为 1,其余 15 位是 0,即 2 的 k 次幂。 #include<math.h> //pow() int digit( int x, int k) //k=0,…,15 { if( k<0 || k>15) return -1; int y= pow(2,k); if( x&y==0) return 0; else return 1; }
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 全部课后习题答案

3. /*输入一个学生的数学成绩,低于 60,输出“Fail” ,否则,输出“Pass” 。*/ #include<stdio.h> void main() { double mark; //输入数序成绩 printf(" Input a mark:\n"); scanf("%lf", &mark);
5. /*输入 4 个整数 n, 输出最小值。*/ #include<stdio.h> void main() { int a,b,c,d, min; //输入 4 整数 printf(" Input number of integers n:\n"); scanf("%d%d%d%d", &a,&b,&c,&d);
s ( s a )( s b)( s c), where s
abc 2
源程序: #include<stdio.h> #include<math.h> void main() { double a, b, c, s, area, perimeter; //输入三条边 a,b,c printf(" Input three edges a b c:"); scanf("%lf%lf%lf", &a,&b,&c); //判断 a b c 是否构成三角形 if(a+b>c || a+c>b || b+c>a) { perimeter =a+b+c; s =perimeter/2; area =sqrt( s*(s-a)*(s-b)*(s-c) ); printf(“ area=%.2f, parameter=%.2f \n”, area, parameter); } else printf("These sides do not correspond to a valid triangle. \n"); }
C语言程序设计(何欣铭、颜晖 第2版)课后习题答案

14
62
函数的概念
C语言中有两种类型函数
简单总结本节内容。 使学生了解自定义函数编程结构,能够模 仿编程即可。
标准库函数 自定义函数
函数可以做到一次定义、多次调用 使用自定义函数的程序框架
double fact(int n); int main(void) { …… result = fact(i); …… } /* 定义求 n! 的函数 */
1.3 习题参考答案
1 .对 C 语言来说,下列标识符中哪些是合法的,哪些是不合法的? t o t a l ,_ d e b u g ,L a r g e & T a l l ,C o u n t e r 1 ,b e g i n _ 解答:L a r g e & T a l l 不合法, 其余都合法。 2.改写本章 1.4 节中的流程图 1.2,求 1~100 中能被 6 整除的所有整数的和。 解答:
39
C语言程序的调试、运行步骤
编辑 编译 连接 运行
开始
源程序 .c / .cpp
目标程序 .obj
可执行程序 .exe
结果
语法 错误
连接 错误
运行 错误
修改程序,观察语法错误、逻辑错误及改 正方法。 ² 语法错误:可以删除一个分号,使编 译出现错误提示,改正之,再编译。 类比写文章有错别字。 ² 逻 辑 错 误 : 将 sum=sum+i 改 为 sum=sum-i,编译、连接、运行,发现 运行结果不符合题目要求。找出错误 (调试) ,改正之,再编译、连接、运 行,看结果。类比写文章词不达意。
输入n
i = 2
假
i<=n/2?
真 真
n能被 i整除?
C语言程序设计 (何钦铭 颜晖 著) 浙江科学技术出版社 习题10 课后答案

4. 定义函数 search(int list[], int n, int x), 在长度为 n 的数组 list 中查找元素 x, 并返回 x 在 list 中的下标。 如果 x 在 list 中不存在,则返回-1. 解法 1:使用 break 语句 int search( int list[], int n, int x) { int i, index=-1; //index: x 在 list 中的下标,目前尚未找到,因此初始化为-1 for ( i=0; i<n; i++) //逐个对比 list[i]与 x, 相等则跳出循环,否则继续往下比较,直到整个数组比完 if( list[i]== x ) { index=i; break; } return index; //返回 x 在 list 中的下标 } 解法 2:使用 return 语句—当程序执行到 return 语句,将提前结束循环,并结束函数 search(),返回主函数 main() int search( int list[], int n, int x) { int i ; for ( i=0; i<n; i++) //逐个对比 list[i]与 x, 相等则跳出循环,否则继续往下查找,直到找遍整个数组 if( list[i]== x ) return i; return -1; //当 for 循环正常结束,说明找遍整个数组都找不到 x, 返回-1 }
while ( *p!=’\0’ ){ *s++= *p++; }
while ( *p ){ *s++= *p++; }
9. /*分别用字符数组和字符指针实现自定义函数 strcat(s,t). 将字符串 t 连接到 s 之后,要求返回字符串 s 的首地址*/ 实例: s=”welcome” t=”friend”, m=3, 调用自定义函数 strcpy(s,t,m)后, s=”welcomefriend”, t 保持不变, 仍为”friend” 该函数要求返回 s 的首地址,即首字符的地址,因此函数返回值的类型是字符指针(详见 10.4 节) ,因此函数类型是 char *; 形参有 2 个,分别是两个字符串 s 和 t.
《C语言程序设计》-何钦铭

《C语⾔程序设计》-何钦铭第⼀章引⾔1.2 程序与程序设计语⾔冯 · 诺依曼模型的存储程序概念:将程序与数据共同存储结构化的程序设计⽅法:将复杂程序划分为若⼲个相互独⽴的模块(⼀个模块可以是⼀条语句、⼀段程序或⼀个函数等)使完成每个模块的⼯作变得单纯⽽明确,在设计⼀个模块时不受其他模块的牵连。
同时,通过现有模块积⽊式的扩展就可以形成复杂的、更⼤的程序模块或程序1.3 C语⾔的发展历史与特点C语⾔的特点:(拥有底层操作能⼒)1.结构化语⾔2.易于移植3.简洁紧凑,使⽤⽅便灵活4.强⼤的处理能⼒5.⽣成的⽬标代码质量⾼,运⾏效率⾼第⼆章⽤C语⾔编写程序2.3 计算分段函数#include <stdio.h> //编译预处理指令程序运⾏时,⾸先从main函数开始运⾏%f指定输出时保留6位⼩数,%.2f则指定输出时保留2位⼩数循环体语句只能是⼀条语句(如果循环体语句由多条语句组成,必须⽤⼤括号把他们括起来,变成⼀条复合语句)整型数据的输出格式控制说明%md,指定了数据的输出宽度为m(包括符号位)。
若数据的实际位数(含符号位)⼩于m,左端补空格;若⼤于m,按实际位数输出实型数据的输出格式控制说明 %m.nf,指定了输出浮点型数据时保留n位⼩数,且输出宽度是m(包括符号位和⼩数点)。
若数据的实际位数(含符号位)⼩于m,左端补空格;若⼤于m,按实际位数输出f是针对浮点型数据⽽⾔,若输出数据为整型,则%m.nf应改为%md赋值运算符左边只能是⼀个变量第三章分⽀结构ch = getchar() //从键盘输⼊⼀个字符,并赋值给变量chputchar(输出参数); //输出参数是字符型变量或字符型常量第四章循环结构else和 if 的匹配准则:else与最靠近它的、没有与别的 else 匹配过的匹配do-while语句:循环条件需要在循环体中明确,且⾄少会执⾏⼀次循环体do {循环体语句} while (表达式);//判断⼀个数是否为素数#include <stdio.h>int main() {int i,m;printf("Enter a number:");scanf("%d", &m);for(i=2;i<=m/2;i++)if(m%i==0)break; //若m能被某个i整除,则m不是素数,提前结束循环if(i>m/2 && m!=1) //若循环正常结束,说明m不能被任何⼀个i整除printf("%d is a prime number! \n", m);elseprintf("No! \n");return 0;}break语句强制循环结束,不再执⾏循环体中位于其后的其他语句,break语句应该和if语句配合使⽤,即条件满⾜时,才执⾏break跳出循环;否则若break⽆条件执⾏,意味着永远不会执⾏循环体中break后⾯的其他语句continue语句:跳过循环体中continue后⾯的语句,继续下⼀次循环,continue语句⼀般也需要与if语句配合使⽤break语句和continue语句的区别在于,break结束循环,⽽continue跳过后⾯语句继续循环。
C语言程序设计何钦铭颜晖第10章函数与程序结构

C语言程序设计何钦铭颜晖第10章函数与程序结构函数是C语言程序设计的重要组成部分,可以帮助我们组织和管理代码,实现代码的复用和模块化开发。
本章将介绍函数的定义、调用和参数传递等基本概念,以及程序的模块化结构和头文件的使用。
1.函数定义与调用函数是一些已经封装好的代码块,可以在需要的地方被调用执行。
函数的定义包括函数名、参数列表和函数体。
函数的调用通过函数名和实参列表来实现。
在C语言中,函数的定义一般是在main函数之前。
函数可以返回一个值,也可以不返回任何值。
例如:int main(,其中int表示返回值类型,main表示函数名。
没有返回值的函数使用关键字void来表示。
函数可以有多个参数,参数之间用逗号分隔。
参数可以是任意数据类型。
函数体中的代码用花括号{}括起来。
例如:int add(int a, int b) {return a + b;}表示定义了一个add函数,接受两个int类型的参数a和b,返回它们的和。
函数的调用通过函数名和实参列表来实现。
例如:int sum = add(3, 5);表示调用了add函数,并将返回结果赋值给sum变量。
函数调用前面需要指定返回类型,以便正确使用函数返回的值。
2.递归函数递归函数是一种特殊的函数,它在函数体内部调用自己。
递归函数可以解决一些问题,如阶乘、斐波那契数列等。
但是要注意递归函数的退出条件,否则可能会导致无限递归,造成程序崩溃。
3.函数的参数传递在函数的定义中,可以指定参数的传递方式。
C语言中有两种参数传递方式:值传递和指针传递。
值传递是将实参的值复制给形参,函数内部对形参的修改不会影响实参。
指针传递是将实参的地址传递给形参,可以在函数内部修改实参的值。
4.程序结构与模块化开发模块化开发是将程序分解成多个模块,每个模块负责一个特定的功能。
C语言中使用头文件来实现模块化开发。
头文件包含了函数的声明,以及一些常量、宏定义等。
头文件需要使用#include指令引入到主文件中。
《C语言程序设计》第4版何钦铭、颜晖主编课后习题答案

《C语⾔程序设计》第4版何钦铭、颜晖主编课后习题答案第2章 ⽤C语⾔编写程序Page 0201#include<stdio.h>//练习2-32int main(void)3{4 int i,j,k;5 for(int i=1;i<=4;i++)//第i⾏6 {7 for(int j=1;j<=i-1;j++)//j个空格8 {9 printf(" ");10 }11 for(k=1;k<=5-i;k++)//k个*12 {13 printf("* ");14 }15 printf("\n");16 }1718 return 0;19}Page 0231#include<stdio.h>2int main(void)3{4 int f,c;//练习2-55 f=150;6 c=5*(f-32)/9;//或者是c=5/9.0*(f-32)||c=5.0/9*(f-32),但不可以是5/9,会得到0.因为:两个整型数据做除法运算,结果⼀定是整数。
7 printf("华⽒温度%d对应的摄⽒温度为%d.\n",f,c);89 printf("\n");1011 /*计算物体⾃由下落的距离(练习2-6)*/12 int h,g,t;13 t=3;//下落时间14 g=10;//重⼒加速度 10m/s^215 h=g*t*t/2;16 printf("⼀个物体从100⽶的⾼空⾃由下落,前3秒内下落的距离为:%d⽶.\n",h);1718 return 0;19}20Page 0292#include<math.h>3int main(void)4{5 /*计算摄⽒温度(练习2-8)*/6 double c,f;7 printf("输⼊华⽒温度:");8 scanf("%lf",&f);9 c=5*(f-32)/9.0;10 printf("华⽒温度%.2lf对应的摄⽒温度为%.3lf\n",f,c);1112 printf("\n");1314 /*整数四则运算(练习2-9)*/15 int x,y,z_1,z_2,z_3;16 double z_4;17 printf("输⼊两个正整数x,y:");18 scanf("%d %d",&x,&y);19 z_1=x+y;20 z_2=x-y;21 z_3=x*y;22 z_4=x/y;23 printf("%d和%d的和为%d,差为%d,积为%d,商为%lf\n",x,y,z_1,z_2,z_3,z_4); 2425 printf("\n");2627 /*计算分段函数(判断x是否不为0)(练习2-10)*/28 double x_1,y_1;29 printf("输⼊x_1:");30 scanf("%lf",&x_1);31 if(x_1!=0)32 y_1=1/x_1;33 else y_1=0;34 printf("输⼊%.2lf时,对应的y值为%.1lf\n",x_1,y_1);3536 printf("\n");3738 /*计算分段函数(判断x是否⼩于0)(练习2-11)*/39 double x_2,y_2;40 printf("输⼊x_2:");41 scanf("%lf",&x_2);42 if(x_2<0)43 y_2=pow(1+x_2,2)+2*x_2+1/x_2;44 else y_2=sqrt(x_2);45 printf("输⼊%.2lf时,对应的y值为%.2lf\n",x_2,y_2);464748 printf("\n");4950 return 0;51}Page 0372int main(void)3{4 int i,n,flag;//例2-85 double t,sum;6 printf("输⼊⼀个正整数n:");7 scanf("%d",&n);8 sum=0;9 flag=1;10 for(i=1;i<=n;i++)11 {12 t=flag*(1.0/(2*i-1));13 sum+=t;14 flag=(-1)*flag;1516 }17 printf("sum=%lf\n",sum);1819 printf("\n");2021 /*求1+1/2+···的前n项和(练习2-13)*/22 int n_1,j;23 double sum_1=0;24 printf("Enter n_1(n_1>=0):");25 scanf("%d",&n_1);26 for(j=1;j<=n;j++)27 {28 sum_1+=1.0/j;29 }30 printf("sum_1=%.2lf\n",sum_1);3132 printf("\n");3334 /*求1+1/3+1/5+···的前n项和(练习2-14)*/35 int n_2,k;36 double sum_2;37 printf("Enter n_2:");38 scanf("%d",&n_2);39 for(k=1;k<=n_2;k++)40 {41 sum_2+=1.0/(2*k-1);42 }43 printf("sum_2=%.2lf\n",sum_2);4445 printf("\n");4647 /*求1-1/4+1/7-1/10+···的前n项和(练习2-15)*/48 int n_3,m,flag_1=1;49 double sum_3=0;50 printf("Enter n_3:");51 scanf("%d",&n_3);52 for(m=1;m<=n;m++)53 {54 sum_3+=flag_1*1.0/(3*m-2);55 flag_1=flag_1*(-1);56 }57 printf("sum_3=%.2lf\n",sum_3);5859 return 0;60}Page 0402#include<math.h>3int main(void)4{5 int n,i;6 double power;7 printf("Enter n:");8 scanf("%d",&n);9 printf("2的乘⽅表:\n");10 for(i=0;i<=n;i++)11 {12 power=pow(2,i);13 printf("2的%d次⽅为%.0lf\n",i,power);14 }1516 printf("\n");1718 /*3的乘⽅表(练习2-17)*/19 int m,j;20 double power_1;21 printf("Enter m:");22 scanf("%d",&m);23 for(j=0;j<=m;j++)24 {25 power_1=pow(3,j);26 printf("pow(3,%d)=%.lf\n",j,power_1);27 }2829 return 0;30}1#include<stdio.h>//练习2-182double fact(int n)3{4 int i;5 double product;6 product=1;7 for(i=1;i<=n;i++)8 {9 product*=i;10 }1112 return product;13}14int main(void)15{16 int n,m,i;17 double result_1,result_2,result_3,c;18 printf("输⼊两个正整数m和n(m<=n):");19 scanf("%d %d",&m,&n);20 for(i=0;i<=n;i++)21 {22 result_1=fact(i);23 }24 for(i=0;i<=m;i++)25 {26 result_2=fact(i);27 }28 for(i=0;i<=n-m;i++)29 {30 result_3=fact(i);31 }32 c=result_1/(result_2*result_3);33 printf("c=%.lf",c);3435 return 0;36}。
C语言程序设计(高教版何钦铭主编)课后答案

前7章绝大部分都有。
水平有限(只学了3三个月),仅供参考。
/*计算2^i的前n项和*/#incl ude<s tdio.h>#i nclud e<mat h.h>int m ain(v oid){in t i,n;do ublesum;prin tf("E ntern:");sca nf("%d",&n);s um=0;for(i=1;i<=n;i++){su m=sum+pow(2,i);}print f("su m=%.0f\n",sum);ret urn 0;}/*输入若干个学生的成绩,计算平均分,并统计个等级成绩的个数。
成绩分为5个等级:分别为A(90~100)、B(80~89)、C(70~79)、D(60~69)、E(0~59)*/#in clude<stdi o.h>int m ain(v oid){in t gra de,A,B,C,D,E,n;dou ble t otal;pri ntf("Enter grad e:\n");s canf("%d",&grad e);A=B=C=D=E=0;t otal=0;n=0;while(grad e>=0){i f(gra de<=59)E++;el se if(grad e<=69)D++;els e if(grade<=79)C++;else if(g rade<=89)B++;elseA++;n++;tot al=to tal+g rade;sc anf("%d",&grade);}if(n==0){p rintf("gra de av erage=0\n");print f("A=0\nB=0\nC=0\nD=0\nE=0\n");}else{p rintf("gra de av erage=%.2f\n",t otal/n);prin tf("A=%d\n B=%d\nC=%d\nD=%d\nE=%d\n",A,B,C,D,E);}ret urn 0;}/*输入职工的月薪sala ry,输出应交的个人所得税ta x*/#inclu de<st dio.h>int main(void){int s alary;do ubletax;prin tf("E ntersalar y:");sca nf("%d",&s alary);i f(sal ary<=850)tax=0;elseif(sa lary<=1350)t ax=5.0*(sa lary-850)/100;else if(s alary<=2850)tax=10.0*(salar y-850)/100;el se if(sala ry<=5850)tax=15.0*(sal ary-850)/100;elsetax=20.0*(sal ary-850)/100;print f("ta x=%.2f\n",tax);ret urn 0;}/*计算1-2/3+3/5-4/7+5/9-6/11+…*/#i nclud e<std io.h>intmain(void){i nt i,n,fz,fm,fl ag; /*fz分子,fm分母,flag符号*/doubl e ite m,sum; /*item是第n项的值,sum存放计算结果*/print f("En ter n:");scan f("%d",&n);fz=fm=f lag=1;su m=0;for(i=1;i<=n;i++){ite m=1.0*flag*fz/f m;sum=s um+it em;fz++;f m=fm+2;flag=-flag;}prin tf("s um=%.2f\n",sum);re turn0;}/*输出21世纪所有的闰年。
C语言程序设计 (何钦铭 ) 高教版 第2版 课后习题答案

18
2-4 编写程序,求华氏温度 150° F 对应的摄氏温度(计算公式同例 2-3)。 解答: #include <stdio.h> int main(void) { int celsius, fahr; fahr = 150; celsius = 5 * (fahr – 32) / 9; printf("fahr = %d, celsius = %d\n", fahr, celsius); return 0; } 2-5 算 术 表 达 式 5*(fahr-32)/9 能 改 写 成 5(fahr-32)/9 吗 ? 为 什 么 ? 如 果 将 其 改 写 为 5/9*(fahr-32),会影响运算结果吗? 解答: 5(fahr-32)/9 不是合法的 C 表达式,因为不能省略运算符*;5/9*(fahr-32)的值为 0。 2-6 一个物体从 100 米的高空自由落下,编写程序,求它在前 3 秒内下落的垂直距离。设重 力加速度为 10m/s2。 解答: #include <stdio.h> int main(void) { double height; height = 0.5 * 10 * 3 * 3; printf("height = %.2f\n", height); return 0; } 2-7 输入提示和输入语句的顺序应该如何安排?例 2-5 中, scanf("%d%d%lf", &money, &year, &rate) 能 改 写 为 scanf("%d%lf%d", &money, &year, &rate) 吗 ? 为 什 么 ? 能 改 写 为 scanf("%d%lf%d", &money, &rate, &year) 吗?如果可以,其对应的输入数据是什么? 解答: 输入提示在前,输入语句在后。 不能改写为 scanf("%d%lf%d", &money, &year, &rate),因为%lf 与整型变量 money 不匹 配,%d 与浮点型变量 rate 不匹配。 与 scanf("%d%lf%d", &money, &rate, &year)对应的输入数据为:1000 0.025 3 2-8 编写程序,输入华氏温度,输出对应的摄氏温度,计算公式同例 2-3。 解答: #include <stdio.h> int main(void) { int celsius, fahr;
C语言程序设计答案

际案例来组织和实施教学,将程序开发过程的相关内容贯穿和渗透到每个
知识点的讲授中去。
课程教学基本总学时 64,其中讲授课时 48 学时,课内实验 16 学时,
建议增加 32 学时的课外实验。使用本教材时,各部分内容的学时安排可
参考表 1。
3
表 1 《C 语言程序设计》各部分内容参考学时
章(参考讲授学时+课 内外实验学时)
寻找保险箱密码
第 8 章 指针(6+6)
狸猫换太子 冒泡排序 加密问题
任意个整数求和问题
第 9 章 结构(4+4) 模拟构建手机通讯录
第 10 章 函数与程序结 构(4+4)
第 11 章 指 针 进 阶 (4+4)
第 12 章 文件(2+2)
常用圆形体体积计算器 汉诺(Hanoi)塔 布袋中的彩色球
2
进行了回顾。此外,为了使学生尽快理解程序设计的基本思维方式,将函
数、指针的部分内容分散到课程的后期教学中,避免内容难点干扰学生对
程序设计基本思维方法的理解。
《C 语言程序设计》教材的内容组织结构见图 1。
第 12 章 文件
第 11 章 指针进阶
第 10 章 函数与程序结构
第 9 章 结构
第 8 章 指针
用格里利公式求π的近似值;
第 4 章 循环结构(4+4)
统计一个整数的位数 判断素数
第 5 章 函数(2+2) 第 6 章 回顾:数据类型 与表达式(2+2)
第 7 章 数组与字符串 (6+6)
求 1! + 2! + …. + 100! 用函数求圆锥体积
选择法排序 找出矩阵中最大值所在的位置 进制转换
c语言程序设计何钦铭颜晖第10章函数与程序结构

c语言程序设计何钦铭颜晖第10章函数与程序结构第10章函数与程序结构【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。
试编写相应程序。
解答:递归式子: sum(i) = sum(i-1) + i;递归出口: sum(i) = 0;【练习10-2】请完成下列宏定义:① MIN(a,b) 求 a,b 的最小值② ISLOWER(c) 判断 c 是否为小写字母③ ISLEAP(y) 判断 y 是否为闰年④ CIRFER(r) 计算半径为 r 的圆周长解答:① MIN(a, b):求a,b的最小值。
#define MIN(a,b) (a<="" p="">② ISLOWER(c):判断c是否为小写字母。
#define ISLOWER(c) (c>='a'&&c<='z')③ ISLEAP(y):判断y是否为闰年。
#define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0)④ CIRFER(r):计算半径为r的圆周长。
#define PI#define CIRFER(r) 2*PI*(r)【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。
解答:(1)函数实现int max(int x,int y,int z){int t;if(x>=y)if(x>=z) t=x;else t=z;elseif(y>=z) t=y;else t=z;return t;}(2)宏实现#define MAX( x, y, z ) x>=y (x>=z x:z) : (y>=z y:z)两者在定义形式上完全不同。
C语言程序设计(何钦铭)课后习题作业

第一章习题1、对 C 语言来说,下列标示符中哪些是合法的,哪些是不合法的?Total, _debug, Large&Tall, Counter1, begin_答:合法的:_debug、Counter1、begin_。
不合法的:Total、Large&Tall。
2、改写 1.4 节中的流程图 1.2,求1—100 中能被 6 整除的所有整数的和。
Sum=0,i=1I<=100真假I 能被 6整除?sum=sum+ii=i+1打印sum3、改写 1.4 节中的程序,求1—100 中能被 6 整除的所有整数的和,并在编程环境中验证该程序的运行结果。
答:程序为:#include<stdio.h>int main(void){int i,sum=0;for(i=1;i<=100;i++)if(i%6==0)sum=sum+i;printf("sum=%d\n",sum);return 0;}4、对于给定的整数n(n>1),请设计一个流程图判别n 是否为一个素数(只能被 1 和自己整除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构和循环结构。
开始输入ni=2r=n/i 的余数真r=0?假i=i+1输出n“不是素数”假i>=(n-1)真输出n“是素数”结束...开始输入ni=2r=n/i 的余数真r=0?假i=i+1输出n“不是素数”假i>=(n-1)真输出n“是素数”结束第二章作业1.编写程序,输入两个整数num和num2,计算并输出她们的和、差、积、商。
答:程序:#include<stdio.h>void main(){int num1,num2,y1,y2,y3,y5;double y4;printf(" 请输入两个数:num1,num2\n");scanf("%d%d",&num1,&num2);y1=num1+num2;y2=num1-num2;y3=num1*num2;y4=num1*1.0/num2;y5=num1%num2;printf("num1,num2 和y1=%d\nnum1,num2 差y2=%d\nnum1,num2 积y3=%d\nnum1,num2商y4=%lf\nnum1,num2 余y5=%d\n",y1,y2,y3,y4,y5);}2.为了倡导居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时以内的,电价为0.53元/千瓦时;超出50千瓦时的用电量,电价上调0.05元/千瓦时。
C语言程序设计(第3版)何钦铭 颜 晖 第9章 结构

第9章结构【练习9-1】概念一个能够表示复数的结构类型,一个复数包括实数与虚数两个部份。
解答:struct complex{float real;float imaginary;};【练习9-2】人的诞生日期由年、月、日组成,请在例9-1 中的通信录结构中增加一个成员:诞生日期,用嵌套概念的方式从头概念该结构类型。
解答:struct date{int year;int month;int day;};struct student{int num;char name[10];struct date birthday;int computer,english,math;double average;};【练习9-3】例9-1 中,假设是要计算的是三门课程的课程平均成绩,应该如何改写程序?解答:#include<>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i, n;double math_sum,english_sum,computer_sum;struct student s1;printf("Input n:");scanf("%d", &n);printf("Input the student's number, name and course scores:\n");math_sum=english_sum=computer_sum=0;for(i=1;i<=n;i++){printf("No.%d:",i); scanf("%d%s%d%d%d",&,,&,&,&;math_sum+=;english_sum+=;computer_sum+=;}printf("math_ave:%.2lf\nenglish_ave:%.2lf\ncomputer_ave:%.2lf\n",math_sum/n ,english_sum/n,computer_sum/n);return 0;}【练习9-4】概念一个包括5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章函数与程序结构【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。
试编写相应程序。
解答:递归式子: sum(i) = sum(i-1) + i;递归出口: sum(i) = 0;【练习10-2】请完成下列宏定义:① MIN(a,b) 求 a,b 的最小值② ISLOWER(c) 判断 c 是否为小写字母③ ISLEAP(y) 判断 y 是否为闰年④ CIRFER(r) 计算半径为 r 的圆周长解答:① MIN(a, b):求a,b的最小值。
#define MIN(a,b) (a<b) a: b② ISLOWER(c):判断c是否为小写字母。
#define ISLOWER(c) (c>='a'&&c<='z')③ ISLEAP(y):判断y是否为闰年。
#define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0)④ CIRFER(r):计算半径为r的圆周长。
#define PI#define CIRFER(r) 2*PI*(r)【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。
解答:(1)函数实现int max(int x,int y,int z){int t;if(x>=y)if(x>=z) t=x;else t=z;elseif(y>=z) t=y;else t=z;return t;}(2)宏实现#define MAX( x, y, z ) x>=y (x>=z x:z) : (y>=z y:z)两者在定义形式上完全不同。
使用上函数是在执行时,从主调函数转到函数 max(),然后再返回到主调函数,函数体始终存在;而宏是在编译预处理时,用条件表达式去替换MAX(int x, int y, int z ),等程序执行时,执行的是条件表达式,而不再存在 MAX(int x, int y,int z )的式子。
习题10一、选择题1.要调用数学函数时,在#include 命令行中应包含 C 。
A.”” B.”” C.”” D.””2.对于以下递归函数 f,调用 f(4),其返回值为 A 。
int f(int n){ if (n) return f(n - 1) + n;else return n;}A.10 B.4 C.0 D.以上均不是3.执行下列程序:#define MA(x, y) ( x*y )i = 5;i = MA(i, i + 1) – 7;后变量 i 的值应为 B 。
A.30 B.19 C.23 D.14.宏定义“#define DIV(a, b) a/b”,经 DIV(x + 5, y - 5) 引用,替换展开后是 A 。
A.x + 5 / y - 5 B.(x + 5 / y – 5)C.(x + 5) / (y - 5) D.(x + 5) / (y - 5);5.定义带参数的宏“#define JH(a,b,t) t = a; a = b; b = t”,对两个参数a、b 的值进行交换,下列表述中哪个是正确的 C 。
A.不定义参数a和b将导致编译错误 B.不定义参数a、b、t将导致编译错误C.不定义参数 t 将导致运行错误 D.不需要定义参数 a、b、t 类型6.执行下面程序,正确的输出是 A 。
int x = 5, y = 7;void swap ( ){ int z ;z = x ; x = y ; y = z ;}int main(void){int x = 3, y = 8;swap ( ) ;printf ( " %d , %d \n", x , y ) ;return 0 ;}A.3, 8 B.8, 3 C.5, 7 D.7, 57.下面说法中正确的是 A 。
A.若全局变量仅在单个 C 文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题D.静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出二、填空题语言的编译预处理功能主要包括_条件编译_、_宏定义_和_文件包含_。
2.执行完下列语句段后, i 的值为 5 。
int i;int f(int x){return ((x>0) f(x-1)+f(x-2):1);}i=f(3);3.下列程序段 A 与 B 功能等价,请填写程序段 B 中相应语句。
程序段A:int f( int n ){ if(n<=1)return n;elsereturn f(n-1)+f(n-2);}程序B:int f( int n ){ _int t, t0, t1;_t0=0; t1=1; t=n;while ( _n>1_ ){t = _t0+t1_;t0 = t1;t1 = t;n - -;}return _t;_}5.下面程序用于计算 f(k , n)=1k+2k+…+n k,其中 power(m , n )求 m n。
请填写程序中相应语句。
# include <>int power(int m , int n){ int i ;int p=1;for( i=1 ; i<=n ; i++)p = p * m ;return p ;}int f(int k , int n){int i ;int s=0 ;for( i=1 ; i<=n ; i++)s = s + power(i, k) ;return s ;}int main(void){ int k , n ;scanf(“%d%d”, &k, &n ) ;printf(“f(%d, %d)=%ld” , k, n, f(k, n)) ;return 0;}5.下列递归程序的输出结果为 g=4,g=3,k=6 。
#include <>int fib(int g){ switch(g){case 0: return 0;case 1:case 2: return 2;}printf("g=%d,", g);return fib(g-1) + fib(g-2);}int main(void){int k;k = fib(4);printf("k=%ld\n", k);return 0;}6.下列语句的运算结果为_7,-13____。
#define F(x) x - 2#define D(x) x * F(x)printf("%d,%d", D(3), D(D(3))) ;三、程序设计题1.判断满足条件的三位数:编写一个函数,利用参数传入一个 3 位数 n,找出101~n 间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如 144、676 等,函数返回找出这样的数据的个数。
试编写相应程序。
解答:#include<>#include<>int fun(int n);int main(void){int n;printf("Input n: ");scanf("%d",&n);printf("total=%d\n",fun(n));return 0;}int fun(int n){int i,d=0;for(i=101;i<=n;i++)if(((int)sqrt(i)*(int)sqrt(i))==i){if(i/100==(i/10)%10||i/100==i%10||(i/10)%10==i%10)d++;}return d;}2.递归求阶乘和:输入一个整数n(n>0且n<=10),求1!+2!+3!+……n!。
定义并调用函数fact(n)计算n!,函数类型是double。
试编写相应程序。
解答:#include<>double fact(int n);int main(void){int n;printf("Input n:");scanf("%d",&n);printf("1~%d的阶乘和:%.0lf",n,fact(n));return 0;}double fact(int n){int i;double result=1;if(n==1)result=1;else{for(i=1;i<=n;i++)result=result*i;result=result+fact(n-1);}return result;}3.递归实现计算xⁿ:输入实数x和正整数n,用递归函数计算xⁿ的值。
试编写相应程序。
解答:#include<>double power(double x,int n);int main(void){double x;int n;printf("Input x:");scanf("%lf",&x);printf("Input n:");scanf("%d",&n);printf("%lf的%d次方=%lf",x,n,power(x,n));return 0;}double power(double x,int n){double result;if(n==1)result=x;elseresult=x*power(x,(n-1));return result;}4.递归求式子和:输入实数x和正整数n,用递归的方法对下列计算式子编写一个函数。
f(x , n) = x-x²+x³-x4+… + (-1)n-1xⁿ(n>0)试编写相应程序。
解答:#include<>#include<>double f(double x,int n);int main(void){int n;double x;printf("Input x:");scanf("%lf",&x);printf("Input n:");scanf("%d",&n);printf("f(%lf,%d)=%lf\n",x,n,f(x,n));return 0;}double f(double x, int n){if(n==1)return x;elsereturn pow(-1,n-1)*pow(x,n)+f(x,n-1);}5.递归计算函数ack(m,n):输入m和n。