1.题目:打印出如下图案(菱形)
打印的效果如下:
分析:菱形打印可以分为上下两部分,上半部分4行,下半部分3行。然后分别找出空格、’*’与行的关系。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j,k;
for(i=0;i<4;i++)//上4行
{
for(j=0;j<3-i;j++)
{
printf(" ");
}
for(k=0;k<(2*i+1);k++)
{
printf("*");
}
printf("\n");//换行
}
for(i=0;i<3;i++)//下3行
{
for(j=0;j<(i+1);j++)
{
printf(" ");
}
for(k=0;k<(5-2*i))
{
printf("*");
}
printf("\n");//换行
}
system("pause");
}
2.题目:求1+2!+3!+…+20!的和
分析:可以把求一个数的阶乘封装成一个函数,然后通过循环调用这个函数,求出最终值。
#include<stdio.h>
#include<stdlib.h>
//求某个数的阶乘
int jie_c(int num)
{
int res=1;
for(int i=1;i<=num;i++)
{
res*=i;
}
return res;
}
void main()
{
int res=0;//32位以上足够储存
int n;
for(n=1;n<=20;n++)
{
res+=jie_c(n);//累加每次返回的阶乘值
}
printf("结果是:%d",res);
system("pause");
}
打印结果为:
3.题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数。
分析:利用循环,求出该数的所有因子(不包括本身),然后相加,和原来相等的即是完数。
#include<stdio.h>
#include<stdlib.h>
void wan_shu(int num)
{
int i;
int sum=0;
for(i=1;i<num;i++)
{
if(num%i==0)//余数为0证明是因子
{
sum+=i;//因子相加
}
}
if(sum==num)//相等即是完数
{
printf("%d\n",num);
}
}
void main()
{
int n;
for(n=1;n<1000;n++)
{
wan_shu(n);
}
system("pause");
}
打印结果为: