《C语言总结与提高.ppt》由会员分享,可在线阅读,更多相关《C语言总结与提高.ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、程序设计基础程序设计基础 总结与提高总结与提高一、基本概念与理念一、基本概念与理念o问题、算法、程序、结构化程序问题、算法、程序、结构化程序n把一个复杂问题的求解过程分阶段进行,每个阶段把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内处理的问题都控制在人们容易理解和处理的范围内 o程序的功能结构、程序设计、程序设计方法程序的功能结构、程序设计、程序设计方法与过程、程序设计语言与过程、程序设计语言n设计程序要从程序的三大功能入手,告诉计算机要设计程序要从程序的三大功能入手,告诉计算机要做什么事情及如何做。做什么事情及如何做。o程序的描述方法程序的描述方法o
2、C语言程序的组织与结构语言程序的组织与结构o程序调试、语法与语义问题程序调试、语法与语义问题一、基本概念与理念一、基本概念与理念数据、数据类型数据、数据类型类型的定义与声明类型的定义与声明常量、变量、变量的地址、变量的使用常量、变量、变量的地址、变量的使用标准类型与自定义类型标准类型与自定义类型程序算法数据结构程序算法数据结构一、基本概念与理念一、基本概念与理念oC语言中的常用运算及表达式语言中的常用运算及表达式oC语言中的基本语句及其使用语言中的基本语句及其使用o阅读如下程序,画出程序流程图、说明功阅读如下程序,画出程序流程图、说明功能与执行结果能与执行结果程序程序1#include mai
3、n()int i,j;for(i=1;i=9;i+)printf(“I=%2d,i);程序程序2 main()int i=1;int sum=0;while(i100)sum+=i;i+;printf(The sum is:%d,sum);程序程序3 main(void)int i;for(i=1;i=10;i+)if(i%3=0)break;printf(i=%dn,i);printf(when loop interruped,i=%dn,i);程序程序4#include void main()int i=1;int p=1;while(i+5)p*=i;printf(The p is:%d
4、,p);程序程序5Main()int a;For(n=100;n=200;n+)if(n%3=0)continue;printf(“%d “,n);一、基本概念与理念一、基本概念与理念o模块化程序与函数模块化程序与函数n源程序(文件)由多个函数组成,是一个编译源程序(文件)由多个函数组成,是一个编译单位;单位;C程序又由多个源文件组成;程序又由多个源文件组成;n有:有:C程序程序源文件源文件函数函数 n菜单程序是组织程序模块的一种方法菜单程序是组织程序模块的一种方法 o函数调用的作用与过程函数调用的作用与过程oC函数之间的接口方式函数之间的接口方式o函数阅读示例函数阅读示例示例示例1 1#in
5、clude int max(int,int);int main(void)int a,b;printf(First number:);scanf(%d,&a);printf(Second number:);scanf(%d,&b);printf(The larger number is%dn,max(a,b);return 0;int max(int i,int j)if(ij)return i;else return j;示例示例2 2#include main()int a=3,b=5;void swap(int,int);printf(a=%d,b=%d,a,b);swap(a,b);p
6、rintf(a=%d,b=%d,a,b);void swap(int a,int b)int temp;temp=a;a=b;b=temp;printf(a=%d,b=%d,a,b);示例示例3 3#include void func(void);int main(void)auto int a=100;printf(In Main(),a=%dn,a);func();printf(In Main(),a=%dn,a);void func(void)int a=300;printf(In func(),a=%dn,a);示例示例4 4#include void func(void);int m
7、ain(void)func();func();func();void func(void)static int a=100;printf(In func(),a=%dn,a);a+=200;示例示例5 5#include static int a;void odd(void);int main(void)printf(Input an integer:);scanf(%d,&a);odd();void odd(void)if(a%2=1)printf(%d is an odd numbern,a);else printf(%d is an even numbern,a);示例示例6 6#def
8、ine CUBE(x)(x)*(x)*(x)int b=0,a=3;int cube(int x)return x*x*x;函数调用函数调用b=cube(a+)后,后,b、a为?;为?;而宏调用而宏调用b=CUBE(a+)后,后,b、a为?。为?。一、基本概念与理念一、基本概念与理念o数组的概念、数组定义的意义数组的概念、数组定义的意义n数组、下标、维数、数组名与存储问题数组、下标、维数、数组名与存储问题n可以可以认为认为数数组组的目的在于表示及控制的目的在于表示及控制处处理的方便;理的方便;o数组元素的使用及与循环控制的关系数组元素的使用及与循环控制的关系o弄清选择排序与冒泡排序的原理及过程
9、弄清选择排序与冒泡排序的原理及过程o字符、字符串、字符数组、字符串数组及字符、字符串、字符数组、字符串数组及应用应用o阅读如下程序阅读如下程序示例示例1 1void main()int add(int m,int n,int arr);int total,a34=5,3,6,8,-2,-4,-7,9,1,0,7,2;total=add(3,4,a0);printf(total=%d,total);int add(int m,int n,int arr)int i,j,sum=0;for(i=0;im;i=i+m-1)for(j=0;jn;j+)sum+=arri*n+j;for(j=0;jn;
10、j=j+n-1)for(i=1;im-1;i+)sum+=arri*n+j;return(sum);示例示例2 2#include void func(int);main(void)int a=13;printf(In main(),a=%d,address=%pn,a,&a);func(a);void func(int a)printf(In func(),a=%d,address=%pn,a,&a);示例示例3 3#include main(void)char a=My friend;char b=c;char str=c;printf(sizeof(a)=%dn,sizeof(a);pr
11、intf(sizeof(b)=%dn,sizeof(b);printf(sizeof(str)=%dn,sizeof(str);示例示例3 3#include int main(void)char name310=David,Jane Wang,Tom Lee;int i;for(i=0;i3;i+)printf(name%d=%sn,i,namei);printf(n);for(i=0;i3;i+)printf(address of name%d=%pn,i,&namei);printf(address ofname%d0=%pnn,i,&namei0);一、基本概念与理念一、基本概念与理念
12、o地址、指针、指针变量及基定义与使用地址、指针、指针变量及基定义与使用o指针与函数指针与函数o指针与数组指针与数组o指针数组与指向数组的指针指针数组与指向数组的指针n定义一个指针变量;注意:定义一个指针变量;注意:*与指针变量名的关与指针变量名的关系;指明基类型;系;指明基类型;n如何使一个指针变量指向另一个变量:地址赋如何使一个指针变量指向另一个变量:地址赋值;值;示例示例1#include#define N 10void main()double xN=1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.0,9.9;int i;double*pf,*pt;void swap
13、(double*,double*);for(pf=x,pt=&xN-1;pf pt;+pf,-pt)swap(pf,pt);/*函数调用函数调用*/for(i=0;i N;+i)printf(“nx%d=%f,”,i,xi);void swap(double*px,double*py)/*函数定义函数定义*/double temp;temp=*px;/*指针的间接引用指针的间接引用*/*px=*py;*py=temp;示例示例2#include int main(void)int i;char*name3=David,Jane Wang,TomLee;for(i=0;i3;i+)printf(
14、name%d=%sn,i,namei);o另请显示每个串的首字符另请显示每个串的首字符示例示例3Main()int*p1,*p2,*p,a=5,b=9;P1=&a;p2=&b;If(ab)p=p;p1=p2;p2=p;Printf(“a=%d,b=%d”,a,b);Printf(“nmax=%d,min=%d”,*p1,*p2);一、基本概念与理念一、基本概念与理念o结构体、共用体、枚举类型与应用结构体、共用体、枚举类型与应用o结构体数组与应用结构体数组与应用o结构体指针结构体指针o结构体传递结构体传递示例示例1 1main()struct data char name20;int no;in
15、t num;s 3=“Li”,0,0”Zhang”,1,0,”Fun”,2,0;int x,i;for(I=1;I=10;I+)scanf(“input no(0,1,2)=%d”,&x);sx.num+;for(I=0;I3;I+)printf(“%5s:%5d%dn,sI.name,sI.no,sI.num);示例示例2 2main()struct data char name20;int no;int num;*p,s 3=“Li”,0,0”Zhang”,1,0,”Fun”,2,0;int I,x;for(I=0;I3;I+)scanf(“input no(0,1,2)=%d”,&x);
16、sx.num+;for(p=s;p.no,p-num);示例示例3 3struct mydata char na15;int ma;int en;float avg(struct mydata*p);int main(void)struct mydata num=Alice,70,80;printf(%ss Mascore=%dn,num.na,num.ma);printf(En score=%dn,num.en);printf(average=%.2fn,avg(&num);一、基本概念与理念一、基本概念与理念o数据的静态与动态存储数据的静态与动态存储o链表及其组织结构、单链表链表及其组织结
17、构、单链表o建立简单链表、输出结点数据、处理结点建立简单链表、输出结点数据、处理结点数据的方法与过程数据的方法与过程二、问题思考二、问题思考omain()int a,b;a=32767;b=a+1;printf(“%d”,b)结果?结果?o3+6.5,6.5%3,(int)6.5%3;它们合法?它们合法?oI=3;printf(“%d,%d”,+I,I+)结果为?结果为?oa=3*5,a*4;结果为?结果为?二、问题思考二、问题思考oInt num 2与与num2=6中的中的2意意义如何?义如何?odefine max 5;与与int tempmax;分别做了什么?分别做了什么?o建立一整形数
18、组并输出;输入一整数,在建立一整形数组并输出;输入一整数,在数组中查找与之相等的元素,并输出其位数组中查找与之相等的元素,并输出其位置。置。o为什么可以把二维看作一维?为什么可以把二维看作一维?o定义定义A34与引用与引用A34的差异;的差异;二、问题思考二、问题思考v注意:注意:int*p=&a0;的意义的意义v(相当:(相当:int*p;p=&a0;)o设设p是指向一数组元素的指针变量,则是指向一数组元素的指针变量,则*p=1的意义是什么?的意义是什么?P+1的意义?的意义?o(表示对(表示对p所指的元素赋值所指的元素赋值1)。o理解作为变址运算符的意义理解作为变址运算符的意义o(系统对(
19、系统对a5处理成处理成(a+5)o引用数组元素可用下标法:引用数组元素可用下标法:aI,也可也可用指针法:(用指针法:(a+I),或或*(p+I)或或pI(带下标的指针)。带下标的指针)。二、问题思考二、问题思考o*(p+)与与*(+p)的区别?的区别?o前者先取前者先取*p的值,再使的值,再使p加加1,后者相反。,后者相反。o(p)+与与*(P+)的区别?的区别?o前者使元素前者使元素*p的值加的值加1。o有定义:有定义:int a34;则则a是整个二维数组的首是整个二维数组的首地址,即第地址,即第0行地址(首地址),如二维数组的行地址(首地址),如二维数组的首地址为首地址为2000,则,则
20、a1为多少?为多少?o2008;oa0,a1是一维数组名,因此分别为是一维数组名,因此分别为a00与与a10的地址,的地址,a0+1值为多少?值为多少?oa0+1则为则为a01的地址,值为的地址,值为2002。二、问题思考二、问题思考o如何实现如何实现“指向指向”?o说明说明INT I;INT*P的意义;的意义;o编程完成主函数输入两整数,地址作参数调用编程完成主函数输入两整数,地址作参数调用函数求其和后返回输出;函数求其和后返回输出;o如何理解如何理解*(p+i)=*(a+i)=ai=pi是等价的?是等价的?o*(*(p+i)+j)*(*(a0+i)+j)*(ai+j)aij o(*p)4表
21、示表示p是一个指向有是一个指向有4个元素的一维数组的指针个元素的一维数组的指针变量。相对比变量。相对比p4是有是有4个元素的指针数组。个元素的指针数组。o注意注意a0在一维与二维数组中的不同意义!在一维与二维数组中的不同意义!o在二维数组中:在二维数组中:a+i=ai=*(a+i)=&ai=&ai0二、问题思考二、问题思考o编写程序,由键盘输入学生数据,其项目有:编写程序,由键盘输入学生数据,其项目有:学号、姓名、平时成绩期中成绩、期终成绩、,学号、姓名、平时成绩期中成绩、期终成绩、,而学期成绩由期中、期终各占而学期成绩由期中、期终各占30%,平时,平时40%计算。输出学生的各项数据。计算。输
22、出学生的各项数据。o同上题,但一次可输入同上题,但一次可输入10个学生的数据,同时个学生的数据,同时输入学号即可显示该生所有数据。输入学号即可显示该生所有数据。o同上题,将学生数据以下列方式输出在屏幕上:同上题,将学生数据以下列方式输出在屏幕上:1)以学号由小到大的顺序;)以学号由小到大的顺序;2)学期成绩由高到低的顺序。)学期成绩由高到低的顺序。二、问题思考二、问题思考o请描述你对请描述你对“结构体结构体”的理解。的理解。o编写函数编写函数print打印有打印有5个学生数据的数个学生数据的数组,每个记录有学号、姓名、三门成绩,组,每个记录有学号、姓名、三门成绩,数据在主函数中输入。数据在主函
23、数中输入。o在上题基础上,用函数在上题基础上,用函数input输入学生数输入学生数据。据。o在上题基础上,计算每个学生的平均成绩、在上题基础上,计算每个学生的平均成绩、总的平均成绩,及最高分学生的所有数据。总的平均成绩,及最高分学生的所有数据。二、问题思考二、问题思考o居民数据包括:姓名(居民数据包括:姓名(name)、出生时间)、出生时间(birthday)、性别()、性别(sex)、身份证号()、身份证号(num)、)、民族(民族(nation)、文化程度()、文化程度(education)、住址)、住址(address)、电话号码()、电话号码(telNum)、电子邮件地)、电子邮件地址
24、(址(email)。)。(1)设计一个用成员运算符)设计一个用成员运算符“.”处理单个居民数据的处理单个居民数据的C语言程序。语言程序。(2)设计一个用指针处理单个居民数据的)设计一个用指针处理单个居民数据的C语言程序。语言程序。(3)设计一个用间接引用处理单个居民数据的)设计一个用间接引用处理单个居民数据的C语言程序。语言程序。二、问题思考二、问题思考o居民数据包括:姓名(居民数据包括:姓名(name)、出生时间)、出生时间(birthday)、性别()、性别(sex)、身份证号()、身份证号(num)、)、民族(民族(nation)、文化程度()、文化程度(education)、住址)、住
25、址(address)、电话号码()、电话号码(telNum)、电子邮件)、电子邮件地址(地址(email)。)。(1)设计一个用数组处理一批居民数据的)设计一个用数组处理一批居民数据的C语言程序。语言程序。(2)对上述居民数据按英文字母排序。)对上述居民数据按英文字母排序。(3)设计一个用链表处理一批居民数据的)设计一个用链表处理一批居民数据的C语言程序。语言程序。(4)对上述居民数据按年龄进行升序排序。)对上述居民数据按年龄进行升序排序。在已排好序的居民链表中,删去一人,或增加一人。在已排好序的居民链表中,删去一人,或增加一人。二、问题思考二、问题思考o建立有建立有N个整数结点的链表,统计其中偶个整数结点的链表,统计其中偶数结点的个数;数结点的个数;o有链表有链表A、B,每个结点包括学号与成绩,每个结点包括学号与成绩,要求将两表合并并输出。(要求将两表合并并输出。(先说明算法思先说明算法思想。想。)o编程将一链表逆序排列并输出。(编程将一链表逆序排列并输出。(先说明先说明算法思想。算法思想。)
限制150内