C语言复习第四次作业
作业要求:
1.在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
2.求出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。
*/
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;
}
运行结果
结束语
有了第三次作业的经验教训,第四次作业代码中涉及乘方函数的地方没有再出错,并且节省了很多时间,希望和大家一起进步,越来越好!