C语言程序设计课件-清楚解析_第1页
C语言程序设计课件-清楚解析_第2页
C语言程序设计课件-清楚解析_第3页
C语言程序设计课件-清楚解析_第4页
C语言程序设计课件-清楚解析_第5页
已阅读5页,还剩328页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计中国计量学院信息工程分院主讲:吴向平:邮件:办公室:赛博南楼306-1学习要点课前浏览预习,不需看的太细;课中认真听讲,抓住重点,了解扩充知识;课后多看例程,多上机练习,在编写程序中复习知识点。

程序=数据结构+算法机器语言汇编语言高级语言CPU指令系统,由0、1序列构成的指令码组成如:10000000加

10010000减用助记符号描述的指令系统如ADDA,B计算机程序与语言高级语言:跟自然语言和数学语言更接近〔C,C++,Java,Pascal,Delphi…〕#include<stdio.h>voidmain(){printf(“welcometoC”);}C语言开展历史产生过程时间:1972~1973地点:美国贝尔实验室设计人:DennisRitchieC标准K&R〔BrianKernighan,DennisRitchie〕合著了《TheCProgrammingLanguage》第一版,〔1978〕,K&RC/经典CANSI/ISOC,C89/C90/ANSICMicrosoftC〔MSC〕BolandTurboC(TurboC)C99〔1994〕C程序格式和结构特点#include<stdio.h>main(){printf(“Hello,World!”);}编译预处理主函数语句例:第一个程序在屏幕上输出:Hello,World!输出结果:Hello,World!C程序的运行过程编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe/*example1.2calculatethesumofaandbThisprogramiswrittenbyxiangpingwu,in2009*/#include<stdio.h>voidmain(){

int

a,b,sum;intadd(int,int);a=10;b=24;

sum=add(a,b);//functioncall

printf(“sum=%d\n”,sum);}//Thisfunctioncalculatesthesumofxandyint

add(int

x,inty){

int

z;

z=x+y;

return(z);}运行结果:sum=34函数语句预处理命令注释C结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释不产生编译代码/**/为注释,不能嵌套预处理命令例:/*Thisisthemain/*ofexample1.1*/*/非法C书写格式特点main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}main(){

inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}优秀程序员的素质之一:{}各占一行,并对齐一行一句,内层语句向右,缩递使用TAB缩进有适宜的空行区分大小写,常量用大写命名有足够的注释第二章根本数据类型和常用库函数数据类型常量与变量库函数2.1字符集与标识符C语言的字符集:包括标识符、运算符、常量,标点符等注意:都是在英文状态下的输入。标识符定义:用来标识变量、字符常量、函数名、数组名、结构体名、文件名的字符序列标识符组成只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字标识符命名原那么见名知意不宜混淆如l与I,o与0min-length&max-information关键字〔保存字〕32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileC数据类型根本类型构造类型指针类型空类型void字符类型char整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.允许的操作枚举类型enum2.2根本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int32-2147483648~2147483647(signed)short16-32768~32767(signed)long32-2147483648~214748364732unsigned

int0~4294967295320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~2552.3常量和变量常量定义:程序运行时其值不能改变的量〔即常数〕。常量类型:整数,浮点数,字符,转义字符,符号常量,符号常量:用标识符代表常量 定义格式:#define符号常量常量 一般用大写字母 是宏定义预处理命令常量〔续〕整型常量 十进制整数:由数字0~9和正负号表示 八进制整数:由数字0开头,后跟数字0~7表示十六进制整数:由0x开头,后跟0~9,a~f,A~F表示实型常量 十进制数形式:〔必须有小数点〕如0.123,.123,123.0,0.0,123. 指数形式:〔e或E之前必须有数字;指数必须为整数〕如12.3e3,123E2,1.23e4,e-5,

数值常量后缀

L或l长整型;U或u无符号数;F或f浮点数字符常量用单引号括起来的单个普通字符或转义字符,如‘a’,‘A’,‘\n’,‘\12’,‘\xa’变量变量概念:其值可以改变的量,有名称有值,还得规定其确定的数据类型。变量定义的格式:

inta;charc1,c2;变量初始化:定义的同时赋值;

inta=10;

floatm=1.2,n=1.3;

变量的使用:先定义,后使用,一般放在函数开头

