北京交通大学C语言课件总结_第1页
北京交通大学C语言课件总结_第2页
北京交通大学C语言课件总结_第3页
北京交通大学C语言课件总结_第4页
北京交通大学C语言课件总结_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、你到你到C仅一步之遥!仅一步之遥!高级语言程序设计高级语言程序设计主讲教师:丁丁主讲教师:丁丁计算机与信息技术学院计算机与信息技术学院考试考试n时间:时间:q1月月9日日q9:0011:00n地点:地点:答疑答疑n时间:时间:q1月月7日日q9:0012:00q14:0017:00n地点:地点:q九教北九教北517考试题型考试题型n一、单项选择题(一、单项选择题(1-10小题每题小题每题1分,分,11-25小小题每题题每题2分,共分,共40分)分)n二、请认真阅读下列程序,并请在答题纸上写出二、请认真阅读下列程序,并请在答题纸上写出各个程序在控制台屏幕上的输出结果(共各个程序在控制台屏幕上的输

2、出结果(共30分)分)q读程序写结果读程序写结果q程序填空程序填空n三、编程题(共三、编程题(共30分)分)考试形式及分数分布考试形式及分数分布n考试方式为开卷,学生最多可以带三本书。考试方式为开卷,学生最多可以带三本书。n总成绩平时成绩(总成绩平时成绩(60%)考试成绩()考试成绩(40%)两点提示两点提示n读程序细心一些读程序细心一些n编程题不要空着,能写多少写多少编程题不要空着,能写多少写多少课程内容课程内容第一章第一章 程序设计和程序设计和C C语言语言第二章第二章 数据对象与计算数据对象与计算第三章第三章 变量、函数和控制结构变量、函数和控制结构第四章第四章 基本程序设计技术基本程序

3、设计技术第五章第五章 C C程序结构(函数)程序结构(函数)第六章第六章 数组数组第七章第七章 指针指针第八章第八章 文件和输入输出文件和输入输出第九章第九章 结构和其它数据机制结构和其它数据机制第十章第十章 程序开发技术程序开发技术第十一章第十一章 标准库标准库重点(数据控制)重点(数据控制)n数据数据qC数据类型及存储性质数据类型及存储性质n控制结构控制结构q顺序、选择、循环结构顺序、选择、循环结构n函数函数q定义、声明及调用定义、声明及调用n数组数组q一维数组、字符数组指针一维数组、字符数组指针q数组与指针的关系数组与指针的关系n结构结构q结构的定义及使用结构的定义及使用q链表的定义及操

4、做链表的定义及操做n文件文件q文件的打开、关闭文件的打开、关闭q文件的读写文件的读写n从问题到程序的编程思想从问题到程序的编程思想q程序的函数分解程序的函数分解q模块化程序设计模块化程序设计难点难点n递归递归n指针指针q数组与指针的关系数组与指针的关系q命令行参数命令行参数q动态内存分配动态内存分配n链表链表要点要点1:算法及其表示方法:算法及其表示方法n程序数据结构算法程序数据结构算法q程序程序n程序规定了计算机执行的动作和动作的顺序。程序规定了计算机执行的动作和动作的顺序。q算法:算法:n解决问题的方法和步骤解决问题的方法和步骤q算法的几个特性算法的几个特性n有穷性有穷性n确定性无二义确定

5、性无二义n可执行性可执行性n有有0个或多个输入个或多个输入n有有0个或多个输出个或多个输出要点要点2:运算符及表达式:运算符及表达式n运算符、表达式及其优先级关系运算符、表达式及其优先级关系q一元运算符一元运算符(优先级最高)(优先级最高)q自增、自减运算符自增、自减运算符(循环每年必考)(循环每年必考)q算术运算符算术运算符(/和和%)q关系运算符关系运算符(考点)(考点)q逻辑运算符逻辑运算符(考点)(考点)q位运算符位运算符q条件运算符条件运算符q赋值运算符赋值运算符q逗号运算符逗号运算符例例1:int a = 1, b = 10; do b -= a;a+; while ( b- 0

6、); 执行完之后执行完之后b的值是?的值是?8b = (a = 2*5, a*4), a+15;b = ?40int x=10,y=3,z;则语句则语句printf(“%4dn”,z=(x%y,x/y);输出什么?输出什么? _3例例2:判断:判断char型变量型变量ch是否为大写字母的正确表达是否为大写字母的正确表达式是式是nA、A=ch=A)&(ch=A)&(ch=Z) nD、(A=ch)nC例例3:按位与运算:按位与运算:int a=7,b=12,c=a&b;变量变量c的值的值是是nA、19 nB、4 nC、5 nD、9nB 例例4:假设:假设a, b为为int型

7、变量,执行语句型变量,执行语句a=10; b = (a 10) ? -a : a+; 之后,之后,a, b的值为的值为nA. 11, 10nB. 9, 11nC. 10, 11nD. 9, 9 nA要点要点3:C语言的基本数据类型语言的基本数据类型n标识符、关键字、常量、变量标识符、关键字、常量、变量nC语言的基本数据类型语言的基本数据类型qint, float, double, charn变量的存贮类型及其作用域变量的存贮类型及其作用域qautoqregister /不常用不常用qstatic(循环考点)(循环考点)qextern例例5:下面程序的输出结果是:下面程序的输出结果是int ma

8、in() int a = 2, i; for(i=0;i3;i+) printf(%dn,f(a); A、7 B、 7 C、 7 D、 7 8 9 10 7 9 11 13 7 Aint f( int a) int b=0; static int c = 3; b+; c+; return(a+b+c);例例6:已知:已知c为字符型,则执行为字符型,则执行c2=A+6-3后,后,c2中的值为中的值为nA、BB、68C、不确定的值、不确定的值 D、C n注意:字符型数据可以看作整型数据注意:字符型数据可以看作整型数据nB要点要点4:条件:条件if语句语句n条件条件if语句的三种形式语句的三种形式

9、nIf else语句和语句和switch开关语句的差别开关语句的差别nswitch开关语句的形式开关语句的形式swith(常量表达式常量表达式)case 表达式表达式1:语句语句; break;case 表达式表达式2:语句语句; break;default:语句;语句;例例7:以下程序的输出结果是:以下程序的输出结果是: 。int main() int a=0,i;for(i=0; i4; i+) switch(i) case 0:case 3: a+=2; break;case 1:case 2: a+=3;default: a+=5;printf(%dn, a);20要点要点5:循环语句

10、:循环语句n循环语句的三种常见形式循环语句的三种常见形式n循环结构的三要素循环不变关系循环结构的三要素循环不变关系n如何从循环中跳出如何从循环中跳出qbreakqcontinuen常见问题及算法常见问题及算法q累加、累乘累加、累乘q函数的极数展开逼近(累加、累乘)函数的极数展开逼近(累加、累乘)q方程求根(递推逼近)方程求根(递推逼近)q求最大约数和最小公倍数(递归和递推)求最大约数和最小公倍数(递归和递推)qFibonacci数列(递归和递推)数列(递归和递推)q求求100以内的素数、求水仙花数等等以内的素数、求水仙花数等等例例8:有下面程序段:有下面程序段: int i,j,r; for(

11、i=20,j=7; r=i%j; i=j, j=r) continue; printf(“%3d”,j);运行结果是运行结果是: _1例例9:完成下列程序段:任意输入一个数:完成下列程序段:任意输入一个数m,判断是否是素数,判断是否是素数_int main() int m,i,k; _; k=sqrt(m+1); for_ if(m%i=0) break; if_ printf(“%d is a prime numbern ”,m); else printf(“%d is not a prime numbern”,m);#include #include int main() int m,i,

12、k; scanf(%d,&m); k=sqrt(m); for(i=2;i=k;i+) if(m%i=0) break; if(i=k+1) printf(%d is a prime numbern ,m); else printf(%d is not a prime numbern,m);例例10:以下函数针对长度为:以下函数针对长度为Len的整型数组的整型数组narr采用冒泡排序法进行非采用冒泡排序法进行非递减排序,请补全程序。递减排序,请补全程序。int BubbleSort(int narr,int Len)int i,j; int Temp; if (Len = 0) ret

13、urn -1;for (i = 0; i Len; i+) for (j = 0; j Len - i; j+)if (_) /判断大小关系判断大小关系Temp = narrj;/交换元素交换元素_; _; return 0;int BubbleSort(int narr,int Len)int i,j; int Temp; if (Len = 0) return -1;for (i = 0; i Len; i+) for (j = 0; j narrj+1) /判断大小关系判断大小关系Temp = narrj;/交换元素交换元素narrj = narrj+1; narrj+1 = Temp;

14、 return 0;要点要点6:函数:函数n函数的定义、声明及调用函数的定义、声明及调用int max(int a, int b)/函数头函数接口函数头函数接口 int maxvalue; /函数体函数体 maxvalue=(ab)?a:b; return maxvalue;/函数返回值,函数可无返回值函数返回值,函数可无返回值n函数声明的原则和意义函数声明的原则和意义n函数接口及设计函数接口及设计q函数定义和使用者内外部的观点函数定义和使用者内外部的观点n函数的参数传递函数的参数传递q单向传递单向传递q双向传递双向传递几种常见错误几种常见错误1. 函数嵌套定义函数嵌套定义 int main(

15、) int max(int x, int y) return xy?x:y; 解决方案:将函数的定义放置在其他函数之解决方案:将函数的定义放置在其他函数之外,不允许嵌套定义。外,不允许嵌套定义。int max(int x, int y) return xy?x:y;int main() int a=10,b=8; max(a,b);几种常见错误几种常见错误2. 某函数的定义在调用该函数的函数之后某函数的定义在调用该函数的函数之后int main() int a=10,b=8; max(a, b);int max(int x, int y) return xy?x:y; 解决方案:将函数的定义放

16、置在解决方案:将函数的定义放置在调用该函数的函数调用该函数的函数之前或者声明该函数的存在之前或者声明该函数的存在int max(int x, int y) return xy?x:y;int main() int a=10,b=8; max(a,b);int max(int x, int y);int main()int a=10,b=8; max(a,b);int max(int x, int y) return xy?x:y;几种常见错误几种常见错误3. 调用函数时将数据类型也写上调用函数时将数据类型也写上int max(int x, int y) return xy?x:y;int ma

17、in() int a=10,b=8; max(int a, int b); 解决方案:只有在定义和声明的时候需要写上数据类型,无解决方案:只有在定义和声明的时候需要写上数据类型,无论是参数或者是返回值,而在调用时则只需要写函数名以及论是参数或者是返回值,而在调用时则只需要写函数名以及变量。变量。int max(int x, int y) return xy?x:y;int main() int a=10,b=8; max(a,b);几种常见错误几种常见错误4. 将数组作为参数时将数组作为参数时int find(int a) return ai;int main() int a10; print

18、f(“%dn”,find(a); 解决方案:数组作为参数时只需将数组名作为实际参数,解决方案:数组作为参数时只需将数组名作为实际参数,a10a10是其中一个元素,是其中一个元素,aa只在几种情况下有意义。只在几种情况下有意义。1 1)定)定义数组时不标明数组大小,通过初始化的元素个数确定数组义数组时不标明数组大小,通过初始化的元素个数确定数组大小,大小,2 2)定义或声明函数时。)定义或声明函数时。int find(int a) return ai;int main() int a10; printf(“%dn”,find(a);函数参数的意义函数参数的意义n函数最重要的有四部分:函数名字、函

19、数返回函数最重要的有四部分:函数名字、函数返回值类型、函数参数、函数体。值类型、函数参数、函数体。n对于调用某一个函数的函数(称为主调函数)对于调用某一个函数的函数(称为主调函数)而言,前三部分是需要关注的。而言,前三部分是需要关注的。n简单来说,主调函数简单来说,主调函数A将参数传递给某函数将参数传递给某函数B,B通过计算得到返回值,将返回值传递给主调通过计算得到返回值,将返回值传递给主调函数函数A。int max(int x, int y) return xy?x:y;int main() int a=10,b=8; int c=max(a,b); printf(“%dn”, max(a,

20、b);void swap(int *p, int *q) int t = *p; *p = *q; *q = t;int main() int a=10,b=8; swap(&a,&b); printf(“%4d%4dn”,a,b);只需通过返回值返回结果只需通过返回值返回结果需要通过参数返回结果需要通过参数返回结果 n m 调用时进行调用时进行 参数值的复制参数值的复制 函数函数 f 的调用环境的调用环境 函数函数 f 的内部的内部 图图 5.3 函数调用与参数值的传递函数调用与参数值的传递 a b 函数定义:函数定义: int f(int a, int b) . . 函数调

21、用:函数调用: f(m, n); C语言的参数机制称为值参数(简称值参)语言的参数机制称为值参数(简称值参)f内对内对a和和b的操作与的操作与m和和n没有任何关系没有任何关系例例11:以下是递归求最大公约数的函数,请补充:以下是递归求最大公约数的函数,请补充int gcd(int m, int n)if(m=n)_else if(mn)_;else_;int gcd(int m, int n)if(m=n)return m;else if(mn)return gcd(n,m);elsereturn gcd(m-n,n);要点要点7:基本输入输出语句:基本输入输出语句ngetchar()nput

22、char()nscanf()nprintf()ngets()nputs()n数的批量输入输出:基本输入输出循环结构数的批量输入输出:基本输入输出循环结构例例12:int m; scanf(“%d”, &m);int *p; scanf(“%d”, p);double d; scanf(“%lf”, &d);float f; scanf(“%f”, &f);double d=1.0; printf(“%f”, d);char a10, *str=a;scanf(“%s”, str); scanf(“%s”, a);printf(“%s”, str); printf(“%s

23、”, a);na是是int型变量,型变量,c是字符变量。是字符变量。 scanf( “%c%c”, &a, &c); c=c-a; printf(“%4d”, c);输入输入70之后结果是之后结果是() _-7例例13:输入一批数据输入一批数据n采用循环采用循环q固定次数固定次数 for(i=0; in; i+) scanf(); q采用采用scanf的返回值的返回值int a10, i=0;while(scanf(“%d”,&ai+)=1);q其他类型的数字类似。其他类型的数字类似。q但是如果输入字符串时,无法通过但是如果输入字符串时,无法通过scanf返回值是返回值

24、是否等于否等于1来确定,因为数字也可作为字符串的内容。来确定,因为数字也可作为字符串的内容。判断判断scanf是否返回是否返回EOF作为输入结束的条件。作为输入结束的条件。要点八:数组要点八:数组n数组名是数组在内存中的首地址数组名是数组在内存中的首地址n数组下标从数组下标从0开始开始n一维数组上的重要操作一维数组上的重要操作q排序排序q查找查找q插入插入q删除删除q位置交换位置交换q统计(求最大值,平均值等)统计(求最大值,平均值等)n常见问题及算法常见问题及算法q筛法求素数等筛法求素数等q多项式求值多项式求值n二维数组的定义及存储方式二维数组的定义及存储方式q行主序行主序q二维数组可以视为

25、特殊的一维数组二维数组可以视为特殊的一维数组q初始化方法初始化方法n二维数组的使用二维数组的使用q矩阵相加、相乘、转置矩阵相加、相乘、转置q求最大元素、求鞍点等求最大元素、求鞍点等n字符数组和字符串的关系字符数组和字符串的关系q字符串结束标志字符串结束标志q字符数组初始化字符数组初始化q字符串求长字符串求长q字符串拷备字符串拷备q字符串拼接字符串拼接q处理字符串的常用函数处理字符串的常用函数nstrcpy()nstrcmp()nstrcat()nstrlen()nstrstr()q注意:不允许给字符数组直接注意:不允许给字符数组直接赋值赋值nchar str10;nstr=“bjtu”; 要点

26、九:指针要点九:指针n变量和地址变量和地址n取地址运算符和取内容运取地址运算符和取内容运算符算符n指针做函数参数(传地址)指针做函数参数(传地址)q形参、实参都是变量形参、实参都是变量n内容交换内容交换q形参、实参都是地址形参、实参都是地址n地址交换地址交换n数组做函数参数的本质数组做函数参数的本质n指针和数组的关系指针和数组的关系q一级指针和一维数组一级指针和一维数组np=arr / int *p, arr10;n下标法下标法n指针地址法指针地址法n指针法指针法q字符指针和字符数组字符指针和字符数组np=str / char *p, str10;np=“bjtu”; q指针和二维数组指针和二

27、维数组np=&a00/ int *p, a33;指针要点指针要点nint a, *p=&a;q指针变量指针变量p指向整型变量指向整型变量a,指针变量,指针变量p也是一个变量,在内也是一个变量,在内存中存放着,这个变量的值是一个整型,即存中存放着,这个变量的值是一个整型,即a的地址。的地址。n指针指针p代表代表p这个变量的值,而这个变量的值,而*p代表代表p所指向的变量所指向的变量的值。的值。int a, *p; qp=&a;令令p的值改为的值改为a的地址,即让的地址,即让p指向指向a。q*p=10;令令p指向的变量的值改为指向的变量的值改为10,即让,即让a=10。ni

28、nt b10, *p=b;q指针变量指针变量p指向数组指向数组b,数组名,数组名b和指针和指针p基本等价基本等价,除了无,除了无法更改数组名法更改数组名b的值。可以采用的值。可以采用b5、p5、*(p+2)、*(b+2)等方式访问数组中元素的值。等方式访问数组中元素的值。int a10; b=a;是错误的是错误的。指针要点指针要点nint a1020;qa是一个二维数组,实质上也可把是一个二维数组,实质上也可把a当作一个一维数组,只不当作一个一维数组,只不过过a数组中的每一个元素是一个一维数组。数组中的每一个元素是一个一维数组。q因此,因此,a+1指的是指的是a数组中的第二个元素,即数组中的第

29、二个元素,即a的第二行的地的第二行的地址。址。q而而*(a+1)指的是第二行第一个元素的地址,因此指的是第二行第一个元素的地址,因此*(a+1)+2是是第二行第三个元素的地址,第二行第三个元素的地址, *(*(a+1)+2)是第二行第三个元素是第二行第三个元素的值。的值。nint c(int *x, int *y)q定义了一个函数定义了一个函数c,形式参数为,形式参数为x和和y,均为整型指针类型,均为整型指针类型,在调用函数在调用函数c时,可以用数组名作为实际参数,也可以用指时,可以用数组名作为实际参数,也可以用指针作为实际参数。针作为实际参数。指针要点指针要点nint *p;qp是一个整型指

30、针。是一个整型指针。qscanf(“%d”, p);q运行错误,因为运行错误,因为p这个指针,不知道指向哪儿。这个指针,不知道指向哪儿。q两种方法:两种方法:1、int a; p = &a; scanf(“%d”, p);q2、动态分配:、动态分配:p=(int *)malloc(sizeof(int); scanf(“%d”, p);n即使用指针时一定要即使用指针时一定要注意指针指向哪个变量或注意指针指向哪个变量或者哪块内存者哪块内存。如果没有令该指针指向一块内存,。如果没有令该指针指向一块内存,则无法访问该指针所指向的变量的值,即则无法访问该指针所指向的变量的值,即*p。数组与指针

31、的实质数组与指针的实质n看见指针看见指针p或者数组或者数组a就要知道是就要知道是一个地址,与普通变一个地址,与普通变量量不同。不同。n字符数组与字符指针:字符数组与字符指针:char a20; char *p = “Programming”; qa不能改变自身的值。不能改变自身的值。qp指向一个字符串常量,无法通过指向一个字符串常量,无法通过*p修改修改p指向的字符串常量指向的字符串常量的值。的值。q即:允许即:允许a0=Q;或者或者*a=Q;不允许不允许char b20; a=b;q即:允许即:允许p=a;不允许不允许*p=Q; 或者或者p0=Q;n为何普通变量作为函数参数时不能改变主调函数

32、中形为何普通变量作为函数参数时不能改变主调函数中形式参数的值?而指针或者数组就可以呢?式参数的值?而指针或者数组就可以呢?例例14:下面程序的运行结果是(:下面程序的运行结果是( )。)。void swap(int *a, int *b)int *t; t = a; a = b; b = t; int main() int x = 3, y = 5, *p = &x, *q = &y; swap(p, q); printf(%d, %dn,*p,*q); A. 3, 5B. 5, 3C. 3, 3D.5, 5 A例例15:以下程序的输出结果是:以下程序的输出结果是#includ

33、e #include int printlength(int a)printf(%dn, sizeof(a);return 0;int printlength2(char *a)printf(%dn, strlen(a);return 0;int main()int a10;char *b=hello world;printlength(a);printlength2(b);411n下列程序段的输出结果为(下列程序段的输出结果为( )。)。nint a = 6, 7, 8, 9, 10, *ptr = a;n*(ptr + 2) += 2; nprintf (%d, %dn, *ptr, *(

34、ptr+2); nA. 8, 10 B. 6, 8 nC. 7, 9 D. 6, 10 nD例例16:例例17:设以下程序生成可执行文件:设以下程序生成可执行文件test.exe,当键入,当键入test C Programming Exam后的输出结果是?后的输出结果是?#include int main (int argc, char *argv) int i; printf(%d, argc); for (i = 0; i next = head?n输出结果:输出结果:head-numheadhead涉及到的几种链表操作涉及到的几种链表操作n构造链表构造链表n删除链表节点删除链表节点n插入

35、链表节点插入链表节点n遍历链表节点遍历链表节点构造链表构造链表nn=7n一个循环,总共循环一个循环,总共循环7次,每次构造一个节点,次,每次构造一个节点,并将新构造的节点插入到链表的最后并将新构造的节点插入到链表的最后while(i=0; inext=p; q=p;6 6nextnext 5 5nextnext qp构造链表构造链表n用函数实现,参数为人数用函数实现,参数为人数n,返回值为,返回值为struct person *struct person *constructlink(int n) struct person *p=NULL, *q=NULL, *head; for(i=0; inum=i+1; if(NULL!=q) q-next=p; else head=p; q=p; q-next=head; return head;删除链表节点删除链表节点n删除删除p节点,让节点,让q的的next指向指向rq-next=r;free(p);6 6nextnext 5 5nextnext qp7 7nextnext r5 5nextnext q7 7nextnext rq-next=p-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论