1.
思路:
- 先求素数。
- 求素数中最大的三个。
步骤1:
素数的性质是只有自身和1是它的公因数,也即,若一个正整数存在小于自身的非1因数,就不是是素数。
步骤2:
找到所有的100-999之间的所有素数之后,很容易想到最大的三个就是最接近999的三个素数。那我们将最接近999的三个素数依次输出即可,也即输出的次数为3次,同时也说明了数字应从999递减而非从100递增。
步骤3:
根据以上判断,程序中应该会产生2个循环语句,1个条件语句。
循环语句:
- 100-999。
- 某个数字除以小于自身的所有正整数。
条件语句:
输出个数为3个。
然后我们就可以得到下面的程序:
#include <stdio.h>
int main()
{
int a,b,t=0;
for(a = 999; a >= 100; a--)
{
for(b = 2; b <= a - 1 ; b++)
{ if( a % b==0)
break;
}
if(b>a-1)
{t = t + 1;
printf("%d ",a);
if(t==3)
break;
}
}
return 0;
}
2.
思路:
先控制行,再控制空格;再控制列和各位置的符号。设行数为x,列数为y,输出的数字为z。
(1):
轴对称图形看两边,先看左边:每一行空格数为(4-x),每一行数字的个数就是x。
再看右边:当y<=x时,按照顺序输出。当y>x时,z=2x-y。
可以得到程序如下:
#include <stdio.h>
int main(){
int x,m,n;
for(x = 1; x<=4; x++)//控制行
{
for(m = 0; m<=(4-x); m++)//控制空格数
printf(" ");
for(n = 1; n<=2*x-1; n++)//控制列数
if(n<=x)//中轴线之前顺序输出
printf("%d",n);
else//中轴线之后(2x-n)
printf("%d",2*x-n);
printf("\n");
}
return 0;
}
(2):
较上一个更简单一点,不用if控制语句了,每一行输出的字符是64(A的ASCII码)+x,直接在printf里写即可。
可得程序如下:
#include <stdio.h>
int main(){
int i,j,k;
for(i = 1; i<=4; i++)//行数
{
for(j = 0; j<=(4-i); j++)//空格数
printf(" ");
for(k = 1; k<=2*i-1; k++)//列数
printf("%C",64+i);//每行的输出
printf("\n");
}
return 0;
}
(3)
一般穿插输出的都要跟取余有点关系,所以除了常规的三个循环语句之外要有一个if语句判断输出的数据。
#include <stdio.h>
int main(){
int a,b,c;
for(a = 1; a<=4; a++)//控制行
{
for(b=0; b<=(4-a);b++)//控制空格
printf(" ");
for(c = 1; c<=2*a-1;c++)//控制列
if(c % 2 ==0)//判断每一个位置输出的是“*”还是“+”
printf("+");
else
printf("*");
printf("\n");
}
return 0;
}
3.
本处给的写法不采用指针,只采用循环。
本题不难,就是记录一下某些情况别忘了用绝对值。
#include <stdio.h>
#include <math.h>
int main(){
double sum = 0,k = 1.0;
int i;
for(i = 2; fabs(k)>1e-5;i++)//用绝对值,不然进行到第二项就结束了,因为-0.2 < 1e-5
{ sum = sum+k;
k = 1.0/(i*i+1.0);
if(i%2 == 0)
k=-k;
}
printf("%f",sum);
return 0;
}