格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上2.4数据输入与输出C语言无I/O语句,I/O操作由库函数实现#include<stdio.h>一、数据输出单个字符输出函数#include<stdio.h>main(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}例AB运行结果:格式:printf(“格式控制符串”,输出表)功能:按指定格式向显示器输出数据格式输出函数printf输出表:要输出的数据〔可以没有,多个时以“,”分隔〕格式控制符串:包含两种信息格式说明:%格式控制字符,用于指定输出格式普通字符或转义序列:原样输出d或Ix,Xoucse,Efg%%十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff101567AABC5.677890e+02567.789000567.789%说明 格式字符与输出项个数应相同,按先后顺序一一对应格式字符与输出项类型应一致,例#include<stdio.h>main(){inta=3;doubleb=1.456;charr=‘A’;printf(“%d\n”,a);printf(“%f\n”,b);printf(“%d%f\n”,a,b);printf(“a=%d,b=%f\n”,a,b);printf(“%d\n”,10);printf(“%c\n”,r);printf(“%c,%d,%c”,r,r,97);printf(“%d”,b);

}31.45600031.456000a=3,b=410AA,65,a-1477468750运行结果:printf函数的附加格式说明符〔修饰符〕.n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功能m输出数据域宽,数据长度<m,左补空格;否那么按实际输出输出数据在域内左对齐〔缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u,e,f,g前,指定输出精度为long型或double型L或lH或h在d,o,x,u前,指定输出精度为short型#include<stdio.h>main(){inta=1234;floatf=123.479;charch=‘a’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%-12f,%-12.1f%-.2f\n”,f,f,f);printf(“%3c\n”,ch);}####1234,1234123.479000,123.479000,###123.5,123.48,1.23e+02123.456000##,123.5#######123.48########a//注:此处以#代表空格格式:getchar()功能:从键盘读一字符二、数据输入字符输入函数#include<stdio.h>main(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}Enteracharacter:AA--->hex41运行结果格式输入函数scanf格式:scanf(“格式控制串”,地址表〕功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e例#include<stdio.h>main(){inta;scanf(“%d”,&a);}输入:10那么a=10例inta;scanf(“%x”,&a);输入:11那么a=17附加格式说明符〔修饰符〕l修饰符功能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度抑制符,指定输入项读入后不赋给变量注意:输入long型整数、double型实数时必须在相应的格式控制符前前缀:l输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);

输入123123123

输出a=123,b=83,c=291例scanf(“%d:%d:%d”,&h,&m,&s);输入12:30:45那么12h,30m,45s例scanf(“%d,%d”,&a,&b)输入3,4那么3a,4b例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);

