lesson33 三种循环语句

来源:互联网 发布:完全卸载sqlserver 编辑:程序博客网 时间:2024/05/22 18:55

task:【利用循环求和】求1000以内所有偶数的和

要求:请编出3个程序来,分别用三种循环语句完成,注意体会各种循环语句的执行过程及语法特点。

代码

/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作    者:袁生*完成日期:2017年10月27日*版 本 号:v1.0*问题描述:输出1000以内所有偶数的和*要求:请编出3个程序来,分别用三种循环语句完成,注意体会各种循环语句的执行过程及语法特点。*/#include <stdio.h>int main( ){    int i=0,total=0;    /*方法一    for (i=0;i<=1000;i+=2)        total+=i;    *方法二 */    do    {        total+=i;        i+=2;    }while (i<=1000);    //方法三    /*    while (i<=1000)    {        total+=i;        i+=2;    }*/    printf("1000内所有偶数和为:%d\n",total);    return 0;}

输出结果



task2:【求阶乘】输入n,求 n! 并输出

代码

/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作    者:袁生*完成日期:2017年10月27日*版 本 号:v1.0*问题描述:输入n,求n!并输出*/#include <stdio.h>int main( ){    int n,i=1,total=1;    printf("请输入n:");    scanf("%d",&n);    while(i<=n)    {        total*=i;        i++;    }    printf("n!为:%d\n",total);    return 0;}

运行结果



task3:【求x^n】输入x,n,求x的n次方(x^n)并输出(比较n!看有什么区别)

代码

/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作    者:袁生*完成日期:2017年10月27日*版 本 号:v1.0*问题描述:输入x,n,求x^n并输出*/#include <stdio.h>int main( ){    int x,n,i=1,total=1;    printf("请输入x,n:");    scanf("%d %d",&x,&n);    while(i<=n)    {        total*=x;           //此处若是换为total*=i就变成了求n!        i++;    }    printf("x^n为:%d\n",total);    return 0;}

输出结果


心得

若为total*=i,则求的是n!,若为total*=x,则求的是x的n次方即x^n


task:4:【输出这样的整数】输出1000以内能被3整除且个位数为6的所有整数。

代码

/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作    者:袁生*完成日期:2017年10月27日*版 本 号:v2.0*问题描述:输出1000以内能被3整除且个位数为6的所有整数。*/#include <stdio.h>int main( ){    int  i,j;    //方法一:    /*    for (i=0; j<=1000; i++)        // (1)    {        j=i*10+6;        if (j%3==0)            printf ("%d ",j);    // (2)    }    */    //方法二:        for (i=0;i<=1000;i++)    {        if (i%3==0)                 //如果能被3整除,继续看个位是否是6            if (i%10==6)            //如果个位是6,则打印该数,不是则加3继续循环                printf ("%d ",i);            else            {                i+=2;               //个位不是6则加2循环,加上for的表达式3,所以是加3判断再循环                continue;            }        else            continue;               //不能整除3则加1继续循环    }    //方法三:    /*    for (i=0;i<=1000;i++)    {        if (i%10==6)                //个位是6再判断能否被3整除,个位不是6则加一循环        {           if(i%3==0)            {                printf("%d ",i);                i+=9;               //能被3整除就打印该数,i加9再转for循环表达式3,形成加10循环            }            else                i+=9;               //不能被3整除就找下一个个位是6的数(在该数基础上加10)        }    }*/    printf("\n");    return 0;}
运行结果

心得
方法二是先找能被3整除的数再找个位是6的数,相较于方法一先找个位是6的数再找个位是3的数来说,效率要低上许多。以后尽量使用高效的方法。
方法二优化:

    //方法二:    for (i=0;i<=1000;i++)    {        if (i%3==0)                 //如果能被3整除,继续看个位是否是6        {            if (i%10==6)            //如果个位是6,则打印该数,不是则加3继续循环            {                printf ("%d ",i);                i+=2;            }            else                i+=2;               //个位不是6则加2循环,加上for的表达式3,所以是加3判断再循环        }        //不能整除3则加1继续循环    }

task5:【多数中的最大】编程序,输入10个整数,找出最大数。
代码
/**Copyright @2017,CSDN学院*All rights reserved.*文件名称:main.c*作    者:袁生*完成日期:2017年10月27日*版 本 号:v1.0*问题描述:编程序,输入10个整数,找出最大数。*/#include <stdio.h>int main( ){    int x,i,max;    scanf("%d",&x);    max=x;    for (i=2;i<=10;i++)    {        scanf("%d",&x);        max=(max>x)?max:x;    }    printf("max=%d\n",max);    return 0;}

运行结果

心得
输入n个数据巧妙使用循环,简单 粗暴,而不是这样

scanf("%d %d %d %d %d",&a,&b...)
涉及n个变量。