浙江大学C颜晖原版C3课件
- 格式:ppt
- 大小:92.50 KB
- 文档页数:23
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)。
第7章数组【练习7-1】将例7-3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因此程序输出会有变化。
当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。
【练习7-2】将数组中的数逆序存放。
输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始。
试编写相应程序。
解答:#include<stdio.h>int main(void){int i,n,temp;int a[10];printf("Input n:");scanf("%d",&n);页脚内容1printf("Input %d integer:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);printf("After reversed:");for(i=0;i<n/2;i++){temp=a[i];a[i]=a[n-1-i];a[n-1-i]=temp;}for(i=0;i<n;i++)printf("%d ",a[i]);return 0;}【练习7-3】求最大值及其下标。
输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素。
试编写相应程序。
解答:#include<stdio.h>页脚内容2int main(void){int i,index,n;int a[10];printf("Enter n:");scanf("%d",&n);printf("Enter %d integrs:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=n-1;i>=0;i++)printf("%d ",a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。
第11章指针进阶【练习11-1】如何理解指针数组,它与指针、数组有何关系?为何可以用二级指针数组进行操作?解答:指针数组——存放指针的一个数组。
指针数组名也是指向常量二级指针,因为指针数组名总是指向数组的第一个元素。
【练习11-2】用指针数组处理多个字符串有何优势?可以直接输入多个字符串给为初始化的指针数组吗?为什么?解答:C语言中字符串的地址是按顺序存放的,用指针指向字符串的首地址,然后取出这个地址里面的值,然后指针加一,取出里面的值,这样就能输出整个字符串了。
用指针数组可以接收多个字符串,对这些字符串的操作可以做到相互隔离,一个指针数组的元素作为一个指针对应一个字符串。
【练习11-3】参考例11-3,使用二级指针操作改写例11-4中的程序A。
解答:#include<stdio.h>#include<string.h>void fsort(char **ch,int n);int main(void){int i;char *pcolor[]={"red","blue","yellow","green","black"};char **ch;ch=pcolor;fsort(ch,5);for(i=0;i<5;i++)printf("%s ",*(ch+i));return 0;}void fsort(char **ch,int n){int k,j;char *temp;for(k=1;k<n;k++)for(j=0;j<n-k;j++)if(strcmp(*(ch+j),*(ch+j+1))>0){temp=*(ch+j);*(ch+j)=*(ch+j+1);*(ch+j+1)=temp;}}【练习11-4】改写例11-8中的函数match(),要求返回字符串s中最后一个字符ch的位置(地址)。
C语言程序设计何钦铭颜晖第7章数组《C语言程序设计(第3版)》是由何钦铭和颜晖共同编写的一本C语言教材,主要介绍了C语言的基础知识和编程方法。
其中第7章是关于数组的内容,涵盖了数组的定义、初始化、访问元素以及数组的运算等方面。
本文将从以下几个方面对本章进行详细介绍。
首先,第7章首先介绍了数组的概念和定义。
数组是一组有序的、相同类型的数据元素的集合,通过下标来唯一标识数组中的每个元素。
章节中详细介绍了数组的声明和初始化方式,包括静态数组和动态数组的定义。
其次,本章还讲解了数组元素的访问和操作。
可以通过数组的下标来访问数组中的元素,数组的下标从0开始,依次递增。
章节通过实例演示了如何通过循环遍历数组和输入输出函数来操作数组中的元素。
同时,还介绍了数组的一些特殊运算,比如数组的拷贝和交换等操作。
接着,本章进一步讨论了多维数组的概念和使用方法。
多维数组是一种特殊的数组类型,每个元素还可以拥有多个子元素。
本章通过示例介绍了多维数组的定义和初始化方式,并且详细演示了如何通过嵌套循环来遍历多维数组。
此外,本章还介绍了C语言中常用的数组函数和头文件。
通过引入相关的头文件和函数,可以方便地进行数组的操作和处理。
例如,<stdlib.h>头文件中的rand(函数可以用来生成随机数,<string.h>头文件中的strcpy(函数可以用来拷贝字符串等。
最后,本章还提供了一些数组的应用实例,包括数组的排序、查找和统计。
通过这些实例,读者可以更好地理解如何运用数组来解决实际问题。
总的来说,第7章《数组》是《C语言程序设计(第3版)》中的一章,主要介绍了数组的概念、定义、访问和操作,以及多维数组和数组函数的使用方法。
通过本章的学习,读者可以全面掌握C语言中数组的知识和应用技巧,为后续的编程学习和实践奠定良好基础。
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,&s1puter );math_sum+=s1.math;english_sum+=s1.english;computer_sum+=s1puter;}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语言程序设计(第3版)何钦铭-颜-晖-第6章--回顾数据类型和表达式第6章回顾数据类型和表达式【练习6-1】输入一个十进制数,输出相应的八进制数和十六进制数。
例如:输入31,输出37 和1F。
解答:#include <stdio.h>int main(void){int x;scanf("%d", &x);printf("%o %x\n", x, x);return 0;}【练习6-2】在程序段:printf("input a, b: ");scanf("%o%d", &a, &b);printf("%d %5d\n", a, b); /* %5d 指定变量b 的输出宽度为5 */中,如果将scanf("%o%d", &a, &b) 改为scanf("%x%d", &a, &b),仍然输入__17 ___17__,输出是什么?解答:23 17(中间有三个空格)【练习6-3】如果字符型变量ch 的值是大写字母,怎样的运算可以把它转换为小写字母?解答:ch=ch-‘A’+‘a’;【练习6-4】证明下列等价关系。
(1)a&&(b||c) 等价于a&&b||a&&c。
(2)a||(b&&c)等价于(a||b)&&(a||c)。
(3)!(a&&b)等价于!a||!b。
(4)!(a||c)等价于!a&&!b。
解答:(1)a b c a&&(b||c) a&&b a&&c a&&b||a&&c0(假) 0(假) 0(假) 0 0 0 00(假) 0(假) 非0(真) 0 0 0 0a b a||b !(a||b) !a !b !a&&!b 0(假) 0(假) 0 1 1 1 10(假) 非0(真) 1 0 1 0 0非0(真) 0(假) 1 0 0 1 0非0(真) 非0(真) 1 0 0 0 0习题61.设float x=2.5, y=4.7; int a=7;,printf(“%.1f”, x+a%3*(int) (x+y)%2/4)的结果为 AA.2.5 B.2.8 C.3.5 D.3.82.执行下列程序段的输出结果是 D 。
第5章函数【练习5-1】使用函数求1到n之和:输入一个正整数 n,输出1~n之和。
要求自定义和调用函数sum(n)求 1~n 之和。
若要计算 m~n(m<n)之和,又该如何定义函数?试编写相应程序。
解答:#include <stdio.h>int sum(int n);int main(void){int n;int sum;printf("Enter n:")scanf("%d", &n);printf("sum = %d\n", sum(n));return 0;}int sum(int n){int result, i;result = 0;for(i = 1; i <= n; i++)result = result + i;return result;}若要计算 m~n(m<n)之和,则需要在 main()中定义 2 个变量 m 和 n:scanf("%d%d", &m, &n);printf("sum = %d\n", sum(m, n));同时在函数定义时需设置 2 个形参:int sum(int m, int n){int result, i;result = 0;for(i = m; i <= n; i++)result = result + i;return result;}【练习5-2】使用函数找最大值:输入2个数,输出其中较大的数。
要求定义和调用函数 max(a, b)找出并返回 a、b 中较大的数。
试编写相应程序。
解答:#include <stdio.h>double max(double a, double b);int main(void){int a, b;printf(“Input a and b:”);scanf("%lf%lf",&a, &b);printf("max= %lf\n", max(a, b));return 0;}double max(double a, double b){if(a > b)return a;elsereturn b;}【练习5-3】数字金字塔:输入一个正整数 n,输出n行数字金字塔。
第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 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
第5章函数【练习5-1】使用函数求1到n之和:输入一个正整数n,输出1〜n之和。
要求自定义和调用函数sum(n)求1〜n之和。
若要计算m〜n(m<n)之和,又该如何定义函数?试编写相应程序。
解答:#include<stdio.h>intsum(intn);intmain(void){intn;intsum;printf("Entern:")scanf("%d",&n);printf("sum=%d\n",sum(n));return0;}intsum(intn){intresult,i;result=0;for(i=1;i<=n;i++)result=result+i;returnresult;}若要计算m〜n(m<n)之和,则需要在main()中定义2个变量m和n:scanf("%d%d",&m,&n);printf("sum=%d\n",sum(m,n));同时在函数定义时需设置2个形参:intsum(intm,intn){intresult,i;result=0;for(i=m;i<=n;i++)result=result+i;returnresult;}【练习5-2】使用函数找最大值:输入2个数,输出其中较大的数。
要求定义和调用函数max(a,b)找出并返回a、b中较大的数。
试编写相应程序。
解答:#include<stdio.h>doublemax(doublea,doubleb);intmain(void)inta,b;printf(“Inputaandb:”);scanf("%lf%lf",&a,&b);printf("max=%lf\n",max(a,b));return0;}doublemax(doublea,doubleb){if(a>b)returna;elsereturnb;}【练习5-3】数字金字塔:输入一个正整数n,输出n行数字金字塔。