0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OECU1年C言語復習会用問題

Last updated at Posted at 2023-10-25

#初級問題
####1.次の流れ図は、2次方程式ax²+bx+c=0について係数a, b, cを入力し、解の個数を判別するものである。空欄を語群から選べ。
語群
image (1).png

image.png

解答例 ![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767214/1c259277-0039-4464-e8d6-9d60c42e17a7.png)

####2.int型変数num1,num2にそれぞれ任意の数を入れそれぞれを足した値をsumに入れsumを出力するプログラムの作成。
1-1.png

フローチャート ![1-1frow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767214/b0d51188-5d65-0d6f-647c-51848bec4bf6.png)
解答例
#include <stdio.h>
int main(void) {

	int num1, num2, sum;

	scanf("%d", &num1);
	scanf("%d", &num2);

	sum = num1 + num2;

	printf("sum = %d", sum);

	return 0;
}

####3.キーボードから任意のテストの点数を入力して60点以上なら"合格"、60点未満なら"不合格"と表示するプログラムの作成。
1-2.png

フローチャート ![1-2f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767214/8d58b611-28e2-5653-471c-7e28aab32d2f.png)
解答例
#include<stdio.h>
int main(void)
{
	int a;
	printf("テストの点数を入力してください\n");
	scanf("%d", &a);
	if (a >= 60) {
		printf("合格\n");
	}
	else {
		printf("不合格\n");
	}
	return 0;
}

####4.任意の数を5つ入力してそれらの平均を求めるプログラムの作成。

5つ入力はfor文を使って実装するのが望ましい。

1-3.png

フローチャート ![1-3fvar2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767214/90d1b064-83a9-6ffa-da35-fc771a41ce84.png)
解答例
#include<stdio.h>
int main(void) {
	int a, i, sum;
	sum = 0;

	printf("整数を5つ入力してください\n");
	for (i = 0; i < 5; i++) {
		scanf("%d", &a);
		sum += a;
	}

	printf("平均 %.2f\n", sum / 5.0);

	return 0;
}

####5.次の流れ図は、配列n(1)~n(5)に格納されているデータを昇順にバブルソートで並び替えるものである。①~⑤にあてはまるものを解答群から選びなさい。また、そのプログラムを完成させなさい。

バブルソートとはデータを配列の下段から上段に移動させながら並べ替える手法である。

image (6).png

1-5.png

image (4).png
image (3).png

フローチャート解答例 ![image (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1767214/866f0449-4f47-cc27-81ed-1b0c755eceb7.png)
プログラム解答例
#include <stdio.h>
int main(void)
{
	int i, j, d, tmp;
	int n[5] = { 34, 83, 41, 29, 76 };
	for (i = 0; i < 4; i++)
	{
		for (j = 4; i < j; j--)
		{
			if (n[j - 1] > n[j])
			{
				tmp = n[j];
				n[j] = n[j - 1];
				n[j - 1] = tmp;
			}
		}
	}
	printf("n[");
	for (i = 0; i < 4; i++)
	{
		printf("%d,", n[i]);
	}
	printf("%d]", n[i]);
	return 0;
}

#中級問題
####1.5の配列にそれぞれデータを入力しその各値分の*を出力するプログラムの作成。
2-1.png

解答例
#include <stdio.h>
int main(void) {
	int d[5], i, j;
	for (i = 0; i < 5; i++) {
		scanf("%d", &d[i]);
	}
	for (i = 0; i < 5; i++) {
		printf("d[%d]", i);
		for (j = 1; j <= d[i]; j++) {
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

####2.1~10の乱数を10個生成してそれらのave、min、maxを求めるプログラムの作成。

2-2.png

解答例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
	int a[10];
	int max, min, i;
	float ave;

	srand(time(NULL));

	for (i = 0; i < 10; i++) {
		a[i] = rand() % 10 + 1;
		printf("%d,", a[i]);
	}

	printf("\n");

	ave = a[0];
	max = a[0];
	min = a[0];

	for (i = 1; i < 10; i++) {
		ave += a[i];
		if (a[i] > max) {
			max = a[i];
		}
		if (a[i] < min) {
			min = a[i];
		}
	}
	ave = ave / 10;

	printf("max = %d,min = %d,ave = %.1f", max, min, ave);


	return 0;
}

#上級問題
####1.モンテカルロ法を用いて円周率を算出するプログラムの作成。

原理
モンテカルロ法とは乱数を用いたシミュレーションのことです。
下記のように4分の1の円の中に疑似乱数で点を打つ。(半径1)円弧の内側に入った点の数をin、すべての点の数をallとする。この時inとallの関係は*$in:all = \frac{π}{4}:1$である。よって$π = \frac{4\times in}{all}$* となる。なお点が円の中に入ってるかどうかは座標が1の円の内側にあるかを考えたらよいので、$x^2+y^2 \leqq 1$の場合が内側にあるといえる。
モンテカルロ法.png
3-1.png

解答例
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ALL 100000

int main(void) {
	int i, in;
	float x, y, pi;

	in = 0;
	srand(time(NULL));

	for (i = 0; i < ALL; i++) {
		x = (float)rand() / RAND_MAX;
		y = (float)rand() / RAND_MAX;

		if (x * x + y * y <= 1) {
			in++;
		}
	}

	pi = 4.0 * in / ALL;
	printf("円周率は%f", pi);

	return 0;
}

####2.素因数分解を行い、それぞれの素数とその指数を出力するプログラムを作成。
3-2.png

解答例
#include <stdio.h>
int main(void)
{
	int num;
	int i, c = 0;
	do {
		printf("自然数を入力してください ");
		scanf("%d", &num);
	} while (num < 1);
	if (num == 1)
	{
		c++;
		printf("素因数:1 指数:1");
	}
	else
	{
		for (i = 2; i <= num; i++)
		{
			while (num % i == 0)
			{
				c++;
				num = num / i;
			}
			if (c != 0)
				printf("素因数:%d 指数:%d\n", i, c);

			c = 0;
		}
	}
	return 0;
}
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?