四章语句与程序控制结构.ppt
1,第四章 语句与程序控制结构,4.1 语句总述 4.2 顺序结构4.3 选择结构 4.4 循环结构 4.5 程序举例,2,4.2 顺序结构程序举例 3,4,6例1:输入三角形的三边长,求三角形的面积。公式:#include”math.h”main()float a,b,c,area,s;printf(”Enter a,b,c:”);scanf(”%f,%f,%f”,3,例2:将一个三位整数的各位数符分离出来,并转 换为数字字符倒序输出。main()int num;char c1,c2,c3;printf(”Enter a data(100999):”);scanf(”%d”,4,例3:定期存款一年期利率2.3%,三年期年利率3.2%,今有本金1万元,按一年期连续存三年和按三年期存入,各得多少利息?(按一年期再存时本息一并存)设:d为本金,p为利率一年期利息公式:第一年本息:d+dp=d(1+p)第一年本息:d(1+p)+d(1+p)p=d(1+p)2 三年利息:d(1+p)3d三年期利息公式:dp3,5,源程序:#include math.h#define P1 2.3/100#define P3 3.2/100main()float x1,x3,d;scanf(%f,6,4.3.1 if 语句(分支控制语句)1.if 语句的 三种形式单路分支:条件成立执行操作,不成立什么也不做;双路分支:条件成立执行A操作,不成立执行B操作;嵌套分支:条件成立执行A操作,不成立时还需要进 一步进行分支判断。,4.3 选择结构,7,第一种形式单路分支 if(表达式)语句 内嵌语句;可是一条语句、复 合语句、空语句。描述了条件 成立时要执行的操作。可是任何形式的表达式;通常是关系或 逻辑表达式。描述了分支控制条件。,8,执行流程:首先求解表达式,并对其值进行逻辑判断;非零视为真,执行内嵌语句,之后执行后续语句。若分支条件不成立,则直接执行后续语句。对应算法:,P,T F内嵌 语句,9,例:输入一个整数,为正则输出 main()int x;scanf(”%d”,10,第二种形式双路分支 if(表达式)语句1 else 语句2 其中:内嵌语句1是条件成立时所执行的操作;内嵌语句2是条件不成立时所执行的操作;执行流程:首先求解表达式,并对其值进行逻辑判断;为真,执行内嵌语句1,之后执行后续语句。若分支条件不成立,则执行内嵌语句2,之后执行后续语句。,11,对应算法:,P,T F内嵌 内嵌 语句1 语句2,可分行书写:if(表达式)语句1 else 语句2,12,例:根据x求y值 y=main()float x,y;scanf(”%f”,x x0 x2+1 x0,13,条件成立与不成立的输出格式、输出项完全一样,因而上例可化简如下:main()float x,y;scanf(”%f”,14,例:求任意三角形面积,若三边值不能构成三角形时输出表示错误的信息。#include math.h”main()float a,b,c,s,area;printf(”Enter a,b,c:”);scanf(”%f,%f,%f”,15,第三种形式阶梯if(不成立时嵌套分支)if(e1)s1 else if(e2)s2 else if(e3)s3 else if(em)sm else sn其中:ei各层的分支条件;si各层的内嵌语句;执行流程:首先计算并判断e1的值,为真执行s1,之后退出分支。e1为假则计算并判断e2的值,为真执行s2,之后退出分支。依次类推。,e1,e2,T F T F T F s1 s2 s3 s4,e3,16,例:对学生成绩分档;main()int g;printf(”Enter score:”);scanf(”%d”,80100分 A档 7079分 B档 6069分 C档 059分 D档,17,注意:分支条件的正确性 main()int g;printf(”Enter score:”);scanf(”%d”,57 65 89 D C C,18,上例:用单路分支实现main()int g;printf(”Enter score:”);scanf(”%d”,多个并列if语句,执行效率不如阶梯 if。,80100分 A档 7079分 B档 6069分 C档 059分 D档,19,2.if 的嵌套 在一个分支结构中,又完整地包含一个或多个分支结构,则构成了分支结构的嵌套。例:分支条件不成立时需要进一步分支算法表示:算法实现:if(e1)s1 else if(e2)s2 else s3,e1,e2,T F T Fs1 s2 s3,20,例:分支条件成立与不成立,均要进一步分支算法表示:算法实现:,e1 e2 e3,T FT F T Fs1 s2 s3 s4,if(e1)if(e2)s1 else s2else if(e3)s3 else s4,21,例:分支条件不成立时需要若干层进一步的分支算法表示:算法实现:,e1,e2,e3,T F T F T F s1 s2 s3 s4,if(e1)s1else if(e2)s2 else if(e3)s3 else s4,可见:阶梯if是条件不成立时的嵌套结构,22,例:编程,判定某年是否闰年闰年条件:整百的年份能被400整除;或非整百的年份能被4整除。算法表示:,输入yearyear%100=0,year%400=0,year%4=0,T F T Fleap=1 leap=0 leap=1 leap=0,leap=1,T F,T F,输出“is”输出“not”,23,程序清单:main()int year,leap;scanf(”%d”,24,例:根据 x求y值。,3x-11(0 x 10)y=2x+5(10 x 20)x(20 x 30),x0&x30T F,x10 T F,x20 T F,y=x,y=3x-11,y=2x+5,输出x无效,输出 y,输入x,输出X无效,3x-11y,x0&x30,x10,x20,2x+5y,xy,输出y,F,F,F,T,T,T,25,程序清单:main()float x,y;printf(”Enter x:”);scanf(”%f”,26,方法2:,3x-11(0 x 10)y=2x+5(10 x 20)x(20 x 30),x=30T F,输出 x无效,x10 T F,y=3x-11,y=2x+5,y=x,x20 T F,输出 y,输入 x,scanf(%f,27,if语句嵌套的注意事项:1)采用缩进格式,可清晰地表示出嵌套层次关系;2)C编译系统确定if和else的配对原则是:从最内层else开始识别,将内层else与上面最近的未曾配对的if配对;例:算法实现:if(e1)if(e1)if(e2)s1 if(e2)s1 else s2 else s2,e1 e2,T F T F s1 s2,28,if语句 示例,【例一】以下程序的作用是什么?main()char c;printf(“Input:”);scanf(“%c”,/*将小写字母转换为大写字母*/,29,if语句 示例,【例二】以下程序的执行结果是什么?main()int x=2,y=-1,z=2;if(xy)if(y0)z=0;else z+=1;printf(“%dn”,z);,/*结果是2*/,哦,原来是因为else 总是与靠近它的if配套,常见错误:if(x0);if(x=2)if(10”);y=x-1;,30,4.3.2 switch多分支选择 语句(多路开关语句)1.switch的一般形式 switch(表达式)case 常量1:s1 case 常量2:s2 case 常量n:sn default:sn+1 其中:表达式可是任何形式,但其值应为整型;内嵌语句si可是一条语句、复合或空语句;常量i可是整、字符、符号常量、常量表达式。,31,2.switch的执行流程 首先求解表达式,然后测试其值与哪个case后的常量相等,相等则从该case后的语句开始执行,直到其后的所有内嵌语句执行完毕,退出多分支结构。若表达式的值不与任何常量相等,则执行default后的语句,执行完毕退出分支。,32,switch执行流程图:switch(表达式)case c1:s1 case c2:s2 case cn:sn default:sn+1,求解表达式,c1?,c2?,cn?,sn+1,s1,sn,s2,Y,Y,Y,N,N,N,33,求解表达式,c1?,c2?,cn?,sn+1,s1,sn,s2,3.使用说明1)在switch中可以使用break语句跳出switch结构;,break,break,break,34,例:对成绩分档 main()char c1;int g;scanf(”%d”,80100分 A档7079分 B档 6069分 C档 059分 D档,break;break;break;break;break;,35,2)case后的各常量不能相同,否则编译无法通过;3)default为可选项,它提供了表达式的值与任何量 都不相同时的执行方案;若表达式的值与任何常量都不相同时什么也不需要做,则省略关键字 default;4)多个case可共用一组执行语句;例:switch(g/10)case 10:case 9:case 8:c1=A;break;case 7:c1=B;break;,36,例:设计一个简单的菜单选择程序,根据选择可实 现a与b的四则运算。#include“stdio.h”main()int a,b;char c1;clrscr();printf(”1.Addn”);printf(”2.Subtractn”);printf(”3.Multiplyn”);printf(”4.Dividen”);printf(”Enter your choice:”);c1=getchar();,37,c1=getchar();if(c1=1/*main*/,YS,38,switch语句 示例,main()char s;scanf(“%c”,输入“c”,求输出结果。,结果:6069 60 错误输入,?!,39,switch语句 示例,解决方法break语句:main()char s;scanf(“%c”,这才差不多!,break!,运行结果:6069,40,switch语句 示例,解决方法break语句:main()char s;scanf(“%c”,讨论switch(s)语句中的s实际上并非真正的条件选择,而只是一种跳转指示(与if语句不同),表示下面应该跳转到什么位置继续执行。而各case实际上只是一个跳转处的标记。当程序跳转到某个case处时,并非只执行此case行的程序组,而是从此处开始一直向下执行各条语句,直到整个switch开关体结束(“”)。如果要使每个case处相当于一种if(s)else的效果,必须在其语句组最后加上break语句。,41,switch语句 示例,main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%dn”,a,b);,说明1、每个case常量表达式的值必须互不相同,否则会出现互相矛盾的结果。2、允许多个case共用一个执行语句。,求程序运行结果。,结果:a=2,b=1。,如果x=2?,结果:a=1,b=1,如果x=3?,结果:a=1,b=1,42,4.3.3 程序举例例:从键盘输入四个整数,输出其中的最大数。main()int a,b,c,d,max;printf(”Enter a,b,c,d:”);scanf(”%d,%d,%d,%d”,43,例:找出三个整数中的最大、最小数。main()int a,b,c,max,min;printf(”Enter a,b,c:”);scanf(”%d,%d,%d”,44,例:输入三个整数,由大到小输出。main()int a,b,c;scanf(“%d,%d,%d”,输入abc,ab?,ab,bc?,ac?,ac,bc,N,N,N,Y,Y,Y,45,例:输入一个不多于5位的正整数要求:1.输出它是几位;2.输出该数;3.逆序、空格分隔输出各位数字;如输入:123,输出:3 2 1,输入a 求a的位数 分离a的各位数字 输出a、位数、逆序数字,46,main()long a;int w,p5,p4,p3,p2,p1;/*p5高位*/printf(”Enter a(1-99999):”);scanf(”%ld”,47,p2=(a-p5*10000L-p4*1000-p3*100)/10;p1=a-p5*10000L-p4*1000-p3*100-p2*10;printf(“t%ld,%dntt”,a,w);switch(w)case 5:printf(”%dbbb”,p5);/*无须break*/case 4:printf(”%dbbb”,p4);case 3:printf(”%dbbb”,p3);case 2:printf(”%dbbb”,p2);case 1:printf(”%dbbb”,p1);printf(“n”);,YS,48,另一种输出方法:switch(w)case 5:printf(”%d%d%d%d%d”,p1,p2,p3,p4,p5);break;case 4:printf(”%d%d%d%d”,p1,p2,p3,p4);break;case 3:printf(”%d%d%d”,p1,p2,p3);break;case 2:printf(”%d%d”,p1,p2);break;case 1:printf(”%d”,p1);,49,例:输入四个整数,升序排序并输出。,输入a、b、c、dT ab F ab T cd F cd T ac F ac,T bc F bc T bd F bd T cd F cd 输出a、b、c、d,ba,dc,cb,dbB次小,dc,50,4.4.1 while语句一般形式:while(表达式)语句其中:表达式表示了循环条件;形式:任何表达式。内嵌语句为循环体;形式:单条、复合、空语句。执行流程:首先求解表达式并对其值进行逻辑判断,为真执行内嵌语句;之后再次求解表达式并判断,为真再次执行内嵌语句;当表达式值为假时,退出while循环,执行后续语句。,51,循环类型:当型,先判断后执行,循环体有可能一 次也不被执行。例:求 main()int i=1,sum=0;while(i=100)sum+=i;i+;printf(”%d”,sum);,52,使用说明:1)在while的循环体中一定要有使循环趋于结束的 语句;否则将形成死循环;2)注意循环操作的范围、花括号、分号的使用;3)注意与循环有关的变量赋初值的位置及初值的 正确性;如:i=0;sum=1;是错误的。,53,例:输入一个班某门课的成绩,统计80分的人数,并计算出平均成绩,保留小数两位。main()int i,count,score,num,sum;i=1,count=sum=0;printf(”Enter number:”);scanf(”%d”,54,4.4.2 do-while语句一般形式:do 语句 while(表达式);其中:表达式表示了循环条件;形式:任何表达式。内嵌语句为循环体;形式:单条、复合、空语句。执行流程:首先执行内嵌语句,之后求解表达式并对其值进逻辑判断,为真再次执行内嵌语句,如此反复,直到表达式的值为假退出 do-while循环。,55,循环类型:直到型,先执行后判断,循环体至少执 行一次。例:求5!main()int i,fact;i=1,fact=1;do fact=fact*i;i+;while(i=5);printf(”%dn”,fact);(单步执行;监视:i、fact),YS,56,例:从键盘输入字符直到输入字符#为止,并统计 输入字母的个数。特点:循环次数事先无法确定#include”stdio.h”main()char ch;int count=0;do ch=getchar();if(ch=A,57,例:输入一个最多5位的无符号正整数,以十、二、八、十六进制形式输出。main()unsigned num,n,t;printf(”nPlease input a data(1-65535):”);scanf(”%u”,58,#include math.hmain()unsigned num,n,t;int i;printf(nPlease input a data(1-65535):);scanf(%u,59,4.4.3 for语句一般形式:for(表达式1;表达式2;表达式3)语句其中:内嵌语句为循环体;形式:单条、复合、空语句;各表达式可是任何形式的表达式;通常:表达式1用于对循环控制变量赋初值;表达式2给出循环控制条件;表达式3使循环控制变量增值。循环类型:当型,60,for语句执行流程:,求解e1,求解e3,内嵌语句,求解测试 e2,F T,整个循环过程中e1只求解一次;,内嵌语句和e3是重复执行的内容;,e2相当于是for的循环条件;,61,例:求main()int i,sum;for(sum=0,i=1;i=100;i+)sum=sum+i;printf(”1+2+3+100=%dn”,sum);1+2+3+100=5050,62,使用说明:1)for语句三个表达式的作用可理解为:for(循环变量赋初值;循环条件;循环变量增量)语句2)e1、e1、e3均为可选项,它们可分别地或同时 被省略。省略e1:for(;i=100;i+)sum=sum+i;在执行流程中跳过求解e1这一步,直接求解并判断e2;但相关变量赋初值要在for 语句之前单独实现。,63,省略e2:将不再进行循环条件测试,认为e2永为真;此时循环体中应有可结束循环的处理,否则死循环。for(i=1;i+)if(i100)break;/*控制退出循环*/sum=sum+i;省略e3:在流程中将跳过e3的求解,此时循环变量的控制可在循环体中实现。for(sum=0,i=1;i=100;)sum=sum+i;i+;,64,省略e1和 e3:将跳过e1、e3的求解。sum=0;i=1;sum=0;i=1;for(;i=100;)等价 while(i=100)sum=sum+i;sum=sum+i;i+;i+;省略e1、e2、e3:将搭建一个for循环的框架,在这个框架中便可使用break语句,达到跳过某段内容的目的。for(;)if(e)break;/*单独的if不能用break*/,65,例:for(i=10;i;i-)printf(“%d,”,i);10,9,8,7,6,5,4,3,2,1,例:for(i=0;i=10;i=i+2)printf(“%3d”,i);printf(“ni=%d”,i);0 2 4 6 8 10 i=12,66,例:for(i=1,j=6;ij;i+,j-)printf(“%d*%d=%dn”,i,j,i*j);1*6=6 2*5=10 3*4=12 例:空循环构成一个延时器 long t;for(t=0;t=83000000;+t);,67,例:计算15的阶乘 main()int i,fact;for(fact=1,i=1;i=5;i+)fact=fact*i;printf(t%d!=%dn,i,fact);1!=1(每次循环都进行输出))2!=2 3!=6 4!=24 5!=120,68,例:计算某班32位学生某门课的平均成绩,并输出 最高分、最低分。main()int i,score,max=0,min=100;float sum=0;for(i=1;imax)max=score;if(scoremin)min=score;printf(average=%-8.2fn,sum/32);printf(max=%d,min=%dn,max,min);,69,循环的嵌套 一个循环体内又包含一个完整的循环结构,称为循环的嵌套;嵌套的层次可是双重的或多重的。C四种形式的循环可以互相嵌套,但绝不能出现交叉现象。正确的循环嵌套形式:,外循环,内循环,外循环,内循环1,内循环2,三重循环,70,错误的循环交叉形式:,例:do-while嵌套 例:do-while、for混合嵌套 do do do for(e1;e2;e3)while(e1);while(e);while(e);,71,例:for循环嵌套 for(e1;e2;e3)for(b1;b2;b3),求解e1,部分语句1,部分语句2,e2?,b2?,求解b1,内循环体,求解b3,求解e3,F T,F T,72,例:求110之间任意5个整数的阶乘值 main()int i,j,n;long fact;for(i=1;i=5;i+)scanf(%d,(单步跟踪;监视i、j、n、fact),73,例:在90秒范围内模拟倒计时数字秒表秒的范围控制 i:90延时1秒(假定)的循环控制j:0 82000000 main()int i;long j;clrscr();gotoxy(40,12);/*定位到屏幕中心*/for(i=9;i=0;i-)for(j=0;j=82000000;j+);/*延时1秒*/printf(“a%db,i);,74,例:按下列形式打印乘法九九表 i:1 1*1=1 2 2*1=2 2*2=4 3 3*1=3 3*2=6 3*3=9 4 4*1=4 4*2=8 4*3=12 4*4=16 9 9*1=9 9*2=18 9*3=27 9*9=81 j 1 2 3 9被乘数i取值19;i每取一值,乘数j取值1i,75,main()int i,j,k;for(i=1;i=9;i+)for(j=1;j=i;j+)k=i*j;printf(%d*%d=%-4d,i,j,k);printf(“n”);/*加getch();每行暂停*/getch();,76,4.4.4 break语句和continue语句 循环的附加控制,将打破常规的循环机制。1.break语句一般形式:break;功能:用于跳出由while、do-while、for构成的循 环结构,或跳出switch构成的多路分支结构。用法:通常作为循环结构中if语句的内嵌语句。,77,使用说明:1)内循环中的break仅跳出内循环结构;,if(e)break;,if(e)goto l1;,l1:语句,2)被循环语句嵌套的switch中出现的break,仅跳 出switch;,switch(e)break;,78,例:计算半径为1到10的各圆面积,直到面积大于 100为止。半径的范围控制 r:110附加控制area100 main()int r;float area;for(r=1;r100)break;printf(“r=%d,area=%-7.2fn”,r,area);(单步跟踪;监视r、area),79,例:求int型量的最大累加和(1+2+3+.+?=sum,sum最大且32767)main()int i,sum=0;/*循环次数不明确*/for(i=1,sum=0;i+)/*省略了e2*/if(long)sum+i32767)break;sum=sum+i;printf(“i=%d,sum=%dn,i,sum);i=256,sum=32640,80,例:输入两个正整数m和n,求其最大公约数和最小 公倍数。算法1:(穷举法)找出m、n中的较小者 t;最大公约数肯定在t、t-1、t-2、1之间;2)测试m%i和n%i是否同时为0;除数i依次取 t、t-1、t-2 1;测试条件成立时的 i值即为最大公约数;3)最小公倍数:mn/最大公约数;,81,main()int m,n,t,i;printf(“Enter m,n:”);scanf(“%d,%d”,18,12 17,3 GCD=6,SCM=36 GCD=1,SCM=51,82,算法2:(辗转相除法)main()int a,b,m,n,r,t;printf(“Enter a,b:”);scanf(“%d,%d”,输入a、b a m,b n T F mn 求m%n r r!=0?n m r n m%n r 输出n、a*b/n,mn?,83,2.continue语句 一般形式:continue;功能:用于由while、do-while、for构成的循环中,跳过本次循环后面尚未执行的语句,提前结 束本次循环,并继续循环流程的下一步。例:for中用 continue 例:while中用continue for(e1;e2;e3)while(e1)if(e)continue;if(e)continue;,84,例:把100200之间不能被3整除的数输出;并控制 一行输出10个数据。main()int n,c=0;printf(“n”);for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d”,n);c+;printf(“%s”,c%10=0?”n”:”);,85,几种循环的比较 1.循环的控制类型 1)计数器控制 2)标记控制 例:求一个班某门课的平均成绩。计数器控制循环:scanf(“%d”,86,标记控制循环:printf(“Enter grade,-1 to end:”);scanf(“%d”,87,2.循环语句的选用1)循环次数已知且循环操作规律,选用 for方便;2)循环次数未知且循环操作没有按一定规律变化 的量,可采用while或do-while语句。,88,例:输入5个最多8位的正整数,将各数按位颠倒 输出。main()int i;long n,d;for(i=1;i=5;i+)/*循环次数确定*/printf(“Enter a data(1-99999999):”);scanf(“%ld”,89,例:键盘输入一个偶数,非偶数则要求重输。main()int n;do printf(“Enter n:”);/*循环次数不定*/scanf(“%d”,90,4.5 程序举例 例:用 公式求的近似值,直到最后一项的绝对值小于10-4为止。考虑问题:1)需循环累加,但累加项数不确定;2)有规律的量 分母n的取值:1、3、5、7 奇偶项符号s的变化:+、-、+、-3)循环条件:fabs(t)=10-4循环,t为某项值。,91,#include math.hmain()int s;float n,t,pi;n=1.0;s=1;t=1./n;pi=0;while(fabs(t)=1e-4)/*判断某项*/pi=pi+t;/*累加和*/n=n+2.0;/*改变分母*/s=-s;/*符号变反*/t=s/n;/*计算下一项*/printf(PI=%10.6fn,pi*4);getch();,92,例:求Fibonacci数列的前40个数,并按一行4个数 排列输出。1,1,2,3,5,8,13,21 考虑问题:1)属递推问题:从前一项或几项推出下一项结果;2)定义几个变量?一个:无法实现;多个:各求其值,开销大;三个:f3=f1+f2;f1=f2;f2=f3;两个:f1=f2=1;f1=f1+f2;f2=f2+f1;由前两项相加求得下一项后第一项可覆盖,即 变量的值是不断更迭的(迭代法)。,93,main()long f1,f2,i;f1=f2=1;for(i=1;i=20;i+)printf(%12ld%12ld,f1,f2);if(i%2=0)printf(n);/*每行4项*/f1=f1+f2;/*一次递推两项*/f2=f2+f1;getch();,94,例:判断m是否素数素数:除1和它本身之外再无别的约数;算法:判断m%i=0成立否?i取值:2(m-1)或:2,#include math.h main()int m,i,k;printf(tEnter m:);scanf(%d,95,例:求100 200之间的全部素数,并控制换行。算法:外循环控制m取100 200之间的奇数;,#include math.hmain()int m,i,k,c=0;printf(n);for(m=101;mk)/*ik成立表示未出现约数*/printf(%-6d,m);c+;if(c%10=0)printf(n);,96,例:用幂级数求解指数函数,项数可变。算法:对数列求和问题,关键是找出前后项之间 的递推关系:即:第i项是在前一项temp上乘x/i得出,迭代公式为:temp=temp*x/i;temp的初值:1 i:1,2,3,4,97,#include math.h main()int i,n;float x,sum,temp;sum=1.0;temp=1.0;printf(“nPlease Input n,x:”);scanf(%d,%f,20,1 输出:exp(1.00)=2.718282,98,例:用字符*打印出钻石图案分析:将上半三角、下半三角分别处理,找出行 数、空格数、星号数之间的关系;前四行:行 空格 星号 1 3 1 2 2 3 3 1 5 4 0 7 规律:i 4i i21 后三行:1 1 5 2 2 3 3 3 1 规律:i i 7i2,*,99,main()int i,j;for(i=1;i0;j-)printf(”);for(j=i*2-1;j0;j-)printf(”*”);printf(”n”);for(i=1;i0;j-)printf(”);for(j=7-i*2;j0;j-)printf(”*”);printf(”n”);,100,例:用字符*打印一个周期的sin(x)曲线及各点 的x、y值。要求:1)x轴垂直于屏幕;2)x步长为20 o;3)调用数学库函数实现y值的计算;提示:星号的显示位置与y值有关。,101,#include math.hmain()int i,j,p;double x,y;clrscr();for(i=0;i=360;i=i+20)x=3.141592/180.*i;/*角度转弧度*/y=sin(x);printf(x=%-4d y=%7.2f,i,y);p=30+y*20;/*30:位移量,20:幅度*/for(j=1;j=p;j+)/*定位*/printf();printf(*n);/*输出*字符*/,102,例:输入一个英文句子,分别统计句子中元音字母、所有字母及所有字符的个数。#include stdio.hvoid main()char c;int l1,l2,t;l1=l2=t=0;printf(Input a sentence:);while(c=getchar()!=n)printf(l1=%d,l2=%d,t=%dn,l1,l2,t);,103,while(c=getchar()!=n)/*循环次数不定*/t+;/*t:所有字符*/if(c=A,YS,104,本 章 结 束,