1、求n! 。
对于这个问题,首先分析四个要素如下:
循环初始化条件:i=1; fact=1; //n!=1*2*3*...*n,从这个问题来看,首先需要乘起来的数有n个,第一个即i=1,然后需要fact来存储乘起来的数(初始时fact=1,因为是乘法)。另外,还要输入一个n值。
循环判断条件:i<=n; //从上面问题来看,要乘起来数是n个,所以需要i<=n。
循环体: fact*=i; // 从上面问题来看, 对于每一个数需要乘起来,刚好第i个数就是i,所以fact=fact*i。
循环修正条件: i++; //从上面问题来看,为了进入下一轮循环,需要让这个数+1。
对于这种有数值区间范围遍历的问题,可以套用while语句循环结构或for语句循环结构(两种可以相互转换,见前面讲解),代码如下:
#include "stdio.h"int main()
{ int i, fact=1, n;printf("Please input n:");scanf("%d", &n);for( i=1;i<=n;i++ )fact*=i;printf("%d!=%d\n", n,fact);return 0;
}
2、求1*3*5*...*(2n-1)。
这个问题与上面类似,但是每个数与i不相等,需要另计算。
对于这个问题,首先分析四个要素如下:
循环初始化条件:i=1; fact=1; //从上面问题来看,首先需要乘起来的数有n个,第一个即i=1,然后需要fact来存储乘起来的数(初始时fact=1,因为是乘法)。另外,还要输入一个n值。
循环判断条件:i<=n; //从上面问题来看,要乘起来数是n个,所以需要i<=n。
循环体: fact*=(2*i-1); // 从上面问题来看, 对于每一个数需要乘起来,第i个数不是i,而是2*i-1,所以fact=fact*(2*i-1)。
循环修正条件: i++; //从上面问题来看,为了进入下一轮循环,需要将i+1。这时,可以理解i为循环次数,并建立需要乘起来的数与循环次数之间的关系为:2*i-1。
对于这种有数值区间范围遍历的问题,可以套用while语句循环结构或for语句循环结构(两种可以相互转换,见前面讲解),代码如下:
#include "stdio.h"int main()
{ int i, fact=1, n;printf("Please input n:");scanf("%d", &n);for( i=1;i<=n;i++ )fact*=(2*i-1);printf("fact=%d", fact);return 0;
}
3、求输入的10个数中的最大值或最小值。
对于这个问题,首先分析四个要素如下:
循环初始化条件:scanf("%f",&x); max; //从上面问题来看,首先输入一个数x才能考虑是否为最大值,然后需要max来存储最大值(初始时max=x,即第一个数x为最大值,因为目前只有一个数)。另外,需要输入10个数,因为第一个数已输入并赋给max,那接下来要输入第二个数,所以i=2。
循环判断条件:i<=10; //从上面问题来看,要输入的数是10个,所以需要i<=10。
循环体: scanf("%f",&x); if(max<x) max=x; // 从上面问题来看,对于每一个输入的数x,需要与max进行比较,若新输入的x大于目前的max,则更新max=x。
循环修正条件: scanf("%f",&x); //从上面问题来看,为了进入下一轮循环,需要输入下一个数。
对于这种有数值区间范围遍历的问题,可以套用while语句循环结构或for语句循环结构(两种可以相互转换,见前面讲解),代码如下:
#include "stdio.h"int main()
{ float x;int i;float max;printf("输入第1个数:");scanf("%f", &x);max =x; for(i=2;i<=10;i++){printf("输入第%d个数:", i);scanf("%f", &x);if(x> max) max=x;}printf("最大值=%f\n", max);return 0;
}
注:求最小值也是类似的,只需要将max改为min,以及将x>max改为x<min即可;