高级语言程序设计第四章循环结构程序设计–循环结构实现一——while循环–循环结构实现二——do-while循环–循环结构实现三——for循环补充字符型数据–循环结构的概念字符型数据字符型常量‘8’‘Y’‘’‘\特定字符’‘\n’换行‘’一个字符P14字符数据的表示–用ASCII码表示(P292)字符变量char变量表;如:charc,a;–字符变量占一个字节可对字符数据进行的运算字符可参与整数可参加的运算voidmain(){charc1,c2,a1,a2;c1=‘a’;a1=c1-32;a2=c2-32;}例1确定变量的值c1c297986566如:‘a’:–普通–转义8bit9707bit……c2=‘b’;a1a2同一个英文字符大小写的ASCII码相差32大写字符小写字符‘1’:490字符型数据例2写出下面程序的运行结果AAA#includeiostream.hvoidmain(){chara,b,c;a='A';b=65;c='\101';coutabc;}a65bc6565ASCII为八进制数101的字符字符的输入和输出printf和scanf函数putchar和getchar函数#includestdio.hvoidmain(){chart1;scanf(“%c”,&t1);printf(“%c\n”,t1);}程序中要包含stdio.ht1aa%c输出字符printf(“%d\n”,t1);%d输出ASCII码9797–输入–输出getchar()变量=putchar(字符)#includestdio.hvoidmain(){chart1;t1=getchar();putchar(t1);}aacin和cout专门用于字符输入/出的函数#includeiostream.hvoidmain(){chart1;cint1;coutt1;}aa举例#includestdio.hvoidmain(){charc1,c2;scanf(“%c,%c”,&c1,&c2);c1=c1-32;c2=c2-32;printf(“%c,%c\n”,c1,c2);printf(“%2d,%2d”,c1,c2);例3写运行结果c1c297986566}a,bA,B65,66#includestdio.hvoidmain(){charc1,c2;c1=getchar();c2=getchar();c1-=32;c2-=32;putchar(c1);putchar(‘,’);putchar(c2);putchar(‘\n’);}#includeiostream.hvoidmain(){charc1,c2;cinc1c2c1-=32;c2-=32;coutc1“,”c2;A,BabA,Bab}举例例4输入字符,若该字符是大写字符,就变成相应的小写字符;若该字符是小写字符,就变成相应的大写字符,其余字符保持不变输入tt‘A’&&t‘Z’t+=32真假t‘a’&&t‘z’真假t-=32输出t#includestdio.hvoidmain(){chart;t=getchar();if(t=‘A’&&t=‘Z’)t+=32;elseif(t=‘a’&&t=‘z’)t-=32;putchar(t);}举例在switch中使用字符例5读程序写运行结果4#includeiostream.hvoidmain(){intc=0,k=3;switch(65+k){default:c+=k;case'B':c++;break;case'C':c+=2;break;}coutc;}#includeiostream.hvoidmain(){intc=0,k=3;switch(68){default:c+=k;case66:c++;break;case67:c+=2;break;}coutc;}计算出表达式的值,然后和字符的ASCII码比较,等价于循环结构的概念goto语句的格式goto语句标号应用示例语句标号的命名规则与变量名相同gotokey;……key:s+=x;带标号的语句的格式语句标号:语句执行过程s+=x……循环结构的概念某段程序被有限次地执行被反复执行没有出口if语句和goto语句构成循环形式标号:if(表达式){……goto标号;}循环体执行过程……表达式为真?真假退出当表达式为真循环体gotokey;……key:s+=x;gotokey;……key:if(x0){s+=x;}if语句和goto语句构成循环形式标号:if(表达式){……goto标号;}循环体执行过程……表达式为真?真假退出当表达式为真循环体当型循环直到型循环标号:……if(表达式)goto标号;循环体执行过程……表达式为真?真假退出当表达式为真循环体while循环while循环的一般形式while(表达式)循环体while(i5){printf(“%d,”,i);i++;}表达式为真?while循环执行过程执行循环体真退出假当表达式为真时循环体例1#includestdio.hvoidmain(){inti;i=1;}i=i+1;循环前:i=1i第一次循环次数i511,第二次22,第三次33,第四次44,退出循环:i=5关注循环前、循环中、循环后控制变量的值例2编程序,计算s=1+2+3+……+100(1)如何得到1,2……100?while(i5){printf(“%d,”,i);i++;}i=1;i=1~4i=100(2)如何实现累加?s为累加和初始:s=0i=1:s+iss=s+i;i=2:i=100:……s+=i;s=0;i=1,s=0当i=100时s+=ii++输出s+=i;s+iss+is#includestdio.hvoidmain(){inti,s;i=1;s=0;while(i=100){s+=i;i++;}printf(“s=%d”,s);}11+21+2+...+100i=3:ss+i1+2+3举例do-while循环do-while循环的一般形式do循环体while(表达式);while(i5);{printf(“%d,”,i);i++;}表达式为真?do-while循环执行过程执行循环体真退出假当表达式为真循环体例1#includestdio.hvoidmain(){inti;i=1;}循环前:i=1i第一次循环次数11,第二次22,第三次33,第四次44,退出循环:i=5do例2编程序,计算s=1+2+3+……+100while(i5);{printf(“%d,”,i);i++;}i=1;doi=100(2)累加举例(1)生成1、2、3……100#includeiostream.hvoidmain(){inti=1,s=0;do{s+=i;i++;}while(i=100);cout“s=”s;}dowhile和while的区别9#includeiostream.hvoidmain(){inti=0,a=8;while(i!=0)couta;couta+1;}#includeiostream.hvoidmain(){inti=0,a=8;docouta;while(i!=0);couta+1;}8循环体一次也没有执行执行了一次循环体9for循环for循环的一般形式for(表达式1;表达式2;表达式3)循环体printf(“*”);表达式2为真?for循环执行过程计算表达式1真退出假例1#includestdio.hvoidmain(){intk;}for(k=0;k10;k++)执行循环体计算表达式3k的取值:执行循环体:0~9退出循环体:10例2计算n的阶乘。n!=123……(n-1)n递归定义:n!=(n-1)!n(n-1)!=(n-2)!(n-1)结论:已知0!,求n!p:存放阶乘i:计数过程:p的初值:0!=1i=1p*1i=2p*2i=n-1p*(n-1)i=np*n……确定np=1fori=1tonp*=i输出#includestdio.hvoidmain()scanf(“%d”,&n);p=1;for(i=1;i=n;i++)p*=i;}ppppp*=i;表达式1:i=1表达式2:i=n表达式3:i++举例{intp,n,i;printf(“%d!=%d”,n,p);1!2!(n-1)!n!进一步:计算阶乘之和1!+2!+…+n!i确定np=1fori=1tonp*=i输出#includestdio.hvoidmain(){inti,n;floatp,s;scanf(%d,&n);p=1;s=0;for(i=1;i=n;i++){p*=i;s+=p;}printf(s=%f,s);}举例p11!22!….nn!s=0s+=p求和算法和阶乘算法有机结合