C语言程序设计(第3版)何钦铭 颜 晖 第9章 结构
C语言程序设计(第三版)何钦铭-颜晖主编-知识点清单

C语言知识点清单(杭电姚晔整理)第1章基本数据类型和表达式1.1 关键字和标识符标识符(p8)1.2 基本数据类型常用数据类型(p21,p122),字符型数据(p50,p123),原码反码补码(p120),实型数据的存储(p121)1.3 常量和变量常量和变量的定义(p21),整型字符型实型常量与变量(p123)1.4 输入和输出函数printf(p23),scanf(p27),字符型数据的输入和输出(scanf/printf/getchar/putchar/p51/p128),整型数的输入输出(scanf/printf格式控制p125),实型数的输入输出(scanf/printf格式控制p127) 1.5 常用库函数常用数学函数(p28)1.6 运算符和表达式算术运算(p22),赋值运算(p23),关系运算(p25),逻辑运算(p52),位运算(p140),长度运算符(p142),算术表达式(p131),赋值表达式(p133),关系表达式(p134),逻辑表达式(p136),条件表达式(p139),逗号表达式(p139),运算符的优先级与结合性(p142),复合语句(P33),自动类型转换(p130),强制类型转换(p130)第2章控制结构与语句2.1 结构化程序设计数据表达(p5),流程控制(p6),主要语法单位(p9),C语言的特点(p12)2.2 顺序结构顺序控制结构(p6)2.3 选择结构if-else语句(p26,p45),多分支else-if语句(p47,p60),switch语句(p57)2.3 循环结构for语句(p32),while语句(p69),do-while语句(p73),循环嵌套(p79),循环语句的选用(p82) 2.4 转向语句break语句(p59,p75),continue语句(p76)第3章函数3.1 函数的定义函数首部(p97),函数体(p98),函数原型声明(p100),问题分析思想(p105),模块化设计(p106/p239)3.2 函数的调用调用过程(p98),调用形式(p99),参数传递(p99),返回结果(p100,p104)3.3 嵌套与递归函数的嵌套调用(p238),递归函数基本概念(p241),递归程序设计(p244)3.4 函数与变量局部变量和全局变量(p108),变量生命周期(p112),变量存储的内存分布(p113),静态变量(p113),外部变量(p258),静态全局变量(p258),变量的存储类型及作用域(附录p340)第4章数组4.1 一维数组一维数组的定义和引用(p149),一维数组的初始化(p151),一维数组的编程(p152)4.2 二维数组二维数组的定义和引用(p160),二维数组的初始化(p161),二维数组的编程(p162)4.3 字符串字符数组(p167),字符串(p168),字符串处理函数(gets/puts/strcpy/strcat/strcmp/strlen/p203) 4.4 数组与函数数组名作为函数参数(p196),冒泡排序(p199),命令行参数(p273)第5章指针5.1 指针基本知识地址与指针(p181),指针变量的定义(p182),指针的基本运算(p184),指针变量的初始化(p186) 5.2 指针与数组指针、数组和地址的关系(p192)5.3 指针与字符串字符串与字符指针(p201),用指针数组操作多个字符串(p270)5.4 指针数组与多级指针指针数组的概念(p265),指向指针的指针(p266),二维数组的指针形式(p268),5.5 指针与函数指针作为函数参数(p188),指针实现动态内存分配(malloc/free/p209),指针作为函数返回值(p278),指向函数的指针(p278)第6章结构体6.1 结构体的概念结构的定义(p219),结构变量的定义和初始化(p221),结构变量的使用(p223)6.2 结构体数组结构数组操作(p226)6.3 结构体指针结构指针的概念(p229),结构指针做函数参数(p230)6.4 单向链表链表的概念(p285),单向链表的常用操作(p286)第7章文件7.1 文件概述文件的概念(p299),文本文件与二进制文件(p300),文件结构与文件类型指针(p301),文件处理步骤(p304)7.2 打开与关闭文件打开文件(p306),关闭文件(p308)7.3 文件读写函数字符方式读写函数fgetc/fputc(p309),字符串方式读写函数fgets/fputs(p311),格式化方式读写函数fscanf/fprintf(p314),数据块方式读写函数fread/fwrite(p315),文件定位函数rewind/fseek/ftell(p317),检测文件指针状态函数feof/ferror/clearerr(p317)第8章其他知识点8.1 编译预处理文件包含(p249),常用标准头文件(p251),宏基本定义(p247),带参数的宏定义(p248),条件编译(p252)8.2 共用体联合变量(附录p339)8.3 枚举枚举变量(附录p339)。
C语言程序设计第3版何钦铭-颜-晖--循环结构

