版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础----C语言授课教师:E-mail:授课班级:第1章C语言概述本章主要介绍C语言程序的结构和书写规则,以及TurboCV2.0的基本操作。1.1C语言出现的历史背景1.2C语言的特点1.3简单的C程序的介绍1.4C程序的上机步骤1.1C语言出现的历史背景1.C语言的诞生与发展(1)在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言。(2)C语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSIC标准(1989年再次做了修订)。(本书选定的上机环境是TCV2.0(DOS操作系统)。1.2C语言的特点C语言同时具有汇编语言和高级语言的优势。(1)语言简洁、紧凑,使用方便、灵活。(2)运算符极其丰富。(3)生成的目标代码质量高,程序执行效率高。(4)可移植性好(较之汇编语言)。(5)可以直接操纵硬件。
(6)在C语言中,除实现顺序、选择和循环三种基本结构等的9条控制语句外,输入输出操作均由标准库函数来实现。所以学习C语言,不仅要学习这9条控制语句和各种运算符,而且要学习并掌握常用标准库函数的使用。例1:main(){;}1.3简单的C程序介绍1.main代表主函数.每个c程序有且只有一个主函数.2.函数体是由{}括起来的.3.C语言规定分号为语句的结束符,每条语句都用分号结束.4.对于单独一个分号来说也是一条语句,只不过语句部分为空,即空语句,所以例1是包括空语句的C程序.1.printf是C语言中的输出函数,功能:将双引号内的字符串原样输出.我们注意这条语句结束后有一个分号.2.\n在C语言中表示换行符,是一个控制字符,表示在输出这条语句后回车换行./**/间的内容作为注释部分,只起到说明的作用,不影响程序的运行.它只是给人看的,可以提高程序的可读性,对编译和运行不起作用,因此注释可以加在程序中的任何位置.运行结果:It’sabook!(在用户屏上输出该语句,并且因为有\n这个换行符,光标会移到下一行开头处.)例2:main(){printf(“It’sabook!\n”);/*输出语句*/}1.int表示整型,这一行是声明部分,定义变量a,b,sum为整型变量,这条语句相当于inta;intb;intsum;2.两个赋值语句(把123赋值给a,把456赋值给b)这样a就等于123,b就等于456.例3:main(){inta,b,sum;a=123;b=456;sum=a+b;printf(“sumis%d\n”,sum);}3.赋值计算(把a和b的和赋值给sum)这样sum就等于a,b之和了.(sum=123+456=579).4.%d是输入输出“格式字符串”,用来指定数据的类型.%d表示以十进制整数类型输出,在执行输出时,此位置上代以一个十进制整数数值.(其他的格式字符串:%c,%s,%f…).5.第一个sum原样输出.第二个sum表示要输出的变量,它的值就是a+b的值(579),而且这个值就会替代%d的位置.6.执行结果:sumis579C程序实例已知三角形三边长a、b、c的大小,求三解形的面积?请编程实现。#include”math.h”main(){inta,b,c;floats,ss;a=3;b=4;c=5;s=(a+b+c)/2.0;ss=sqrt(s*(s-a)*(s-b)*(s-c));printf(”ss=%f”,ss);}若要通过键盘输入三边怎么办?scanf(”%d%d%d”,&a,&b,&c);自定义功能函数来解决三角形面积问题。#include“math.h”
main(){inta,b,c;floats;scanf(″%d%d%d″,&a,&b,&c);s=area(a,b,c);/*调用函数*/printf(″s=%f\n″,s);}floatarea(floatx,floaty,floatz){floats,ss;s=(a+b+c)/2.0;ss=sqrt(s*(s-x)*(s-b)*(s-c));return(ss);}return是将z的值返回给主函数main.返回值通过函数名area带回到函数的调用处.经过执行area函数得到一个返回值(即area函数中变量ss的值)把这个值赋给s,然后输出s的值.说明:程序如右边的编制方法,实际上是不能正确运行行的。#include“math.h”
main(){inta,b,c;floats;scanf(″%d%d%d″,&a,&b,&c);s=area(a,b,c);/*调用函数*/printf(″s=%f\n″,s);}floatarea(floatx,floaty,floatz){floats,ss;s=(a+b+c)/2.0;ss=sqrt(s*(s-x)*(s-b)*(s-c));return(ss);}程序如何才能运行正常呢?应该加上函数声明说明:被调函数在主函数后面,且函数类型为非整数类型时,一定要使用函数声明;函数声明位置与主函数变量定义位置一样.声明格式:函数类型函数名(形参类型,开参类型…)
或函数类型函数名(形参类型形参,形参类型形参…)#include“math.h”
main(){inta,b,c;floats;scanf(″%d%d%d″,&a,&b,&c);s=area(a,b,c);/*调用函数*/printf(″s=%f\n″,s);}floatarea(floatx,floaty,floatz){floats,ss;s=(a+b+c)/2.0;ss=sqrt(s*(s-x)*(s-b)*(s-c));return(ss);}floatarea(float,float,float);
功能函数在前,主调函数在后,不需函数声明#include“math.h”floatarea(floatx,floaty,floatz){floats,ss;s=(a+b+c)/2.0;ss=sqrt(s*(s-x)*(s-b)*(s-c));return(ss);}
main(){inta,b,c;floats;scanf(″%d%d%d″,&a,&b,&c);s=area(a,b,c);/*调用函数*/printf(″s=%f\n″,s);}总结:一.一个c程序的组成:
编译预处理部分(可选)main(){说明部分/*变量定义等*/执行部分/*输入输出计算等*/}其他函数(可选,位置任意)二.C语言程序的基本特点C语言是一种函数式语言,其程序基本组成(单位)是函数每个C程序必须有一个、也只能有一个主函数main不管主函数在程序中的位置如何,程序执行总是从主函数开始所有变量必须先定义(规定数据类型)后使用每个语句必须用分号“;”结束(注意是“每个语句”而不“每行语句”)编译预处理命令不是语句(行末不能用分号结束)C语言本身没有输入/输出语句,其输入/输出功能须通过调用标准函数来实现使用系统提供的标准库函数或其他文件提供的现成函数时,必须使用“文件包含”(除了printf和scanf语句)主函数可以调用其他各种函数,但其他函数不能调用主函数.1.4C语言程序上机步骤P5C语言是一种通过编译程序处理的高级程序设计语言。所以其上机的处理流程可用以下示意图表示:在微机上,通常用来编写、编译、连接、调试和执行C语言程序的是Borland公司开发的集成化软件TurboC。
源程序(.c)———目标程序(.obj)———可执行程序(.exe)编译连接二.TC的菜单(通过F10键和Esc键切换):FileEditRunCompileProjectOptionsDebugBreak/Watch文件操作编辑编译运行项目文件选项调试中断\观察1.File:Load(打开已有的C程序文件)New(新建C程序文件)Save(保存,文件名以.c为扩展名,如abc.c)Quit(退出TC)2.编辑源文件:在Edit(编辑)状态下输入.3.编译源文件:选择并执行Compile/MakeEXEFile项(快捷键:F9),则TC将自动完成对当前正在编辑的源程序文件的编译、连接,并生成可执行文件。4.运行与查看结果(1)运行当前正在编辑的源程序文件选择并执行Run/Run项(快捷键:Ctrl+F9),程序运行结束后,仍返回到编辑窗口。(2)查看运行结果选择并执行Run/UserScreen项(快捷键:Alt+F5)。查看完毕后,按任一键返回编辑窗口。5.编辑下一个新的源程序选择并执行File/New项即可。如果屏幕提示如下确认信息:NONAME.Cnotsaved.Save?(Y/N)如果不需要保存当前正在编辑的源程序,则键入“N”如果需要保存当前正在编辑的源程序,则键入“Y”进入下一步操作。系统提示换名:<F:><path>\NONAME.C直接输入你给源程序文件起的名字再按回车即可。6.退出TC返回DOS:File/Quit(快捷键:Alt+X键)TurboC编程常用操作(按F1键可获得帮助)
TurboC基本操作
Alt+F建立新文件Load/Pick调入现有文件Save存盘(F2)
Writeto换名存盘
Ctrl+F9运行程序(自动完成编译/连接)Alt+F5观看运行结果程序调试常用操作
F5显示/关闭观察、出错提示等窗口
F6编辑窗口(Edit)和信息窗口(Message)窗口切换Alt+B设置断点/变量观察(Break/Watch)常用:增加观察的变量名(Addwatch)F8单步执行Ctrl+F2程序重置(重新开始)程序编辑常用操作
Ctrl+KB设置块头Ctrl+KK设置块尾
Ctrl+KC块复制Ctrl+KV块移动
Ctrl+Y删除一行BACKC语言的数据类型2.2.1标识符、常量和变量1.标识符:是给程序中的实体(变量、函数名、数组名等)命名的一个规则。说明:①标识符必须以字母或下划线开头,由字母、数字或下划线组成的字符序列;②用户不能采用C语言已有的32个关键字作为同名的用户标识符;③标识符长度没限制;④标识符区分大小写。关键字:见课本第190页附录Ⅱ!标识符示例:sum,PI,aa,bb43,ch,a_53ff,_lab,average,aver都是合法的标识符。
4mm,@ma,tt$a,_ch#a均是不合法的标识符。
思考:count、Count和COUNT是否为相同的标识符?main、float能否作为用户标识符?2.常量定义:在程序中,其值不能改变的量叫常量。例:12,3,12.3,-2.4,3.14159,′a′
说明:常量可用宏定义命令#define来定义一个常量的标识,且一旦定义后,该标识将永久性代表此常量,常量标识符一般用大写字母表示。符号常量的定义定义格式:#define
常量名标识符
数值例:已知圆半径为2,求圆面积和周长。main(){intr=2;floats,l;s=3.14*r*r;l=2*r*3.14;printf(“s=%fl=%f”,s,l);}用符号常量解决#definePI3.14main(){intr;floats,l;r=2;s=PI*r*r;l=2*r*PI;printf(″s=%fl=%f″,s,l);}3.变量定义:在程序的运行过程中其值可以改变的量。变量的定义格式:类型符变量名1,变量名2…;例:intI,j,k;floata,b,c;变量的初始化:给变量赋初值。变量的初始化(赋值)格式变量名=数值/表达式;变量赋值示例#defineMAX20main(){inta;a=3;MAX=8;9=a;printf(″这样赋值行吗?″);}说明与思考说明:允许变量在定义的同时,进行初始化。例:inta=3,b=4,c=5;floatx=2.3;思考:请问如下初始化语句行吗?inta=b=c=7;结束!课下好好复习,课本至少要看三遍!§关系和逻辑运算及几种特殊的运算符授课班级:授课时间:主讲:把y=y%(4+x)转变为复合赋值表达式;把表达式a/=b-3转换为一般赋值形式;程序段:inta;floats=9;a=s%4;是否合法,若有错,将如何将其改正?
程序:#definePI3main(){inta;PI++;a=PI;printf(“a=%d”,a);}是否有错,若有错,错在哪里?若:inta=4;chart=’0’;floatd=9;则表达式:19*a-t/d的值类型是什么?
考查上次内容关系运算和逻辑运算关系运算关系运算是指数据之间的关系(比如数间的大小等)
关系运算的结果要么为真,要么为假,若为真,就用1表示,为假,就用0表示。逻辑运算逻辑是指事物之间的内在联系,它常用来组合若干个关系运算,来描述一定的条件。关系运算关系运算符
<、<=、>、>=、==、!=
相同优先级相同优先级高低关系表达式
若a=3,b=2,c=1,则下列表达式的值分别为多少?①(a>b)==c②b+c<a③f=a<b>c
(a>b)==c==11
b+c<a3
<30f=a<b>c0>101逻辑表达式逻辑运算符&&(逻辑与)||(逻辑或)!(逻辑非)见书P29表2.6逻辑运算符的优先级逻辑运算的优先级||&&!
优先级低高说明①&&和||的优先级低于关系运算符,但!高于算术运算符;②逻辑表达式中的逻辑量,若不是0,则认为该量为真;
见书29说明部分逻辑表达式逻辑表达式说明:逻辑表达式的值是一个具有真假属性的逻辑量,若一个量为非0值,则认为是真,用1表示。应用示例判断某年year是否为闰年;(提示:某年若是闰年,则必须符合下列条件之一:Ⅰ.该年可以被4整除,但不能被100整除;Ⅱ.该年可以被400整除)
y%4==0y%100!=0&&()y%400==0()||活动用C语言描述下列逻辑关系1.x和y中有一个大于z;
2.x不能被y整除;
x>z||y>z或(x>z)||(y>z)
x%y!=0
关于逻辑运算的特殊说明说明在逻辑表达式的求解过程中,并不是所有的逻辑量、运算符都被执行,只是必须执行该逻辑量才能求出整个表达式的解时,才执行该运算量或运算符。
见书P29(2)示例表达式1&&表达式2中,若表达式1为0,则计算机不再考虑表达式2的值的情况,也就是说表达式不再执行。活动1.若有程序段inta=5,b=9,s;s=(a-=5)&&++b;则计算机执行该程序段后,s、a和b分别是多少?
2.若a=9,b=10,c=1,d=7,x=8,y=15,则计算机执行了语句:m=(x=a>b)&&(y=c<d);后,m和y的值分别是多少?
s=0a=0b=9m=0y=15逗号运算符和逗号表达式逗号表达式一般形式:表达式1,表达式2,……,表达式n;
说明逗号表达式的运算过程是:先算表达式1,再算表达式2,依次算到表达式n。整个逗号表达式的值是最后一个表达式的值。
见书P32示例b=(a=4,3*4,a*2)它的运算过程是:a=43*4a*2b=a*2条件运算符和条件表达式条件表达式一般形式:表达式1?表达式2:表达式3
;示例:将a,b两个变量中大者放到变量max中
max=a>b?a:b
条件运算符的应用说明条件运算符的结合方向为从右往左。如:a>b?a:b>c?b:c等价于a>b?a:(b>c?b:c)示例用条件运算符求三个数中的大者,编程实现
main(){inta,b,c,max;scanf(″%d,%d,%d″,&a,&b,&c);max=a>(b>c?b:c)?a:(b>c?b:c);printf(″a=%d,b=%d,c=%d,max=%d\n″,a,b,c,max);}作业书本作业P35-P37:一、二题剩余部分编程作业P37:3、4§类型修饰符及输入输出的实现授课班级:授课时间:任课教师:{DATE\@"yyyy/M/d"|2021/10/28}46复习上次内容1.找出哪些是合法的整型常量:045、0x89g、90、078、0x11f2.找出哪些是非法的实型常量:0.45、0x6.7、e9、0.7e0.23.找出哪些是合法的字符常量:`9`、`\056`、`\x11``\\`、`&`4.说出float与double及字符型数据各占几个字节内存单元?5.说出相关ASCII码值6.说出字符串常量”how”占几个字节的内存单元?{DATE\@"yyyy/M/d"|2021/10/28}4748.基本类型修饰符回顾(课本P15)基本的类型修饰符signed(有符号)unsigned(无符号)long(长型)short(短型)类型修饰符修饰整型的情况(P19)说明1:基本类型修饰符主要用于修饰int型数据{DATE\@"yyyy/M/d"|2021/10/28}49说明2当类型修饰符独自使用时,则认为是修饰int型的。因此,下面几种类型修饰符是等效的:(见书P21)修饰符等效于signedsignedint或intunsignedunsignedintlonglongintshortshortint
说明3当要表示某个整型常数为常整型时,可直接在该数后面加“L”。{DATE\@"yyyy/M/d"|2021/10/28}50活动:分析下面程序运行结果main(){intx1,y1;longx2,y2;x1=32767;y1=32769;x2=32767L;y2=32769L;printf(″x1=%d,x2=%ld\ny1=%d,y2=%ld″,x1,x2,y1,y2);}{DATE\@"yyyy/M/d"|2021/10/28}51运行结果x1=32767,x2=32767y1=-32767,y2=32769
{DATE\@"yyyy/M/d"|2021/10/28}522.输入输出实现及其函数应用说明:
C语言中,输入输出是由函数库提供的,这些输入、输出函数包含在头文件stdio.h中;在使用输入输出函数时,一般要在程序最前面加上#include<stdio.h>,或#include”stdio.h”格式输出函数:printf()格式输入函数:scanf()不过,scanf()与printf()函数可不要!{DATE\@"yyyy/M/d"|2021/10/28}53printf函数:格式输出函数格式printf(格式控制,输出表列)格式控制格式说明:由“%”和格式字符组成普通字符:需要原样输出的字符用双撇号括起的字符组合输出表列:由若干个待输出的数据变量组成如:程序段inta=6;printf(“a=%d”,a);
例:如程序段:intx=9,y=7,z=6;printf(“x=%d,y=%d,z=%d”,x,y,z);{DATE\@"yyyy/M/d"|2021/10/28}54scanf函数:格式输入函数格式scanf(格式控制,地址表列)与printf函数的用法相同地址项由&开头,与格式符呈一一对应说明:
在scanf函数的“格式控制”中,除格式控制符之外,其它字符在输入数据时,照输入;
若格式控制符之间没有其它字符间隔,则输入数据时,可用“空格”或“回车”键作为间隔符。例主要格式控制符(见P21):%d%c%s%f{DATE\@"yyyy/M/d"|2021/10/28}55活动如下程序在执行过程中,若这样输入:12,74.16.3,试分析可能的结果?main(){inta,b;floatc,d;printf(″请输入变量的值:″);scanf(″%d%d″,&a,&b);scanf(″%f,%f″,&c,&d);printf(″%d%d%f%f″,a,b,c,d);}{DATE\@"yyyy/M/d"|2021/10/28}563.字符输入输出函数putchar函数:字符输出函数格式:putchar(字符变量/字符常量)getchar函数:字符输入函数格式:getchar()getchar和putchar函数每次只能处理一个字符,而且getchar函数没有参数。
说明:{DATE\@"yyyy/M/d"|2021/10/28}57活动编一个小程序,应用字符输入输出函数实现一个字符的输入和输出#include“stdio.h”main(){charc;c=getchar();putchar(c);}putchar(getchar());{DATE\@"yyyy/M/d"|2021/10/28}58作业P35:P37:{DATE\@"yyyy/M/d"|2021/10/28}592.3基本数据类型授课班级:授课时间:任课教师:复习上次内容FreeTemplatefrom61学习效果测评找出下面哪些不是合法用户标识符按要求写出符号常量的定义将9.78定义成符号常量r观察下面的变量赋值是否正确?inta=b=c=7;#ab、-aa、INT、_7aFreeTemplatefrom62§基本数据类型整型数据(int:integer)
单精度:(float)双精度:(double)字符型数据(char:character)字符串常量实型数据FreeTemplatefrom631.整型数据整型常量整型变量整型变量所占的空间整型变量在内存中占2个字节单元16位的内存空间整型变量的定义格式类型符:int定义格式:int变量名表;例:inta,b;整型数据的输入输出格式格式符:%d示例:scanf(“%d”,&a);printf(“%d”,a);FreeTemplatefrom642.实型数据实型常量实型变量实型变量所占的空间双精度8个字节单精度4个字节32位内存空间实型变量的定义类型符:floatdouble定义格式floata,b;doublec,d;实型数据的输入输出格式格式符:%f示例:scanf(“%f”,&a);scanf(“%f”,&c);printf(“%f”,c);FreeTemplatefrom65讨论分析下面程序中是否有错误,若有,在哪里?main(){doublex,y;floatz;scanf(“%d%d”,&x,&y);z=x+y;printf(“%f”,z);}格式控制符有错!应该是:%f类型不一致!FreeTemplatefrom663.字符型数据字符常量字符变量字符型数据所占的空间占1个字节的单元8位的内存空间字符变量的定义类型符:char定义格式chara,b;字符变量的输入输出scanf(“%c”,&a);printf(“%c”,a);字符型数据的存储格式:以ASCII码值的形式ASCII码见P189附录ⅠFreeTemplatefrom67转义字符表FreeTemplatefrom68讨论
main(){charc1,c2;inta;c1=′a′,c2=98;a=′a′;printf(″c1=%cc2=%ca=%d″,c1,c2,a);}分析该程序是否有问题FreeTemplatefrom694.字符串常量字符串常量:用双撇号括起的若干字符序列 例:”china”、”am$”等字符串的存储例:”china”的存储情况:china\099104105110970C语言没有专门的字符串变量FreeTemplatefrom705.作业课本P35一、选择题:2-6是该做点事了!FreeTemplatefrom71§基本运算主讲:授课班级:授课时间:活动:复习上次内容1.说出signedint类型数据的表示范围2.说出unsignedint类型数据的表示范围3.说出longint类型数据在内存中占几个字节?4.若有“scanf(”a=%d,%d”,&a,&b);”,试问如何输入正确数据?5.若有字符型变量C,请用字符输入输出函数实现其输入和输出。1.基本运算算术运算符操作符作用+加法运算-减法运算*乘法运算/除法运算%求模(求余)运算见书P24,表2-4说明
运算符“/”参加运算时,若其左右两边的运算数中有一个为实数类型,则结果为实数,否则,结果取整;当两运算数同时为整数时,其运算结果自动取整
运算符“%”要求其运算数必须为整数;算术表达式:用算术运算符及括号将数据对象连接起来的式子
例:a*d/c-2.7+’2’讨论:
表达式:19+’2’-4中,计算机是先计算19+’2’,还是先计算’2’-4?而19+’2’/4呢?这牵涉到“结合性”与“优先级”结合性:一般是左结合(自左向右运算)优先级:运算的优先顺序(见P191)()→负号→*、/、%→+、-
低高见书P242.赋值运算符及赋值表达式赋值运算赋值运算符:=赋值表达式:格式:变量名=表达式;如:inta=3,b=2,c;则:c=a+b;b=b+a;等复合赋值inta=0;a=a+20;inta=0;a+=20;活动1.将下面赋值表达式转换为复合赋值表达式a=a-10/x;y=y*(a+8);a-=10/x;y*=a+8;2.将下面复合赋值形式转变为一般赋值形式x/=y-3;z+=m%2;x=x/(y-3);z=z+m%2;自增和自减运算两个运算符均为单目运算符,且优先级在算术运算中最高
增量运算符:++减量运算符:--应用情况见书P26表2.5说明:见书P26,表2.5下部分活动分析下面语句执行后x与y的值?
x=10;y=++x;
x=10;y=x++;
x=10;y=--x;
x=10;y=x--;x=11y=11x=11y=10x=9y=9x=9y=10分析:9++是什么意思?3.表达式中的类型转换自动类型转换说明:不同类型数据参加运算时,表示范围小的数据类型自动向表示范围宽的类型转换。转换情况如下:见书P31强制类型转换一般形式:(类型)表达式活动:分析下面程序
main(){inta=2,b=7,c;floatx=15.5,y,z;y=a/b;z=(float)a/b;
c=(int)x%a;printf(″y=%fz=%fc=%dx=%f″,y,z,c,x);}作业书中P37,二题的相关内容书面作业:实践作业:P34实训§第3章程序设计初步授课班级:授课时间:主讲:1)设有语句inta=3;则执行语句a+=a-=a*a后,变量a的值是()(A)3(B)0(C)9(D)–122)判断char型变量c1是否为小写字母的正确表达式是()A、‘a’<=c1<=‘z’B、(c1>=a)&&(c1<=z)C、98<=c1&&123>=c1D、c1>='a'&&c1<='z'3)设a、b均为整型,且b=5,执行下列语句后,a的值为()。a=2+(b+=b++,b+8,++b);A、11B、12C、14D、154)若chara=’a’,b=’A’;则执行s=a>b?97:65;后s的值是多少?
5)以下程序的输出结果是()main(){inta=3;printf("%d\n",(a+=a-=a*a));}A、-6B、12C、0D、-12技能考核顺序结构ABab选择结构PABab循环结构PAab3.1三种基本结构讨论三种结构的特点三种基本程序结构的特点(1)程序只有一个入口;(2)程序只有一个出口;(3)程序结构内的每一部分都有机会被执行;(4)程序结构内不存在死循环。
见书P40复合语句复合语句:用{}括起来的若干条语句举例说明:一个国家是联合国常任理事国,则他将尽许多义务:参与国际维和行动、参与联合国会务、向联合国安理会缴年费等。转变成类C格式main(){….if(一个国家是联合国常任理事国){参与国际维和行动;参与联合国会务;向联合国安理会缴年费等;
}….}main(){inta,b,t;printf(“Inputa,b:”);scanf(“%d%d”,&a,&b);printf(“a=%d,b=%d\n”,a,b);
{t=a;a=b;b=t;}/*复合语句*/printf(“a=%d,b=%d”,a,b);}分析下面程序3.2if语句if语句格式:if(表达式)语句
if(x>y)printf(”%d”,x);例:输入三个数,要求按由小到大的顺序输出。分析:若输入的三个数分别存储在变量a、b、c中,我们设想经过一定的处理后,a中存最小的,c中存最大的,b存中间数。如果a>b为真ab交换如果a>c为真ac交换如果b>c为真bc交换
if应用举例main(){floata,b,c,t;scanf(“%f,%f,%f“,&a,&b,&c);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf(“%f,%f,%f“,a,b,c);}if-else结构语句if-else结构语句格式:
if(条件)S1elseS2是一条语句是一条语句说明:如果表达式的值为真,则执行语句1,否则执行语句2。见书P47活动用if-else完成如下问题:输入两个整数,输出其中的大数(用if-else语句判别a,b的大小,若a大,则输出a,否则输出b)。main(){inta,b,max;scanf(”%d%d”,&a,&b);if(a>b)max=a;elsemax=b;printf(”max=%d”,max);}考虑用条件表达式如何实现?max=a>b?a:b;if语句的嵌套
格式:if(条件1)if(条件2)语句1else语句2elseif(条件3)语句3else语句4内嵌if-else语句内嵌if-else语句示例y=-1(x<0)0(x=0)1(x>0)main(){intx,y;scanf(“%d“,&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n“,x,y);}解法2main(){intx,y;scanf(”%d”,&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf(”x=%d\ty=%d”,x,y);}作业书上作业P54:一;二:1、2本上作业P561-3switch多路开关选择语句
C语言格式:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2……case常量表达式n:语句ndefault:语句n+1};break;;break;;break;示例1输入一成绩等级,输出其所在相应的百分制成绩段,其中:’A’:85~100;’B’:70~84;’C’:60~69;’D’:<60#include"stdio.h"main(){chargrade;grade=getchar();switch(grade){case'A':printf("85~100\n");case'B':printf("70~84\n");case'C':printf("60~69\n");case'D':printf("<60\n");default:printf("error\n");}}break;break;break;break;活动:思考如何实现下题运输公司有如下约定:运费的折扣按路程(S)而定,具体如下:S<250没有折扣;250≤S<5002%折扣;500≤S<1000折扣为5%;1000≤S<2000折扣为8%,2000≤S折扣为10%,试输入一路程,求其相应的折扣数分析开关结构:其中S为整型,d为实型.switch(s/250){case0:d=0;break;case1:d=2.0/100;break;case2:case3:d=5.0/100;break;case4:case5:case6:case7:d=8.0/100;break;default:d=10.0/100;break;}作业书上作业P55二:3本上作业P56:4(用switch实现)§break与continue语句授课班级:授课时间:主讲:活动:技能考核分析运行结果main(){intx=3;do{printf(”%3d”,x-=2);}while(!(--x));}main(){intI=0,k=0,s=0;while(k<3){s+=k;++k;}printf(”s=%d”,s);}分析是否有错for(I=100,I>=1,I++)printf(”%d\n”,I);break与continue的功能分析:…while(){…break;…}……while(){…continue;…}…见书P65下面!活动:分析程序段的功能for(r=1;r<=10;r++){area=3.14*r*r;
printf(”%f”,area);}if(area>100)break;最初程序功能分析输出半径分别为1~10的圆的面积添加break后分析输出半径分别为1~5的圆的面积应用示例1把100~200之间不能被3整除的数输出。
main(){for(n=100;n<=200;n++)intn;if(n%3!=0)printf(”%d\t”,n);}main(){for(n=100;n<=200;n++)intn;if(n%3==0)continue;elseprintf(”%d\t”,n);{}}应用示例2求100~200之间的全部素数。
分析:判断一个数是否为素数的程序应该是这样的:main(){intn,m,sign=1;printf(“请输入一个大于3的正整数n:”);scanf(“%d“,&n);for(m=2;m<=n/2;m++){if(n%m==0)sign=0;}if(sign==0)printf(“%d不是素数!”,n);elseprintf(“%d是素数!”,n);}for(I=100;I<200;I++)求100~200之间的全部素数。main(){for(m=101;m<200;m++)k=m/2;for(I=2;I<=k;I++)if(m%I==0)break;printf(”%d”,m);考虑在什么样的情况下输出m的值?if(I>=k+1)j++;{}if(j%10==0)printf(”\n”);{}}别忘掉变量定义!intm,k,I,j=0;一个穷举法的应用示例编程完成用一元人民币换成一分、两分、五分的所有兑换方案,即输出所有满足搭配要求的1分币个数、2分币个数、5分币个数。
示例编程for(one=0;one<101;one++)main(){for(two=0;two<51;two++)for(five=0;five<21;five++)if(1*one+2*two+5*five==100)printf(”one:%d\ttwo:%d\tfive:%d”,one,two,five);intone,two,five;}作业书上作业P73一、二本上作业P75:5、6授课班级:授课时间:主讲:§4循环结构程序设计Freephotoshowtemplatefrom110说出或写出switch多分支结构的框架技能考核下面程序段是为了实现:若a<b为真,就使m=8、a=9;否则,m=5、b=7,看能否实现?if(a<b)m=8;a=9;elsem=5;b=7;判断下面语句是否有错?if(8);switch结构中必须有break吗?一定有default吗?Freephotoshowtemplatefrom111循环程序结构C语言构成循环的语句
1)用goto语句和if语句构成循环;
2)用while语句构成循环;
3)用do--while语句构成循环;
4)用for语句构成循环;
Freephotoshowtemplatefrom112goto语句构成循环格式:goto语句标号;
标号指出程序流程转向的入口处
说明:语句标号用标识符表示
示例求1+2+3+…+100的和main(){intI,sum=0;I=1;sum=sum+I;I++;gotoloop;loop:if(I<=100){sum=sum+I;I++;gotoloop;}printf(”%d”,sum);}loop是标号,不是变量,不需要定义,随时可用!Freephotoshowtemplatefrom113while语句构成循环格式:while(表达式)循环体语句流程图若循环体语句有两条及其以上,必须用复合语句表达式循环体语句0非0Freephotoshowtemplatefrom114while应用举例例显示1~10的平方#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100循环变量赋初值循环条件循环体语句Freephotoshowtemplatefrom115活动当n的值为3的时候,分析程序运行结果main(){inta=0,n;
scanf("%d",&n);while(n--)
printf(“%d”,a++*2);
}分析如下程序段运行多少次?main(){inta,n=0;
while(a=5)
{a-=5;printf("%d",n++);}}Freephotoshowtemplatefrom116do--while格式
do循环体语句
while(表达式);
多条语句时,要用{}括起流程图思考while和do-while循环的区别?有分号!循环体语句0非0表达式Freephotoshowtemplatefrom117do-while应用示例求:1+2+3+…+100
main(){intI,sum=0;I=1;do{sum=sum+I;I++;}while(I<=100);printf(”%d”,sum);}sum=sum+I++;仔细看书P61Freephotoshowtemplatefrom118for语句构成循环格式:for(表达式1;表达式2;表达式3)循环体语句
for(循环体变量赋初值;循环条件;循环变量增值)循环体语句多条语句时,要用{}括起Freephotoshowtemplatefrom119for构成循环应用示例验证一个正整数n(n>3)是否为素数。
分析:
8的因子有:2、415的因子有:3、516的因子有:2、4、820的因子有:2、4、5、10
……结论:任何数的因子不可能超过其自身的一半循环控制分析:①循环变量初值:m=2
②循环条件:m<=n/2
③循环变量增值:m++
Freephotoshowtemplatefrom120编码main(){intn,m,sign=1;printf(“请输入一个大于3的正整数n:”);scanf(“%d“,&n);for(m=2;m<=n/2;m++){if(n%m==0)sign=0;}if(sign==0)printf(“%d不是素数!”,n);elseprintf(“%d是素数!”,n);}sign是信号量Freephotoshowtemplatefrom121练习输出100~1000之间的所有奇数,要求每行输出8个数。
Freephotoshowtemplatefrom122活动分析书上P64:例4-9Freephotoshowtemplatefrom123作业书上作业P73一、二;本上作业P751-4Freephotoshowtemplatefrom124授课班级:授课时间:主讲:§第5章函数概述模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充开发方法:自上向下,逐步分解,分而治之C程序结构C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用C程序的结构函数的分类从函数定义的角度分库函数:由C系统提供,用时只需将其所在头文件包含到程序前面,即可调用如:scanf()、getchar()、getchar()、printf()等用户定义函数:用户根据需要自己设计开发的,完成一定功能的函数从主调与被调函数之间数据传送的角度分无参函数:函数要完成一定的功能不需要“原料”(参数),就能实现功能“产品”有参函数:函数要实现一定功能时,需要一定的“原料”条件从对函数返回值的需求状况有返回值函数:函数实现功能后,能产生一个“产品”(功能值),需要返回到调用处无返回值函数:函数仅仅是实现一定的加工变换功能,没有明显的“产品”(值),无需返回值函数类型函数名(形参类型说明表){
说明部分 语句部分}合法标识符函数返回值为int或char类型时,可缺省,无返回值时,可用void类型函数体例有参函数intmax(intx,inty){intz;z=x>y?x:y;return(z);}例有参函数intmax(intx,y){intz;z=x>y?x:y;return(z);}例空函数dummy(){}函数体为空例无参函数voidprintstar(){printf(“**********\n”);}或voidprintstar(void){printf(“**********\n”);}函数的定义格式函数的定义及应用示例1编制一个求n!的函数,并用它来求1!+2!+3!+…+10!longfac(intn){intI;longj=1;for(I=1;I<=n;I++)j*I;
j=return(j);}main(){intI;longsum=0;for(I=1;I<=10;I++)sum=sum+fac(I);printf(”1!+…+10!=%ld”,sum);}函数的返回值返回语句的几种形式return(表达式);return表达式;return;此时,表示不需要返回值,也可不写!功能说明:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数。关于函数返回值的说明1、函数中可有多个return语句;2、若无return语句,遇功能函数最后的}时,自动返回调用函数;3、若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换(函数调用时的数据转换)4、void型函数是无返回值函数,可不要return,或用“return;”例无返回值函数
voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}intlarg(inta,intb){if(a>b)returna;elsereturnb;}函数的调用形式1、直接函数语句:例printstar();printf(“Hello,World!\n”);2、表达式调用函数:例m=max(a,b)*2;3、函数作为函数的参数:例printf(“%d”,max(a,b));m=max(a,max(b,c));函数应用示例2求100~300之间所有的素数,要求用功能函数实现判断一个数是否为素数的问题,主调函数具体求解。活动:由学生先试写判断素数的功能函数intprime(intn){intI;intsign=1;for(I=2;I<=n/2;I++)if(n%I==0)sign=0;break;
return(sign);}{}main(){intI;for(I=100;I<301;I++)if(prime(I)==1)printf(”%d\t”,I);}函数调用时的函数声明函数声明的基本格式函数类型函数名(形参类型[形参名]);例
main(){…doublestyle(floata,doublex);…}doublestyle(floata,doublex){函数体语句;}
doublestyle(float,double);函数声明的条件当功能函数的类型非int或char类型,且功能函数写在主调函数后时,一要在主调函数中对其进行声明。见书P80下面的(1)~(3)活动编写一个求任意数绝对值的函数,并写出主调函数floatabs_value(floatx){floatf;f=x>=0?x:-x;return(f);}main(){floatvalue,m;floatabs_value(float);printf(”Inputadata:”);scanf(”%f”,&value);abs_value(value);m=printf(”%f”,m);}作业书上练习P100:一:1-8;本上练习P102:二:1-2函数的参数传递和嵌套、递归调用授课班级:授课时间:主讲:形参与实参1、形式参数:定义函数时函数名后面括号中的变量名;2、实际参数:调用函数时函数名后面括号中的表达式或变量名。c=max(a,b);(main函数)(max函数)max(intx,inty){intz;z=x>y?x:y;return(z);}例比较两个数并输出大者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形参实参函数的参数及传递方式值传递方式
函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。特点:1、形参与实参占用不同的内存单元2、单向值传递:只能由实参传向形参,而形参的值不会影响到实参的值。函数的参数值传递方式/*值传递举例*/#include<stdio.h>main(){intx=7,y=11;printf("x=%d,y=%d\n",x,y);
swap(x,y);printf("x=%d,y=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}值传递方式举例例子图解711x:y:调用前:调用:711a:b:711x:y:swap:711x:y:117a:b:temp调用结束:711x:y:嵌套调用C规定:函数定义不可嵌套,但可以嵌套调用函数函数的嵌套调用main()调用函数a结束a函数b函数调用函数b
#include<stdio.h>voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);d=dif(a,b,c);printf("Max-Min=%d\n",d);}/*求最大与最小之差*/intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}/*求最大数*/intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}/*求最小数*/intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}函数的嵌套调用举例求三个数中最大数和最小数的差额main()调用函数dif输出结束dif函数max函数调用函数max调用函数minmin函数定义:函数直接或间接的调用自身叫函数的递归调用调f2调f1f1()f2()f()调fintf(intx){inty,z;……
z=f(y);…….return(2*z);}intf1(intx){inty,z;……
z=f2(y);…….return(2*z);}intf2(intt){inta,c;……
c=f1(a);…….return(3+c);}函数的递归调用说明:C编译系统对递归函数的自调用次数没有限制,每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出#include<stdio.h>intfac(intn){intf;if(n<0)printf("error!");elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}main(){intn,y;printf("Inputaintegernumber:");scanf("%d",&n);
y=fac(n);printf("%d!=%1d",n,y);}递归调用求阶乘作业:P102:3-5授课班级:授课时间:主讲:§第5章函数局部变量
局部变量:也称为内部变量,是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
说明:例:(1)floatf1(inta){intb,c;…}
b、c有效a有效(2)main(){intm,n;…}m、n有效(3)main() {inta;…{intc;c=a+9;…}…}c的有效范围a的有效范围全局变量全局变量:也称为外部变量,它是在函数外部定义的变量。
说明:全局变量不属于哪一个函数,它属于所在的源程序文件,其作用域是整个源程序。
但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明定义。
若在函数体内要将某个变量说明为全局变量,必须在该变量前加extern。全局变量示例①inta=3,b=5;ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年岗位派遣协议规范
- 2024年公交车身广告独家代理合同
- 2024年协作约定:共发展合作合同范本
- 物业共享图书馆管理合同
- 借壳上市协议签署
- 2024年个人接受公司借款协议范本
- 2024年企业贷款利息协议
- 风险投资协议书
- 2024年借款还款方式变更合同
- 2024年城市绿化项目场地租赁合同
- 从消费文化角度解读波普艺术的特征
- 公司电梯安全总监、电梯安全员岗位职责
- 物业保洁员劳务合同2篇
- 国有土地上房屋装修备案申请表
- 二年级上册音乐课件《小红帽》(人音版)
- 重庆建筑工程资料全套表格年
- GB/T 23221-2008烤烟栽培技术规程
- GB/T 18284-2000快速响应矩阵码
- GB/T 16900-2008图形符号表示规则总则
- 辽宁省辽南协作校2022-2023学年高二上学期期末考试语文答案 Word版含解析
- 中职英语统考复习讲课教案
评论
0/150
提交评论