一、1. 寻找有除1和其本身的因数的数
- 判断因数的和是否等于其本身
- 若判断成立,则输出这个数
#include <stdio.h>
#include <string.h>
#define SWAP(x,y) {int temp;temp = x;x = y;y = temp;}
int main(int argc, const char *argv[])
{
int i,j;
int sum;
for(i=4;i<=1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
sum=sum+j;
}
}
if(sum==i)
{
printf("%d\n",i);
}
}
return 0;
}
二、1. 观察规律,金字塔顶为1颗*下一层为3*,以下依次为5*、7*,可以看出星星规律为2n-1。
- 又发现,一至三行都有$补齐
- 先用一个for循环打印数列的*,再嵌入一个for循环用2n-1控制打印每行*的数量
- 最后,用$给金字塔补齐,在打印行的*之前,并列一个for循环,打印$
- 打印$发现无法控制数量,补上参数k,通过k与j(列数)的关系,控制$的每列补齐数量
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, const char *argv[])
{
int i=1;
int j=1;
int k=0;
int m=0;
int c=4;
for(j=1;j<=c;j++)
{
for(m=0;m<c-j;m++)
{
printf("$ ");
}
k=2*j-1;
for(i=1;i<=k;i++)
{
printf("* ");
}
printf("\n");
}
return 0;
}
三、1. 题干有明显提示“直到”,明确知道要用循环中的do-while结构
- 循环结束条件为和超过100,即while(sum<=100)
- 循环体中用sum对i累加,用j记次
- 输出sum和
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i=1;
int j=0;
int sum=0;
do
{
sum+=i;
i++;
j++;
}while(sum<=100);
printf("当前的和为%d,当前累加个数为 %d\n",sum,j);
return 0;
}
四、1. 需要输出第n项,需要scanf输入
- 斐波那契数列规律是后一项等于前两项的和,所以设sum为后一项,a,b为前两项(泛指,不确定位置),则有关系sum=a+b
- 将sum放入for循环中,从1循环到n,每循环一次,输出一次sum
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int n;
int a=0;
int b=1;
int i;
int sum;
printf("输出斐波那契数列的前 项");
scanf("%d",&n);
if(n==1)
{
printf("%d\n",a+b);
}
for(i=1;i<=n;i++)
{
sum=a+b;
a=b;
b=sum;
printf("%d\n",sum);
}
return 0;
}
五、1. 已知用for循环嵌套循环
- 字母部分为ascii码递减,下划线部分为依次增加一个
- 并排输出下划线和字母,将两个for循环并行嵌入大的for循环即可
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i,j,k;
char m;
for(i=1;i<=6;i++)
{
m = 70;
for(j=1;j<=i-1;j++)
{
printf("_");
}
for(k=1;k<=i;k++)
{
printf("%c",m);
m=m-1;
}
printf("\n");
}
return 0;
}
六、1. 猴子每天都吃一半零1个,可以通过倒推循环,计算第一天摘了几个桃子
- 第十天只剩一个说明第十天没吃,一共经历9次循环
- 总数sum=2*(sum+1),循环九次即可得到答案
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i;
int num;
num = 1;
for(i=9;i>=1;i--)
{
num=num+1;
num=2*num;
}
printf("%d\n",num);
return 0;
}