c语言循环结构案例
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
例4: 从键盘输入一行字符,将其中的英文字母进行加密输出(非英文字 母不用加密)。 #include "stdio.h" main() { char c; int k; printf("input k:"); scanf("%d",&k); scanf("%c",&c); /*吃掉上次输入的回车符*/ c=getchar(); while(c!='\n') { if ((c>='a' && c<='z') | | (c>='A' && c<='Z')) { c=c+k; if (c>'z' | | (c>'Z' && c<='Z'+k)) c=c-26; } printf("%c",c); c=getchar(); }}
<<C语言程序设计基础>>
循环结构案例分析 钱新杰
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
本次课学习目标
• • • • 掌握基本算法的设计 掌握for语句的基本应用 掌握while语句的基本应用 掌握do-while语句的基本应用
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
作
业
完成书上例题上机操作
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
#include "stdio.h" main() { int n,k; double s; for (n=1; n<=10; n=n+1) { s=1.0; for (k=1; k<=n; k=k+1) s=s*k; printf("%2d!=%16.7f\n ",n,s); } }
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>> 例5: 输入‘A‟到‘Z‟中的任一个字符,输出如下 回文串。如:输入‘B‟,则输出ABA;输入‘E‟, 则输出ABCDEDCBA。 分析:该回文串可以分为两个部分 如输入为‘E‟时,分为ABCDE和DCBA 两部分 可以用两个循环语句,循环变量可以先 从‘A‟循环到‘E‟,再从‘D‟循环到‘A‟
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
• • • • • • • • break; • } • if(flag)printf("x=%d\n",x); • else printf("no answer!\n"); • }
•思考:爱因斯坦的阶梯问题。 main() 设有一阶梯,每步跨2阶,最 { 后余1阶;每步跨3阶,最后 int x,flag=0; 2阶;每步跨5阶,最后余4 for(x=100; x<=200; 余 x++) 阶;每步跨6阶,最后余5阶; if(x%4==2&&x%7==3&&x%9==5) 每步跨7阶时,正好到阶梯顶。 { flag=1; 问共有多少阶梯?
total: 14
11
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
小 结
通过本次课的经典案例分析,主要要 求同学们更深入的巩固和掌握for语句、 while语句、 do-while语句的基本应用,并 掌握基本算法的设计,为后续内容做准备。
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
main() { int n,s; for (n=1,s=0;n<=20;n=n+1) { if (n%3==0) continue;
printf("%d\t",n);
s=s+1; } printf("\ntotal:%d\n",s); }
运行结果:
1 2 4 5 7 8 10 13 14 16 17 19 20
例1: 从键盘输入各学生成绩,并对90分 以上(包括90分)的学生人数进行计数,直到输 入的成绩为负为止,最后输出成绩在90分以上的 学生人数。
计数 count=0 输入成绩 grade 当 grade≥0.0 grade≥90.0 Yes Count=count+1 输入成绩 grade 输出 count
for
do expr1 循环体 假(0) 循环体 expr2 假(0) expr 真(非 while 0) 真(非0) 真(expr 非0) 循环体 循环体 假(0)
复 习
1、简述for语句执行过程。
2、比较分析while语句和do-while语句。
expr3
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>> 例2:有一堆零件(100-200个之间),如果以4 个零件为一组进行分组,则多2个零件;如果 以7个零件为一组进行分组,则多3个零件; 如果以9个零件为一组进行分组,则多5个零 件。编程求解这堆零件总数。 提示:用穷举法求解。即零件总数x从100-200循 环试探,如果满足所有几个分组已知条件, 那么此时的x就是一个解。分组后多几个零件 这种条件可以用求余运算获得条件表达式。
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
main( ) {char c,ci; printf(“输入一个字母\n”); c=getchar( );
for(ci=„A‟,ci<=c,ci++) printf(“%c”,ci);
ci--; for( ,ci>=„A‟,ci--) printf(“%c”,ci); printf(“\n”); }
宜宾职业技术学院电气自动化技术专业
No
<<C语言程序设计基础>>
#include "stdio.h" 思考:输出全部学生总 main() { int count; 人数和学生的平均成绩? float grade; count=0; scanf("%f",&grade); while (grade>=0.0) { if (grade>=90.0) count=count+1; scanf("%f",&grade); } printf("count=%d\n",count); }
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>>
例3: 计算并输出10以内(包括10)所有自然数的阶乘值。 即计算1!,2!,3!,4!,5!,6!,7!,8!,9!,10!。
FOR
N=1Βιβλιοθήκη TO10S=1.0 FOR K=1 TO N
S=S*K 输出 S
思考:N!算法?
宜宾职业技术学院电气自动化技术专业
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>> 例6: 对除5的倍数以外的1~100的数求和。
main( )
{int i,s;
s=0; for(i=1;i<=100;i++) {if (! (i%5)) continue;
s+=i;
} }
宜宾职业技术学院电气自动化技术专业
<<C语言程序设计基础>> 例7: 统计1~50之间不能被3整除的数的个数并输 出这些数。
c语言三种循环结构
else if((P3&0x80)==0)//判断P3.7口的开关是否按上了。
P1=0xf7;//当P3.7口上的开关按上了,点亮接在P1.3口上的灯。
else P1=0xff;//当没有按键按下时,P1口上的全部灯都不亮。
}
while(1)
{
for(i=1;i<11;i++)
{
switch(i)
{
case 1: c=i*i;printf("%d\n",c);break;
case 2: c=i*i;printf("%d\n",c);break;
case 3: c=i*i;printf("%d\n",c);break;
case 4: c=i*i;printf("%d\n",c);break;
printf("%d\n",c);
else if(i==7)
printf("%d\n",c);
else if(i==8)
printf("%d\n",c);
else if(i==9)
printf("%d\n",c);
else if(i==9)
printf("%d\n",c);
}
}
}
void serial_init(void) //串口初始化函数
case 5: c=i*i;printf("%d\n",c);break;
case 6: c=i*i;printf("%d\n",c);break;
c语言while循环语句例子
c语言while循环语句例子以下是 7 条关于 C 语言 while 循环语句的例子:1. 嘿,你知道吗,就像数数一样,while 循环可厉害啦!比如我们可以用它来计算 1 到 10 的累加和呀。
int sum = 0, i = 1; while (i <= 10) {sum += i; i++;} 哇塞,是不是很直观?2. 哎呀呀,当你想一直做一件事直到某个条件不满足时,while 循环就派上用场咯!好比你在不停地吃糖果,直到糖果吃完就停止。
int candies = 10; while (candies > 0) {printf("吃了一颗糖果\n"); candies--;} 瞧见没?3. 你想想看呀,while 循环不就像是一场游戏,只要条件成立就一直玩下去吗?比如说要打印出所有的奇数。
int num = 1; while (num <= 10) {if (num % 2!= 0) printf("%d ", num); num++;} 这多有趣呀!4. 哇哦,如果把程序比作一场冒险,那 while 循环肯定是英勇的战士啦!例如计算有多少个数能被 3 整除。
int count = 0, value = 1; while (value <= 20) {if (value % 3 == 0) count++; value++;} 厉害吧?5. 嘿,你说 while 循环是不是很神奇呀,就像一个不知疲倦的工人在不停工作。
比如从 100 倒着数到 1。
int num2 = 100; while (num2 >= 1) {printf("%d ", num2); num2--;} 多有意思呀!6. 哎呀,while 循环就好像是一个固执的小孩,不达目的不罢休呢!那来用它打印出 5 次”我爱 C 语言“。
int times = 0; while (times < 5) {printf("我爱 C 语言"); times++;} 是不是很带劲?7. 讲真的,while 循环真的是编程里的好帮手呢!就像一个随时准备行动的伙伴。
C语言程序设计第3版何钦铭-颜-晖--循环结构
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结果是pi=0,因为item为0时不满足while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得while循环次数减少,必然影响到n的值。
【练习 4-2】运行例 4-2程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则while循环条件不成立,不执行循环体。
【练习4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数eps, 计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps (保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习4-4】如果将例4-3程序中的do-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10; count ++;}解答:会有影响,因为当输入数据 number 为 0时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
C语言 第五章-循环结构程序设计
执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
C语言程序设计第五次作业——循环结构(1)
C语⾔程序设计第五次作业——循环结构(1)(⼀)改错题输出华⽒摄⽒温度转换表:输⼊两个整数lower和upper,输出⼀张华⽒摄⽒温度转换表,华⽒温度的取值范围是{lower,upper},每次增加2℉。
计算公式如下:c = 5×(f-32)/9其中,c表⽰摄⽒温度,f表⽰华⽒温度。
输⼊输出样例1: Enter lower:32 Enter upper:35 fahr celsius 32 0.0 34 1.1输⼊输出样例2: Enter lower:40 Enter upper:30 fahr celsius源程序(有错误的程序)#include <stdio.h>int main(void){int fahr , lower, upper; /* fahr表⽰华⽒度 */double celsius; /* celsius表⽰摄⽒度 */printf("Enter lower:");scanf("%d",&lower);printf("Enter upper:");scanf("%d",&upper);printf("fahr celsius\n"); /* 显⽰表头 *//* 温度转换 */for (fahr = lower , fahr <= upper, fahr ++) ;celsius = 5 /9 * (fahr - 32.0);printf("%3.0f %6.1f\n", fahr, celsius);return 0;}对源程序进⾏编译,结果如下:错误信息1:错误原因:for语句后⾯加了分号。
改正⽅法:将分号去掉。
错误信息2:错误原因:for语句下没有加“{}“改正⽅法:在for语句下加上“{}”错误信息3:错误原因:发现for语句内语句⽤逗号隔开了。
C语言讲课-while循环结构课件
输入:101=0
输出:
sum=101
此程序的功能?
什么情况下两者结果相同?
二、do-while语句
5.3 for语句
语句一般格式 for (表达式1;表达式2;表达式3) 语句
功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。
?
-3
do-while语句
语句一般格式 do 语句 while (表达式); 功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。
do-while循环的算法
(
2
)直到型循环(
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?
#include <stdio.h>void main( ){ float t=0.0001; int n=0; while(t<=8844) { t=t*2; n++; } printf(“ %d\n”,n);}
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?
#include <stdio.h>void main( ){ float t=0.0001; t=t*2; printf(“ %f”,t);}
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?
学习内容
循环结构的引入
C语言提供了三种循环控制语句,构成了三种基本的循环结构:while语句构成的循环结构do-while语句构成的循环结构for语句构成的循环结构
C语言程序设计(while 循环结构)
sum+=grade; num++; scanf("%lf",&grade); } if (num) printf(“\n%d 人的平均成绩:%.1f”,num,sum/num);/*输出结果*/ else printf(“\n 平均成绩为 0!”);
int num=0; /*用 num 统计输入成绩的学生人数,以便统计学生的平均分数*/ double sum=0, grade; /*用 sum 记录成绩的累加和,初值为 0,grade 接受键盘输入的成绩*/
printf(“请依次输入学生的考试成绩,空格间隔,并以负数结束输入\n”); scanf(“%lf”,&grade);
return 0; }
注意: (1)while 语句中的表达式一般是关系表达或逻辑表达式,但原则上可以是任何合法的 表达式; (2)循环条件的选择应该避免死循环,即无法结束循环体的执行;表达式的值每次循 环后都应该有所改变,否则也会引起死循环。
假 表式?
真 语句
循环体外语句 图 3-7 while 循环结构的执行过程
【例 3-11】 从键盘输入若干名学生的成绩,计算平均分。 分析:这是一个累加求和的问题,将输入的成绩依次累加(用循环结构实现,循环条件 是成绩 grade>=0),完成累加后再将累加和除以学生的人数,算出平均分。
/*程序名:3_11.c*/ /*功能:键盘输入若干学生的成绩,计算平均成绩并输出*/ #include <stdio.h> int main() {
1.while 循环结构
while 循环结构的一般形式为: while(表达式) 语句;
C语言循环结构编程举例
C语言循环结构编程举例1. for循环for循环是最常用的循环结构之一,可以指定循环变量的初始值、终止条件和每次循环的增量。
例如,计算1到100的和可以使用for循环:```#include <stdio.h>int mainint sum = 0;for (int i=1; i<=100; i++)sum += i;}printf("1到100的和为:%d\n", sum);return 0;```2. while循环while循环是另一种常见的循环结构,它只有一个循环条件,当条件为真时,循环执行。
例如,判断一个数是否是素数可以使用while循环:```#include <stdio.h>int mainint num, i = 2;int isPrime = 1;printf("请输入一个正整数:"); scanf("%d", &num);while (i < num)if (num % i == 0)isPrime = 0;break;}i++;}if (isPrime)printf("%d是素数\n", num);}elseprintf("%d不是素数\n", num); }return 0;```3. do-while循环do-while循环是一种先执行循环体再判断条件的循环结构。
例如,计算输入数字的位数可以使用do-while循环:```#include <stdio.h>int mainint num, count = 0;printf("请输入一个正整数:");scanf("%d", &num);donum /= 10;count++;} while (num > 0);printf("该数字的位数为:%d\n", count);return 0;```4.嵌套循环循环结构可以嵌套使用,以实现更复杂的功能。
C语言 第三章 循环结构
这种循环称为嵌套循环(或多重循环),大循环 中嵌套了小循环。其中大循环(外层循环)重复 了100次,每次累加一项item,而每次累加的 item由小循环(内层循环)计算得到,内层循环 重复i次,每次连乘一项。
P68ex4-6.cpp
23
11. 嵌套循环
在累加求和的外层for语句的循环体语句中,每次计算 i!之前,都重新置item的初值为1,以保证每次计算阶 乘都从1开始连乘。 如果把程序中的嵌套循环写成下列形式: item=1; for(i=1;i<=100;i++){ for(j=1;j<=i;j++) item=item*j; sum=sum+item; } 由于将item=1放在外层循环之前,除了计算1!时item从1 开始连乘,计算其他阶乘值都是用原item值乘以新的 阶乘值。如i=1时,item=1;i=2时,item=item*1*2; i=3时,item=item*1*2*3=1!*2!*(1*2*3),而非3!, 依次类推,i=100时,item=1!*2!*3!*……100!,最 24 后得出的累加和是1!+1!*2!+……+1!*2!*3!…*100!
见文件ch3ex3.cpp
12
5. do-while语句
for语句和while语句都是在循环前先判断条件, 只有条件满足才会进入循环,如果一开始条件 就不满足,则循环一次都不执行。 do-while语句与上述两种循环语句略有不同, 它先执行循环体,后判断循环条件。所以无论 循环条件的值如何,至少会执行一次循环体。 其一般形式为。
2. 3.
4.
从键盘输入一批学生的成绩(以负数为结束标志), 计算平均分,并统计不及格成绩的个数。H
C语言循环结构程序设计
i=-i;
//然后对i取负,得到它的绝对值
}
if(i==0)
printf("%d",i);
while(i!=0)
{
r=i%10;
printf("%d",r);
i=i/10;
}
printf("\n");
}
注意:循环体的有效范围 例: i=1; while(i<=100)
putchar(‘*’); i++;
i++;
i=10,iSum=55 1+2+3+...+10=55
} while(i<=10);
printf("1+2+3+...+10= %d\n",iSum);
}
例5.7 将一个给定的整数反序输出。
#include "stdio.h"
void main()
{
int i,r;
printf("\nInput an integer:");
{
****
for(j=1;j<=i;j++)
*****
putchar('*');
putchar('\n');
}
}
例5.12 求100以内的全部素数。
void main() {
int m,n,i,prime; i=0; for(m=2;m<=100;m++) {
void main()
{
int m,n,r;
printf("please input two positive integers:");
