4-5循环结构程序设计

例4-8:求最值问题,输入一批学生的成绩,找出最高分。
思路1:先输入一个正整数n,代表数据的个数,然后在输入n个数据,循环重复n次,属于指定次数的循环,用for语句。

#include <stdio.h>
int main()
{
    int n,mark,max,i;
    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;
}

思路2:设定一个特殊数据(伪数据)作为循环的结束标志,由于成绩都是正数,选用一个负数作为输入的结束标志。由于循环次数未知,考虑使用while语句。

#include <stdio.h>
int main()
{
    int max, mark;

    printf("Enter marks:");
    scanf("%d", &mark);
    max = mark;
    while (mark >= 0)
    {
        if (mark > max)
            max = mark;
        scanf("%d", &mark);
    }
    printf("MAX=%d", max);

    return 0;
}

例4-9:逆序问题,输入一个正整数,将其逆序输出。例如,输入12345,输出54321。

#include <stdio.h>
int main()
{
    int n;
    printf("Enter n:");
    scanf("%d", &n);
    while (n != 0)
    {
        printf("%d", n % 10); //分离一位
        n = n / 10;           //为下一次分离做准备
    }
    return 0;
}

例4-10:素数问题,求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
1:

#include <stdio.h>
int main()
{
    int count = 0, i, m;
    for (m = 2; m <= 100; m++)
    {

        for (i = 2; i <= m / 2; i++)
            if (m % i == 0)
                break;
        if (i > m / 2)
        {
            printf("%6d", m);
            count++;
            if (count % 10 == 0)
                printf("\n");
        }
    }
    printf("\n");
    
    return 0;
}

2

#include <stdio.h>
#include <math.h>
int main()
{
    int count = 0, i, m, n;
    for (m = 2; m <= 100; m++)
    {
        n = sqrt(m);
        for (i = 2; i <= n; 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:斐波那契数列问题。输出斐波那契数列的前10项:1.2.3.5.8.13.21.34.55。

#include <stdio.h>
int main()
{
    int i, x1, x2, x;
    x1 = 1;
    x2 = 1;
    printf("% 6d% 6d", x1, x2);//先输出头两项
    for (i = 1; i <= 8; i++)//循环输出后8项
    {
        x = x1 + x2;//计算新的一项
        printf("%6d", x);
        x1 = x2;//更新x1和x2,为下一次计算作准备
        x2 = x;
    }
    printf("\n");

    return 0;
}

例4-12:穷举算法。某工地需要搬运砖块,已知男人1人搬3块,女人一人搬2块,小孩两人人搬一块。有多少种搬法用45人正好搬45块砖?

#include <stdio.h>
int main()
{
    int men,women,child;

    for(men=0;men<=15;men++)
        for(women=0;women<=22;women++)
        {
            child=45-men-women;
            if(men*3+women*2+child*0.5==45)
            printf("men=%d,women=%d,child=%d\n",men,women,child);
        }
    return 0;
}

练习4-10:找出最小值:输入一个正整数n,再输入n个整数,输出最小值。试编写相应程序。

#include <stdio.h>
int main()
{
    int min,mark,n,i;

    printf("Enter n:");
    scanf("%d",&n);
    printf("Enter %d marks:",n);
    scanf("%d",&mark);
    min=mark;
    for(i=1;i<n;i++)
    {
        scanf("%d",&mark);
        if (mark<min)
        {
            min=mark;
        }
    }
    printf("MIN=%d\n",min);
    
    return 0;
}

练习4-11:统计素数并求和,输入2个正整数m和n(1≤m≤n≤500),统计并输出m和n之间的素数的个数以及这些素数的和。素数就是只能被1和自身整除的数,1不是素数,2是素数。

#include <stdio.h>
int main()
{
    int m, n;
    int i;
    int count = 0;
    int sum = 0;
    printf("Enter two number m n:");
    scanf("%d%d", &m, &n);
    if (m == 1)
    {
        m = 2;
    }

    for (i = m; i <= n; i++)
    {
        int isPrime = 1;
        int k;
        for (k = 2; k < i - 1; k++)
        {
            if (i % k == 0)
            {
                isPrime = 0;
                break;
            }
        }
        if (isPrime)
        {
            count++;
            sum += i;
        }
    }
    printf("%d %d\n", count, sum);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值