高级程序语言设计第3章.ppt
,本章导读 C语言是一种结构化程序设计语言,程序的结构可以分为三种基本结构类型,即顺序结构、选择结构、循环结构。各种程序都是由这三种基本结构组成。本章主要介绍了这三种流程结构的语法规则和表现形式。,返回本书目录,本章主要知识点(1)了解结构化程序设计的基本思想。l(2)掌握顺序结构的基本语句。l(3)掌握选择结构的语句和编程使用。(4)掌握循环结构的语句和编程使用。,第3章 高级语言程序设计概述,返回本章导读,3.2 选择结构程序设计,3.3 循环结构程序设计,3.1 顺序结构程序设计,第3章 高级语言程序设计概述,3.4 综合举例,返回本章目录,第3章 高级语言程序设计概述,结构化程序设计的基本思想是:任何程序都可以通过顺序结构、选择结构、循环结构表示。3.1.1 赋值语句赋值语句是程序中最基本的语句。赋值语句通常由一个赋值表达式加上分号“;”组成,其一般形式为:赋值表达式;例如:x=10/*赋值表达式,非表达式语句*/x=10;/*赋值语句*/x=y=z=5;/*连续赋值,等效于z=5;y=z;x=y;*/,返回本章目录,第3章 高级语言程序设计概述,3.1.2 基本的输入、输出语句 在使用输入输出库函数时,应在源程序的开头使用如下语句:#include 或#include stdio.h1格式输入输出(printf函数,scanf函数)(1)scanf函数scanf函数用于输入指定类型的多个数据,函数的一般形式为:scanf(“格式控制字符串”,地址列表);一定要注意,地址列表中直接给变量名将会出错,因为这是非法的参数。scanf(%d,a);/*非法的表示*/scanf(%d,/*合法的表示*/,返回本章目录,第3章 高级语言程序设计概述,【例3.1】整数的输入方法。代码如下:#include stdio.hvoid main()int a,b,c;scanf(%d%d%d,/*输出变量中的数据*/运行结果:输入:10 20 30输出:a=10,b=20,c=30,返回本章目录,第3章 高级语言程序设计概述,各种类型数据的输入方法如下:l 指定输入实数scanf(%f,输入:123456789long类型的变量a被赋值为123456789;如果变量a定义的不是正确的数据类型(如int型)则a中数据不会是正确的输入数据。,返回本章目录,第3章 高级语言程序设计概述,l 指定数据所占字符数(宽度)scanf(%3d%2d,输入:11 22 33,返回本章目录,第3章 高级语言程序设计概述,系统把11赋值给a,22被跳过,33赋值给b。l 输入字符数据scanf(%c%c%c,输入:i j k程序会把字符i赋值给变量a,空格 赋值给变量b,然后将字符j赋值给c。输入:ijk才能得到a=i,b=j,c=k的结果。也就是说,如果格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。,返回本章目录,第3章 高级语言程序设计概述,【例3.2】字符的输入方法。.代码如下:#includestdio.hvoid main()char a,b;scanf(a:%c,b:%c,运行结果:输入:a:M,b:N,返回本章目录,第3章 高级语言程序设计概述,(2)printf函数printf函数的作用是向默认的输出设备输出若干指定类型的数据,函数的一般形式为:printf(“格式控制字符串”,输出表列);【例3.3】输出字符及其ASCII码。代码如下:#include stdio.hvoid main()int x=65,y=97;printf(%d,%dn,x,y);printf(x:%c,y:%cn,x,y);运行结果:输出:65,97x:A,y:a,返回本章目录,第3章 高级语言程序设计概述,2字符的输入输出(1)getchar函数getchar函数的功能是从键盘上输入一个字符,其一般形式为:getchar();【例3.4】输入单个字符.代码如下:#include stdio.hvoid main()char c;c=getchar();/*取得用户键盘输入字符,赋给字符变量*/putchar(c);/*将字符变量中的字符输出到屏幕*/运行结果:输入:a/*输入字符a,回车确定*/输出:a/*输出字符*/,返回本章目录,第3章 高级语言程序设计概述,【例3.5】依次取回输入字符.代码如下:#include stdio.hvoid main()char c1,c2,c3;c1=getchar();/*取第一个输入字符*/c2=getchar();/*取第二个输入字符*/c3=getchar();/*取第三个输入字符*/putchar(c1);putchar(c2);putchar(c3);putchar(getchar();/*getchar函数直接作为表达式使用*/运行结果:输入:abcdefg输出:abcd,返回本章目录,第3章 高级语言程序设计概述,(2)putchar 函数putchar 函数是字符输出函数,其功能是在显示器上输出单个字符,函数带有一个参数ch,可以是字符常量或字符型变量。其一般形式为:putchar(ch);【例3.6】输出单个字符。#include stdio.h void main()char c1=H,c2=E,c3=L,c4=O;/*定义字符变量并赋值*/putchar(c1);/*输出字符变量的值*/putchar(c2);putchar(c3);putchar(c3);putchar(c4);putchar(t);/*输出Tab制表键*/putchar(87);/*输出字符W,87是其ASCII编码值*/putchar(!);/*输出字符*/putchar(n);/*输出回车换行符*/运行结果:输出:HELLOW!,返回本章目录,3.2 选择结构程序设计,3.2.1 复合语句例如:int x;x=y+z;printf(%d,x);是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“”外不能加分号。,返回本章目录,3.2 选择结构程序设计,3.2.2 关系运算符、逻辑运算符、条件运算符1关系运算符和关系表达式,返回本章目录,3.2 选择结构程序设计,【例3.7】判断关系表达式是否为真,如果为真则输出1,不假则输出0。#include stdio.hvoid main()char c1=a,c2=b;int i=10,j=20,k=30;printf(c1=%c,c2=%cn,c1,c2);/*显示变量c1和c2的值*/printf(result of c1c2 is:%dn,c1c2);/*比较两个字符变量*/printf(i=%d,j=%d,k=%dn,i,j,k);/*显示变量i、j和k的值*/printf(result of k=i+j is:%dn,k=i+j);/*比较整型数据,显示表达式k=i+j的结果*/printf(result of c1c2 is:0 i=10,j=20,k=30 result of k=i+j is:1 result of c1i is:0,返回本章目录,3.2 选择结构程序设计,2逻辑运算符和逻辑表达式,返回本章目录,3.2 选择结构程序设计,高,返回本章目录,3.2 选择结构程序设计,例如:ac等效于(!a)&(bc)a&!b|c等效于(a&(!b))|cc=a|b等效于 c=(a|b)c=!a+b等效于 c=(!a)+b),返回本章目录,3.2 选择结构程序设计,3.2.1 复合语句3条件运算符和条件表达式C语言中,条件运算符“?:”是一个唯一的三目运算符。由条件运算符和操作对象构成的条件表达式具有的一般形式为:表达式1?表达式2:表达式3,返回本章目录,3.2 选择结构程序设计,3.2.1 复合语句【例3.8】输入整数x,按下面的函数检验x的正负,并计算x的绝对值。#include stdio.hvoid main()int x,y;scanf(%d,/*计算并输出x的绝对值*/运行结果:-21 y=-1 abs(x)=21,返回本章目录,3.2 选择结构程序设计,3.2.3 选择结构的程序设计 1if语句(1)简单if形式 一般语句表示形式为:if(表达式)语句;,返回本章目录,3.2 选择结构程序设计,【例3.9】输入学生成绩,判断学生成绩是否及格,如果及格则输出“Good”。#include stdio.hvoid main()int grade;printf(Please input your grade:);/*打印提示信息,提示输入成绩*/scanf(%d,运行结果:Please input your grade:80 Good!,返回本章目录,3.2 选择结构程序设计,3.2.3 选择结构的程序设计(2)if else形式一般语句表示形式为:if(表达式)语句1;else 语句2;,返回本章目录,3.2 选择结构程序设计,【例3.10】判断两个整数的是否相等,如果相等则输出“Equal!”,否则输出“Unequal!”。#include stdio.hvoid main()int a,b;printf(Please input two integer numbers:);/*提示用户输入两个整数*/scanf(%d%d,运行结果:Please input two numbers:80 100Unequal!,返回本章目录,3.2 选择结构程序设计,(3)if else if形式一般语句表示形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else语句n;,返回本章目录,3.2 选择结构程序设计,【例3.11】比较两个数的大小。代码如下:#include stdio.hvoid main()int a,b;printf(Please input two integer numbers:);/*提示输入两个整数*/scanf(%d%d,/*如果不相等,当b小于a时*/,返回本章目录,3.2 选择结构程序设计,【例3.12】判断学生成绩的级别。#include void main()int grade;printf(Please input your grade(0-100):);/*提示用户输入一个成绩,要求在0到100范围内*/scanf(%d,/*如果grade60,显示NOT GOOD表示差*/运行结果:Please input your grade(0-100):8989 is GOOD!,返回本章目录,3.2 选择结构程序设计,(4)if 语句的嵌套if 语句还可以嵌套使用,即在if的分支语句中包括了一个或多个if 语句,例如图3-6所示的情况。,if(表达式1)if(表达式2)语句1;else 语句2;,if(表达式1)if(表达式2)语句1;else 语句2;else 语句3;,if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;else 语句4;,if(表达式1)if(表达式2)语句1;,返回本章目录,3.2 选择结构程序设计,【例3.13】比较两个数的大小。#include stdio.hvoid main()int a,b;printf(Please input two numbers:);/*提示用户输入两个数*/scanf(%d%d,/*a等于b 时*/运行结果:Please input two numbers:80 100a=100,b=80 ab,返回本章目录,3.2 选择结构程序设计,【例3.14】求三个数中的最大数。#include stdio.hvoid main()int x,y,z,max;printf(Please input three integer number:);scanf(%d%d%d,运行结果:Please input three number:11 11 33 max=33,返回本章目录,3.2 选择结构程序设计,2switch语句switch语句的一般形式如下:switch(表达式)case常量表达式C1:语句组1;case常量表达式C2:语句组2;case常量表达式Cn:语句组n;default:语句组m;,返回本章目录,3.2 选择结构程序设计,2switch语句【例3.15】输出一个星期七天中的某一天所对应的英文名称。#include stdio.hvoid main()int day;printf(“Please input a integer number between 1 and 7:”);scanf(%d,返回本章目录,3.2 选择结构程序设计,运行结果:Please input a integer number between 1 and 7:5 FridaySaturdaySundayError,返回本章目录,3.2 选择结构程序设计,【例3.16】判断用户输入字符是数字还是空格或其他符号。#include stdio.hvoid main()char c;printf(Please input a character:);scanf(%c,/*输入字符是其他字符*/,返回本章目录,3.3 循环结构程序设计,3.3.1 循环结构的程序设计C语言提供了while语句、do-while语句和for语句等来实现循环结构。1while语句while语句是当型循环控制语句。while语句的一般形式为:while(表达式)语句,返回本章目录,3.3 循环结构程序设计,【例3.17】使用while语句求5的阶乘5!。#include stdio.hvoid main()int i=1,mul=1;/*i是循环的控制变量,此处为它赋初值;mul为存放结果的变量。*/while(i=5)/*表达式为循环的条件*/mul=mul*i;/*花括号内为循环体*/i+;printf(mul=%dn,mul);运行结果:mul=120,返回本章目录,3.3 循环结构程序设计,2do-while语句do-while语句是直到型循环控制语句。do-while语句的一般形式为:do 语句while(表达式);,返回本章目录,3.3 循环结构程序设计,【例3.18】使用do-while语句求5的阶乘5!。#include stdio.hvoid main()int i=1,mul=1;/*i是循环的控制变量;mul为存放结果的变量。*/do mul=mul*i;/*花括号内为循环体*/i+;while(i=5);/*表达式为循环的条件,最后的分号;不能少*/printf(mul=%dn,mul);运行结果:mul=120,返回本章目录,3.3 循环结构程序设计,3for语句for语句是循环控制结构中使用最广泛的一类循环控制语句,它特别适合循环次数事先能确定的情况。它的一般形式为:for(表达式1;表达式2;表达式3)语句,返回本章目录,3.3 循环结构程序设计,【例3.19】使用for语句求5的阶乘5!。#include stdio.hvoid main()int i,mul=1;for(i=1;i=5;i+)mul=mul*i;/*循环体*/printf(mul=%dn,mul);运行结果:mul=120,返回本章目录,3.3 循环结构程序设计,4break与continue语句 以do-while语句为例说明break语句的作用如下:do 语句1 if(条件)break;语句2while(表达式);,返回本章目录,3.3 循环结构程序设计,【例3.20】从键盘输入一串字符,求其中小写字母的个数,当遇到回车时停止计数。#include stdio.hvoid main()char c;int i=0;do c=getchar();/*读取一个字符*/if(c=a运行结果:输入:abcdEEEF输出:i=4,返回本章目录,3.3 循环结构程序设计,(2)continue语句 do 语句1 if(条件)continue;语句2 while(表达式);,返回本章目录,3.3 循环结构程序设计,【例3.21】从键盘输入一串字符,求前10个字符中小写字母的个数。#include stdio.hvoid main()int i=0;int j=0;char c;do i+;c=getchar();/*读取一个字符*/if(c=a运行结果:输入:a00000a000a输出:j=2,返回本章目录,3.3 循环结构程序设计,5goto语句goto语句也被称为无条件转移语句,其一般形式为:goto语句标号goto语句的作用是无条件转向“语句标号”处执行。【例3.22】用if语句和goto语句构成循环,求5的阶乘5!。#include stdio.hvoid main()int i,mul=1;i=1;loop:if(i=5)/*loop为语句标号*/mul=mul*i;i+;goto loop;/*无条件转向语句标号loop*/printf(mul=%dn,mul);运行结果:输出:mul=120,返回本章目录,3.3 循环结构程序设计,3.3.2 循环结构类型的选择及转换 1几种循环语句的比较(1)四种循环(while、do-while、for、goto)可以互相替换,但应尽量少用goto。(2)while、do-while语句在while后面指定循环条件;for语句在“表达式2”中指定循环条件。(3)while、do-while在循环前指定循环的初始条件;而for循环在“表达式1”中指定循环的初始条件。(4)while、for循环先判循环条件,后执行;do-while循环先执行,后判循环条件。(5)while、do-while、for循环均可用break语句跳出循环,用continue语句提前结束本次循环体的执行。,返回本章目录,3.3 循环结构程序设计,2循环结构类型的选择一般情况下,while、do-while、for可以通用。但在实际情况中,何时选用何种语句仍然有微小的差别。(1)如果循环的次数能够事先预见,那么一般采用for语句;如果循环的次数是根据循环体的执行情况而定,那么一般采用while或do-while语句。(2)当循环体至少要被执行一次时,采用do-while语句,否则,采用while或for语句。3循环结构的相互转换在3.3.1节中分别采用while循环、do-while循环和for循环来解决5的阶乘5!的求解充分说明了一般情况下,这3类循环时可以互相转换的。,返回本章目录,3.3 循环结构程序设计,3.3.3 循环的嵌套【例3.23】利用嵌套循环求5!+4!+3!+2!+1!#include stdio.hvoid main()int i,j,b,sum=0;for(i=1;i=5;i+)/*外层循环*/for(j=1,b=1;j=i;j+)/*内层循环*/b=b*j;/*内层循环体*/sum=sum+b;printf(sum=%dn,sum);运行结果:输出:sum=153,返回本章目录,3.4 综 合 举 例,【例3.24】输入圆的半径,求圆的周长和面积。#include stdio.hvoid main()float r;printf(Please input the radius:n);scanf(%d,运行结果:Please input the radius:30 circumference=188.50 area=2827.43,返回本章目录,3.4 综 合 举 例,【例3.26】判断输入的年份是否是闰年。闰年是能被4整除但不能被100整除的年份,或可以被400整除的年份。#include stdio.hvoid main()char year,leap;printf(Please input the year:);scanf(%d,返回本章目录,3.4 综 合 举 例,【例3.27】已知某销售公司员工的底薪为500,员工每月的实际薪金为该月该员工实际销售提成加上底薪,按下面的利润提成方式,计算员工的当月薪水。销售1000元以下:没有提成销售10005000元:提成10%销售500010000元:提成15%销售1000050000元:提成20%销售50000元以上:提成25%,返回本章目录,3.4 综 合 举 例,#include stdio.h void main()float profit;double ratio;double salary=500;printf(Please input the profit:);scanf(%f,运行结果:Please input the profit:35000 The salary is 7500.00,返回本章目录,3.4 综 合 举 例,【例3.28】从键盘输入任意两个数和一个运算符(+、-、*、/),根据输入的运算符对两个数进行计算,输出结果。#include stdio.h void main()float m,n,result;/*存放两个操作数和结果的变量*/char op;/*存放运算符的变量*/int tag=0;/*运算标志,值为0表示合法运算;值为1表示非法运算*/printf(Please input two number:);scanf(%f,%f,/*乘法运算*/,返回本章目录,3.4 综 合 举 例,case/:if(!n)printf(Divisor is zero!n);tag=1;else/*除数不为0*/result=m/n;break;default:printf(Invalid operator!n);tag=1;if(!tag)printf(%.2f%c%.2f=%.2fn,m,op,n,result);运行结果:Please input two number:33.5,2 Please input the operator(+,-,*,/):*33.50*2=67.00,返回本章目录,3.4 综 合 举 例,【例3.29】编程计算a+aa+aaa+aa(n个a)的值,n和a的值由键盘输入。#include stdio.hvoid main()int i,n,a;int j;long sum=0;printf(please enter the number a!na=);scanf(%d,运行结果:输入:2 3输出:sum=246,返回本章目录,3.4 综 合 举 例,【例3.30】一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:在30天内,陌生人每天给百万富翁10万元;而在这30天,百万富翁第一天只需要给陌生人1分钱;第二天给陌生人2分钱,以后每天给百万富翁的钱是前一天的2倍,直到第30天为止。百万富翁高兴的接收了这个计划,请编写程序给出百万富翁一共付出多少,而陌生人一共付出多少?,返回本章目录,3.4 综 合 举 例,#include stdio.hvoid main()int i;long s,s1,t;/*其中变量s为陌生人每天获得的钱,变量s1为陌生人获得的钱总数,变量t为百万富翁所获得的钱总数*/s=1;s1=0;t=100000;for(i=1;i=30;i+)s1=s1+s;s=s*2;printf(s1=%ldn,s1);printf(t=%ldn,t*30);运行结果:输出:s1=1073741823 t=3000000,返回本章目录,3.4 综 合 举 例,【例3.31】编写程序求300400间的第一个3个数字之积为42,和为12的整数。#include stdio.hvoid main()int n;/*符合条件的数*/int tag=0;/*标记,用来表识找到符合条件的数*/int i,j,k;/*百位、十位和个位数值*/i=3;for(j=0;j=9;j+)/*双重嵌套搜索*/for(k=0;k=9;k+)if(i+j+k=12 运行结果:327,