DAY4作业介绍

C语言复习第四次作业

作业要求:

1.在屏幕上输出以下图案:
      *
     ***
    *****
   *******
  *********
 ***********
*************
 ***********
  *********
   *******
    *****
     ***
      *

2.求出0999之间的所有“水仙花数”并输出。
“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153153?,则153是一个“水仙花数”。

/*
在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/


3.
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222



代码思想简介

在屏幕上打印图案

图案一共十三行,前七行每一行星星前的空格数逐行减少,数量等于7减去行数,星星数等于2乘以行数减一;后六行空格数等于行数减7,星星数等于13减去行数乘以二加一;
在此基础上,对行数进行1-13的for循环,每个循环内用空格数量和星星数量进行while循环全部打印即可,打印一个,数量减少一个,减到零while循环结束

/*

在屏幕上输出以下图案:
      *
     ***
    *****
   *******
  *********
 ***********
*************
 ***********
  *********
   *******
    *****
     ***
      *

*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() 
{
    int i, j, h;
    for (h = 1; h <= 13; h++) 
    {
        if (h <= 7)
            i = 7 - h, j = 2 * h - 1;
        else
            i = h - 7, j = (13 - h) * 2 + 1;
        while (i != 0)
        {
            printf(" ");
            i--;
        }
        while (j != 0)
        {
            printf("*");
            j--;
        }
        printf("\n");
    }
    return 0;
}
运行结果

请添加图片描述

求出0~999之间的所有“水仙花数”并输出

这个作业的代码和DAY3的3-3几乎一样,只需要在判断函数中稍作修改,把判断内容改为各个数位立方和是否等于这个三位数即可,如果判断为水仙数,计数器加一,并将这个数存入打印数组

//求出0~999之间的所有“水仙花数”并输出。
//“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,
//如;153=1+5+3 ? ,则153是一个“水仙花数”。

/*
在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、
阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int checklen(int N)
{
	int i;
	for (i = 1; i <= 10; i++)
	{
		if (pow(10, i - 1) <= N)
			if (pow(10, i) > N)
				return i;
	}
}
void d_arr(int D_arr[], int len, int N)
{
	int i, j;
	j = N;
	for (i = 1; i <= len; i++)
	{
		if (i != len)
		{
			D_arr[i - 1] = (j % (int)(pow(10, i))) / (pow(10, i - 1));
			j = j - D_arr[i - 1] * (pow(10, i - 1));
		}
		else
			D_arr[i - 1] = j / (pow(10, i - 1));
	}
}
int count(int D_arr[], int len,int N)
{
	int i,num;
	num = 0;
	for (i = 0; i <= len - 1; i++)
	{
		num += pow(D_arr[i],3);
	}
	if (num == N)
		return 1;
	return 0;
}
void arrclear(int A[], int a)
{
	int i;
	for (i = 0; i < a; i++)
	{
		A[i] = 0;
	}

}
int main()
{
	int i, len, cou = 0;
	int j;
	int D_arr[10] = { 0 };
	int print[1000] = { 0 };
	for (i = 100; i <= 999; i++)
	{
		len = checklen(i);
		d_arr(D_arr, len, i);
		if (count(D_arr, len, i) == 1) 
		{
			cou += 1;
			print[cou - 1] = i;
		}
		arrclear(D_arr, 10);
	}
	printf("0~999共有%d个水仙数\n分别为:\n", cou);
	for (j = 0; j <= cou - 1; j++) 
	{
		if (j != cou - 1)
			printf("%d、", print[j]);
		else
			printf("%d\n", print[j]);
	}
	return 0;
}


运行结果

请添加图片描述

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

创建两个变量sn和tem
tem+=a*pow(10,i-1),sn+=tem;

//求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main() 
{
	int i, sn, a;
	int tem = 0;
	printf("please input a number between 1 and 9:");
	scanf("%d", &a);
	printf("\n");
	sn = 0;
	for (i = 1; i <= 5; i++) 
	{
		tem += a * pow(10, i - 1);
		sn += tem;
	}
	printf("Sn=%d+%d%d+%d%d%d+%d%d%d%d+%d%d%d%d%d=%d\n", a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, sn);
	return 0;
}
运行结果

请添加图片描述

结束语

有了第三次作业的经验教训,第四次作业代码中涉及乘方函数的地方没有再出错,并且节省了很多时间,希望和大家一起进步,越来越好!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值