头歌c语言实训项目-循环结构程序设计

  (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

第1关:求各位数字之积: 

题目: 

代码思路: 

代码表示: 

第2关:求阶乘之和: 

题目: 

代码思路: 

代码表示: 

第3关:水仙花数: 

题目: 

代码思路: 

代码表示: 

第4关:寻找完数:

题目: 

代码思路: 

代码表示: 

第5关:分数求和:

题目: 

代码思路: 

代码表示: 


第1关:求各位数字之积: 

题目: 

本关任务:计算正整数num的各位上的数字之积。 例如:

输入:2583 经过----(2x5x8x3) 输出:240

输入:102 经过----(1x0x2) 输出:0

输入:136 经过----(1x3x6) 输出:18

代码思路: 

代码思路:既然是求各位数字之积,就要把输入的数sum各位数字求出来,那如何求出各位数字呢?既然sum是整型,我们可以用sum%10的方式求出sum的个位整数,而十位即以上的整数则需要sum/10来将其变换为个位。最后用while循环来保证操作的持续实现,且保证其>0

代码表示: 

#include<stdio.h>
int main(void)
{  
	  /*********Begin*********/
	  int num,a,b=1;
      scanf("%d",&num);
      while(num!=0)
      {
          a=num%10;
          num=num/10;
          b*=a;
      }
      printf("%d",b);
	  
	  /*********End**********/ 
       return 0;
}

提示:这里的a是用来取得sum各位的整数,然后与被初始化为1的变量b循环相乘得到结果 

第2关:求阶乘之和: 

题目: 

本关任务:编写一个程序,任意输入n,求S=1!+2!+...+n!注意:n!表示n的阶乘。0的阶乘等于1,负数的阶乘等于0 *提示:(n+1)!=n!(n+1)**

例如:

输入:10

输出:4037913

输入:7
输出:5913

输入:-1
输出:0

代码思路: 

代码思路:既然是阶乘之和,那就需要一个两层循环,第一层用来循环1~n,第二层用来循环每个数的阶乘,第二层的数 j 就<= i 。注意:这里的s用来表示第二层的阶乘,所以在第二层循环完回到第一层以后要重新初始化为1。

代码表示: 

#include<stdio.h>
int main(void)
{  
	  /*********Begin*********/
	int n;
    
    int SUM=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
      int S=1;
      for(int j =1;j<=i;j++)
      {
         S*=j;
      }
       
      SUM=SUM+S;
    }
   
    printf("%d",SUM);

	  /*********End**********/ 
    return 0;
}

第3关:水仙花数: 

题目: 

本关任务:求出所有的水仙花数。

提示:所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。

例如: 153是一个水仙花数,因为153=1^3+5^3+3^3

例如: 370是一个水仙花数,因为370 = 3^3 +7^3 + 0^3

代码思路: 

代码思路:判断一个数是否为水仙花数,首先要看其是否为三位数,可以用for循环筛选,然后就是要计算每一位的立方之和 ,pow (x,y) 函数用来求 x 的 y 次方的值,和上面第一题一样,每一次循环都要/10,以此确保%10可以取得a的所有位值,最后判断各位的立方和是否等于原数

代码表示: 

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  
	  int a = 0;
	  for (a = 100; a < 1000; a++)
	  {
		int tmp = a;
		int sum = 0;
		while (tmp)
		{
		
			sum += (int)pow(tmp % 10, 3);
			tmp /= 10;
		}
        if (a == sum)
		{
			printf("%d ", a);
		}
	  }
	  /*********End**********/ 
       return 0;
    }

第4关:寻找完数:

题目: 

本关任务:一个数如果恰好等于它的因子之和,这个数就称为"完数"。

例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数。 

代码思路: 

代码思路:因子之和,首先就要找到因子,我们可以通过遍历的方式,用%找出所有因子(因子一定小于等于原数的一半)然后将其逐个相加,若相加后sum的值等于原数,就将其打印

代码表示: 

#include<stdio.h>
int main()
{
    int i, j;
    for (i = 2; i <= 1000; i++)
    {
        int sum = 0;
        for (j = 1; j <= i / 2; j++)
        {
            if (i % j == 0)
                sum += j;
        }   
        if (sum == i)
            printf("%d\n", sum);
    }
	return 0;
}

第5关:分数求和:

题目: 

本关任务:编写程序计算 1 - 1/2 + 1/3 - 1/4 + ..... +1/99 - 1/100 的值,并显示出来(保留结果为小数点后三位)。

代码思路: 

 代码思路:这题可能看起来很复杂,但只要仔细分析其中的逻辑,方法就会很简单。在我看来,单位数相加,双位数相减是这题的难点,我们不妨将其看为一个整体,那么100个相加减的数字就变为了50组有序的相加的数,通过for循环将其分母每次加2即可

代码表示: 

#include<stdio.h>
int main()
{
    double sum = 0;
    double a = 1;
    double b = 2;
    double c = 0;
    for (int i = 1; i <= 50; i++)
    {
        c = 1 / a - 1 / b;
        a += 2;
        b += 2;
        sum = sum + c;
    }
    printf("%.3lf", sum);
    return 0;
}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周不想卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值