Kategorier: Alle

av zhang di 8 år siden

621

循环结构2

在编程中,循环结构是编写高效代码的基础。通过使用循环,程序可以重复执行某些操作,如在猜数字游戏中,用户有最多7次机会猜测计算机随机生成的数。在这种情况下,使用break语句可以在用户猜中正确数字后立即退出循环,而continue语句则允许跳过当前迭代中的剩余代码,继续下一次循环。为了区分因猜中数字而退出循环和循环次数用尽而退出,常常使用标志位进行标识。

另一个常见的应用是判断一个正整数是否为素数。

循环结构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后面的语句,继续下一个循环
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; }