第四章:循环结构

【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\n",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\n",total/num);
        printf("Number of failures is %d\n",count);
    }
    else
        printf("Grade average is 0\n");

    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.\n",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!\n",m);
    else
        printf("No!\n");

    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!\n");
                break;
        }
        else
            if(yournumber>mynumber)
                printf("Sorry!your number is bigger than my number!\n");
            else
                printf("Sorry!your number is smaller than mynumber!\n");
    }
    printf("Game is over!\n");

    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\n",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\n",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\n",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\n",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("\n");
            }
    }
    printf("\n");

    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("\n");

    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\n",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\n",men,women,child);
        }
    return 0;
}

 

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

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

 

 

转载于:https://www.cnblogs.com/zhangling213549/p/3355642.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值