第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结果是pi=0,因为item为0时不满足while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得while循环次数减少,必然影响到n的值。
【练习 4-2】运行例 4-2程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则while循环条件不成立,不执行循环体。
【练习4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数eps, 计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps (保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习4-4】如果将例4-3程序中的do-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10; count ++;}解答:会有影响,因为当输入数据 number 为 0时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
C语言程序设计(第3版)(2018年电子工业出版社出版的图书

成书过程
修订过程
出版工作
修订过程
该教材根据在教学过程中的实际感受,结合收集到的建议和意见,对第2版教材进行了修订而成。
C语言程序设计(第3版) (2018年电子工业出版社出版
的图书
2018年电子工业出版社出版的图书
01 成书过程
03 教材目录 05 教材特色
目录
02 内容简介 04 教学资源 06 作者简介
基本信息
《C语言程序设计(第3版)》是由蒋彦、韩玫瑰主编,2018年3月电子工业出版社出版的国家精品课程教材、 国家级精品资源共享课教材、研究型教学模式系列教材。该教材可作为高等学校本科生教材,也可作为专科和高 职高专教材及计算机等级考试的参考书,还可供相关领域的工程技术人员学习参考。
出版工作
2018年3月,该教材由电子工业出版社出版。
内容简介
内容简介
全书共7章,主要内容包括:C语言程序基础、C语言程序基本结构、模块化程序设计思想、简单构造数据类 型、复杂构造数据类型、磁盘数据存储、实用程序设计技巧。此外,附录还包含了ASCII码表、C语言运算符的优 先级与结合性。
教材目录
教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
பைடு நூலகம்学资源
该教材有配套教材——《C语言程序设计实验教程(第3版)》。 该教材提供课程网站、电子课件、习题答案及程序源代码。
教材特色
教材特色
该教材是国家精品课程教材,以任务驱动的方式,通过实例讲授程序设计的基本概念和基本方法,把重点放 在解题思路上,试图贯穿以程序编写带动语法教学的模式,引导读者掌握C语言的核心编程方法,提高应用能 力。
C语言程序设计(何钦铭_颜晖_主编)课件

区分数字字符和数字
'1'
1
则:'A'+1=66,对应字符 'B'
a
25
转 义 字 符
反斜杠后跟一个字符或数字
字符常量,代表一个字符
'\n' '\101' '\x41' 'A'
所有字符都可以用转义字符表示
a
26
6.2.2 变量
在程序运行过程中,其值可以被改变的量。
变量必须先定义,后使用 定义变量时要指定变量名和数据类型 变量应该先赋值,后引用
a
30
6.3.1 整型数据的输入输出
printf (格式控制, 输出参数1, ... , 输出参数n); scanf (格式控制, 输入参数1, ... , 输入参数n);
格式控制说明 %…
十进制 八进制 十六进制
int
%d
%o
%x
long
%ld
%lo
%lx
unsigned
%u
%o
%x
unsigned long %lu
数据长度 16或32位
16位 32位
a
10
基本数据类型-整型
扩展的整数类型:short long unsigned [int]
有符号整型 无符号整型
数据长度
int
unsigned [int]
16或32位
short [int] unsigned short [int] 16位
long [int] unsigned long [int]
以小数或指数形式输入一个双精度浮点数
输出 printf()
C语言程序设计 (何钦铭 颜晖 著)课后习题答案 浙江科学技术出版社

(2) udent 注:s+2=&s[2], 当作为 printf()中对应“%s”的输出参数时,表示从 s[2]开始输出,直到字符串结束) (3) HappyNewYear 注: 1. for(s=pa, n=0; *s!='\0'; ++s, ++n); //求字符串 pa 的有效长度 n, 相当于: n=0; for( s=pa; *s!=’\0’; ++s) ++n; // n=12 2. for(s=pa, i=0; i<n; putchar(*s++), ++i); // 逐个输出指针 s 所指向字符串 pa 的各字符,相当于 s=pa; for( i=0; i<n; i++) { putchar( *s ); s++; //指针后移一位 } (4) our 注: char *st[]={"one", "two", "three","four"}; 定义了长度为 4 的字符指针数组,如下: s[][0] st[0] st[1] st[2] st[3] st[][1] st[][2] st[][3] st[][4] s[][5]
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 }
C语言程序设计 第3版 第9章 编译预处理

