第6回演習の解答例


(1) 1からnまでの階乗n!を求めるプログラムを作成せよ


#include<stdio.h>
void main()
{
	int i, n, kaijyo;

	printf("整数nを入力:");
	scanf("%d",&n);

	if( n<0 ){

		printf("負の数を階乗計算することはできません¥n");

	} else {

		i=1;
		kaijyo = 1;
		
		while( i<=n ){

			kaijyo *= i;

			i++;
		}

		printf("%d! = %d¥n",n,kaijyo);

	} 

}


(2) sin関数を用いて0°から180°までのsin関数の値を10°ずつ表示せよ

sin関数の使い方は,以下のプログラムを参考にすること


#include <stdio.h>
#include <math.h>

void main()
{
	int i;
	double rad, pi;
	double x;

	pi = 3.142;

	i = 0;
	
	while( i <= 180 ){

		rad = (double)i / 180.0 * pi;
		x = sin(rad);

		printf("角度%d°の時のsinの値は%1.3fです。¥n",i,x);
		
		i += 10;
	}
}


(3)以下の数列を計算するプログラムを作成せよ


#include <stdio.h>
#include <math.h>
void main()
{
	int n, i;
	float result;

	printf("¥n項数を入力:");
	scanf("%d",&n);

	i = 0;
	result = 0.0;

	while( i < n ){

		result += pow(-1,i) / ( 2.0 * (float)i + 1.0 );
		i++;
	}
	
	printf("積分結果 ≒ %f¥n",result);
}


(4)自然数nを入力し素数かどうかの判定をするプログラムを作成せよ


#include <stdio.h>
void main()
{
	int i,n,a;
	
	printf("自然数n=");
	scanf("%d",&n);

	if( n < 1 ){
		printf("自然数を入力してください.¥n");}
	else if( n == 1 ){
		printf("1は素数ではありません.¥n");}
	else{
		i=1;
		a=0;
		while( i <= n ){
			if(n%i==0){
				a++;}
			i++;}
		if( a == 2 ){
			printf("%dは素数です.¥n",n);}
		else{
			printf("%dは素数ではありません.¥n",n);}
	}
}


(5)以下の長方形則を用いて数値積分を実行するプログラムを作成せよ

  数値積分は関数を解析的に解くのが困難な場合に,近似的に値を求める手法である

  以下に基本的な数値積分手法である長方形則の概念と式を示す


      長方形則の概念図

  ここで,hは長方形の幅である.ab間を100に分割した時,h=0.01 ×(b-a)となる

  今回は以下に示す式の計算せよ.ただしab間を400分割して計算すること

  プログラムの値と,手計算で求めた値を比較せよ


#include <stdio.h>
#include <math.h>

void main()
{
	int i;
	float f, x, area;
	
	area = 0.0;
	
	x = 0.0;

	i = 1;

	
	while( i <= 400 ){
		
		f = x*x*x + 7.0*x*x - 8.0*x + 16.0;
		area += f * 2.0 / 400.0;
		x += 2.0 / 400.0;
		
		i++;
	}
	
	printf("積分結果 ≒ %f¥n",area);
}