/****************************/
/* 大人と子どもの識別 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int nenrei;
/*
年齢の入力
*/
printf("年齢を入力してください ");
scanf("%d", &nenrei);
/*
判断
*/
if (nenrei >= 20)
printf(" 大人\n");
else
printf(" 子供\n");
return 0;
}
/****************************/
/* 正,負,ゼロの識別 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int kazu;
/*
年齢の入力
*/
printf("数字を入力してください ");
scanf("%d", &kazu);
/*
判断
*/
if (kazu == 0)
printf(" 0\n");
else {
if (kazu > 0)
printf(" 正\n");
else
printf(" 負\n");
}
return 0;
}
/****************************/
/* 成績の判定 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int ten;
/*
点数の入力
*/
printf("点数は? ");
scanf("%d", &ten);
/*
判定
*/
if (ten < 60)
printf(" 不可\n");
else {
if (ten < 70)
printf(" 可\n");
else {
if (ten < 80)
printf(" 良\n");
else
printf(" 優\n");
}
}
return 0;
}
/****************************/
/* 時間の変換 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int time, min, sw;
/*
変換方法の入力
*/
printf("変換方法は(0:時間→分, 1:分→時間)? ");
scanf("%d", &sw);
/*
データと変換
*/
if (sw == 0) {
printf(" 時間と分は? ");
scanf("%d %d", &time, &min);
min = 60 * time + min;
printf(" %d 分です\n",min);
}
else {
printf(" 分は? ");
scanf("%d", &min);
time = min / 60;
min = min % 60;
printf(" %d 時間 %d 分です\n", time, min);
}
return 0;
}
/****************************/
/* 閏年の判定 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int year;
/*
年の入力
*/
printf("年を入力して下さい? ");
scanf("%d", &year);
/*
判定
*/
if (((year%4 == 0) && (year%100 != 0)) || (year%400 == 0))
printf(" 閏年です\n");
else
printf(" 閏年ではありません\n");
return 0;
}
/***************************/
/* 正弦の計算 */
/* coded by Y.Suganum */
/***************************/
#include <stdio.h>
#include <math.h>
int main()
{
double pi, unit, x, y;
int i1;
/*
初期設定
*/
pi = 4.0 * atan(1.0);
unit = pi / 180.0;
x = 0.0;
/*
計算と出力
*/
for (i1 = 1; i1 <= 90; i1++) {
x += 1.0;
y = sin(x * unit);
printf("角度 %4.1f 正弦 %7.5f\n", x, y);
}
return 0;
}
/***************************/
/* 2乗和等の計算 */
/* coded by Y.Suganum */
/***************************/
#include <stdio.h>
int main()
{
double sum1, sum2, x;
int i1;
/*
初期設定
*/
sum1 = 0.0;
sum2 = 0.0;
/*
計算
*/
x = 0.0;
for (i1 = 0; i1 < 500; i1++) {
x += 1.0;
sum1 += x * x;
}
x = 0.0;
for (i1 = 0; i1 < 20; i1++) {
x += 1.0;
sum2 += 1.0 / x;
}
/*
出力
*/
printf("和=%f %f\n", sum1, sum2);
return 0;
}
/**************************************/
/* 100以上,及び,100未満のデータの和 */
/* coded by Y.Suganum */
/**************************************/
#include <stdio.h>
int main()
{
int i1, n, sum1, sum2, x;
/*
初期設定
*/
sum1 = 0;
sum2 = 0;
/*
データの数の入力
*/
printf("データの数は? ");
scanf("%d", &n);
/*
計算
*/
for (i1 = 0; i1 < n; i1++) {
printf(" データは? ");
scanf("%d", &x);
if (x < 100)
sum1 += x;
else
sum2 += x;
}
/*
出力
*/
printf("100未満の和 %d 100以上の和 %d\n", sum1, sum2);
return 0;
}
/***************************/
/* 正と負の数の個数 */
/* coded by Y.Suganum */
/***************************/
#include <stdio.h>
int main()
{
int i1, n, sei, hu, x;
/*
初期設定
*/
sei = 0;
hu = 0;
/*
データの数の入力
*/
printf("データの数は? ");
scanf("%d", &n);
/*
データを入力し数える
*/
for (i1 = 0; i1 < n; i1++) {
printf(" データは? ");
scanf("%d", &x);
if (x != 0) {
if (x > 0)
sei++;
else
hu++;
}
}
/*
出力
*/
printf("正の数 %d 負の数 %d\n", sei, hu);
return 0;
}
/***************************/
/* 抵抗の直列と並列 */
/* coded by Y.Suganum */
/***************************/
#include <stdio.h>
int main()
{
double cho, hei, x;
int i1, n;
/*
初期設定
*/
cho = 0.0;
hei = 0.0;
/*
データの数の入力
*/
printf("抵抗の数は? ");
scanf("%d", &n);
/*
抵抗の計算
*/
for (i1 = 0; i1 < n; i1++) {
printf(" 抵抗の値は? ");
scanf("%lf", &x);
cho += x;
hei += 1.0 / x;
}
hei = 1.0 / hei;
/*
出力
*/
printf("直列結合 %f 並列結合 %f\n", cho, hei);
return 0;
}
/****************************/
/* n!の計算 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
double kai;
int i1, n;
/*
初期設定
*/
kai = 1.0;
/*
nの入力
*/
printf("nの値は? ");
scanf("%d", &n);
if (n < 0)
printf("データが不適当です!\n");
/*
計算
*/
else {
for (i1 = 2; i1 <= n; i1++)
kai *= i1;
/*
出力
*/
printf(" n!=%f\n", kai);
}
return 0;
}
/****************************/
/* nCrの計算 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
double c, nk, rk, n_rk;
int i1, n, r;
/*
データの入力
*/
printf("nとrは? ");
scanf("%d %d", &n, &r);
if (n < 0 || r < 0 || r > n)
printf("データが不適当です!\n");
/*
実行
*/
else {
nk = 1.0;
for (i1 = 2; i1 <= n; i1++)
nk *= i1;
rk = 1.0;
for (i1 = 2; i1 <= r; i1++)
rk *= i1;
n_rk = 1.0;
for (i1 = 2; i1 <= (n-r); i1++)
n_rk *= i1;
c = nk / (rk * n_rk);
printf(" nCr= %f\n", c);
}
return 0;
}
/****************************/
/* 3n+1 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int n;
/*
nの入力
*/
printf("nの値は? ");
scanf("%d", &n);
printf(" n=%d\n", n);
/*
計算
*/
while (n > 1) {
if (n%2 == 0)
n = n / 2;
else
n = 3 * n + 1;
printf(" n=%d\n", n);
}
return 0;
}
/****************************/
/* 優、良、可、不可の割合 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
double a0, a1, a2, a3;
int i1, m, n;
/*
初期設定
*/
a0 = 0.;
a1 = 0.;
a2 = 0.;
a3 = 0.;
/*
入力
*/
printf("人数は? ");
scanf("%d",&n);
for (i1 = 0; i1 < n; i1++) {
printf(" 点数は ");
scanf("%d", &m);
if (m < 50)
a0 += 1.;
else {
if (m < 60)
a1 += 1.;
else {
if (m < 80)
a2 += 1.;
else
a3 += 1.;
}
}
}
/*
計算と出力
*/
a0 = a0 / n * 100.;
a1 = a1 / n * 100.;
a2 = a2 / n * 100.;
a3 = a3 / n * 100.;
printf("不可=%f%\n", a0);
printf(" 可=%f%\n", a1);
printf(" 良=%f%\n", a2);
printf(" 優=%f%\n", a3);
return 0;
}
/****************************/
/* 給与の計算 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int i1, kyuyo, k1, n, m10000, m5000, m1000, m500, m100;
FILE *in;
/*
初期設定とファイルのオープン
*/
m10000 = 0;
m5000 = 0;
m1000 = 0;
m500 = 0;
m100 = 0;
in = fopen("kyuyo", "r");
/*
データの読み込みと計算
*/
fscanf(in,"%d", &n);
for (i1 = 0; i1 < n; i1++) {
fscanf(in, "%d", &kyuyo);
k1 = kyuyo / 10000;
kyuyo -= k1 * 10000;
m10000 += k1;
k1 = kyuyo / 5000;
kyuyo -= k1 * 5000;
m5000 += k1;
k1 = kyuyo / 1000;
kyuyo -= k1 * 1000;
m1000 += k1;
k1 = kyuyo / 500;
kyuyo -= k1 * 500;
m500 += k1;
k1 = kyuyo / 100;
m100 += k1;
}
/*
出力
*/
printf("10000円札 %d 枚\n",m10000);
printf("5000円札 %d 枚\n",m5000);
printf("1000円札 %d 枚\n",m1000);
printf("500円硬貨 %d 枚\n",m500);
printf("100円硬貨 %d 枚\n",m100);
fclose(in);
return 0;
}
/****************************/
/* 九九の表の出力 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int i1, i2;
for (i1 = 1; i1 <= 9; i1++) {
for (i2 = 1; i2 <= 9; i2++)
printf("%3d", i1*i2);
printf("\n");
}
return 0;
}
/****************************/
/* 数字の分離 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int n, m, k = 100000000, k1, sw = 0;
printf("正の整数を入力してください ");
scanf("%d", &n);
// 正順
m = n;
while (k > 0) {
k1 = m / k;
m %= k;
k /= 10;
if (k1 > 0) {
sw = 1;
printf("%d ", k1);
}
else {
if (sw > 0)
printf("%d ", k1);
}
}
printf("\n");
// 逆順
m = n;
while (m > 0) {
k1 = m % 10;
m /= 10;
printf("%d ", k1);
}
return 0;
}
/****************************/
/* 1のビット数を数える */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int i1, n, kazu = 0;
unsigned int mask = 0x80000000;
/*
整数の入力
*/
printf("整数を入力して下さい ");
scanf("%d", &n);
/*
個数を数える
*/
for (i1 = 0; i1 < 32; i1++) {
if ((mask & n) != 0)
kazu++;
mask >>= 1;
}
printf("1のビット数は %d\n", kazu);
return 0;
}
/************************************/
/* 最大値と最小値の計算(未知個数) */
/* coded by Y.Suganuma */
/************************************/
#include <stdio.h>
int main()
{
double max = 0, min = 0, x;
int sw = 0;
FILE *in;
/*
データの入力と比較
*/
in = fopen("input", "r");
while (EOF != fscanf(in, "%lf", &x)) {
if (sw == 0) {
sw = 1;
max = x;
min = x;
}
else {
if (x > max)
max = x;
else {
if (x < min)
min = x;
}
}
}
/*
結果の出力
*/
printf("最大値= %f 最小値= %f\n", max, min);
return 0;
}
/****************************/
/* 最高点とそのそのクラス */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
int main()
{
int i1, i2, max, max_c = 0, n, m, ten;
/*
初期設定
*/
max = 0;
/*
データの入力と計算
*/
printf("クラスの数は? ");
scanf("%d", &n);
for (i1 = 0; i1 < n; i1++) {
printf("%d 番目のクラスの人数は ", i1+1);
scanf("%d", &m);
for (i2 = 0; i2 < m; i2++) {
printf(" %d 番目の人の点は? ", i2+1);
scanf("%d", &ten);
if (ten > max) {
max_c = i1 + 1;
max = ten;
}
}
}
/*
出力
*/
printf("最高点はクラス %d の %d 点\n", max_c, max);
return 0;
}
/****************************/
/* ニュートン法 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>
int main()
{
double g, dg, eps1, eps2, x, x0, x1, s, ds;
int max, ind, sw;
/*
データの入力
*/
printf("eps1? ");
scanf("%lf", &eps1);
printf("eps2? ");
scanf("%lf", &eps2);
printf("最大試行回数? ");
scanf("%d", &max);
printf("初期値? ");
scanf("%lf", &x0);
/*
初期設定
*/
x1 = x0;
x = x1;
ind = 0;
sw = 0;
/*
実行
*/
while (sw == 0 && ind >= 0) {
sw = 1;
ind = ind + 1;
g = exp(x1) - 3.0 * x1;
if (fabs(g) > eps2) {
if (ind <= max) {
dg = exp(x1) - 3.0;
if (fabs(dg) > eps2) {
x = x1 - g / dg;
if (fabs(x-x1) > eps1) {
x1 = x;
sw = 0;
}
}
else
ind = -1;
}
else
ind = -1;
}
}
/*
出力
*/
if (ind < 0)
printf("解を求めることができません!\n");
else {
s = exp(x) - 3.0 * x;
ds = exp(x) - 3.0;
printf("ind=%d x=%f f=%f df=%f\n", ind, x, s, ds);
}
return 0;
}
/****************************/
/* 二分法 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>
int main()
{
double eps1, eps2, f, f1, f2, x, x1, x2;
int max, ind, sw;
/*
データの入力
*/
printf("eps1? ");
scanf("%lf", &eps1);
printf("eps2? ");
scanf("%lf", &eps2);
printf("最大試行回数? ");
scanf("%d", &max);
sw = 0;
while (sw == 0) {
printf("初期値(2つ)? ");
scanf("%lf %lf", &x1, &x2);
f1 = exp(x1) - 3.0 * x1;
f2 = exp(x2) - 3.0 * x2;
if (f1*f2 < 0.0)
sw = 1;
}
/*
初期設定
*/
f1 = exp(x1) - 3.0 * x1;
f2 = exp(x2) - 3.0 * x2;
ind = 0;
sw = 0;
/*
実行
*/
while (sw == 0 && ind >= 0) {
ind++;
sw = 1;
x = 0.5 * (x1 + x2);
f = exp(x) - 3.0 * x;
if (fabs(f) > eps2) {
if (ind <= max) {
if (fabs(x1-x2) > eps1) {
sw = 0;
if (f*f1 < 0.0) {
x2 = x;
f2 = f;
}
else {
x1 = x;
f1 = f;
}
}
}
else
ind = -1;
}
}
/*
出力
*/
if (ind < 0)
printf("解を求めることができません!\n");
else
printf("ind=%d x=%f f= %f\n", ind, x, f);
return 0;
}
/****************************/
/* 台形則による積分 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>
int main()
{
double f1, f2, h, s, x, x1, x2;
int i1, n;
/*
データの入力
*/
printf("積分区間は? ");
scanf("%lf %lf", &x1, &x2);
printf("分割数は? ");
scanf("%d", &n);
/*
初期設定
*/
f1 = exp(-0.5 * x1 * x1) / 2.506628275;
f2 = exp(-0.5 * x2 * x2) / 2.506628275;
s = 0.5 * (f1 + f2);
h = (x2 - x1) / n;
x = x1 + h;
/*
実行
*/
for (i1 = 0; i1 < n-1; i1++) {
s = s + exp(-0.5 * x * x) / 2.506628275;
x = x + h;
}
s = s * h;
/*
出力
*/
printf("面積=%f\n", s);
return 0;
}
| 菅沼ホーム | 演習解答例目次 | 本文目次 | 付録 | 索引 |