#include "test2.c" static int sum(int n) {
int i,s=0; for(i=1;i<=n;i++)
s=s+fact(i); return s; }
static int fact(int n) {
C语言程序设计
第9章 编译预处理
第1讲:编译预处理基本形式
提纲
1.宏定义 2.文件包含 3.条件编译
1.宏定义
不带参数宏定义 带参数宏定义
格式:
#define 标识符 字符串
功能:
指定标识符代替一个较复杂的字符串。
注意说明:
(1)宏名一般习惯用大写字母,例如宏名PI。 (2)宏名用做代替一个字符串,不作语法检查。 (3)宏定义无需在末尾加“;” (4)宏定义的有效范围为#undef命令终止。 (5)在进行宏定义时,可以引用已定义的宏名。
char web[50]; int i=0; gets(web); while(web[i]!='\0') {
#if(R==1) if(web[i]>='A'&&web[i]<='Z') {web[i]=web[i]+32; i++;}
#else if(web[i]>='a'&&web[i]<='z') {web[i]=web[i]-32; i++;}
形式3:
#ifndef 标识符 程序段1
#else 程序段2
何钦铭-C语言程序设计(第3版)部分课后习题参考答案.docx

何钦铭《C语言程序设计》(第3版)课后习题参考答案习题11.对C 语言来说,下列标识符中哪些是合法的,哪些是不合法的?total, _debug, Large&Tall, Counter1, begin_解答:合法标识符:total, _debug, Counter1;不合法标识符:Large&Tall, begin_。
2.改写本章1.4 节中的流程图1.2,求1~100 中能被6 整除的所有整数的和。
解答:3.改写本章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("%d", sum);return 0;}4.对于给定的整数n(n>1),请设计一个流程图判别n 是否为一个素数(只能被1 和自己整除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构与循环结构。
解答:在流程图中,分支结构和循环结构如图1.2 所示,自上而下的2 个实线框和2 个虚线组成了顺序结构。
习题21.求整数均值:输入4 个整数,计算并输出这些整数的和与平均值,其中平均值精确到小数点后1 位。
试编写相应程序。
解答:#include <stdio.h>int main (void){int num1, num2, num3, num4;double average, sum;scanf ("%d%d%d%d", & num1, & num2, & num3, & num4);sum = num1+ num2+ num3 + num4;average = sum / 4;printf ("Sum = %.0f; Average = %.1f\n", sum, average);return 0;}2.阶梯电价:为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50 千瓦时(含50 千瓦时)以内的,电价为0.53 元/千瓦时;超过50 千瓦时的,超出部分的用电量,电价上调0.05 元/千瓦时。
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"); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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,&pu ter);math_sum+=s1.math;english_sum+=s1.english;computer_sum+=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 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
解答:struct student{int num;char name[10];int computer, english, math;};struct student s[5]={{30101, "张一",69,75,84 },{30132, "李二",80,8 5,90},{40231, "王三",71,91,74},{40754, "赵四",65,76,87},{50426, "刘五",81,92,73}};【练习9-5】参考例 9-2,输入并保存 10 个学生的成绩信息,分别输出平均成绩最高和最低的学生信息。
解答:#include<stdio.h>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i,n,max,min;struct student students[50];printf("Input n:");scanf("%d",&n);for(i=0;i<n;i++){printf("Input the info of No.%d:\n",i+1);printf("number:");scanf("%d",&students[i].num);printf("name:");scanf("%s",&students[i].name);printf("math score:");scanf("%d",&students[i].math);printf("english score:");scanf("%d",&students[i].english);printf("computer score:");scanf("%d",&students[i].computer);students[i].average=(students[i].math+students[i].english+stu dents[i].computer)/3.0;}max=min=0;for(i=1;i<n;i++){if(students[max].average<students[i].average) max=i;if(students[min].average>students[i].average) min=i;}printf("max_average_infortmation:\n");printf("number:%d,name:%s,math:%d,english:%d,computer:%d,average: %.2lf\n",students[max].num,students[max].name,students[max].math,stud ents[max].english,students[max].computer,students[max].average);printf("min_average_information:\n");printf("number:%d,name:%s,math:%d,english:%d,computer:%d,average: %.2lf\n",students[min].num,students[min].name,students[min].math,stud ents[min].english, students[min].computer, students[min].average);return 0;}【练习9-6】定义一个 struct student 类型的结构指针,用其实现一个学生信息的输入和输出。
解答:struct student{ /* 学生信息结构定义 */ int num; /* 学号 */char name[10]; /* 姓名 */int computer, english, math ; /* 三门课程成绩 */double average; /* 个人平均成绩 */}s, *p;p = &s;scanf("%d%s%d%d%d", &p->num, p->name, &p->math, &p->english, &p->computer);【练习9-7】改写例 9-3 中的函数 update_score( ),将第一个形参改为结构数组形式。
解答:int update_score(struct student s[],int n,int num,int course,int score) {int i,pos;for(i=0;i<n;i++)if(s[i].num==num)break;if(i<n){switch(course){case 1:s[i].math=score; break;case 2:s[i].english=score; break;case 3:s[i].computer=score; break;}pos = i;}elsepos = -1;return pos;}习题9一、选择题1.下面定义结构变量的语句中错误的是 D 。
A.struct student{ int num; char name[20]; } s;B.struct { int num; char name[20]; } s;C.struct student{ int num; char name[20]; }; struct student s; D.struct student{ int num; char name[20]; }; student s;2.如果有定义语句:struct {int x, y; } s[2] = { { 1, 3 }, { 2, 7 } };则语句:printf(“%d\n”, s[0].y/s[1].x ); 输出结果为 B 。
A.0 B.1 C.2 D.3 3.根据下面的定义,能打印出字母 M 的语句是 C 。
struct person{char name[10];int age;} c[10] = { “John”, 17, “Paul”, 19, “Mary”, 18, “Adam”, 16 }; A.printf(“%c”, c[3].name); B.printf(“%c”, c[3].name[1]); C.printf(“%c”, c[2].name[0]); D.printf(“%c”, c[2].name[1]); 4.设有如下定义,则对 data 中的 a 成员的正确引用是 B 。
struct sk{ int a; float b; } data, *p=&data;A.(*p).data.a B.(*p).aC.p->data.a D.p.data.a5.对于以下结构定义,(*p)->str++中的++加在 D 。
struct { int len; char *str; } *p;A.指针 str 上 B.指针 p 上C.str 指向的内容上 D.语法错误二、填空题1.“.”称为成员_(分量)_运算符,“->”称为_指向_运算符。
2.完成下列程序,该程序计算 10 名学生的平均成绩。
#include <stdio.h>#include <string.h>struct student {int num;char name[20];int score;};struct student stud[10];int main(void){int i , sum = 0 ;for(i = 0; i < 10; i++){scanf("%d%s%d ",&stud[i].num,_stud[i].name_,&stud[i].score);sum += stud[i].score;}printf("aver = %d \n", sum/10);return 0;}3.下列程序读入时间数值,将其加 1 秒后输出,时间格式为:hh: mm: ss,即小时:分钟:秒,当小时等于 24 小时,置为 0。