输入a=12,b=24,c=36说明:用“%c”格式符时,空格和转义字符(如回车‘\n’〕作为有效字符输入如scanf(“%c%c%c”,&c1,&c2,&c3);假设输入abc那么ac1,c2,bc3程序举例#include<math.h>#include<stdio.h>main(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);}例输入三角形边长,求面积输入:3,4,6输出:a=3.00,b=4.00,c=6.00s=6.50area=5.33文件包含预处理命令变量定义输入数据输出数据例从键盘输入大写字母,用小写字母输出#include"stdio.h"main(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}输入:A输出:A,65a,97标准库函数需#include文件包含预处理命令将对应的头文件包含到文件中;函数原型;doulesqrt(doublex)常用的库函数:标准输入输出函数、数学函数、字符函数输入和输出小结

C语言中没有提供专门的输入输出语句,所有的输入输出都是由调用标准库函数中的输入输出函数来实现的。

-scanf和getchar函数是输入函数,接收来自键盘的输入数据。

scanf是格式输入函数,可按指定的格式输入任意类型数据。

getchar函数是字符输入函数,只能接收单个字符。

-printf和putchar函数是输出函数,向显示器屏幕输出数据。

printf是格式输出函数,可按指定的格式显示任意类型的数据。

putchar是字符显示函数,只能显示单个字符。第3章运算符与表达式C运算符1.算术运算符+-*/%++--〔类型〕2.赋值运算符=及其扩展赋值运算符3.关系运算符><==>=<=!=4.逻辑运算符!&&||5.位运算符<<>>~|^&6.条件运算符?:7.逗号运算符,8.指针运算符*&9.求字节数运算符sizeof10.分量运算符.→11.下标运算符[]12.其它如函数调用运算符〔〕学习运算符应注意:〔1〕掌握运算符的功能;〔2〕搞清运算符与运算量间的关系:要求运算量个数:单目、双目、三目要求运算量类型,比方:“%”〔3〕清楚运算的优先级别;〔4〕明确结合方向〔在一个运算量的两侧有两个相同优先级别的运算符,那么按结合方向顺序处理〕;〔5〕明白结果的类型〔即表达式的类型〕。表达式用运算符将运算对象〔常量、变量和函数等〕连接起来的、符合C语言语法规那么的式子,称为表达式。表达式都有其值。例:1+2、a+b、c=d/4单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为简单表达式。例:12、a、max(a,b)…3.1算术运算符和表达式根本算术运算符:+-*/%结合方向:从左向右优先级:+-*/%+-(2)(3)(4)说明:“+-”可为单目运算符时,右结合性两整数相除,结果为整数“%”要求两侧均为整型数据 例5/2=2

5/2.0=2.5例5%2=1

-5%2=-11%10=

1

5%1=

05.5%2()算术运算符和表达式〔续〕自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值〕后置i++,i--(先使用i值,再执行i+1或i-1〕例j=3;k=++j;printf(“%d%d”,j,k);j=3;k=j++;printf(“%d%d”,j,k);j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;printf(“%d%d”,j,k);

a=3;b=5;c=(a++)*b;printf(“%d%d”,j,k);

//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4自增、自减运算符++--说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:+-(正负〕++--*/%+-(2)(3)(4)注意++、--的副作用例j+++k;(j++)+k;算术运算符和表达式〔续〕简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据〔常量或表达式〕赋给一个变量复合赋值运算符种类:+=-=*=/=%=《=》=&=^=|=含义:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;3.2赋值运算符和表达式说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规那么:使赋值号右边表达式值自动转换成其左边变量的类型例3=x-2*y;a+b=3;例floatf;inti;i=10;f=i;那么f=10.0例inti;i=2.56;//结果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表达式值为5,a,b,c值为5//b=5;a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=2赋值运算符和表达式〔续〕赋值运算符和表达式〔续〕赋值类运算符的副作用及限制

C语言中允许在一个表达式中使用一个以上的赋值类运算符。

1.程序尽可能写得明了易懂一些;2.加上一些不必要的括号。

例:a=12;a+=a-=a*a//a=-264等价于a=a+(a=a-(a*a))例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=0等价于a=a+(a=a*(a=a-(a=a*3)))形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例a=3*5,a*4;a=3*5,a*4,a+5;例x=(a=3,6*3);x=a=3,6*a;例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3逗号运算符和表达式关系运算符种类:<<===>=>!=结合方向:自左向右优先级别:<<=>>===!=优先级6(高)优先级7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表达式值1//表达式值1//表达式值0//d=1//f=0关系运算符和表达式关系运算注意:例假设a=0;b=0.5;x=0.3;那么a<=x<=b的值为0例5>2>7>8在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);那么a=2例‘a’>0结果为‘A’>100结果为10关系运算符和表达式〔续〕关系运算注意:例注意区分“=”与“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例应防止对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为0关系运算符和表达式〔续〕#include<stdio.h>voidmain(){floatx,y;x=3+0.3;y=0.3*1.1;if(x==y)printf(“ok,x==y”);elseprintf(“no,x!=y”);}结果:no,x!=y可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6ab!a!ba&&ba||b真假真假假假真真逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算量:0表示“假”,非0表示“真”,

运算结果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真逻辑运算符和表达式!(2)&&(11)||(12)高低例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(a<=x)&&(x<=b)

//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)逻辑运算符和表达式〔续〕!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0)))值为1短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例a&&b&&c//只在a为真时,才判别b的值;

只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;

只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=1逻辑运算符和表达式〔续〕

条件运算符与表达式一般形式:expr1?expr2:expr3功能:相当于条件语句,但不能取代一般if语句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a’&&c<=‘z’)?c-’a’+’A’:c条件运算符可嵌套

如x>0?1:(x<0?-1:0)优先级:13结合方向:自右向左

如a>b?a:c>d?c:da>b?a:(c>d?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型例x?‘a’:‘b’//x=0,表达式值为‘b’;x‡0,表达式值为‘a’x>y?1:1.5//x>y,值为1.0;x<y,值为1.5数据类型间的转换隐式转换什么情况下发生算术运算转换------不同类型数据混合算术运算时赋值运算转换------把一个值赋给与其类型不同的变量时函数调用转换------实参与形参类型不一致时转换算术运算转换规那么算术表达式中char,short类型一律转换为int类型,float一律转换为double类型。相同数据类型的操作数(除char,short,float)作运算的结果为跟操作数同一类型。不同类型数据运算时先根据规那么①转换,如果经转换后是相同类型,根据规那么②运算,如果类型不一样,那么级别低的数据类型转换为级别高的数据类型,运算的结果为转换后的级别高的数据类型。算术运算中的数据转换规那么-续doublefloatlongintchar,short低高说明:必定的转换运算对象类型不同时转换例:2.0f+5/2*3//8.0double类型赋值运算中的数据类型转换赋值运算符右边表达式的值转换为左边变量相同类型的数据,然后再赋值。intx=2;x=x+1.6;//x=3charc;c=1345;//c=65shorta=-1;unsignedshortb=65534;b=a;//b=65535例(int)(x+y)(int)x+y(double)(3/2)(int)3.6例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生-显式转换〔强制转换〕一般形式:〔类型名〕表达式说明:强制转换得到所需类型,原变量类型不变运算符与表达式小结运算符优先级和结合性

一般而言,单目运算符优先级较高,赋值运算符优先级低;算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。表达式

表达式是由运算符连接常量、变量、函数所组成的式子。每个表达式都有一个值和类型。表达式求值按运算符的优先级和结合性所规定的顺序进行。第4章控制结构与语句C语句概述C语句分为以下四类:控制语句:完成程序流程控制,包括分支、循环。表达式语句:在表达式后面加分号构成,常用的有赋值语句,函数调用等。空语句:仅包含一个分号的语句。复合语句:由大括号{}括起来的语句序列。C语句:以“;”作分隔符,编译后产生机器指令。一般形式:

{

….

}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套复合语句程序控制语句(共9种〕if()~else~switch()for()~while()~do~while()continuebreakgotoreturn分支循环辅助控制PAB真假选择结构A1A2AiAnk=k2k=k1k=knk=ki......-二分支选择结构-多分支选择结构if语句的三种形式形式一:格式:if(expression)statement执行过程:表达式statement非0=0例:if(x>y){printf(“%d”,x);}表达式statement1statement2非0=0形式二:格式:if(expression)statement1

else

statement2执行过程:例:if(x>y){max=x;}else{max=y;}㈠if语句〔条件选择语句〕选择结构max=(x>y)?x:y;形式三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3elsestatement4表达式1statemnt1非0=0表达式2表达式3statement4statemnt3statemnt2非0非0=0=0执行过程:例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;例:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);说明:if后面的表达式类型任意if(x)if(x!=0)if(!x)if(x==0)语句可以是复合语句例:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!#include<stdio.h>main(){intx,y;printf("Enteraninteger:");scanf("%d",&x);y=x;

if(y<0)y=-y;printf("\ninteger:%d--->absolutevalue:%d\n",x,y);}例:求一个数的绝对值运行:Enteraninteger:-12

integer:-12--->absolutevalue:12#include<stdio.h>main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);

if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例:输入两个数并判断两数是否相等运行:Enterintegera:12Enterintegerb:12a==b运行:Enterintegera:12Enterintegerb:9a!=b#include<stdio.h>main(){charc;printf("Enteracharacter:");c=getchar();if(c<0x20)printf("Thecharacterisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例:判断输入字符种类运行:Enteracharacter:

Thecharacterisacontrolcharacter运行:Enteracharacter:8Thecharacterisadigit运行:Enteracharacter:DThecharacterisacapitalletter运行:Enteracharacter:hThecharacterisalowerletter运行:Enteracharacter:F1Thecharacterisothercharacterif语句嵌套:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3

内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌if例:输入两数并判断其大小关系#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");elseprintf("X<Y\n");

elseprintf("X==Y\n");}运行:Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Yif~else配对原那么:缺省{}时,else总是和它上面离它最近的未配对的if配对。实现if~else正确配对方法:加{}if(……)if(……)if(……)else…...else…...else…...例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b)

