精华内容
下载资源
问答
  • 在python中,除了while循环与for循环,还有循环嵌套循环嵌套就是在一个循环体里嵌入另一个循环。以下场景便模拟了循环嵌套与跳出循环的现实场景: 在一次考试结束后,学校需要统计每位同学的考试总成绩。在这个场景...

    任务描述

    python中,除了while循环与for循环,还有循环嵌套。循环嵌套就是在一个循环体里嵌入另一个循环。以下场景便模拟了循环嵌套与跳出循环的现实场景:
    在一次考试结束后,学校需要统计每位同学的考试总成绩。在这个场景中,我们先将所有同学组成一个序列,然后遍历每位同学,在遍历到每位同学时还要遍历每个同学的每门分数,计算出总成绩,最后得出每位同学的总成绩。
    本关的任务是让读者学会使用循环嵌套。

    相关知识

    嵌套循环分为for循环嵌套和while循环嵌套。

    for循环嵌套

    for循环嵌套的基本形式为:

    for iteration_var in sequence:
        for iteration_var in sequence:
            循环语句

    例如:

    for x in range(1,10):
        for y in range(0,x):
            result = x + y
            print(result)

    while循环嵌套

    while循环嵌套的基本形式为:

    while 判断条件:
        while 判断条件:
            循环语句

    例如:

    x = 1
    y = 0
    while x < 10:
        while y < x:
            result = x + y
            print(result)
            y += 1
        x += 1
        y = 0

    如果你想了解更多运算符相关知识,请参考[美]Katie Cunningham著《Python入门经典》第三章。

    编程要求

    本关的编程任务是补全sumScore.py文件中的判断语句部分,具体要求如下:

    • 当输入学生人数后,填入在for循环遍历学生的代码
    • 当输入各科目的分数后的列表后,填入for循环遍历学生分数的代码

    测试说明

    本文的测试文件是sumScore.py,具体测试过程如下:

    1. 平台自动编译生成sumScore.exe;
    2. 平台运行sumScore.exe,并以标准输入方式提供测试输入;
    3. 平台获取sumScore.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

    以下是平台对src/step3/sumScore.py的样例测试集:
    预期输入:
    2
    23,56,78,90
    21,56,78,76,91
    预期输出:
    第0位同学的总分为:247
    第1位同学的总分为:322

    预期输入:
    3
    98,76,54
    90,54,87,4
    78,26,12,90
    预期输出:
    第0位同学的总分为:228
    第1位同学的总分为:235
    第2位同学的总分为:206

    开始你的任务吧,祝你成功!

    *我们能做的就是拼尽全力,即使迈出的步子再小,我们也比昨天要更接近自己的目标了。*

     

    参考答案

    studentnum = int(input())
    #请在此添加代码,填入for循环遍历学生人数的代码
    #********** Begin *********#
    for student in range(studentnum):
    #********** End **********#
        sum = 0
        subjectscore = []
        inputlist = input()
        for i in inputlist.split(','):
            result = i
            subjectscore.append(result)
        #请在此添加代码,填入for循环遍历学生分数的代码
        #********** Begin *********#
        for score in subjectscore:
        #********** End **********#
            score = int(score)
            sum = sum + score
        print("第%d位同学的总分为:%d" %(student,sum))
            
    

     

    展开全文
  • 10. C语言 -- 循环结构:for 语句和嵌套循环

    万次阅读 多人点赞 2018-10-19 19:18:09
    本文主要讲述 C 语言循环结构中的 for 语句,介绍了表达式的省略、逗号表达式和在表达式中定义变量这三种灵活的使用方式,举例说明了循环嵌套的使用方式。

    本博客主要内容为 “小甲鱼” 视频课程《带你学C带你飞》【第一季】 学习笔记,文章的主题内容均来自该课程,在这里仅作学习交流。在文章中可能出现一些错误或者不准确的地方,如发现请积极指出,十分感谢。
    也欢迎大家一起讨论交流,如果你觉得这篇文章对你有所帮助,记得评论、点赞哦 ~(。・∀・)ノ゙

    1. 循环的基本结构

      循环的基本结构一般如下图所示

    通常一个循环都将涉及到三个动作,初始化计数器、判断循环条件是否满足和更新计数器。但是这种方式导致我们书写一个 while 循环至少需要三个语句,为了简化可以使用 for 循环。

    2. for 语句

      for 语句的用法如下所示

    for (表达式1; 表达式2; 表达式3)
            循环体
    

    在 for 语句中三个表达式用分号隔开,其中表达式1是循环初始化表达式(对应上面的 “初始化计数器”),表达式2是循环条件表达式(对应上面的 “循环条件”),表达式3是循环调整表达式(对应上面的 “更新计数器”)。

      这样一来,for 语句将初始化计数器、循环条件判断、更新计数器三个动作组织到了在一起,那么以后如果要修改循环的次数,每次递进的跨度,或者循环结束条件,只需要在 for 语句后边的小括号内统一修改即可。

    3. 灵活的 for 语句

    3.1 表达式的省略

      for 语句的表达式1,表达式2和表达式3都可以按照需要进行省略,但分号不能省,其中可以是包括但不限以下的任何一种形式

    for ( ; 表达式2; 表达式3)
    for (表达式1; 表达式2; )
    for (表达式1; ; )
    for ( ; ; )
    

    其中需要注意的是最后一个表达式,他实际上代表的是一个死循环。在程序中有死循环的存在并不代表着程序一定出现了错误,因为有的情境下需要死循环,如一个服务不停地向用户发送一个请求之类的。

    3.1.1 举例说明

      下面是一个 for 语句使用的示例说明,通过 for 循环将一句话打印十遍。

    #include <stdio.h>
    
    int main()
    {
            int count;
            for (count = 0; count < 10; count ++)
            {
                    printf ("a line ~~~\n");
            }
            return 0;
    }
    

      下面考虑上面所说的出现省略的情况,如下是省略表达式 1 的情况

    #include <stdio.h>
    
    int main()
    {
            int count = 0;
            for (; count < 10; count ++)
            {
                    printf ("a line ~~~\n");
            }
            return 0;
    }
    

    在上面的代码中,因为初始化的过程已经在之前的部分完成,所以可以在 for 语句简化这部分;当让我们还可以省略 count ++ ,将其放在循环体中,但是这种代码与 while 循环的差别也就不打了。所以除非有较为特殊的需求,否则过多的省略 for 语句,一方面使得程序较为难懂,另外也有可能降低程序的效率。

    3.1.2 判断一个数字是否为素数

      素数指在大于 1 的自然数中,除了 1 和此数自身外,无法被其他自然数整除的数。关于素数的求法有很多,这里我们用比较朴素暴力的方式:迭代测试从2到num/2所有整数是否能被整除(num为待测试的整数),如果没有出现能被整除的整数,那么它就是素数。

      具体代码如下所示

    #include <stdio.h>
    
    int main()
    {
            int input_num, i;
            int flag = 0;
    
            printf("%s: ", "input a number");
            scanf("%d", &input_num);
    
            for (i = 2;i <= input_num/2; i++)
            {
                    if (input_num%i == 0)
                    {
                            flag = 1;
                    }
            }
            if (flag == 1)
            {
                    printf("It is a prime number\n");
            }
            else{
                    printf("It is not a prime number\n");
            }
            return 0;
    }
    

    执行上面的程序可以根据输入判断其是否为一个素数,这种判断方式较为麻烦,只是对本节课 for 循环的一个联系,在后面会介绍更为简单的方法。

    3.2 逗号表达式

      表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即用逗号分隔多个表达式,如下所示

    #include <stdio.h>
    
    int main()
    {
            int i,  j;
            for ( i=0,  j=10; i < j; i++, j--)
            {
                    printf("%d\n", i);
            }
    
            return 0;
    }
    

    在表达式 1 中,同时对 i j 两个变量进行初始化,同样的,在表达式 3 中同时对两个变量的值进行调整。

    3.3 在表达式 1 中定义变量

      在 C99 的新标准中允许在 for 语句的表达式 1 中定义变量,如下所示

    #include <stdio.h>
    
    int main()
    {
            for (int i=0, int j=10; i < j; i++, j--)
            {
                    printf("%d\n", i);
            }
    
            return 0;
    }
    

    使用 gcc 进行编译的时候需要加上 –std=c99,否则可能会出错。因此在编译的时候在终端中输入

    gcc –std=c99 test.c && ./a.out
    

    其中的 test.c 为上述代码所对应的 C 文件。

      增加这个新特性的原因主要是考虑到循环通常需要一个计数器,而这个计数器出了循环就没什么用了。所以在表达式1的位置定义的变量,活动范围仅限于循环中,出了循环,它就无效了。这个从原理上涉及到变量的生命周期,具体的将会在后面的函数的部分讲述。

    4. 循环嵌套

      循环结构跟分支结构一样,都可以实现嵌套。对于嵌套的循环结构,执行顺序是从内到外:先执行内层循环,再执行外层循环。

    4.1 举例说明

      在下面的双层循环中,我们打印出变量 i j 来看看是否先执行内层循环,再执行外层循环。

    #include <stdio.h>
    
    int main()
    {
    	int i, j;
    
    	for (i = 0; i < 3; i++)
    	{
    		for (j = 0; j < 3; j++)
    		{
    			printf("i = %d, j = %d\n", i, j);
    		}
    	}
    
    	return 0;
    }
    

    执行这个程序的结果可以看到
    在这里插入图片描述
    很明显是先执行内层循环,在执行外层循环。

    4.2 打印九九乘法表

      在这里我们将联系打印输出如下的一个九九乘法表
    在这里插入图片描述

    这个是一个很经典的 C 语言入门编程题,可以通过刚刚所讲的循环嵌套来实现,如果将每个表达式看成 i * j,那么第一行是 i = 1,j <= i,第二行是i = 2,j <= i,……所以可以得到如下所示代码

    #include <stdio.h>
    
    int main()
    {
            for (int i = 1; i < 9; i++)
            {
                    for (int j = 1; j <= i; j++)
                    {
                            printf("%d*%d=%-4d", i, j,i*j);
                    }
                    printf("\n");
            }
    
            return 0;
    }
    

      其中有两点需要注意,首先是 %-4d,这里的 - 表示左对齐,因为默认是右对齐,里面的 4 表示占 4 个字符;其次是在每一次循环结束之后会打印一个回车符号以换行。执行后的结果如下所示
    在这里插入图片描述

    参考

    [1] “小甲鱼” 视频课程《带你学C带你飞》【第一季】P14

    欢迎大家关注我的知乎号(左侧)和经常投稿的微信公众号(右侧)
    在这里插入图片描述

    展开全文
  • 简单的循环嵌套题目

    千次阅读 2006-06-29 17:34:00
    题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之... 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有

     题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
    15=1+2+3+4+5
    15=4+5+6
    15=7+8
    请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE”。
    例如,对于15,其输出结果是:
    1 2 3 4 5
    4 5 6
    7 8
    对于16,其输出结果是:
    NONE

    #include "stdafx.h"

    int _tmain(int argc, _TCHAR* argv[])
    {
        try
        {
            int total = atol(argv[1]);
            if(total <= 0)
            {
               printf("NONE");
               return 0;
           }

           int n = 1, n1, n2, sum,bk = 1;
      
          //循环1: 从种子数n 开始执行循环2, n为循环因子,初始值为1, n取值范围最大不超过total
          while(n < total)
          {
                //循环2: 从种子数n1 开始执行SUM(m)运算,n1为循环因子,初始值为n, n1,m取值范围最大不超过total,
               //通过条件语句SUM(m)== total,执行循环3

              n1 = n;
              sum = 0;
              while(n1 < total)
              {
                     if((sum += n1)== total)
                     {
                         //循环3:从种子数n2 开始执行打印操作,n2为循环因子,初始值为n, n2的取值范围最大不超过n1
                         n2 = n;
                         while(n2 <= n1)
                         {
                            printf("%d ",n2);
                            n2++;
                         }

                         printf("/n");
                         bk = 0;
                    }
                    n1++;
             }
             n++;
        }

         if(bk) printf("NONE");
     }
     catch(...) {}
     return 0;
    }

    展开全文
  • 第 5 章 循环结构程序设计 练习题 单项选择题 1语句 while !e; 中的条件 !e 等价于 A A. e==0 B. e!=1 C. e!=0 D. ~e 2下面有关 for 循环的正确描述是 D A. for 循环只能用于循环次数已经确定的情况 B. for 循环是先...
  • 循环控制结构

    千次阅读 2014-07-16 19:07:42
    第六章 循环控制结构 1.循环:包括计数控制的循环和条件控制的循环 2.结构化程序设计的三种基本结构:顺序结构、选择结构循环结构 3.循环结构的类型:  1)当型循环结构:for语句(适合循环次数已知,计数控制...

                          第六章  循环控制结构

    1.循环:包括计数控制的循环和条件控制的循环

    2.结构化程序设计的三种基本结构:顺序结构、选择结构、循环结构

    3.循环结构的类型:

       1)当型循环结构:for语句(适合循环次数已知,计数控制的循环)

       2)直到型循环结构:while语句、do-while语句(适合循环次数未知,条件控制的循环)

    4.while语句

       1)一般形式为:

    while(循环控制表达式)

    {               |

    语句系列    |循环体

    }               |

       2)循环控制表达式在执行循环体之前测试

       3)执行过程:

         计算循环控制表达式的值

     如果循环控制表达式的值为真,那么执行循环体中的语句,并返回步骤1

     如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句

    5.do-while语句

       1)一般形式为:

    do

    {               |

    语句系列    |循环体

    }while(循环控制表达式);              

       2)循环控制表达式在执行循环体之后测试

       3)执行过程:

         执行循环体中的语句

         计算循环控制表达式的值

     如果循环控制表达式的值为真,那么返回步骤1

     如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句

    6.for语句

       1)一般形式为:

    for(初始化表达式;循环控制表达式;增值表达式)

    {               |

    语句系列    |循环体

    }               |

       2) 在每次循环体被执行之前,都要对循环控制条件测试一次,每次循环体执行完以后都要执行一次增值表达式

       3)初始化表达式作用:循环变量初始化,即赋初值

       4)循环控制表达式:是控制继续执行的条件,当表达式的值为非0时重复执行循环

       5)增值表达式作用:每执行一次循环,循环控制变量增值

       6for语句三个表达式之间用分号分隔,有且只能有两个分号

       7)循环控制表达式若省略,表示循环条件为永真

       8)初始化表达式和增值表达式都可省略,但是必须有其他语句反应其作用

    7.例:从键盘输入n,然后计算输出1+2+3+……n的值

      1while语句编程实现

    #include<stdio.h>

    void main()

    {

    int i=1,n,sum=0;//sum一定要初始化,不然会是随机值

    printf("Enter n:");

    scanf("%d",&n);

    while(i<=n)

    {

    sum+=i;

    i++;

    }

    printf("1+2+3+……+%d=%d\n",n,sum);

    }

      2do-while语句编程实现

    #include<stdio.h>

    void main()

    {

    int i=0,n,sum=0;

    printf("Enter n:");

    scanf("%d",&n);

    do

    {

    sum+=i;

    i++;

    }while(i<=n);

    printf("1+2+3+……+%d=%d\n",n,sum);

    }

      3for语句编程实现

    #include<stdio.h>

    void main()

    {

    int i=1,n,sum=0;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

    sum+=i;

    }

    printf("1+2+3+……+%d=%d\n",n,sum);

    }

    8.逗号运算符

      1)所有运算符中优先级最低,左结合

      2)作用:可实现对各个表达式的顺序求值

      3)结果:将最后一个表达式的值作为整个逗号表达式的值

      4)例:从键盘输入n,然后计算输出1+2+3+……n的值

    #include<stdio.h>

    void main()

    {

    int i,j,n,sum=0;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1,j=n;i<=j;i++,j--)

    {

    sum+=i+j;

    }

    printf("1+2+3+……+%d=%d\n",n,sum);

    }

    9.空语句

      1)仅由一个分号构成的语句

      2)作用:什么也不做,只起延时作用

      3)例:for(i=1;i<50000000;i++)

    {   

    ;                           

    }

    for(i=1;i<50000000;i++)

    {

        

    }

    for(i=1;i<50000000;i++)

     

    for(i=1;i<=n;i++);

    {

    sum+=i;

    }

    等价于

    for(i=1;i<=n;i++)

    {

    ;

    }

    sum+=i;

       4) 例:从键盘输入n,然后计算输出1+2+3+……n的值

    #include<stdio.h>

    void main()

    {

    int i,j,n,sum=0;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1,j=n;i<=j;i++,j--);

    {

    sum+=i+j;

    }

    printf("1+2+3+……+%d=%d\n",n,sum);

    }//输出结果:101

    10.死循环

       1while语句行末加分号将导致死循环

       2)例:i=1;

     

             while(i<=n);//行末加分号导致死循环

     {           

     sum+=i;

     i++;

     }

      相当于

     i=1;

         while(i<=n)//当输入大于1n值,循环体中没有语句可以改变控制变量i

     {          //使得循环条件为永真,导致死循环

     ;

     }

     sum+=i;

     i++;

    11.while语句和do-while语句的区别

       1while先判断后执行,有可能一次都不执行,do-while先执行后判断,至少执行一次

       2)例:n=101;                       n=101;

              while(n<100)                 do

      {                            {

      printf("n=%d\n",n);          printf("n=%d\n",n);

      n++;                         n++;

      }                             }while(n<100);

          //循环一次也不执行           //结果:输出n=101,循环执行一次

       3)例:分别用whiledo-while语句编程,输入一组数据,然后显示每次输入数据进行累加运算的结果,输入0结束

    do-while语句实现:

    #include<stdio.h>

    void main()

    {

    int num,sum=0;

    do{

    printf("Enter num:");

    scanf("%d",&num);

    sum+=num;

    printf("sum=%d\n",sum);

    }while(num!=0);

    }

    while语句实现

    #include<stdio.h>

    void main()

    {

    int num=1,sum=0;//num赋任意非0值都可以

    while(num!=0)

    {

    printf("Enter num:");

    scanf("%d",&num);

    sum+=num;

    printf("sum=%d\n",sum);

    }

    }

    12.计数控制的循环:循环次数事先已知的循环

      1)例1:编写一个程序,从键盘输入n,计算输出n!

    #include<stdio.h>

    void main()

    {

    int i,n,sum=1;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

    sum*=i;

    }

    printf("%d!=%ld\n",n,sum);

    }

      2)例2:编写一个程序,从键盘输入n,计算输出1!,2!……n!

    #include<stdio.h>

    void main()

    {

    int i,n,sum=1;

    printf("Enter n:");

    scanf("%d",&n)

    for(i=1;i<=n;i++)

    {

    sum*=i;

    printf("%2d!=%ld\n",i,sum);

    }

    }

      3)例:键盘输入n,编程计算1!+2!+3!+……+n!

    #include<stdio.h>

    void main()

    {

    int term=1,sum=0,i,n;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

    term*=i;

    sum+=term;

    }

    printf("1!+2!+3!+……+%d!=%ld\n",n,sum);

    }

    13.条件控制的循环:循环次数事先未知,由条件控制

      1)例1:输入两个整型数,计算并输出两个整型数的最大值,如若输入非法字符,提示错误并重新输入

     //解释:非法字符,需要输入数字时,字符相对它来说就是非法字符,而需要输入字符型,数字对它不是非法字符,所有都是合法

    #include<stdio.h>

    void main()

    {

    int a,b,max,ret;

    printf("Enter a,b:");

    ret=scanf("%d %d",&a,&b);

    while(ret!=2)//判断数据个数或格式是否错误

    {

    while(getchar()!='\n');//清除缓冲区中的错误数据

    printf("Enter a,b:");

    ret=scanf("%d %d",&a,&b);

    }

    max=a>b?a:b;

    printf("max=%d\n",max);

    }

    //注意:scanf()函数不做参数类型匹配检查,当输入1 3.2时,scanf返回2,不会导致重新输入

    但是,此后的小数点仍留在缓冲区,如果此后还需输入内容,就要先清除缓冲区内容

      2)例2:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!结束

    游戏,否则提示Wrong!,并告诉人是大是小,直到猜对为止,记录人猜的次数,反应猜数的水平

    #include<stdio.h>

    #include<stdlib.h>

    void main()

    {

    int magic;

    int guess;

    int counter=0;

    magic=rand()%100+1;

    do{

    printf("Please guess a magic number:");

    scanf("%d",&guess);

    counter++;

    if(guess>magic)

    {

    printf("Wrong!Too big!\n");

    }

    else if(guess<magic)

    {

    printf("Wrong!Too small!\n");

    }

    else{

    printf("Right!\n");

    }

    }while(guess!=magic);

    printf("counter=%d\n",counter);

    }

    14.随机数的使用

       a.随机数的产生:  rand()

     

       1) 符号常量RAND_MAX在头文件#include<stdlib.h>中定义,标准C规定RAND_MAX不大于双字节整数的最大值32767

       2)随机函数rand()产生的是一个在0~RAND_MAX之间的整数,[0,32767]之间的整数

       3) 利用求余运算rand()%b可将函数rand()生成的随机数变化到[0,b-1]

       4) 利用rand()%b+a可将随机数的取值范围平移到[a,a+b-1]

     

       b.随机数的产生:  srand(time(NULL))

     

       1)用rand()直接产生的随机数只是一个伪随机数,反复调用产生的随机数序列是一样的,而且每次都只用第一个

       2)随机化:使程序每次运行时产生不同的随机数序列的过程

       3)随机化的实现:通过调用标准库函数srand()为函数rand()设置随机数种子来实现

       4)随机数种子的设置:

        法1:每次通过用户输入来完成随机化,srand(1),srand(2),srand(seed),输入seed

        法2:的通过函数time()读取计算机的时钟值,并把该值设置为随机数种子srand(time(NULL))

       5)函数time()返回以秒计算的当前时间值,即一个代表时间的字符串,使用NULL作为time()的参数时,

         time(NULL)的返回值被转换成一个无符号整数,可作为随机数发生器的种子

       6)使用time()函数时,必须在程序开头将头文件<time.h>包含到程序中

     

    15.例:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!结束

       游戏,否则提示Wrong!,并告诉人是大是小,直到猜对为止,记录人猜的次数,反应猜数的水平

    #include<stdio.h>

    #include<stdlib.h>

    #include<time.h>

    void main()

    {

    int magic;

    int guess;

    int counter=0;

    srand(time(NULL));

    magic=rand()%100+1;

    do{

    printf("Please guess a magic number:");

    scanf("%d",&guess);

    counter++;

    if(guess>magic)

    {

    printf("Wrong!Too big!\n");

    }

    else if(guess<magic)

    {

    printf("Wrong!Too small!\n");

    }

    else{

    printf("Right!\n");

    }

    }while(guess!=magic);

    printf("counter=%d\n",counter);

    }

    16.例:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!屏幕输出多少次成功,

    结束游戏,否则提示Wrong!,并告诉人是大是小,最多猜10次,超过就结束,要避免非法字符的输入

    #include<stdio.h>

    #include<stdlib.h>

    #include<time.h>

    void main()

    {

    int magic;

    int guess;

    int counter=0;

    int ret;//保存scanf()函数的返回值

    srand(time(NULL));

    magic=rand()%100+1;

    do{

    printf("Please guess a magic number:");

    ret=scanf("%d",&guess);

    while(ret!=1)//若存在输入错误,则重新输入

    {

    while(getchar()!='\n');//清楚缓冲区中的内容

    printf("Please guess a magic number:");

    ret=scanf("%d",&guess);

    }          //若存在非法字符,则重新输入

    counter++;

    if(guess>magic)

    {

    printf("Wrong!Too big!\n");

    }

    else if(guess<magic)

    {

    printf("Wrong!Too small!\n");

    }

    else{

    printf("Right!\n");

    }

    }while(guess!=magic&&counter<10);

    printf("counter=%d\n",counter);

    }

     

    延伸拓展:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!屏幕输出多少次成功,

    结束游戏,否则提示Wrong!,并告诉人是大是小,最多猜10次,超过就继续猜下一个数,每次运行程序,可

    反复猜多个数,直到操作者想停时结束,要注意避免非法字符输入的问题

    #include<stdio.h>

    #include<stdlib.h>

    #include<time.h>

    void main()

    {

    int magic;

    int guess;

    int counter;

    char reply;//保存用户输入的答案

    int ret;//保存scanf()函数的返回值

    srand(time(NULL));

    do{

    magic=rand()%100+1;

    counter=0;

    do{

    printf("Please guess a magic number:");

    ret=scanf("%d",&guess);

    while(ret!=1)//若存在输入错误,则重新输入

    {

    while(getchar()!='\n');//清楚缓冲区中的内容

    printf("Please guess a magic number:");

    ret=scanf("%d",&guess);

    }     //若存在非法字符,则重新输入

    counter++;

    if(guess>magic)

    {

    printf("Wrong!Too big!\n");

    }

    else if(guess<magic)

    {

    printf("Wrong!Too small!\n");

    }

    else{

    printf("Right!\n");

    }

    }while(guess!=magic&&counter<10);

    printf("counter=%d\n",counter);

    printf("Do you want to continue(Y/N or y/n)?");

    scanf(" %c",&reply);//%c前有一个空格,读取缓冲区中的回车符

    }while(reply=='Y'||reply=='y');

    }

     

    17.设计一个简单计算器,允许连续做多次算术运算

    #include<stdio.h>

    #include<math.h>

    void main()

    {

    float data1,data2;

    char op;

    char reply;

    do{

    printf("Please enter your expression:\n");

    scanf("%f %c%f",&data1,&op,&data2);//加空格可在操作数和运算符之间加任意多个空白符

    switch(op)

    {

    case '+':

    printf("%f+%f=%f\n",data1,data2,data1+data2);

    break;

    case '-':

    printf("%f-%f=%f\n",data1,data2,data1-data2);

    break;

    case '*':

    case 'X':

    case 'x':

    printf("%f*%f=%f\n",data1,data2,data1*data2);

    break;

    case '/':

    if(fabs(data2)<=1e-7)

    {

    printf("Division by zero!\n");

    }

    else{

    printf("%f/%f=%f\n",data1,data2,data1/data2);

    }

    break;

    default:

    printf("Invalid operator!\n");

    }

    printf("Do you want to continue(Y/y or N/n)?");

    scanf(" %c",&reply);//加空格清除缓冲区中的回车符

    }

    while(reply=='Y'||reply=='y');

    }

    18.嵌套循环

           一个循环语句放在另一个循环语句中构成的循环称为嵌套循环

      1) 嵌套循环的总循环次数等于外层循环次数和内层循环次数的乘积

      2)为避免造成混乱,嵌套循环的内层和外层的循环控制变量不要同名

      3)例:键盘输入n,编程计算1!+2!+3!+……+n!

    #include<stdio.h>

    void main()

    {

    int term,sum=0,i,j,n;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

    term=1;

    for(j=1;j<=i;j++)

    {

    term*=j;

    }

    sum+=term;

    }

    printf("1!+2!+3!+……+%d!=%ld\n",n,sum);

    }

    19累加求和构成规律:

       1)当累加项较为复杂或者前后项之间无关时,需要单独计算每个累加项 

       2)当累加项前项与后项之间有关时,根据前项计算后项

    #include<stdio.h>

    void main()

    {

    int i,n;

    long term=1,sum=0;

    printf("Enter n:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

    term=term*i;

    sum=sum+term;

    }

    printf("1!+2!+3!+……%d=%ld\n",n,sum);

    }

    20.goto语句

      1)功能:使程序无条件跳转到语句标号所标识的语句去执行,所跳过的语句不再执行

      2)一般形式:

       ①向前跳转              ②向后跳转

              goto 语句标号;     语句标号:……()

          ……                        ……

      语句标号:…… ()                     goto 语句标号;

      3)应用:通常情况,goto语句与if语句联合使用

                if(表达式) goto语句标号;    语句标号:……

            ……                              ……

       语句标号:……                                 if(表达式) goto语句标号

    21.break语句

      1)功能:①用于退出switch结构

               ②用于退出由while,do-whilefor语句构成的循环体

      2)原理:当执行循环体遇到break语句时,循环体将立即终止,从循环语句后的第一条语句开始继续执行

      3)应用:break语句通常与if联合使用,表明在任何条件下跳转到紧接循环语句后的第一条语句

    22.continue语句

      1)功能:跳过continue后面尚未执行的语句,开始下一次循环,只结束本次循环,不终止整个循环

      2)例题:

    #include<stdio.h>

    void main()

    {

    int i,n;

    for(i=1;i<=5;i++)

    {

    printf("Please enter n:");

    scanf("%d",&n);

    if(n<0) continue;

    printf("n=%d\n",n);

    }

    printf("Program is over!\n");

    }

    23.函数exit()

      1) 标准库函数exit()用于控制程序的流程,调用时,需要加头文件<stdlib.h>

      2)一般形式:exit(code);

      3)功能:终止整个程序的执行,强制返回操作系统,并将int型参数code的值传给调用进程

      (一般为操作系统),code的值为0或宏常量EXIT_FAILURE,表示程序出现某种错误后退出

    24.goto,break,continue,exit()的比较

      1goto,break,continue,exit()都用于控制程序的流程,前三个是流程控制语言,exit()C标准函数

      1)功能:goto语句可以向任意方向跳转,break语句只限定流程跳转到循环语句之后

         的第一条语句,continue语句结束本次循环,exit()直接终止所有程序

      2break,goto语句和exit()函数都可用于终止整个循环的执行,continue不能终止整个循环

      3)在嵌套循环下,break语句和continue语句只对包含他们的最内层循环语句起作用,

         不能用break语句跳出多重循环,只能一层一层的跳出

      4)使用goto语句的两种特定情形:

         ①快速跳出多重循环

         ②跳向共同的出口位置,进行退出前的错误处理工作

    25.例题:韩信点兵:x%5==1&&x%6==5&&x%7==4&&x%11==10

    ①穷举法(循环条件自定义,不具实际意义)

    break退出循环(循环条件省略,满足条件结束循环)

    exit(0)结束程序(循环条件省略,满足条件结束整个程序)

    ④使用标志变量(循环条件为标识变量为0,最佳方法)

    #include<stdio.h>

    void main()

    {

    int x;

    int find=0;

    for(x=1;!find;x++)

    {

    if(x%5==1&&x%6==5&&x%7==4&&x%11==10)

    {

    printf("x=%d\n",x);

    find=1;

    }

    }

    }

    26.类型溢出

      1)原因:当运算的结果超出了类型所能表示的数的上界,导致进位到达了最前面的符号

               位或者更多进位的丢失,就会发生类型溢出

      2)解决办法:采用取值范围更大的数据类型来定义变量

    27.结构化程序设计的基本思想

      1)采用顺序、选择和循环三种基本结构作为程序设计的基本单元,语法结构具有4个特性

         ①只有一个入口

         ②只有一个出口

         ③无不可达语句,即不存在永远执行不到的语句

         ④无死循环,即不存在永远都执行不完的循环

      2)尽量避免使用goto语句,因为它破坏了结构化设计风格,并且容易带来错误的隐患

      3)采用自顶向下、逐步求精的模块化程序设计方法进行结构化程序设计

     

       

     

     

     

     

    展开全文
  • PAGE PAGE1 2015-2016(2)循环结构练习题 一单选题 共40题,共100分 1. 以下正确的描述是 2分 A.continue语句的作用是结束整个...从多层循环嵌套中退出时只能使用goto语句 标准答案B 考生答案 2. 下面的关键字中不能够从
  • C语言循环结构

    万次阅读 多人点赞 2018-11-28 23:21:45
    循环结构 一,知识点  1 for循环:  for (循环控制变量初始化; 循环终止条件; 循环控制变量增量)  {  循环体  }  循环执行步骤:第一,先进行循环控制变量初始化;  第二,执行循环终止条件,如果...
  • 文章目录Java流程控制一、用户交互Scanner二、顺序结构三、选择结构if单选择结构if双选择结构if多选择结构嵌套的if结构switch多选择结构四、循环结构while循环do...while循环for循环五、break & continue Java...
  • 循环语句分为while循环、for循环、循环嵌套和迭代器。循环语句中有一个语句break,通过这个语句可以跳出整个循环。以下场景便模拟了循环结构与跳出循环的现实场景: 在一个工厂的流水线上每天需要加工零件100件,且每...
  • 循环结构知识总结与感受

    千次阅读 2018-12-09 10:12:44
    @[循环结构总结与感受toc] 循环语句 一.for,while,do-while语句的内容介绍,特点与应用。 二.程序设计容易出错的误区。 三.学习感受总结。 一: ①(●—●)for语句 格式: for(控制变量初始化表达式;条件表达式;增量...
  • 三大流程:顺序结构、选择结构循环结构 1、顺序结构 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。 2、选择结构 程序按照某个条件执行(出口只有...
  • 实用标准文案 C 语言程序设计实验报告 实验二 循环结构程序设计 一实验目的 (1) 掌握用 while 语句 do-while 语句和 for 语句实现循环的方法 (2) 掌握循环结构嵌套 (3) 掌握 break 语句和 continue 语句的使用方法...
  • 三目运算嵌套求三个数最大值及顺序选择结构 1.用三目运算符嵌套实现三个数求最大值:a&gt;b?(a&gt;c?a:c):(b&gt;c?b:c) 2.用户输入一个年份,判断是否为闰年,年份必须是四位以内的。 分析:用户输入...
  • 1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是____选择结构【分析】能用1个条件,控制某个操作做或不...【答案】多分支2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。
  • 本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧?
  • 数据结构基础概念篇

    万次阅读 多人点赞 2017-11-14 13:44:24
    数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。数据:所有能被输入到计算机中,且能被计算机处理的...
  • 循环的java源码压缩| | | | | | | EDI ...事务中的段循环结构 版本意识; 例如,4010 与 5010 增强对 X12 HIPAA 医疗保健交易的支持 270, 271, 276, 277, 278, 834, 835, 837 JSON 反映循环限定符;
  • ·代码格式化 ·好的直观布局能够展示程序的逻辑结构·进行格式化的要求 ·使代码便于阅读和理解 ·减少为理解代码的结构而必须做的工作 ·有嵌套循环或if--then语句块组成的复杂代码结构,就必须使用缩进 ·...
  • 近期出现的作业中常常出现多个重复(或相似)流程的情况,需要用到循环结构以缩短代码长度。下面,我们就来了解一下C语言中的基本循环结构语句(for/while/do),相关特殊用法,解决使用过程中的有关问题。 循环...
  • ——分支、循环结构 一、分支结构 (一)条件表达式: 格式:表达式1 ?表达式2 :表达式3 a)口诀:真前假后。 b)注意是当表达式1的数值是非0(为真)时,才采用表达式2的数值做为整个运算结果,当表达式1的...
  • 我们在写程序中时,往往只是去写各种for循环,但是往往在出问题时,...循环体用begin和end或类似的结构去表明以免在修改时出错了吗?空循环还是非空循环?把循环内任务处理归结到一起了吗?放在头部还是放在结尾了?循
  • 如何做结构化分支和循环语句的白盒测试?
  • 前端三层结构与应用前端三个基本结构结构层HTML、表现层CSS、行为层...HTML结构层必须要知道的DOCTYPEHTML4.01是基于SGML(Standard Generalized Markup language,标准通用标记语言)规范来制定的;HTML5不是基
  • MySQL查询优化之六-Join嵌套优化(Nested Join Optimization) ...QQ技术交流群:12951803 环境: MySQL版本:5.5.15 操作系统:windows ...本文讨论Join嵌套优化(Nested Join Optimization)。...与SQL标准相比,table_
  • 程序分为顺序执行、选择执行、循环执行 程序 = 数据 + 算法 一、选择执行 1、if语句 if(条件表达式){ 语句1; } 语句2; 如果if后的大括号中只有一行语句,可以省略大括号。 //例:满30减15元 var total = 36; if...
  • 选择结构

    2019-09-16 08:38:44
    **选择结构 **和循环结构可以称为是界定一个语言到底是否是编程语言的标准。 1.了解流程控制语句 流程控制语句:实现对程序的执行流程进性控制的一种语句。 顺序流程:程序默认就是一种流程语句,自上而下执行。 ...
  • 3.11 循环结构循环语句 3.11.1 用while语句构成循环 3.11.2 用do-while语句构成循环 3.11.3 用for语句构成循环 3.11.4 几种循环的比较 3.12 循环嵌套 3.13 break语句和continue语句 3.14 编写循环结构的程序 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,208
精华内容 26,083
关键字:

循环嵌套标准结构