Categorías: Todo

por zhang di hace 8 años

720

循环结构2

循环结构2

循环结构2

break和continue语句

例:猜数字游戏,输入你所猜的整数(1~100之间),与计算机随机生成的数做比较。若相等,显示猜中,若不等,显示与被猜数的大小关系,最多猜7次。
分析: 1) 循环次数最大为7 2) 当猜中以后就跳出循环 3)为了区别通过猜中后跳出的循环和循环7次结束的循环,使用一个标志位flag来区分

#include #include #include int main(){ int computer_num; int your_num; int count = 7; //最多猜7次的计数器 int flag = 0; //猜中标志 /*生成随机数*/ srand( time(0) ); computer_num = rand() % 100 + 1; //printf("%d", rand()); while(count > 0){ printf("please enter your number:"); scanf("%d", &your_num); count --; flag = 1; if(your_num == computer_num){ printf("you Great!\n"); break; }else{ if(your_num > computer_num) printf("too big! you has %d chance\n", count); else printf("too small! you has %d chance\n", count); } } if(flag == 0){ printf("you lose!\n"); } return 0; }

例:输入一个正整数m,判断它是否为素数。
分析:素数就是只能被1和自身整除的正整数。我们可以用取余计算(%),当结果为0时说明可以整除。 例如,9%3得0,说明9可以被3整除。7%2得1,说明7不能被2整除。 所以,对于非1素数m,它的判断条件是不能被[2,m-1]整除。由于m不可能被大于m/2的数整除,所以这个区间还可以缩小到[2, m/2]

#include int main(void){ int m; int i; printf("Input m:"); scanf("%d", &m); if(m>=0){ for(i=2; i<=m/2; i++){ if(m % i == 0){ //发现可以被整除,说明不是素数,直接跳出循环 break; } } // 如果循环正常结束,中间没有跳出,那么说明是素数 if(i>m/2 && m != 1){ printf("%d is prime number\n", m); }else{ printf("%d is not prime number\n", m); } } return 0; }

#include int main(void){ int m; int flag = 0; printf("Input m:"); scanf("%d", &m); if(m>=0){ // 设置一个标志位,当flag=1时说明该数不是素数 flag = 0; for(int i=2; i<=m/2; i++){ if(m % i == 0){ flag = 1; } } // 如果循环结束标志位依然为0,那么说明是素数 if(flag == 0 && m != 1){ printf("%d is prime number\n", m); }else{ printf("%d is not prime number\n", m); } } return 0; }

continue语句的功能: 跳过循环体内continue后面的语句,继续下一个循环

continue只能在循环结构中使用

#include int main(void){ //输入10个字符,忽略1 char c; int i; for (i = 0; i < 10; i++) { c = getchar(); if ( c=='1') continue; putchar(c); } return 0; }

break语句的功能: 结束当前循环

#include int main(void){ //输入10个字符,遇到1时跳出 char c; int i; for (i = 0; i < 10; i++) { c = getchar(); if ( c=='1') break; putchar(c); } return 0; }

break除了在循环结构中使用,还能在什么情况下使用?

循环嵌套

例: 输入正整数n和a, 求a+aa+aaa= 。。。+(n个)a ,如n=2, a=3, 则结果为3+ 33 = 36
#include #include int main(){ int a, n, sum, item; printf("please enter a:"); scanf("%d", &a); printf("please enter a:"); scanf("%d", &n); sum = 0; /*先计算n个a的值,然后再计算总和*/ if(a>0 && n>0){ for(int i=0; i<=n; i++){ item = 0; /*内层循环计算n个a组成的数值*/ for(int j=0; j
嵌套循环的设计过程
4)设计完成后再回过头来看
3)详细设计内层循环
2)大致确定外层循环
1)确定是否需要多个循环
嵌套循环的执行过程
例2
例1
例:求1!+2!+...+100!
分析: 仿照求1到100之和的例子,该程序可以写成: for(int i=1; i<=100; i++){ item = i! sum = sum + item; } 但是中间的i!依然无法处理。这就需要嵌套循环解决。

求n的阶乘的例子: item = 0; for(int i=1; i<=n; i++){ item = item * i; }

#include int main(void) { int i, j; double sum; /*计算结果较大,需要用double类型*/ double item; /*item用于存放阶乘*/ sum = 0; /*初始化*/ for(i = 1; i <= 100; i++) { item = 1; /*每次求阶乘都从1开始 */ for (j = 1; j <= i; j++) /* 内层循环算出 item = i! */ item = item * j; sum = sum + item; } printf("1! + 2! + 3! + … + 100! = %e\n", sum); }

求1到100累加和的例子: sum =0; for(int i=0; i<=100; i++){ sum = sum + i; }