{

if(b==c)printf(“a==b==c”);

}elseprintf(“a!=b”);〔二〕switch语句〔开关分支语句〕一般形式:switch(表达式){caseE1:

语句组1;

break;caseE2:

语句组2;

break;…….caseEn:

语句组n;

break;[default:

语句组;

break;]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:-E1,E2,…En是常量表达式,且值必须互不相同-语句标号作用,必须用break跳出-case后可包含多个可执行语句,且不必加{}-switch可嵌套-多个case可共用一组执行语句例:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..例:switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:

Verygood!Good!Pass!Fail!dataerror!例:voidmain(){intx=1;inty=0;inta=0;intb=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}运行结果:a=2,b=1C语言可实现循环的语句:while语句do~while语句for语句4.4循环结构程序设计一般形式:while(表达式)

循环体语句;执行流程:表达式循环体假(0)真(非0)while〔二〕while语句特点:先判断表达式,后执行循环体说明:-循环体有可能一次也不执行-循环体可为任意类型语句-以下情况,退出while循环条件表达式不成立〔为零〕循环体内遇break,return,goto无限循环:while(1)循环体;例:用while循环求

#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体一般形式:do

循环体语句;

while(表达式);执行流程:do循环体表达式假(0)真(非0)while〔三〕do~while语句例:用do~while循环求

#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}例:统计键盘输入的数字字符总数,直到回车统计结束。main(){charc;intsum=0;do{scanf("%c",&c);if(c>=‘0’&&c<==‘9)sum++;}while(c!=‘\n’〕printf("%d",sum);}main(){

charc;intsum=0;scanf("%c",&c);while(c!=‘\n’){if(c>=‘0’&&c<==‘9)

sum++; scanf(“%c”,&c);}printf("%d",sum);}while和do~while比较一般形式:for([表达式1];[表达式2];[表达式3])

