循环结构练习题11道【C语言】

发布于:2024-12-07 ⋅ 阅读:(225) ⋅ 点赞:(0)

1. 计算n以内所有正奇数的和 ? n值通过键盘输入

/*************************************************************************
  > File Name:    work1.c
  > Author:       sgc
  > Description:  n以内正奇数和
  > Created Time: 2024年12月02日 星期一 17时43分52秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 定义一个变量,接收用户输入的n
    int n;
    printf("请输入:");
    // 用户从键盘输入n
    scanf("%d", &n);

    // 定义一个变量,用于进行累加求和
    int sum = 0;

    // 判断用户是否输入负数
    if( n < 0)
    {
        printf("%d以内的正奇数和是:0\n", n);
        return 0;
    }

    // 根据用户输入的n来决定循环次数
    for( int i = 1; i <= n; i++)
    {
        if( i % 2 != 0)
        {
            sum += i;
        }
    }

    printf("%d以内的正奇数和是:%d\n", n, sum);

    return 0;
}

运行截图:

在这里插入图片描述
)

2.计算 1 + 1/(2 * 3) + 1/(3 * 4) + …+ 1/(n * (n + 1)) = ?直到最后一相值小于0.00001为至。

/*************************************************************************
  > File Name:    work2.c
  > Author:       sgc
  > Description:  计算 1 + 1/(2 * 3) + 1/(3 * 4) + ...+ 1/(n * (n + 1)) = ?直到最后一相值小于0.00001为至。
  > Created Time: 2024年12月02日 星期一 18时33分58秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 定义一个变量,用于累加
    double sum = 0;

    // 循环变量,1单独计算,从二开始
    double i = 2;

    // 死循环一直进行累加
    while(1)
    {
        // 判断该项数是否小于0.00001
        if( 1/(i*(i+1)) < 0.00001 )
        {
            break;
        }

        // 对每一项进行累加
        sum += 1/(i*(i+1));

        // 每次循环自增1
        i++;
    }

    printf("最后一项值小于%fl之前的和是:%lf\n", i, sum + 1.0 );

    return 0;
}

运行截图:

在这里插入图片描述

3.计算1+1/2 - 1/3 + 1/4 - 1/5 …+1/n= ? n通过键盘输入

/*************************************************************************
  > File Name:    work3.c
  > Author:       sgc
  > Description:  计算1+1/2 - 1/3 + 1/4 - 1/5 ...+1/n= ? n通过键盘输入(int k = -1)
  > Created Time: 2024年12月02日 星期一 18时35分29秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 定义一个由用户输入的变量
    int n;
    printf("请输入:");
    scanf("%d", &n);

    // 定义一个变量,用于累加
    double sum = 1;

    for( int i = 2 ; i <= n; i++ )
    {
        // 判断奇偶,进行加正数和负数
        if( i % 2 == 0 )
        {
            sum += 1.0/(double)i;
        }
        else
        {
            sum += -(1.0/(double)i);
        }
    }

    printf("计算后的值是:%lf\n", sum);

    return 0;
}

运行截图:

在这里插入图片描述

4.求n的阶乘

/*************************************************************************
  > File Name:    work4.c
  > Author:       sgc
  > Description:  求n!
  > Created Time: 2024年12月02日 星期一 18时35分36秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 创建一个变量,接收用户输入
    int n;
    printf("请输入:");
    scanf("%d", &n);

    // 创建一个变量接收累乘的值
    int sum = 1;

    // 对用户输入的数据进行校验
    while(1)
    {
        // 小于等于0为非法数据,需要重新输入
        if( n <= 0 )
        {
            printf("小于等于0为非法数据,需要重新输入:");
            scanf("%d", &n);
        }
        else
        {
            break;
        }
    }

    // 从到到小乘
    for( n; n >= 1; n-- )
    {
        // 累乘
        sum *= n;
    }

    printf("该数的阶乘是%d\n", sum);

    return 0;
}

运行截图:

在这里插入图片描述

5.输出半径为1~10的圆面积,面积大于100时停止

/*************************************************************************
  > File Name:    work5.c
  > Author:       sgc
  > Description:  输出半径为1~10的圆面积,面积大于100时停止
  > Created Time: 2024年12月02日 星期一 18时35分45秒
 ************************************************************************/

#include <stdio.h>
// 定义一个字符常量
#define R 3.14

int main(int argc,char *argv[])
{

    // 定义圆的半径,并且循环次数不超过10
    for( float r = 0; r < 10; r++ )
    {
        // 如果面积小于100就打印该半径圆的面积,并且保留两位小数
        if( R * r * r <  100) printf("半径为%.0f的圆的面积是%.2f\n", r, R*r*r);
    }
    return 0;
}

运行截图:

在这里插入图片描述

6.求输入的十个整数中正数的个数及其平均值

