资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,1.1,1.2,1.3,1.4,1.5,1,.1,程序设计语言及其发展,程序设计语言的发展,机器语言,汇编语言,高级语言,CPU,指令系统,由0、1序列构成的指令码组成,如:,10000000,加,10010000,减,用助记符号描述的指令系统,如,ADD A,B,分为解释类和编译类,1967,年,Martin Richards,开发,BCPL,1970,年,Ken Thompson,开发,B,语言,1972,年,Dennis Ritchie,设计了,C,语言,C,标准,1980,年,Bjarne Stroustrup,开发“带类的,C,语言”,最终成为,C+,语言。,1,.2 C,语言的历史,1978,年,The C Programming Language,1989-1990,年,C89,标准,1995,年,C95,标准,1999,年,C99,标准,2011,年,C11,标准(,ISO/IEC 9899:2011),1,.3 C,语言的标准,例,1.1,输出字符串,#include,main(),printf(“hello,worldn”);,运行结果:,Hello,world,主函数,字符串,包含头文件,1,.4 C,语言的程序结构,库函数,缩进格式,例,1.2,/*,功能:计算两个数的和,并输出,*/,#include,/*,包含头文件,stdio.h*/,main(),int a,b,sum;,/*,定义变量,*/,a=10;,/*,给变量,a,赋整数值,10*/,b=20;,/*,给变量,b,赋整数值,20*/,sum=a,b;,/*,求和,*/,printf(sum=%dn,sum);,/*,输出,sum,的值,*/,运行结果:,sum=30,注释语句,1,.4 C,语言的程序结构,(续),若输出,10,20=30,则程序中的,printf,语句可改写为:,printf(%d,%d=%dn,10,20,sum);,1,.4 C,语言的程序结构(续),例,1.3,输入两个数,求和并输出,#include,main(),int a,b,sum;/*,定义变量,*/,scanf(%d,&a,);/*,输入第一个整数,*/,scanf(%d,&b,);/*,输入第二个整数,*/,sum=a,b;/*,计算和,*/,/*,输出和,*/,printf(The sum of%d and%d is%d.n,a,b,sum);,scanf,获得键盘输入,1,.4 C,语言的程序结构(续),总结:,C,程序结构特点,函数与主函数,程序由一个或多个函数组成,必须有且只能有一个主函数,main,(),程序执行从,main,开始,在,main,中结束,程序语句,C,程序由语句组成,用“,;,”作为语句终止符,注释,/*/,为注释,不能嵌套,采用缩进格式,1,.5 C,语言程序的运行,2.1,常量,2.2,变量,2.3,运算符与表达式,2.4,运算符的优先级与结合性,2.5,类型转换,2.1,常量,定义:程序运行时其值不能改变的量(即常数),分类,:,整型常量,十进制常量,1245 401 -3210 +569,八进制常量,01245 0401 -03210,0184,想想为什么?,十六进制常量,0 x1245 0 x401-0 xabcd,0 x2z1,2.1,常量,浮点型常量,十进制小数形式,0.0083.125 -123.+3.14159,指数形式表示实型常量,1.23,e3,12345.6E-2,2.23e1.5 1.23e,想想为什么?,单字符常量,普通字符常量,用单引号括起来,A,a,转义字符,见书中表,2.1,2.1,常量,字符串常量,字符串常量是由一对双引号括起来的字符序列。,例如,“,Hello!,”、“,C Language,”,h e l l o,0,X,X 0,例,X,“X”,字符串一般都有一个结束标志,0,X,与,“X”,是有区别的,例,2.1,输入一个半径,求圆周长和圆面积,#include,#define PI 3.14159,main(),float radius,circumf,area;,scanf(“%f”,circumf,2.0*PI*radius;/*,计算周长,*/,area,PI*radius*radius;/*,计算面积,*/,printf(circumference,%.2f,area,%.2fn,circumf,area);,运行结果:,1,circumference,6.28,area,3.14,符号常量,PI,符号常量,定义格式为:,#define ,2.2,变量,概念:其值可以改变的量,变量名,与,变量值,变量定义的一般格式:,数据类型,变量,1,,变量,2,,,,变量,n;,变量初始化,:,定义时赋初值,例,:,int a,b,c;,float data;,决定分配字节数,和数的表示范围,合法标识符,例,:,int a=2,b,c=4;,float data=3.67;,char ch=A;,int x=1,y=1,z=1;,变量的使用:,先定义,后使用,变量定义位置:,一般,放在函数开头,例,:,int student;,student=19;,main(),int a,b=2;,float data;,a=1;,data=(a+b)*1.2;,printf(“data=%fn”,data);,2.2.1,变量名,在,C,语言中,用户自定义的标识符需要符合以下规则,(,1,)必须以字母或下划线(,_,)开头,,C,语言区分大小写,,,ABC,Abc,和,abc,是不相同的。,(,2,)只能由字母、数字或下划线组成,不能有空格,小数点等特殊字符。,(,3,)不能和,C,中的系统保留的关键字重名。,auto,double,int,Struct,break,else,long,Switch,case,enum,register,typedef,char,extern,return,union,const,float,short,unsigned,continue,for,signed,void,default,goto,sizeof,volatile,do,if,static,while,系统保留的关键字,2.2.2,变量的类型,数据长度,类型标识符,数值范围,有符号整数,16,位,short int,32768,32767,32,位,int,2147483648,2147483647,32,位,long int,2147483648,2147483647,无符号整数,16,位,unsigned short int,0,65535,32,位,unsigned int,0,4294967295,32,位,unsigned long int,0,4294967295,整型变量,例如:,int,i=0;,整型数据的长度、类型标识符与数值范围,2.2.2,变量的类型,浮点型变量,float,:单精度浮点数,double,:双精度浮点数,long double,:长精度浮点数,浮点数的特征,类型,数据长度,取值范围与有效位数,float,32,位,约(,3.4E-38,3.4E+38,),,6,位有效数字,double,64,位,约(,1.7E-308,1.7E+308,),,16,位有效数字,2.2.2,变量的类型,字符型变量,用,char,进行定义,用单引号引起来的单个字符,如字符,A,、,a,、,0,、,$,等,#include,main(),char,lowercase,a;,char,uppercase,lowercase-32;,printf(%c,uppercase);,【,例,2.2,】,小写字母转换成大写字母,大写字母的,ASCII,值比对应的小写字母小,32,sizeof,运算符,运算符,sizeof,可以测定某种类型的数据所占的字节数。,#include,main(),printf(int:%d bytesn,sizeof(int);,printf(double:%d bytesn,sizeof(double);,【,例,2.3,】,用,sizeof,运算符测定所用,C,系统中,int,型和,double,型数据所占内存空间的字节数,基本用法是,sizeof,(类型名),运行结果:,int:4 bytes,double:8 bytes,2.2.3,变量的定义及操作,int age,reach;,定义,age,、,reach,为基本,int,类型变量。,unsigned int height,weight;,定义,height,、,weight,为无符号,int,类型变量,变量的定义,先定义,赋值后使用,#include,main(),int age;,printf(%dn,age);,age,未进行初始化,所以输出结果是不确定的,2.3,运算符与表达式,C,运,算,符,算术运算符:(,+-*/%+-,),关系运算符:(,=!=,),逻辑运算符:(!,&|,),位运算符 :(,|&,),赋值运算符:(,=,及其扩展),条件运算符:(,?:,),逗号运算符:(,),指针运算符:(*,&,),求字节数 :(,sizeof,),强制类型转换:(类型),分量运算符:(,.-,),下标运算符:(,),其它 :(,()-,),算术运算符和表达式,基本算术运算符:,+,-,*/%,结合方向:从左向右,优先级:,-,-,*/%,-,+-,说明:,“,-,”,可为,单目,运算符时,右结合性,两整数相除,结果为整数,%要求两侧均为整型数据,例,5/2 =,-5/2.0 =,例,5%2 =,-5%2 =,1%10 =,5%1 =,5.5%2,例,5/2 =,2,-5/2.0=,-2.5,例,5%2 =,1,-5%2 =,-1,1%10 =,1,5%1 =,0,5.5%2,(,),关系运算符和表达式,关系运算符,种类,:,=!=,结合方向:自左向右,优先级别:,=,=,!=,优先级高,优先级低,例,ca+b /c(a+b),ab!=c /(ab)!=c,a=bc /a=(bc /a=(bc),关系表达式的值:是逻辑值“真”或“假”,用,1,和,0,表示,例,int a=3,b=2,c=1,d,f;,ab,(ab)=c,b+cb,f=abc,/,表达式值1,/,表达式值1,/,表达式值0,/d=1,/f=0,a,b,!a,!b,a&b,a|b,真,假,真,假,假,假,真,真,逻辑运算符和表达式,逻辑运算符,种类:,!&|,逻辑运算真值表,C,语言中,运算量:,0表示,“,假,”,,,非0表示,“,真,”,运算结果:,0表示,“,假,”,,,1表示,“,真,”,真,假,假,假,假,假,真,真,假,假,真,真,真,假,真,真,赋值运算符和表达式,简单赋值运算符,符号:,=,格式:,变量标识符,=,表达式,作用:将一个数据(常量或表达式)赋给一个变量,复合赋值运算符,种类,:,+=-=*=/=%=,=&=|=,含义:,exp1 op=exp2,exp1=exp1 op exp2,a+=3,a=a+3,x*=y+8,x=x*(y+8),x%=3,x=x%3,例,a=3;,d=func();,c=d+2;,自增、自减运算符,+-,作用:使变量值加,1,或减,1,种类:,前置,+i,-i (,先执行,i,+1,或,i-1,,,再使用,i,值),后置,i+,i-(,先使用,i,值,再执行,i,+1,或,i-1,),例,j=3;k=+j;,j=3;k=j+;,j=3;printf(,“,%d,”,+j);,j=3;printf(,“,%d,”,j+);,a=3;b=5;c=(+a)*b;,a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,条件运算符与表达式,一般形式:,expr1,?,expr2,:,expr3,执行过程,功能:相当于条件语句,但不能取代一般,if,语句,例,if(ab),printf(“%d”,a);,else,printf(“%d”,b);,printf(“%d”,ab?a:b);,例 求,a+|b|,printf(“a+|b|=%dn”,b0?a+b:a-b);,expr1,取,expr2,值,取,expr3,值,非,0,=0,条件运算符可嵌套,如,x0?1:(x0?-1:0),逗号运算符和表达式,形式:,表达式,1,表达式,2,表达式,n,结合性,:,从左向右,逗号表达式,的值:等于表达式,n,的值,用途:,常用于循环,for,语句中,例如:,value,(x,10,y,5,x,y);,首先将,10,赋值给,x,然后将,5,赋值给,y,,最后将,15,(即,10,5,)赋值给,value,。,2.4,优先级与结合性,优先级用于确定复杂表达式求值时不同运算符的计算顺序。,结合性用来决定复杂表达式求值时含有同优先级运算符的计算顺序。,左结合,表达式,3*8/4%4*5,等价于,(,3*8,),/4,),%4,)*,5,),右结合,表达式,a,b*,c,5,等价于,(,a,(,b*,(,c,5,),2.5,类型转换,隐式类型转换,显示类型转换,显示类型转换的一般表示形式为:,(类型标识符),表达式,int totalScores,500,num,6;/*,定义总分,totalScores,和学生人数,num*/,float average;/*,定义平均分,average*/,average,totalScores/num;/*average,83.0000 */,average,(float)totalScores/num;/*average,83.3333 */,隐式类型转换,显式类型转换,3.1,读入一个字符,3.2,输出一个字符,3.3,格式化输入,3.4,格式化输出,3.5,程序举例,3.1,读入一个字符,函数功能,从标准输入设备读取一个字符,函数的语法格式,getchar();,【,例,3.1,】,从键盘上输入一个字符,然后显示出来。,#include,main(),char ch;,ch=getchar();,printf(%c,ch);,3.2,输出一个字符,函数功能,将字符输出到标准输出设备上,函数的语法格式,putchar(c);,【,例,3.2,】,显示,A,。,#include,main(),char ch;,ch=,A,;,putchar(ch);,3.3,格式化输入,格式,:,scanf,(,“,格式控制串,”,,,地址表,),功能:按指定格式从键盘读入数据,存入地址表指定的,存储单元中,并按回车键结束,返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符,&,格式字符,:d,i,o,x,u,c,s,f,e,例,scanf(“%d”,输入:10,则,a=10,例,scanf(“%4d%2d%2d”,输入 19991015,则1999,yy,10 mm,15 dd,例,scanf(“%3d%*4d%f”,输入 12345678765.43,则123,k,8765.43f,例,scanf(“%2d,%*3d,%2d”,输入 12,345,67,则12,a,67b,例,scanf(“%3c%2c”,输入,abcde,则,ac1,d c2,输入分隔符的指定,一般以空格、,TAB,或回车键作为分隔符,其它字符做分隔符:格式串中两个格式符间字符,例,scanf(“%d:%d:%d”,输入 12:30:45,则12,h,30 m,45 s,例,scanf(“%d,%d”,&a,&b),输入 3,4,则3,a,4 b,例,scanf(“a=%d,b=%d,c=%d”,输入,a=12,b=24,c=36,输入数据时,遇以下情况认为该数据结束:,遇空格、,TAB,、,或回车,遇宽度结束,遇非法输入,3.4,格式化输出,格式:,printf,(“,格式控制串”,,输出表,),功能:按指定格式向显示器输出数据,返值:正常,返回输出字节数;出错,返回,EOF(-1),输出表:要输出的数据(可以没有,多个时以“,”分隔),格式控制串:包含两种信息,格式说明,:,%,修饰符,格式字符,,用于指定输出格式,普通字符或转义序列:原样输出,格式字符,d,i,x,X,o,u,c,s,e,E,f,g,%,格式字符:,十六进制无符号整数,不带符号十进制整数,十进制整数,指数形式浮点小数,单一字符,字符串,八进制无符号整数,小数形式浮点小数,e,和,f,中较短一种,百分号本身,int a=567;printf(“%d”,a);,int a=255;printf(“%x”,a);,int a=65;printf(“%o”,a);,int a=567;printf(“%u”,a);,char a=65;printf(“%c”,a);,printf(“%s”,“ABC”);,float a=567.789;printf(“%e”,a);,float a=567.789;printf(“%f”,a);,float a=567.789;printf(“%g”,a);,printf(“%”);,567,ff,101,567,A,ABC,5.677890,e+02,567.789000,567.789,%,3.5,程序举例,-,例,3.4,#include,#define PI 3.1415926,main(),float r,h,l,s,sq,vq,vz;/*,变量定义,*/,printf(please input r,h:n);/*,输入提示信息,*/,scanf(%f,%f,/*,从键盘输入圆半径,r,、圆柱高,h*/,l=2*PI*r;/*,计算圆周长,*/,s=PI*r*r;/*,计算圆面积,*/,sq=4*PI*r*r;/*,计算圆球表面积,*/,vq=4.0/3.0*PI*r*r*r;/*,计算圆球体积,*/,vz=PI*r*r*h;/*,计算圆柱体积,*/,printf(%6.2fn,l);,printf(%6.2fn,s);,printf(%6.2fn,sq);,printf(%6.2fn,vq);,printf(%6.2fn,vz);,3.5,程序举例,-,例,3.6,#include,main(),int num1,num2,temp;,scanf(%d,%d,printf(,交换前:,num1=%d,num2=%dn,num1,num2);,/*swap num1 and num2*/,temp=num1;,num1=num2;,num2=temp;,printf(,交换后:,num1=%d,num2=%dn,num1,num2);,两个数交换的核心语句,4.1,选择结构程序概述,4.2 if,语句,4.3 switch,语句,选择结构,单分支,双分支,if (,表达式,),语句,多分支,if (,表达式,),语句,else,语句,if (,表达式,1),语句,else if (,表达式,),语句,else,语句,n,if,语句的嵌套,switch,语句,4.1.1,简单,if,语句,1.,语法格式,if(,条件,),语句,2.,说明,(,1,)执行过程:,当条件为“真”时,执行语句;为“假”时,跳过语句,而直接执行整个,if,语句后的其它语句。,(,2,)条件中的结果为,逻辑值,。,(,3,)语句如果有,多条语句,,要用一对花括号“,”,将其括起来,成为一个,复合语句,。,例,4.1,#include,main(),float x,y;,printf(,请输入数据:,n);,scanf(%f,y=x;/*,初始化,y,值,*/,if(xb),temp=a;/*,三条语句,实现,a,、,b,变量值交换,*/,a=b;,b=temp;,printf(a=%.2f b=%.2fn,a,b);,4.1.2,if.else,语句,1.,语法格式,if (,条件,),语句,1,else,语句,2,2.,说明,(,1,)执行过程:,当条件为“真”时,执行语句,1,;,为“假”时,执行语句,2,。,(,2,),语句,1,和,语句,2,都可为,复合语句,。,例,4.3,#include,main(),float weight,pay;,printf(,请输入重量,n);,scanf(%f,if(weightb),max=a;,else,max=b;,printf(%d,max);,嵌套,if.else,语句,在一个,if.else,语句中又包含一个或多个,if.else,语句时,,称为嵌套,if.else,语句。在,C,语言中允许多层嵌套。,例,4.4,使用嵌套,if,语句来选出三个数字中最大的数,然后再显示它,#include,main(),float a,b,c;,printf(“Enter three valuesn”);,scanf(“%f%f%f”,printf(“nLargest values is”);,if(ab),if(ac),printf(“%fn”,a);,else,printf(“%fn”,c);,else,if(cb),printf(“%fn”,c);,else,printf(“%fn”,b);,4.1.4,阶梯式,if.else,语句,利用阶梯式,if.else,可解决多分支的问题。其一般形式如下:,if(,条件表达式,1),语句序列,1,else if(,条件表达式,2),语句序列,2,else if(,条件表达式,3),语句序列,3,else if(,条件表达式,4),语句序列,4,.,else if(,条件表达式,n-1),语句序列,n-1,else,语句序列,n,如果没有任何缩进,我们应准确判断出,if,和,else,的配对关系,在下表中同时给出了正确的嵌套形式和错误的嵌套形式,结果是不同。,在,C,语言中,一个,else,语句总是与最近的未终止的,if,匹配。,原型,嵌套:正确理解,嵌套:错误理解,m=0;if(ab)if(ac)m=10,;,elsem=20,;,printf(m=%d,m);,m=0;if(ab),if(ac),m=10,;,else,m=20,;,printf(m=%d,m);,m=0;if(ab),if(ac),m=10,;,else,m=20,;,printf(m=%d,m);,当,a=2;b=1;c=3;,时,,结果:,m=0,当,a=2;b=1;c=3;,时,,结果:,m=0,当,a=2;b=1;c=3;,时,,结果:,m=20,当,a=2;b=3;c=1;,时,,结果:,m=20,当,a=2;b=3;c=1;,时,,结果:,m=20,当,a=2;b=3;c=1;,时,,结果:,m=0,当,a=1;b=2;c=3;,时,,结果:,m=10,当,a=1;b=2;c=3;,时,,结果:,m=10,当,a=1;b=2;c=3;,时,,结果:,m=10,4.2 switch,语句,1.,语法格式,switch(,表达式,),case,常量表达式,1:,语句序列,1;break;,case,常量表达式,2:,语句序列,2;break;,case,常量表达式,n:,语句序列,n;break;,default:,语句序列,2.,执行流程,例,4.5,根据输入的数据判断星期几,然后再显示它,#include,main(),int a;,printf(input integer number:n);,scanf(%d,switch(a),case 1:printf(Mondayn);,case 2:printf(Tudsdtayn);,case 3:printf(Wednesdayn);,case 4:printf(Thursdayn);,case 5:printf(Fridayn);,case 6:printf(Saturdayn);,case 7:printf(Sundayn);,default:printf(error!n);,运行结果:,input integer number:,3,Wednesday,Thursday,Friday,Saturday,Sunday,error!,3,case 3:printf(Wednesdayn);,case 4:printf(Thursdayn);,case 5:printf(Fridayn);,case 6:printf(Saturdayn);,case 7:printf(Sundayn);,default:printf(error!n);,例,4.5,根据输入的数据判断星期几,然后再显示它,#include,main(),int a;,printf(input integer number:n);,scanf(%d,switch(a),case 1:printf(Mondayn);break;,case 2:printf(Tudsdtayn);break;,case 3:printf(Wednesdayn);break;,case 4:printf(Thursdayn);break;,case 5:printf(Fridayn);break;,case 6:printf(Saturdayn);break;,case 7:printf(Sundayn);break;,default:printf(error!n);,运行结果:,input integer number:,3,Wednesday,3,case 3:printf(Wednesdayn);,break,跳出,5.1 goto,语句,5.2 while,循环,5.3 do-while,循环,5.5 break.continue,语句,5.6,循环嵌套,5.1 goto,语句,一般形式:,语句标号,:语句,.,goto,语句标号;,1.,功能是无条件转到,语句,标号处。,2.,用途:,与,if,语句一起构成循环结构;,从循环体中跳到循环体外。,3.,因为滥用,goto,语句会破坏结构化,使流程无规律,所以应限制使用。除非不得已时,(,例如能大大提高效率,),才使用。,说明:,语句标号:,1.,用于定义程序中的某个位置。,2.,用标识符表示,开头不能是数字。,如:,goto 3t;,错误,goto t3;,正确,3.,只能加在可执行语句前面。,用,if,语句和,goto,语句构成循环,计算,#include,main(),int i,sum=0;,i=1;,loop:,if(i=100),sum+=i;,i+;,goto loop;,printf(%d,sum);,sum=sum+1=1,sum=sum+2=3,sum=sum+3=6,sum=sum+4=10,sum=sum+100=5050,循环初值,循环终值,循环变量增值,循环条件,循环体,分析,:这是一个累加求和的问题,sum=1+2+3+100,5.2 while,语句,用,while,语句实现当型循环,当表达式的值为真(非,0,)时,执行其中的内嵌语句(循环体),然后回过头来再判断表达式的值,如此重复;当表达式为假(,0,)时结束循环。,一般形式:,while(,表达式,),循环体语句,表达式,循环体,假,(0),真,(,非,0),执行过程:,特点:先判断表达式,后执行循环体,。,分析,:累加求和的问题,s=1+2+3+100,s=0,s=s+1,s=s+2,s=s+3,和的新值,s=s+k,和的当前值,求和项当前值,用,while,语句,计算,#include,main(),int k,s;,s=0;k=1;,while(k=100),s=s+k;,k+;,printf(“s=%d,s);,注意:,s,、,k,的初值及位置,5.3 do.while,语句,用,do-while,语句实现直到型循环,执行循环体,当表达式的值为真(非,0,)时,再次执行循环体,如此重复;当表达式为假(,0,)时结束循环。,一般形式:,do,循环体语句,while(,表达式,);,表达式,循环体,假,(0),真,(,非,0),执行过程:,先执行循环体,后判断表达式,。,循环体至少执行一次。,do-while,语句,可转化成,while,语句。,“;”,不可省略,例,用,do-while,语句,计算,#include,main(),int k,s;,s=0;k=1;,while(k=100),s=s+k;,k+;,printf(“s=%d,s);,#include,main(),int k,s;,s=0;k=1;,do,s=s+k;,k+;,while(k=100);,printf(“s=%d,s);,先判后做,先做后判,5.4 for,循环,最简单的应用形式:,for(,循环变量赋初值,;,循环条件,;,循环变量增值,;),循环体语句,例如:,for(i=1;i=100;i+),sum+=i;,一般形式:,for(,表达式,1;,表达式,2;,表达式,3;),循环体语句,(,1),先求解表达式,1,。,(2),求解表达式,2,,若其值为真,(,值为非,0),,,则执行,for,语句中指定的循环体语句,然后,执行下面第,(3),步。若为假,(,值为,0),,则,结束循环,转到第,(5),步。,(3),求解表达式,3,。,(4),转回上面第,(2),步骤继续执行。,(5),循环结束,执行,for,语句下面的一个语句,执行过程:,例如:,for(i=1;i=100;i+),sum+=i;,for(,表达式,1;,表达式,2;,表达式,3;),循环体语句,例,用,for,语句,计算,#include,main(),int k,s;,s=0;k=1;,while(k=100),s=s+k;,k+;,printf(“s=%d,s);,#include,main(),int k,s;,s=0;k=1;,do,s=s+k;,k+;,while(k=100);,printf(“s=%d,s);,先判后做,先做后判,#include,main(),int k,s;,s=0;,for(k=1;k=100;k+),s=s+k;,printf(“s=%d,s);,#include,main(),int k,s;,s=0;,for(k=1;k=100;k+),s=s+k;,printf(“s=%d,s);,5.5 break,语句和,continue,语句,break,语句,:,break;,功能:,跳出,switch,结构;,在循环语句中,终止并跳出,本层,循环,。,例,计算,r=1,到,r=10,的圆面积,直到面积大于100时停止。,#define PI 3.1415,main(),int r;,float area;,for(r=1;r100),break;,printf(r=%d,area=%.2fn,r,area);,运行结果:,r=1,area=3.14,r=2,area=12.57,r=3,area=28.27,r=4,area=50.26,r=5,area=78.54,r=6,area=113.094,退出循环,continue,语句,:,continue,;,功能:,结束本次循环,跳过本层循环体中尚未执行的语句,进行下一次是否执行循环体的判断。,说明:,continue,仅用于循环语句中,。,一般与,if,一起使用,例,把,100-200,之间不能被,3,整除的数输出,。,main(),int n;,for(n=100;n=200;n+),if(n%3=0),continue;,printf(“%d ,n);,100,1,100,101,2,101,102,0,跳过,printf,语句,说明:,continue,语句只结束,本次,循环;,break,语句是终止,本层,循环的执行;,要从很多重循环的内层跳到最外层,,可考虑用,goto,语句,但应尽量少用。,:,:,for(),for(),for(),if(),goto end;,end,:,printf,(“,error”,);,continue语句和break语句goto的区别,5.6,循环的嵌套,分析:,1.,每行的起始位置不同,空格数递减,1,。,2.,每行的字符数相同。,3.,用二重循环实现,:,外循环控制输出行数,;,内循环控制输出的空格数。,main(),int row,col;,for(row=1;row=5;row+),for(col=1;col=5-row;col+),printf(“”);/,内循环体,printf(*n);,*,6.1,一维数组,6.2,二维数组,6.3,字符数组与字符串,一、数组的引入,为了便于处理一批类型相同的数据,引入了数组类型,.,假设现在要保存每个学生的成绩,那就需要,40,个变量,但这样一来输入、输出、计算都会变得繁琐。,在这种情况下,我们可以使用数组类型,声明一个含有,40,个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现。,例,:,某班有,40,名学生,求该班成绩的平均分,#include,main(),int j,sum,s;,float ave;,sum=0;,for(j=1;j=40;j+),scanf(“%d”,sum=sum+s;,ave=sum/40;,printf(“ave=%f”,ave);,二、数组的概念,构造数据类型之一,1.,数组,:,由具有相同类型的,有序,数据的集合。用数组名标识。,#include,main(),int j,sum,s40,;,float ave;,sum=0;,for(j=0;j=39;j+),scanf(“%d”,&sj,);,sum=sum+,sj,;,ave=sum/40;,printf(“ave=%f”,ave);,2.,数组元素,:,每一个数组元素,都是一个变量,为了与一般,的变量相区别,我们称数组,元素为,下标变量,3.,下标变量在数组中的位置,序号称,下标,,,c,语言中下标,从,0,开始,6.1,一维数组,6.1.1,一维数组的定义,定义方式:,数据类型 数组名,常量表达式,;,合法标识符,表示元素个数,下标从,0,开始,例,int a10;,数组名表示,数组所在,内存首地址,也是,a0,的地址,是,地址常量,84,:,66,80,95,a0,a1,a2,:,a9,a,6.1.2,数组元素的引用,数组必须,先定义,,,后使用,下标可以是常量或整型表达式,如,:a1 ,a2*3,只能逐个引用数组元素,不能一次引用整个数组,下标不要超范围(越界),区分:数组定义,:int a10,,数组元素引用,t=a6;,例,int a10;,printf(“%d”,a);(,),必须,for(j=0;j10;j+),printf(“%dt”,aj);,(,)
展开阅读全文