循环结构程序设计(2)

第1关:求解表达式

任务要求 编写程序,实现求解表达式的值。 Y=1+1/3+1/5+1/7+…+1/(2m+1)

输入要求 输入一个正整数m(0<=m<=1e5)

输出要求 输出表达式结果Y,注意保留三位小数。

输入样例 1

输出样例 1.333

//根据题目要求完成程序设计
#include<stdio.h>
int main()
{
    double Y = 1;
    int m = 0;
    scanf("%d",&m);
    for(int i = 1; i <= m; i++)
    {
        Y += 1.0/(2*i+1);
    }
    printf("%.3f",Y);
}

第2关:逆序数

任务要求 从键盘输入一个正整数,输出其逆序数,并判断是否为对称数。如果是输出YES,否则输出NO

输入要求 输入一个整数num(0<=num<1e9)

输出要求 输出结果共 2 行,第一行结果为正整数num的逆序数,第二行结果为YES或者NO,代表num是否为对称数。

输入样例1 12345

输出样例1 54321

                  NO

输入样例2 612216

输出样例2 612216

                 YES

//根据题目要求完成程序设计
#include<stdio.h>
#include<math.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int tmp = 0;
    scanf("%d",&num1);
    tmp = num1;
    while(tmp)
    {
        num2*=10;
        num2+=tmp%10;
        tmp=tmp/10;
    }
    printf("%d\n",num2);
    if(num1==num2)
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
}

第3关:菱形

任务要求 编写程序,实现输出菱形。

输入要求 输入一个正整数m(1<=m<=100),注意m奇数

输出要求 使用*输出菱形图案。

//根据题目要求完成程序设计
#include<stdio.h>
int main()
{
    int row = 0;
    scanf("%d",&row);
    //上三角
    int ROW = row/2;
    int ROWS = ROW;
    for(int i = 1; i<=ROW; i++)
    {
        for(int j = 1;j<=ROWS;j++)
        {
            printf(" ");     
        }
        ROWS--;
        for(int j = 1; j<=2*i-1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    //中间行
    for(int i = 0; i<row;i++)
    {
        printf("*");
    }
    printf("\n");
    //下三角
    ROWS = ROW;
    for(int i = 1; i<=ROW;i++)
    {
        for(int j = 1;j<=i;j++)
        {
            printf(" ");
        }
        for(int j = 1;j<ROWS*2;j++)
        {
            printf("*");
        }
        ROWS--;
        printf("\n");
    }
    
}

第4关:素数问题

//根据题目要求完成程序设计
#include<stdio.h>
#include<math.h>
int main()
{
    int a = 0;
    int b = 0;
    int count = 0;
    scanf("%d%d",&a,&b);
    for(a;a<=b;a++)
    {  
        int flagh = 1;
        if (a==1)
        continue;
        for(int i = 2; i<=sqrt(a); i++)
        {
            if(a%i==0)
            {
                flagh = 0;
                break;
            }
        }
        if (flagh)
        {
            printf("%d ",a);
            count++;
        }
    }
    if (count==0)
    {
        printf("NO");
    }
}

总结:

第一关,求解表达式较为简单,易错点在在于明晰输出的要求=》保留三位小数。

第二关,题眼在于如何将输入的数组逆序

while(tmp)
    {
        num2*=10;
        num2+=tmp%10;
        tmp=tmp/10;
    }

以上代码可以很方便的求输入数的逆序。

第三关,写这一题的时候一定要记得写注释(血的教训)注释可以快速帮你梳理代码思路,配合调试,可以快速查错,纠错。

第四关

 for(int i = 2; i<=sqrt(a); i++)

求素数时使用sqrt可以有效优化代码。

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值