大学 C语言学习.ppt_第1页
大学 C语言学习.ppt_第2页
大学 C语言学习.ppt_第3页
大学 C语言学习.ppt_第4页
大学 C语言学习.ppt_第5页
免费预览已结束,剩余309页可下载查看

下载本文档

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

文档简介

C语言程序设计,本课程内容:,第一章C语言概述第二章简单程序设计之一第三章一维数组第四章算法第五章基本数据类型与输入/输出第六章运算符和表达式第七章简单程序设计之二第八章二维数组和字符数组第九章函数第十章指针第十一章编译预处理第十二章指针的高级应用第十三章结构体、共同体和枚举类型第十四章文件第十五章位运算,本课程考核办法,期末考试:70平时成绩:30课堂作业实验(课后作业),第一章C语言概述,第一章C语言概述,C语言历史C语言特点简单C程序C语言上机环境,1.1C语言历史,1.1C语言历史,1970年,贝尔实验室的Ritchie和Thompson用B语言合作完成Unix第一个版本1972年,Ritchie完成了C语言,并和Thompson合力将Unix80的部分用C语言改写1978年,Kernighan和Ritchie出版了名著TheCProgrammingLanguage,就是有名的K,1.3简单C程序,第一个C程序,helloworld,#include,voidmain()printf(helloworldn);,头文件包含语句,一个函数定义,1.3简单C程序,第一个C程序,helloworld,#include,stdio=standardinputoutputh=head,1.3简单C程序,主函数定义,voidmain()printf(helloworldn);,1.3简单C程序,第一个C程序,helloworld,void,返回值类型,main,(),printf(helloworldn);,函数名,函数体,参数表,1.3简单C程序,函数定义语法:返回值类型函数名(参数表)函数体(语句以分号结束),1.3简单C程序,printf函数功能:标准输出函数,按参数输出到屏幕上参数:可以有多个参数,第一个为字符串,printf(helloworldn);,函数调用语法:函数名(参数);,1.3简单C程序,printf函数功能:标准输出函数,按参数输出到屏幕上参数:可以有多个参数,第一个为字符串C语言中:双引号括起来表示字符串n表示回车换行符,printf(helloworldn);,1.3简单C程序,程序模式(无自定义函数):includevoidmain()语句,#includevoidmain()printf(helloworldn);,1.3简单C程序,例1.2.1加法程序,#includevoidmain()inta,b,s;/*变量定义*/a=123;/*变量赋值*/b=456;s=a+b;printf(s=%dn,s);,变量定义,变量赋值,注释语句,printf的升级用法,1.3简单C程序,变量定义语法:变量类型变量名,变量名;inta;inta,b,c;变量赋值:a=123;c=a+b;注释语句:/*注释内容*/,1.3简单C程序,printf函数格式控制字符串printf(“s=%dn”,s);格式说明:百分号格式字符输出:除格式说明外,其余按原样输出格式说明被替换为后面的变量,1.3简单C程序,例1.2.2加法程序(函数调用),intsum(inta,intb)ints;s=a+b;returns;voidmain()inta,b,s;/*变量定义*/a=123;/*变量赋值*/b=456;s=sum(a,b);/*原来是s=a+b;*/printf(s=%dn,s);,1.3简单C程序,函数定义语法:返回值函数名(参数表)函数体(语句以分号结束)参数表:参数类型参数名,参数类型,参数名intsum(inta,intb)返回值用法:s=sum(a,b);,1.3简单C程序,注意:函数的参数函数内部定义的变量只在该函数内部有效,1.3简单C程序,例1.2.3加法程序(数据输入),intsum(a,b)ints;s=a+b;returns;voidmain()inta,b,s;/*变量定义*/scanf(“%a,%b”,a=123;/*变量赋值*/b=456;,1.3简单C程序,scanf函数scanf(“%d,%d”,无分隔字符,用空格或回车分隔,1.3简单C程序,程序模式(有自定义函数):includeintf()语句voidmain()语句f();语句,1.4C语言上机环境,C语言上机步骤(VisualC+6.0):启动VC创建应用添加C文件编译(F7)改正错误运行程序(Ctrl+F5),总结,C语言历史C语言特点:函数简单C程序掌握两种程序模式(无自定义函数、有自定义函数)函数基本概念变量定义、赋值语句printf,scanf基本用法,课堂作业,编写程序,完成如下功能(两种方式):输入两个数,输出其平方和,第二章简单程序设计之一,第二章简单程序设计之一,常量与变量顺序结构程序设计选择结构程序设计循环结构程序设计C语句概述,2.1常量与变量,inta;a=2;,变量,常量,常量:值不能改变的量变量:值可以改变,2.1常量与变量,变量命名规则:只能由字母、数字和下划线组成,且必须以字母或下划线开头。,为什么,2.1常量与变量,变量的赋值有三种方法:在定义变量的同时为变量赋初值,格式为:=;例如,inta=10;利用赋值语句为变量赋初值,格式为:=;例如,a=10+3;利用格式化输入函数为变量赋初值,格式为:scanf(“格式控制字符串”,变量地址表列);例如,scanf(%d,定义后的变量其值是随机的、不确定的,只有通过赋值操作,其值才是确定的,才能被使用。,2.2顺序结构程序设计,语句从上到下,逐条执行,一直到最后一条语句退出程序。例:加法平方和交换两变量的值,2.3选择结构程序设计,例求较大值,#includevoidmain()inta,b,max;scanf(“%d,%d”,2.3选择结构程序设计,三种格式:1、if(ab)m=a;2、if(ab)m=a;elsem=b;3、if(.).elseif(.).elseif(.).else.,#includestdio.hvoidmain()intscore,grade;printf(请输入成绩:);scanf(%d,程序运行情况如下:请输入成绩:76成绩76的对应积点是3,【例2.5】计算学习成绩积点,2.5简单循环结构程序设计,问题计算1+2+100的值,即inti,sum;i=1;sum=0;sum=sum+i;i=i+1;sum=sum+i;i=i+1;:sum=sum+i;i=i+1;,如何避免出现这种情况?,重复100次同样的语句,程序显得很笨拙。,2.5简单循环结构程序设计,问题打印20行helloworld输入10个数,求其和/积输入10个数,求其最大值计算1+2+100的值计算n!,for语句格式,for(赋值;循环条件;循环控制)语句;关键:对循环变量的控制,循环中可能出现的变量,循环变量(巧妙利用循环变量)1+3+5+7+99累积变量(累加,累乘)递推变量,设计循环的要点,循环体循环条件(循环变量的控制)初值(很重要,在循环开始之前赋值),数列问题(求和),有计算公式1加到n,a(i)=i,平方和,a(i)=i*i;练习:2+5+10+17+26+37有递推公式1+2+4+8+16+1+3+7+15+31+63+练习:2+22+222+2222+22222+2222221!+2!+3!+n!斐波拉契数列1+1+2+3+5+8+13+21a(i)=a(i-1)+a(i-2)+a(i-3)练习:a(i)=2*a(i-1)+a(i-2)*a(i-2)思考:1*2+2*3+3*5+5*8+8*13,程序模式(数列),voidmain().for(i=1;i=n;i+)a=数列通项公式(用i表示);s=s+a;.,程序模式(数列),voidmain().a=第一项;for(i=1;i=n;i+)s=s+a;a=递推公式(用a表示).,循环条件,循环变量控制其他变量控制输入控制输入一系列数字,以-1结束,求其和;,基本算法,累加/乘(数列问题)计数/记位置变量交换,计数问题,1001000中有多少个数是17的倍数有多少个三位数可以被7整除但是不能被3整除输入一系列正数,以-1结束,记录输入数字的个数输入10个数,记录其中偶数的个数。输入10个数,记录最后一个偶数的位置。输入10个数,记录最大值的位置。输入10个数,记录第一个偶数的位置。,交换变量,输入三个数a、b、c,通过变量交换使a,b,c从小到大排序,程序模式(计数),intnum=0;for(.)if(条件)num+;,程序模式(计位置),for(.)if(条件)pos=当前位置;,2.5简单循环结构程序设计,#includeintmain()inti,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(Sum=%dn,sum);return(0);,运行结果为:sum=5050,2.5简单循环结构程序设计,while语句while(循环条件)语句;执行过程:判断循环条件,执行循环体判断循环条件,执行循环体。当条件不满足时,退出循环,2.5简单循环结构程序设计,do-while语句do语句;while(循环条件)执行过程:执行循环体,判断循环条件执行循环体,判断循环条件。当条件不满足时,退出循环,2.5简单循环结构程序设计,#includeintmain()inti,sum;i=1;sum=0;dosum=sum+i;i+;while(i=100);printf(Sum=%dn,sum);return(0);,while和do-while循环比较,#includemain()intsum=0,i,n;scanf(%d,#includeintmain()intsum=0,i,n;scanf(%d,试分析:当分别输入5和4时,两个程序段分别输出什么?,2.5for语句,#includeintmain()inti,sum;i=1;sum=0;for(i=1;i=100;i+)sum=sum+i;printf(Sum=%dn,sum);return(0);,#includeintmain()inti,sum;i=1;sum=0;while(i=100);sum=sum+i;i+;printf(Sum=%dn,sum);return(0);,for语句中表达式的省略,for(表达式1;表达式2;表达式3)语句;省略表达式1省略表达式2省略表达式3三个都省略,几种循环的比较,while和for完全等价用法循环次数确定时用for例循环次数不定时用while例,例:输入10个数,求其和,2.6C语句概述,控制语句ifwhileswitch赋值语句a=3;a=b+c;m=max(a,b);函数调用(单独的函数调用)printf(“helloworld”);max(a,b);复合语句空语句;,数列问题(求和),输入10个数,求其和产生10个随机数,求其和输入10个数,求其最大值输入10个数,求其最大值和最小值产生10个随机数,求其最大值和最小值,数列问题的其他问法,数列求积数列的第n项是多少数列的第几项超过x数列前多少项的和超过x,课堂练习:,3:编程求分段函数的值:x(xb)m=a;elsem=b;,关系运算符,6种=!=注意:=,关系表达式,ab关系表达式的值只有两个:真,假C语言中用1表示真,0表示假所以关系表达式的值:0或1例:printf(“%d”,21);,关系表达式,对于非关系表达式,C语言也能够判断出真假0为假非0为真if(3)If(a+b),关系表达式,a=3;b=2;c=1;(ab)=c;,3逻辑运算符和表达式,逻辑运算符(3个)aa=a+3;,有点别扭,为什么,赋值表达式,从右边计算:a=b=c=5;a+=a-=a*a;赋值表达式的值,就是左边变量的值注意:值只能赋给变量a=2*3=3*4,5逗号表达式,inta,b;a=3,b=4;表达式1,表达式2,表达式n逗号表达式的值式最右边的表达式没什么用,只是把两个表达式连在一起常用于for语句中,第七章简单C程序设计之二,第七章简单C程序设计之二,多分支选择结构程序设计嵌套循环结构设计break语句和continue语句程序举例,1switch语句,intscore;scanf(%d,s);switch(s)caseA:printf(85-90n);break;caseB:printf(70-85n);break;caseC:printf(60-70n);break;caseD:printf(60n);break;default:printf(errorn);break;,switch语句,switch语句的一般形式switch(表达式)case常量表达式1:语句组;break;case常量表达式2:语句组;break;.case常量表达式:语句组;break;default:语句组;break;注意:break语句不是必须的,2循环嵌套,for(i=0;i5;i+)for(j=0;j0)(D)if(strcmp(str1,str2)0),常用字符串函数,例若有语句:chars110,s210=“books”,则能将字符串books赋给数组s1的正确语句是:(A)s1=“books”;(B)strcpy(s1,s2);(C)s1=s2;(D)strcpy(s2,s1);,第九章函数,第九章函数,函数的定义和调用函数声明参数传递和返回值数组参数变量的作用域嵌套调用和递归调用,第九章函数,函数是对程序的分解。一个c程序可由一个主函数和若干个函数组成。由主函数调用其他函数,其他函数也可互相调用。同一个函数可以被一个或多个函数调用任意多次。,第九章函数,从用户角度看,函数分为两种:(1)系统函数,也叫库函数。由系统提供。(2)用户自定义函数,用来解决用户的专门需要。,9.1函数定义和调用,intmax(inta,intb)intm;if(ab)m=a;elsem=b;returnm;voidmain()inta=2,b=3,c;c=max(a,b);,9.1函数定义和调用,printstar()printf(“*n”);print_message()printf(“Howdoyoudo!n”);voidmain()printstar();print_message();printstar();,函数定义,函数定义语法:返回值类型函数名(参数表)函数体(语句以分号结束)返回值可省,默认返回int型参数表可为空函数体也可为空函数定义要独立,不可嵌套,函数调用,语句printstar();表达式c=2*max(a,b);函数参数m=max(c,max(a,b);,函数定义和调用,编写函数时无需考虑何时调用调用函数时无需考虑如何实现,9.2函数声明,为什么要声明?编译器需要识别标识符和进行语法检查。什么时候需要声明?当调用下面的函数或另外文件的函数时。,函数声明,函数声明语法intmax(inta,intb);或intmax(int,int)为什么要包含头文件?,9.3参数传递和返回值,定义函数时,函数名后面括弧中的变量名称为“形式参数”(简称形参)。调用函数时,函数名后面括弧中的表达式称为“实际参数”(简称实参)。形参和实参是不同变量例值传递单向传递形参和实参类型要匹配,intmax(inta,intb)if(ab)returna;elsereturnb;voidmain()intx=2,y=3,z;z=max(x,y);,9.3参数传递和返回值,intswap(inta,intb)intt;t=a;a=b;b=t;voidmain()intx=2,y=3;swap(x,y);,函数返回值,如果函数有返回值,必须用return语句返回returna或return(a)执行到return语句,函数立即结束,intmax(inta,intb)if(ab)returna;elsereturnb;,9.4数组参数,数组元素做函数实参与变量做实参一样,是单向传递,即“值传送”方式inta10,m;m=max(a0,a1);,数组名作为实参,形参也要定义为数组型同样是值传递为什么能够交换成功形参数组个数可以省,intswap(inta10)intt;t=a0;a0=a1;a1=t;voidmain()inta10;swap(a);,多维数组名作为实参,有34的矩阵,求其中的最大元素。,max_value(inta4)inti,j,k,max;max=a00;for(i=0;imax)max=aij;return(max);main()inta34=1,3,5,7,2,4,6,8,15,17,34,12;printf(“Maxvalueis%dn”,max_value(a);,形参中只能省略行数为什么,9.5局部变量和全局变量,局部变量:函数形参和函数内部定义的变量只在函数体内有效只在函数调用时临时分配存储空间,函数结束后空间即释放全局变量:所有函数外定义的变量所有函数都可引用程序运行时即分配存储空间,程序结束后才释放,9.5局部变量和全局变量,intp=1,q=5;/*全局变量*/floatf1(a)/*定义函数f1*/inta;intb,c;:charc1,c2;/*全局变量*/charf2(intx,inty)/*定义函数f2*/inti,j;main()/*主函数*/intm,n;:,全局变量c1、c2的作用范围,全局变量p、q的作用范围,9.5局部变量和全局变量,floatMax=0,Min=0;/*定义两个全局变量*/floataverage(floata,intn)inti;floataver,sum=a0;Max=Min=a0;for(i=1;iMax)Max=ai;elseif(aib?a:b;return(c);main()inta=8;/*a为局部变量*/printf(“%d”,max(a,b);运行结果为8,9.5局部变量和全局变量,Static关键字使局部变量内存分配方式改为:静态分配Staticinta;Staticinta=1;例:记录函数被调用次数,9.5嵌套调用和递归调用,printstar()printf(“*n”);print_message()printf(“Howdoyoudo!n”);voidmain()printstar();print_message();printstar();,递归调用,自己调用自己年龄问题阶乘汉诺塔,递归调用,递归函数:递推公式结束条件参数和返回值,递归调用,程序输出结果:Intf(intn)printf(“%d”,n%10);if(n10)f(n/10);f(123);,第十章指针,第十章指针,指针的基本概念指针与数组指针与字符串指针与函数二级指针,10.1指针的基本概念,变量的属性值a地址Inta;p=变量的访问方式:直接访问:变量名间接访问:通过指针(地址),2100a1000p,为什么叫”指针”,Int*p1,a;,指针的运算,指针的加减指针的比较,10.2指针与数组,指针与数组几乎没有区别?Inta10Int*p;,指针与一维数组,指针与数组几乎没有区别?Inta10Int*p=a;a1=p1*(p+1)=*(a+1)指针指向数组元素数组遍历(指针运算和比较),指针与一维数组,指针与一维数组的区别数组名是常量指针定义数组的时候分配存储空间指针不分配,“必须”指向其他有效空间。malloc函数,指针与二维数组,指向二维数组的元素指向一维数组的指针指针数组命令行参数,指向二维数组的元素,inta34;int*p;p=a;二维数组元素值和地址的获得二维数组行地址的获得二维数组的遍历,指向二维数组的元素,inta34;int*p;p=a;二维数组的运算a=*a?p+i=下列表示中_不是数组的元素。A:*(a+1)5B:*(*a+3)C:*(*(a+1)D:*(int(*p)4;p=a

温馨提示

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

评论

0/150

提交评论