/*************************************************************************
  > File Name:    work6.c
  > Author:       sgc
  > Description:  求输入的十个整数中正数的个数及其平均值
  > Created Time: 2024年12月02日 星期一 18时35分54秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 定义 一个变量用于接收正数的个数
    int a = 0;
    // 定义一个变量,用来接收正数的累加值
    float sum = 0;

    printf("请输入10个数。\n");

    for( int i = 1; i <= 10; i++ )
    {
        // 创建一个变量,用于接收用户输入的数
        float b;
        printf("请输入第%d个数:", i);
        scanf("%f", &b);

        if( b > 0 )
        {
            a++;
            sum += b;
        }
    }

    printf("正数的个数是%d,正数平均值是%.2f\n", a, sum/a);

    return 0;
}

运行截图:

在这里插入图片描述

7.打印出100以内能整除7之外的的自然数

方法1:

/*************************************************************************
  > File Name:    work7.c
  > Author:       sgc
  > Description:  打印出100以内能整除7之外的的自然数
  > Created Time: 2024年12月02日 星期一 18时36分04秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    for( int i = 1; i <= 100; i++ ) if(i % 7 != 0)  printf("%d ", i);
    printf("\n");
    return 0;
}

运行截图:

在这里插入图片描述

方法2:

/*************************************************************************
  > File Name:    work7.c
  > Author:       sgc
  > Description:  打印出100以内能整除7之外的的自然数
  > Created Time: 2024年12月02日 星期一 18时36分04秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    for( int i = 1; i <= 100; i++ )  i % 7 != 0 ? printf("%d ", i): printf("\n");
    printf("\n");
    return 0;
}

运行截图:

在这里插入图片描述

8.打印乘法表

/*************************************************************************
  > File Name:    work8.c
  > Author:       sgc
  > Description:  打印乘法表
  > Created Time: 2024年12月02日 星期一 18时36分12秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    for( int i = 1; i <= 9; i++ )
    {
        for( int j = 1; j <= i; j++)
        {
            printf("%d×%d=%d\t", j, i, i*j);
        }
        printf("\n");
    }

    return 0;
}

运行截图:

在这里插入图片描述

9.百钱买百鸡

/*************************************************************************
  > File Name:    work9.c
  > Author:       sgc
  > Description:  百钱买百鸡
  > Created Time: 2024年12月02日 星期一 18时36分20秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{

    // 接收各种鸡的个数15 9 1
    // x是公鸡,y是母鸡,z是小鸡
    int i , j, k = 0;

    // 定义一个变量,用来接收鸡的个数
    int n = 0;

    // 总钱数和鸡的单价,均扩大三倍
    // 通过遍历所有组合来找到想要的组合
    // 外层循环遍历公鸡的个数
    for( i = 0; i <= 20; i++ )
    {
        // 内层循环遍历母鸡的个数
        for( j = 0 ; j <= 33; j++ )
        {
            //k -= j*9;
            k = 300 - i*15 - j*9;
            if( ((i + j + k) == 100) && (k%3 == 0) )
            {
                printf("%d只公鸡,%d只母鸡,%d只小鸡\n", i,  j, k);
            }
        }
    }

    return 0;
}

运行截图:

在这里插入图片描述

10.从键盘上输入多个无符号整型数据,直到 0 结束 ,输出所输入数据中的最大值。

/*************************************************************************
  > File Name:    work10.c
  > Author:       sgc
  > Description:  从键盘上输入多个无符号整型数据,直到 0 结束 ,输出所输入数据中的最大值。
  > Created Time: 2024年12月02日 星期一 18时36分30秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{

    // 定义 一个变量用于接收正数的个数
    unsigned int a;
    // 定义一个变量,用来接收正数的累加值
    unsigned int max = 0;

    while(1)
    {
        printf("请输入:");
        // 从控制台输入
        scanf("%u", &a);

        if( a != 0)
        {
            if( a > max )
            {
                max = a;
            }
        }
        else
        {
            break;
        }

    }

    printf("最大值是:%u\n", max);
    return 0;
}

运行截图:

在这里插入图片描述

11.判断是否为回文数

/*************************************************************************
  > File Name:    work11.c
  > Author:       sgc
  > Description:  判断一个数是不是回文数。
  > Created Time: 2024年12月02日 星期一 23时57分21秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 接收用户输入
    int a;
    // 接收最终的数
    int b;
    // 接收最终的数的颠倒数
    int c;

    int d;

    printf("请输入第1位数:");
    scanf("%d", &a);
    b = a;
    c = a;

    int i = 2;
    while(1)
    {
        printf("请输入第%d位数:", i);
        scanf("%d", &a);
        b = b * 10 + a;
        d = i;
        while( d -1 )
        {
            a *= 10;
            d--;
        }
        c += a ;
        printf("请问还继续输入吗?输入00退出,输入11继续\n");
        scanf("%d", &a);
        if( a == 00 ) break;
        i++;
    }
    if( b == c )
    {
        printf("%d是回文数\n", b);
    }
    else
    {
        printf("%d不是回文数\n", b);
    }

    return 0;
}

运行 截图:

在这里插入图片描述

优化后:
/*************************************************************************
  > File Name:    work11.c
  > Author:       sgc
  > Description:  判断一个数是不是回文数。
  > Created Time: 2024年12月02日 星期一 23时57分21秒
 ************************************************************************/

#include <stdio.h>

int main(int argc,char *argv[])
{
    // 接收用户输入
    int a;
    // 接收最终的数
    int b = 0;
    // 接收最终的数的颠倒数
    int c = 0;
    int d = 0;
    int j = 0;

    printf("请输入:");
    scanf("%d", &a);
    int e = 0;

    while(1)
    {
        if( a / 10 == 0 && a % 10 == 0 )
        {
            break;
        }
        else
        {
            int i = d, j;

            e = a%10;
            a /= 10;

            c = c * 10 + e;
            j = e;
            while(i)
            {
                j *= 10;
                i--;
            }
            b += j;
            d++;
        }


    }
    if( b == c )
    {
        printf("%d是回文数\n", b);
    }
    else
    {
        printf("%d不是回文数\n", b);
    }

    return 0;
}

运行截图:

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到