• 第四章:循环结构


    【4-1】使用格雷戈里公式求π的近似值....

    /* 用格雷戈里公式计算π的近似值,精度要求:最后一项的绝对值小于0.0001 */
    #include<stdio.h>
    #include<math.h>
    
    int main(void)
    {
        int denominator,flag;
        double item,pi;
    
        flag=1;
        denominator=1;
        item=1.0;
        pi=0;
    
        while(fabs(item)>=0.0001){
            item=flag*1.0/denominator;
            pi=pi+item;
            flag=-flag;
            denominator=denominator+2;
        }
        pi=pi*4;
        printf("pi=%.4f
    ",pi);
    
        return 0;

    【例4-2】更改例3-3.

    /* 输入一批学生的成绩,以负数作为结束标志,计算平均成绩,并统计不及格人数 */
    #include<stdio.h>
    int main(void)
    {
        int count,num;
        double grade,total;
    
        num=0;
        total=0;
        count=0;
        printf("Enter grades:");
        scanf("%lf",&grade);
    
        while(grade>=0){
            total=total+grade;
            num++;
            if(grade<60)
                count++;
            scanf("%lf",&grade);
        }
        if(num!=0){
            printf("Grade average is %.2f
    ",total/num);
            printf("Number of failures is %d
    ",count);
        }
        else
            printf("Grade average is 0
    ");
    
        return 0;
    }

    【例4-3】从键盘读入一个整数,统计该数的位数。

    /* 统计一个整数的位数 */
    #include<stdio.h>
    int main(void)
    {
        int count,number;
    
        count=0;
        printf("Enter a number:");
        scanf("%d",&number);
        if(number<0)number=-number;
        do{
            number=number/10;
            count++;
        }while(number!=0);
        printf("It contains%d digits.
    ",count);
    
        return 0;
    }

    【例4-4】输入一个正整数m,判断它是否为素数。

    /* 判断正整数m是否为素数 */
    #include<stdio.h>
    int main(void)
    {
        int i,m;
    
        printf("Enter a number:");
        scanf("%d",&m);
        for(i=2;i<=m/2;i++)
            if(m%i==0)
                break;
        if(i>m/2&&m!=1)
            printf("%d is a prime number!
    ",m);
        else
            printf("No!
    ");
    
        return 0;
    }

    【例4-5】更改例3-1简单的猜数游戏。

    /*简单的猜数游戏*/
    #include<stdio.h>
    int main(void)
    {
        int mynumber=38;
        int count=0,yournumber;
        for(count=1;count<=5;count++) {
            printf("Input your number:");
            scanf("%d",&yournumber);
            if(yournumber==mynumber){
                printf("Ok!you are right!
    ");
                    break;
            }
            else
                if(yournumber>mynumber)
                    printf("Sorry!your number is bigger than my number!
    ");
                else
                    printf("Sorry!your number is smaller than mynumber!
    ");
        }
        printf("Game is over!
    ");
    
        return 0;
    }

    【4-6】计算1!+2!+3!+...+100!。

    /*使用函数计算 1!+2!+3!+...+100!*/
    #include<stdio.h>
    double fact(int n);
    int main(void)
    {
        int i;
        double sum;
        sum=0;
            for(i=1;i<=100;i++)
                sum=sum+fact(i);
            printf("1!+2!+...+100!=%e
    ",sum);
    
    return 0;
    }
    double fact(int n)
    {
        int i;
        double result;
    
        result=1;
        for(i=1;i<=n;i++)
            result=result*i;
    
        return result;
    }

    【例4-7】计算1!+2!+3!+...+100!。要求使用嵌套循环。

    /*使用嵌套循环计算1!+2!+3!+...+100!*/
    #include<stdio.h>
    int main(void)
    {
        int i,j;
        double item,sum;
    
        sum=0;
        for(i=1;i<=100;i++){
            item=1;
            for(j=1;j<=i;j++)
                item=item*j;
            sum=sum+item;
        }
        printf("1!+2!+3!+...+100!=%e
    ",sum);
    
      return 0;
    }

    【4-8】求最值问题。输入一批学生的成绩,找出最高分。

    /*从输入的n个成绩中选出最高分,用for语句实现*/
    #include<stdio.h>
    int main(void)
    {
        int i,mark,max,n;
    
        printf("Enter n:");
        scanf("%d",&n);
        printf("Enter %d marks:",n);
        scanf("%d",&mark);
        max=mark;
        for(i=1;i<=n;i++){
            scanf("%d",&mark);
            if(max<mark)
                max=mark;
        }
        printf("Max=%d
    ",max);
    
        return 0;
    }

    /* 从输入的一批以负数结束的成绩中选出最高分,用while语句实现 */
    #include<stdio.h>
    int main(void)
    {
        int mark,max;
    
        printf("Enter marks:");
        scanf("%d",&mark);
        max=mark;
        while(mark>=0){
            if(max=mark);
            scanf("%d",&mark);
        };
        printf("Max=%d
    ",max);
    
        return 0;
    }

    【例2-9】逆序问题。

    /* 逆序输出一个正整数 */
    #include<stdio.h>
    int main(void)
    {
        int x;
    
        printf("Enter x:");
        scanf("%d",&x);
        while(x !=0){
            printf("%d",x%10);
            while("%d",x%10);
            x=x/10;
        }
    
        return 0;
    }

    【例4-10】素数问题。

    /* 使用嵌套循环求100以内的全部素数 */
    #include<stdio.h>
    #include<math.h>
    int main(void)
    {
        int count,i,m,n;
    
        count=0;
        for(m=2;m<=100;m++){
            n=sqrt(m);
            for(i=2;i<=100;i++)
                if(m % i==0)
                    break;
                if(i>n){
                printf("%6d",m);
                count++;
                if(count % 10 ==0)
                    printf("
    ");
                }
        }
        printf("
    ");
    
        return 0;
    }
                

    【例4-11】裴波那契数列问题。

    /* 输出裴波那契序列:1,1,2,3,5,8...的前10项 */
    #include<stdio.h>
    int main(void)
    {
        int i,x1,x2,x;
    
        x1=1;
        x2=1;
        printf("%6d%6d",x1,x2);
        for(i=1;i<=8;i++){
            x=x1+x2;
            printf("%6d",x);
            x1=x2;
            x2=x;
        }
        printf("
    ");
    
        return 0;
    }

    【例4-12】穷举算法。

    /*45人正好搬45块砖,程序版本2*/
    #include<stdio.h>
    int main(void)
    {
        int child,men,women;
    
        for (men=0;men<=45;men++)
            for(women=0;women<=45;women++)
                for(child=0;child<=45;child++)
                    if(men+women+child==45 && men*3+women*2+child*0.5==45)
                        printf("men=%d,women=%d,child=%d
    ",men,women,child);
    
        return 0;
    }

    /*45人正好搬45块砖,程序版本2*/
    #include<stdio.h>
    int main(void)
    {
        int child,women,men;
    
        for(men=0;men<=15;men++)
            for(women+0;women<=22;women++){
                child=45-women-men;
                if(men*3+women*2+child*0.5==45)
                    printf("men=%d,women=%d,child=%d
    ",men,women,child);
            }
        return 0;
    }

    心得:敲代码时不能只单纯地敲完,最好能理解一下其中的语法规则和编写这些程序时所要注意的问题,才有可能更深入的了解程序,日后能自己编写。

    问题:实现的多重循环有没有可能是死循环?????

  • 相关阅读:
    剑指 Offer II 001. 整数除法
    conda中如何恢复默认源
    conda中如何创建、查看、删除虚拟环境
    conda中如何移除指定的源
    conda 中如何移除默认源
    清华anaconda开源镜像下载站
    集群环境中使用sbatch提交命令测试
    第三章 消息摘要算法MD5SHAMAC
    第四章 dubbo源码解析目录
    第二章 Base64与URLBase64
  • 原文地址:https://www.cnblogs.com/zhangling213549/p/3355642.html
Copyright © 2020-2023  润新知