欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    c语言程序设计21第二十一讲(总复习).ppt

    • 资源ID:6504024       资源大小:485KB        全文页数:80页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c语言程序设计21第二十一讲(总复习).ppt

    你到C仅一步之遥!,高级语言程序设计,主讲教师:贾彩燕计算机与信息技术学院计算机科学与技术系,考试,时间:1月6日14:3016:30地点:SY210,答疑,时间:1月5日14:0018:00地点:九教北509或507,考试题型及分数分布,选择题(15题/每题2分,共30分)读程序写结果(5道题,共20分)程序填空(4道题,10个空/每空2分,共20分)编程题(3道题,共30分)总成绩平时成绩(30%)考试成绩(70%),两点提示,读程序细心一些编程题不要空着,能写多少写多少,课程内容,第一章 程序设计和C语言第二章 数据对象与计算第三章 变量、函数和控制结构第四章 基本程序设计技术第五章 C程序结构(函数)第六章 数组第七章 指针第八章 文件和输入输出第九章 结构和其它数据机制第十章 程序开发技术第十一章 标准库,重点(数据控制),数据C数据类型及存储性质控制结构顺序、选择、循环结构函数定义、声明及调用数组一维数组、字符数组指针数组与指针的关系结构结构的定义及使用链表的定义及操做,文件文件的打开、关闭文件的读写从问题到程序的编程思想程序的函数分解模块化程序设计,难点,递归指针数组与指针的关系命令行参数动态内存分配链表,要点1:算法及其表示方法,程序数据结构算法程序程序规定了计算机执行的动作和动作的顺序。算法:解决问题的方法和步骤算法的几个特性有穷性确定性无二义可执行性有0个或多个输入有0个或多个输出,要点2:运算符及表达式,运算符、表达式及其优先级关系一元运算符(优先级最高)自增、自减运算符(循环每年必考)算术运算符(/和%)关系运算符(考点)逻辑运算符(考点)位运算符条件运算符赋值运算符逗号运算符,例1:,int a=1,b=10;do b-=a;a+;while(b-0);执行完之后b的值是?8,b=(a=2*5,a*4),a+15;b=?40,int x=10,y=3,z;则语句printf(“%4dn”,z=(x%y,x/y);输出什么?_3,例2:判断char型变量ch是否为大写字母的正确表达式是,A、A=A)&(ch=A)&(ch=ch)C,例3:按位与运算:int a=7,b=12,c=a变量c的值是,A、19 B、4 C、5 D、9B,例4:假设a,b为int型变量,执行语句a=10;b=(a 10)?-a:a+;之后,a,b的值为,A.11,10B.9,11C.10,11D.9,9 A,要点3:C语言的基本数据类型,标识符、关键字、常量、变量C语言的基本数据类型int,float,double,char变量的存贮类型及其作用域autoregister/不常用static(循环考点)extern,例5:下面程序的输出结果是,int main()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,A,int f(int a)int b=0;static int c=3;b+;c+;return(a+b+c);,例6:已知c为字符型,则执行c2=A+6-3后,c2中的值为,A、BB、68C、不确定的值D、C 注意:字符型数据可以看作整型数据B,要点4:条件if语句,条件if语句的三种形式If else语句和switch开关语句的差别switch开关语句的形式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:循环语句,循环语句的三种常见形式循环结构的三要素循环不变关系如何从循环中跳出breakcontinue常见问题及算法累加、累乘函数的极数展开逼近(累加、累乘)方程求根(递推逼近)求最大约数和最小公倍数(递归和递推)Fibonacci数列(递归和递推)求100以内的素数、求水仙花数等等,例8:有下面程序段:int i,j,r;for(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,k;scanf(%d,例10:以下函数针对长度为Len的整型数组narr采用冒泡排序法进行非递减排序,请补全程序。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 Len-i;j+)if(_)/判断大小关系Temp=narrj;/交换元素_;_;return 0;,int BubbleSort(int narr,int Len)int i,j;int Temp;if(Len narrj+1)/判断大小关系Temp=narrj;/交换元素narrj=narrj+1;narrj+1=Temp;return 0;,要点6:函数,函数的定义、声明及调用int max(int a,int b)/函数头函数接口 int maxvalue;/函数体 maxvalue=(ab)?a:b;return maxvalue;/函数返回值,函数可无返回值函数声明的原则和意义函数接口及设计函数定义和使用者内外部的观点函数的参数传递单向传递双向传递,几种常见错误,1.函数嵌套定义,int main()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;,解决方案:将函数的定义放置在调用该函数的函数之前或者声明该函数的存在,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 main()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;printf(“%dn”,find(a);,解决方案:数组作为参数时只需将数组名作为实际参数,a10是其中一个元素,a只在几种情况下有意义。1)定义数组时不标明数组大小,通过初始化的元素个数确定数组大小,2)定义或声明函数时。,int find(int a)return ai;int main()int a10;printf(“%dn”,find(a);,函数参数的意义,函数最重要的有四部分:函数名字、函数返回值类型、函数参数、函数体。对于调用某一个函数的函数(称为主调函数)而言,前三部分是需要关注的。简单来说,主调函数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,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);,只需通过返回值返回结果,需要通过参数返回结果,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:基本输入输出语句,getchar()putchar()scanf()printf()gets()puts()数的批量输入输出:基本输入输出循环结构,例12:,int m;scanf(“%d”,a是int型变量,c是字符变量。scanf(“%c%c”,输入70之后结果是(),_-7,例13:,输入一批数据,采用循环固定次数 for(i=0;in;i+)scanf();采用scanf的返回值int a10,i=0;while(scanf(“%d”,其他类型的数字类似。但是如果输入字符串时,无法通过scanf返回值是否等于1来确定,因为数字也可作为字符串的内容。判断scanf是否返回EOF作为输入结束的条件。,要点八:数组,数组名是数组在内存中的首地址数组下标从0开始一维数组上的重要操作排序查找插入删除位置交换统计(求最大值,平均值等)常见问题及算法筛法求素数等多项式求值二维数组的定义及存储方式行主序二维数组可以视为特殊的一维数组初始化方法二维数组的使用矩阵相加、相乘、转置求最大元素、求鞍点等,字符数组和字符串的关系字符串结束标志字符数组初始化字符串求长字符串拷备字符串拼接处理字符串的常用函数strcpy()strcmp()strcat()strlen()strstr()注意:不允许给字符数组直接赋值char str10;str=“bjtu”;,要点九:指针,变量和地址取地址运算符和取内容运算符指针做函数参数(传地址)形参、实参都是变量内容交换形参、实参都是地址地址交换数组做函数参数的本质,指针和数组的关系一级指针和一维数组p=arr/int*p,arr10;下标法指针地址法指针法字符指针和字符数组p=str/char*p,str10;p=“bjtu”;指针和二维数组p=,指针要点,int a,*p=是错误的。,指针要点,int a1020;a是一个二维数组,实质上也可把a当作一个一维数组,只不过a数组中的每一个元素是一个一维数组。因此,a+1指的是a数组中的第二个元素,即a的第二行的地址。而*(a+1)指的是第二行第一个元素的地址,因此*(a+1)+2是第二行第三个元素的地址,*(*(a+1)+2)是第二行第三个元素的值。int c(int*x,int*y)定义了一个函数c,形式参数为x和y,均为整型指针类型,在调用函数c时,可以用数组名作为实际参数,也可以用指针作为实际参数。,指针要点,int*p;p是一个整型指针。scanf(“%d”,p);运行错误,因为p这个指针,不知道指向哪儿。两种方法:1、int a;p=即:使用指针时一定要注意指针指向哪个变量或者哪块内存。如果没有令该指针指向一块内存,则无法访问该指针所指向的变量的值,即*p。,数组与指针的实质,看见指针p或者数组a就要知道是一个地址,与普通变量不同。字符数组与字符指针:char a20;char*p=“Programming”;a不能改变自身的值。p指向一个字符串常量,无法通过*p修改p指向的字符串常量的值。即:允许a0=Q;或者*a=Q;不允许char b20;a=b;即:允许p=a;不允许*p=Q;或者p0=Q;为何普通变量作为函数参数时不能改变主调函数中形式参数的值?而指针或者数组就可以呢?,例14:下面程序的运行结果是()。voidswap(int*a,int*b)int*t;t=a;a=b;b=t;int main()intx=3,y=5,*p=A.3,5B.5,3C.3,3D.5,5,A,例15:以下程序的输出结果是#include#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);,411,下列程序段的输出结果为()。int a=6,7,8,9,10,*ptr=a;*(ptr+2)+=2;printf(%d,%dn,*ptr,*(ptr+2);A.8,10 B.6,8 C.7,9 D.6,10 D,例16:,例17:设以下程序生成可执行文件test.exe,当键入test C Programming Exam后的输出结果是?,#include int main(int argc,char*argv)int i;printf(%d,argc);for(i=0;i argc;+i)printf(Args%d:%sn,i,argvi);return 0;,要点十:动态内存分配,C程序中内存的分配程序区数据区栈(动态存储区)堆(动态存储区)静态存储区常量区动态内存分配和指针malloc()calloc()realloc()动态内存分配时要防止空指针if(p=NULL),要点十一:文件,文件的打开与关闭FILE*fp;/char fname=“file.txt”;/fp=fopen(fname“w”);fp=fopen(“file.txt”,“w”);fclose(fp);文件的读写fgetc()fputc()fgets()fputs()fread()fwrite(),文件的格式化读写fscanf()fscanf(fp,”%d”,fprintf()文件的定位rewind()fseek()ftell(),要点十二:结构与链表,结构的定义及使用会定义学生结构、会结构上的输入、输出、统计操作共用体的定义及使用链表的定义和其上的操作创建插入删除遍历统计,例18,设有n个人围成一个圆圈,从编号为m的人开始由1开始报数,每次正好报到数k的人退出游戏,后面一个人重新由1开始报数,请求出最后剩下的那个人的编号。如何用链表实现?,解题思路,首先建立一个单向链表,每一个人是一个节点。单向链表的结构:不停往后报数,直到报到k就删除当前节点直到最后只剩下1个节点,单向链表的结构:struct person int num;struct person*next;,最初状态(假设n=7,m=2,k=3),head,2next,3next,4next,5next,6next,7next,找到第一个报到3的人,head,2next,3next,4next,5next,6next,7next,第一个报到3的人出列(即删除该节点),head,2next,3next,5next,6next,7next,找到第二个报到3的人,head,2next,3next,5next,6next,7next,第二个报到3的人出列(即删除该节点),head,2next,3next,5next,6next,找到第三个报到3的人,head,2next,3next,5next,6next,第三个报到3的人出列(即删除该节点),head,2next,5next,6next,找到第四个报到3的人,head,2next,5next,6next,第四个报到3的人出列(即删除该节点),head,2next,5next,6next,找到第五个报到3的人,head,2next,5next,6next,第五个报到3的人出列(即删除该节点),head,2next,5next,找到第六个报到3的人,head,2next,5next,第六个报到3的人出列(即删除该节点),5next,head,只剩下一个节点,5next,判断只剩下一个节点?head-next=head?,输出结果:head-num,head,涉及到的几种链表操作,构造链表删除链表节点插入链表节点遍历链表节点,构造链表,n=7一个循环,总共循环7次,每次构造一个节点,并将新构造的节点插入到链表的最后,while(i=0;inext=p;q=p;,6next,5next,q,p,构造链表,用函数实现,参数为人数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;,删除链表节点,删除p节点,让q的next指向r,q-next=r;free(p);,6next,5next,q,p,7next,r,5next,q,7next,r,q-next=p-next;free(p);,删除链表节点,用函数实现,参数为struct person*p:需要删除的节点;struct person*q:p的前一个节点;返回值void,void deletenode(struct person*p,struct person*q)q-next=p-next;free(p);return;,遍历链表节点,用函数实现,参数为struct person*p;返回值void,void printlink(struct person*head)struct person*p=head;doprintf(%4d,p-num);p=p-next;while(p!=head);return;,int main()struct person*head,*s;int n,m,k,count=0,i;printf(input the number n,m,k:);scanf(%d%d%d,要点十三:编译预处理,编译预处理的目的、意义常用的编译预处理#define#include#ifdef#else#endif类型定义及其使用typedef,有如下程序段,运行之后的输出结果是#define square(x)x*xint x=2,y=3;printf(“%d”,square(x+y);A.25 B.11 C.10 D.15 B,例19:,例20:以下对结构体类型变量的定义中,不正确的是,A.typedef struct aa int n;float m;AA;AA td1;,B.struct int n;float m;aa;struct aa td1;,C.#define AA struct aa AA int n;float m;td1;,D.struct intn;float m;td1;,B,Q&A!,

    注意事项

    本文(c语言程序设计21第二十一讲(总复习).ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开