1、05:33,第二章,C+简单程序设计,语句,表达式语句 表达式;例:x=a+b; x+; ab?a:b; 复合语句 语句序列,程序流程图,流程图是用来描述算法的工具,与自然语言相比它具有简洁、直观、准确的优点 流程图中使用的符号开始和结束处理框数据输入/输出判断框预定义过程流线,流程图应用举例,-1 (x0)可以包含顺序结构、选择结构、循环结构程序设计方法,顺序结构程序设计,顺序结构流程图, :,例:输入半径,计算面积 分析 设计,顺序结构程序设计,调试-编辑、编译、连接、运行 测试,源程序#include void main()float s,r;const float pi=3.14159
2、;coutr;s=pi*r*r;cout“s=“sendl;,例:编程将键盘输入的一个三位正整数逆转输出。,#include void main() int x,a,b,c;coutx;c=x/100;x=x%100;b=x/10;a=x%10;coutabcendl; ,分别计算出百位数、十位数和 个位数存入变量c 、b、 a中,选择结构程序设计,用 if 语句实现的选择结构if 语句的语法形式:if (表达式)语句1else语句2,注意: 上述格式中语句1和语句2不仅可以是一条语句,而且可以是大括号括起来的多条语句(称为复合语句)。例: 语句2可以为空,此时,else可省略,成为如下形式:
3、if (表达式)语句 例:,例:从x和y中选择较大的一个输出,if (xy)coutxendl;elsecoutyendl;,例:输入一个年份,判断是否润年,设计:首先输入年份存放到变量year中满足上述分析的条件表达式为:(year%4= =0&year%100!=0)|(year%400= =0)该表达式的值为true时为润年,否则不是润年,分析:润年的条件:可以被4整除,但不能被100整除能被400整除,开始,声明变量 x,输入一个年份并存入变量 x 中,是闰年码?,输出x年是闰年,输出x年不是闰年,true,false,结束,源程序 #include void main() int y
4、ear;bool isleapyear;coutyear;isleapyear=(year%4=0 ,源程序 #include void main() int year;coutyear;if(year%4=0 ,多重选择结构,嵌套的 if 语句 if else if 语句 switch 语句,嵌套的 if 语句,语法形式 if (表达式1) if(表达式2)语句1else语句2 else if(表达式3)语句1else 语句2,注意:1、语句1、2、3、4均可以是复合语句2、每层的 if 要与 else 配对,如果省略某个 else ,便要用 括起该层的 if 语句来确定层次关系。,例:比较
5、两个数的大小,#include void main() int x,y;coutxy;if (x!=y)if (xy)couty“endl;elsecout“xy“endl;elsecout“x=y“endl; ,if else if 语句,语法形式if(表达式1)语句1 else if (表达式2)语句2else if(表达式n)语句n else语句n+1,注意:1、语句1、2、3、均可为复合语句,编程统计全班学生某门课程考试成绩中“优”、“良”、“中”、“及格”、“不及格”五个分数段的人数,#include void main() int n=0,n1=0,n2=0,n3=0,n4=0,n
6、5=0;float x; again: coutx;if (x=-1) goto exit1;if (x=0 ,例:,switch 语句,语法形式 Switch(表达式) case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1 ,注意: switch 语句的执行顺序:首先计算switch 语句中表达式的值,然后在case语句中寻找相等的常量表达式,并以此为入口标号,由此开始顺序执行,如果找不到相等的常量表达式,则从“default:”开始执行。 switch 语句后面的表达式可以是整型、字符型、枚举型。 各常量表达式的值不能相同,但次序不
7、影响执行结果。 每个case分支可以有多条语句,但不必用 。 每个case语句只是一个入口标号,并不能确定执行的终点,因此,每个case分支的最后应该加break语句,用来结束整个switch 结构,否则,会从入口点开始一直执行到switch结构的结束点。 若干分支需要执行相同操作时,可以使用多个case分支共用一组语句。,#include #include void main() int age;coutage;switch (age)case 2:case 3:cout“Please enter lower class.“endl;break;case 4:case 5:cout“Plea
8、se enter middle class.“endl;break;case 6:cout“Please enter upper class.“endl;break;default:cout“Not enter!“endl; ,例:编程实现入托幼儿按年龄分班,其中23岁入小班,45岁入中班,6岁入大班。,例:输入一个06的整数,转换成星期输出,#include void main() int day;coutday;switch (day)case 0:cout“Sunday“endl;break;case 1:cout“Monday“endl;break;case 2:cout“Tuesda
9、y“endl;break;case 3:cout“Wednesday“endl;break;case 4:cout“Thursday“endl;break;case 5:cout“Friday“endl;break;case 6:cout“staurday“endl;break;default:cout“Day out of range Sundaystaurday“endl;break; ,循环结构程序设计,while 语句 dowhile 语句 for 语句 循环结构的嵌套,while 语句,语法形式: while (表达式) 语句块 ,注意: while 语句的执行顺序是:先判断表达式(
10、循环控制条件)的值,若为true,则执行循环体(语句块) 一般来说,在循环体中,应该包含改变循环条件表达式值的语句,否则便会造成无限循环(死循环),例:求自然数1100之和,#include void main() int i(1),sum(0);while (i=100)sum+=i;i+;cout“sum=“sumendl; ,dowhile 语句,语法形式: do 语句块 while(表达式),注意: dowhile语句的执行顺序是:先执行循环体语句,后判断循环条件表达式的值,其值为true时,继续执行循环体,否则结束循环。 在循环体中要包括改变循环条件表达式值的语句,例:输入一个整数将
11、各位数字反转后输出,#include void main() int n,m;coutn;cout“The number in reverse order is “;dom=n%10;coutm;n/=10;while (n!=0);coutendl; ,for 语句,语法形式: for(表达式1;表达式2;表达式3) 语句块 ,注意: For语句的执行顺序是:首先计算一次表达式1的值,再计算表达式2(循环控制条件)的值,当该值为true时,执行一次循环体,否则出循环,没执行一次循环体后,计算表达式3的值,然后返回计算表达式2,判断其值 表达式1、2、3都可以省略,若省略表达式2则成为死循环
12、表达式1一般用于给循环赋初值,也可以是与循环无关的其他内容 表达式3一般用于改变循环控制条件的值,若省略或为其他内容,则应在循环体内其他位置增加修改循环控制条件值,否则死循环。,输入一个整数求出它的所有因子,#include void main() int n,i;coutn;cout“number “n“ Factors: “endl;for (i=1;i=n;i+)if (n%i=0)couti“ “;coutendl; ,三种循环语句的比较(以求阶乘为例),#include void main() int n; coutn; int i=2,f=1; while(i=n) f*=i;i+
13、; cout n “! =“fendl; ,#include void main() int n; coutn; int i=2,f=1; do f*=i; i+; while (i=n); cout n “!=“fendl; ,#include void main() int n,i,f;cinn;cout“ 请输入n=“;for(i=2,f=1;i=n;i+)f*=i; coutn“的阶乘为“fendl; ,循环结构的嵌套,#include void main() int i,j;for(i=1;i=5;i+)for(j=1;j=i;j+)cout“*“;coutendl; ,例:编程输出
14、如下图案,* * * * *,例:打印一张九九表,#include void main() int i,j,n;for(i=1;i=9;i+)for(j=1;j=9;j+)n=i*j;coutn“ “;coutendl; ,循环结构与选择结构的嵌套,#include void main() int n;for (n=100;n=200;n+)if (n%3!=0)coutn“ “;coutendl; ,例:求100200之间不能被3整除的数,求100200之间不能被3整除的数,#include void main() int n;for (n=100;n=200;n+)if (n%3!=0)c
15、outn“ “;coutendl; ,例:输入一系列整数,统计出正整数的个数和负整数的个数,输入0则结束,#include void main() int i=0,j=0,n;coutn;while (n!=0)if (n0)i+;if (nn;cout“正整数个数:“i“负整数个数:“jendl; ,用以下公式计算y的值,精确到第n项绝对值10-4。,#include #include void main() float y,n,x,t;coutx; t=x;y=x;n=2;while (fabs(t)1e-4)t=t*(-x)/n; y=y+t;n+;cout“y=“yendl; ,其他控
16、制语句,Break语句 break语句出现在switch语句或循环语句的循环体中,使程序从循环体或switch语句内跳出。 continue语句。 该语句出现在循环体中,其作用是结束本次循环,接着开始判断决定是否继续执行下一次循环。 goto语句。 语法形式: goto 语句标号; 其中: “语句标号”是用来表示语句的标识符,放在语句的最前面,用冒号与语句分开。 goto 语句的作用是使程序的执行流程跳转到语句标号所指定的语句。,编程计算任意由键盘输入的十个整数中包含多少个正整数,这些正整数的和是多少? #include void main() int a,b=0, sum=0;for(int
17、 i=1;ia;if(a=0) continue; /如果a为负数或0,直接进行下一次循环b+; /正整数的个数加1sum+=a; /正整数的和加a的值cout“输入的正整数的个数为:“b“n“;cout“这些正整数之和为:“sum“n“; ,#include #include void main() int m,k,i,n=0;coutm;k=m-1;for (i=2;i=k;i+)if (m%i=0) break;if(ik+1) coutm“不是素数“endl;else coutm“是素数“endl; ,编程计算任意由键盘输入的正整数是否是素数,应用实例,1、累计和2、求阶乘3、累计阶乘
18、,用以下公式计算的近似值,精确到第n项的绝对值小于10-7。,#include void main() float i,t,f,pi;pi=1; f=1; t=1; i=2; for ( ; t=1e-7;i+)f=f*(-1); / 计算第i项的符号t=1/ (2*i-1); / 计算(2 i -1)的倒数存入变量tpi=pi+f*t; / 累计第i项的值到变量pipi=4*pi;cout“pi=“piendl; ,编程输出n行如下所示的图形 * #include void main() int x,n,i,j,k;coutn;for(x=1;x=n;x+)for(j=1;j=n-x;j+)
19、cout“ “;for(k=1;k=2*x-1;k+)cout“*“;coutendl; ,求3-100之间的全部素数#include #include void main() int m,k,i,n=0;for (m=3;m=k+1)coutm“ “;n=n+1;coutendl; ,自定义数据类型,类型定义语句-typedef 枚举类型-enum 结构体 联合体,类型定义语句-typedef,一般格式: typedef 已有类型名 新类型名表; 其中,新类型名表中可以有多个标识符,它们之间以逗号分隔。 功能: 可以为一个已有的数据类型声明多个别名。 例: typedef int zheng
20、xing; typedef float danjingfudian; zhengxing i,j;,枚举类型-enum,一般格式: enum 枚举类型名 变量值列表 ; 注意: 枚举元素按常量处理 枚举元素具有默认值,依次为:0,1,。该值也可以另行指定。 例:enum weekday sun,mon,tue,wed,thu,fri,sat;weekday s;s=sun;coutsendl;,结构体,结构体-由不同数据类型的数据组成的集合体。 一般格式: 声明结构体: struct 结构名 数据类型说明符1 成员名1;数据类型说明符2 成员名2; 数据类型说明符n 成员名n; ;声明变量:
21、结构名 结构变量名; 结构体变量的使用: 结构体变量名.成员名,例: struct student int num;char sex;int age;float score; ;student stu1;stu1.num=1050101; stu1.sex=f; stu1.age=20; stu1.score=86; coutstu1.age“ “stu1.num“ “stu1.scoreendl;,例: struct student int num;char sex;int age;float score; stu1=1050101, f,20;student stu1;stu1.score
22、=86; coutstu1.age“ “stu1.num“ “stu1.scoreendl;,联合体,联合体-可以使几个不同类型的变量共用同一组内存单元。 一般格式: 声明联合体: union 联合名 数据类型说明符1 成员名1;数据类型说明符2 成员名2; 数据类型说明符n 成员名n; ;声明变量: 联合名 联合变量名; 联合体变量的使用: 联合体变量名.成员名,习题,1、求一个数x的绝对值 2、输入三个数,实现按由大到小的顺序排列输出 3、求一元二次方程的解 4、编程实现入托幼儿按年龄分班,其中23岁入小班,45岁入中班,6岁入大班。 5、求10! 6、求从第n个自然数到100(100-n
23、)+1个自然数的累计和 7、从1开始做自然数的累加,当其累加和超过10000时,共计累计了多少数?当时的累加和是多少? 8、将1100之内的能被7整除的数输出。 9、判断某年是否为润年。 10、编写一个处理四则运算的程序(+-*/) 11、打印用数字组成的菱形图形 12、求3100之间的全部素数,13、从键盘上输入三个实数a、b、c,输出其绝对值最大者 14、编程实现从键盘上输入字符A、B、C、D、E,转换成相应数字1、2、3、4、5输出。当输入其他字符时,输出数字零。 15、变成显示2的各次幂的值,直到各次幂的值大于给定的一个整数时为止 16、打印一张九九表 17、编程统计全班学生某门课程考试成绩中“优”、“良”、“中”、“及格”、“不及格”五个分数段的人数 18、猜数游戏,