循环体语句;执行流程:表达式2循环体假(0)真(非0)for表达式1表达式3(四)for语句for语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值){

循环体语句;}#include<stdio.h>main(){inti;intsum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}例:用for循环求

-for语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省-无限循环:for(;;)-for语句可以转换成while结构expr1;while(expr2){

循环体语句;

expr3;}说明:例:#include<stdio.h>main(){inti;for(i=0;i<10;i++)putchar(‘a’+i);}例:#include<stdio.h>main(){inti=0;for(;i<10;i++)putchar(‘a’+i);}例:#include<stdio.h>main(){inti=0;for(;i<10;)putchar(‘a’+(i++));}#include<stdio.h>main(){inti=0;for(;i<10;putchar(‘a’+i),i++)

;}main(){

inti,j,k;for(i=0,j=100;i<=j;i++,j--){

k=i+j;printf("%d+%d=%d\n",i,j,k);}}main(){

charc;for(;(c=getchar())!='\n';)

printf("%c",c);}}main(){

inti,c;for(i=0;(c=getchar())!='\n';i+=3)

printf("%c",i+c);}}三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程〔五〕循环的嵌套例:循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281……………..ij#include<stdio.h>main(){

inti,j;for(i=1;i<10;i++)printf("%4d",i);printf("\n---------------------------------------\n");for(i=1;i<10;i++)for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j);}计算1!+2!=3!+……+10!#include<stdio.h>voidmain(){inti,n;floats=0,y;/*s作累加和变量,y作加数变量*/for(n=1;n<=10;n++){

y=1;for(i=1;i<=n;i++)y*=i;s+=y;}printf(“1!+2!=3!+……+10!=%f\n”,s);}

break语句功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中〔六〕辅助控制语句

表达式……break;……假(0)真(非0)whiledo……break;…...表达式假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switch表达式语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcasebreak举例:输出圆面积,面积大于100时停止#definePI3.14159main(){intr;floatarea;for(r=1;r<=10;r++){

area=PI*r*r;if(area>100) break;printf("r=%d,area=%.2f\n",r,area);}}break举例:小写字母转换成大写字母,直至输入非字母字符#include<stdio.h>main(){inti,j;charc;while(1){

c=getchar(); if(c>='a'&&c<='z') putchar(c-'a'+'A'); else break;}}功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中表达式……continue;……假(0)真(非0)while真(非0)do……continue;…...表达式假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3-continue语句Continue举例:求输入的十个整数中正数的个数及其平均值#include<stdio.h>main(){

inti,a;intnum=0;floatsum=0;for(i=0;i<10;i++){scanf("%d",&a); if(a<=0)continue; num++; sum+=a;}printf("%dplusinteger'ssum:%6.0f\n",num,sum);printf("Meanvalue:%6.2f\n",sum/num);}循环结构总结1、同一问题我们可以使用三种循环中的任一种2、循环体中应该有使循环趋于结束的语句。例如:i++。对于for循环,对应的就是表达式3。3、注意循环变量的初始化。对于for循环,对应的就是表达式1。4、循环体中可以使用break和continue。但只对所在层循环有效。例:求Fibonacci数列:1,1,2,3,5,8,……的前40个数121121+===--FFFFFnnnf1=1,f2=1fori=1to20输出f1,f2f1=f1+f2f2=f2+f11534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155例:读入一个数m,判断m是否素数读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”小结从程序执行的流程来看,程序可分为三种最根本的结构:顺序结构,分支结构以及循环结构。程序中执行局部最根本的单位是语句。C语言的语句以“;”结尾,包括:表达式语句、函数调用、控制语句、复合语句与空语句。C语言的条件分支语句包括: (1)if语句主要用于单向选择。 (2)if-else语句主要用于双向选择。

(3)if-else-if语和switch语句用于多向选择。C语言的循环语句包括:while语句do~while语句for语句C语言的辅助控制语句包括:continue、break、goto、return第五章数组程序中为了处理方便常把具有相同类型的假设干变量按有序的形式组织起来。定义:有序数据的集合,用数组名标识元素:属同一数据类型,用数组名和下

温馨提示

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

评论

0/150

提交评论