/***************************/ /* ベクトルの大きさの計算 */ /* code by Y.Suganuma */ /***************************/ #include <stdio.h> #include <math.h> int main() { double s, x[10]; int i1, max, n; /* 初期設定 */ max = 10; s = 0.; /* データの入力 */ printf("ベクトルの次元は? "); scanf("%d", &n); if (n > max) printf("次元が大きすぎます!\n"); else { for (i1 = 0; i1 < n; i1++) { printf("%d 番目の要素は? ", i1+1); scanf("%lf", &x[i1]); } /* 計算 */ for (i1 = 0; i1 < n; i1 = i1+1) s += x[i1] * x[i1]; s = sqrt(s); /* 出力 */ printf("結果は=%f\n", s); } return 0; }
/****************************/ /* ベクトルの和の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int i1, max, n; double a[10], b[10], c[10]; /* 初期設定 */ max = 10; /* 入力 */ printf("ベクトルの次元は? "); scanf("%d", &n); if (n > max) printf("次元が大きすぎます"); else { for (i1 = 0; i1 < n; i1++) { printf("ベクトルa,bの %d 番目の要素は? ",i1+1); scanf("%lf %lf", &a[i1], &b[i1]); } /* 実行 */ printf("和は\n"); for (i1 = 0; i1 < n; i1++) { c[i1] = a[i1] + b[i1]; printf(" %f", c[i1]); } printf("\n"); } return 0; }
/****************************/ /* 内積の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { double x, a[10], b[10]; int max, n, i1; /* 初期設定 */ max = 10; x = 0.0; /* データの入力 */ printf("次元は? "); scanf("%d", &n); if (n > max) printf("次元が大きすぎます!\n"); else { for (i1 = 0; i1 < n; i1++) { printf(" ベクトルaの %d 番目の要素は? ",i1+1); scanf("%lf", &(a[i1])); } for (i1 = 0; i1 < n; i1++) { printf(" ベクトルbの %d 番目の要素は? ",i1+1); scanf("%lf", &(b[i1])); } /* 計算 */ for (i1 = 0; i1 < n; i1++) x += a[i1] * b[i1]; /* 出力 */ printf("内積=%f\n", x); } return 0; }
/****************************/ /* データの交換 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int a[10], b[10], c[10], d[10], i1, k, max, n, x1; /* 初期設定 */ k = 0; max = 10; /* 入力 */ printf("データの数は? "); scanf("%d", &n); if (n > max) printf("データが多すぎます!\n"); else { for (i1 = 0; i1 < n; i1++) { printf("a,bの %d 番目のデータは? ",i1+1); scanf("%d %d", &a[i1], &b[i1]); } /* 実行 */ for (i1 = 0; i1 < n; i1++) { if (a[i1] > b[i1]) { c[k] = a[i1]; d[k] = b[i1]; x1 = a[i1]; a[i1] = b[i1]; b[i1] = x1; k++; } } /* 出力 */ printf("操作回数=%d\n", k); for (i1 = 0; i1 < k; i1++) printf(" a,b %d %d\n", c[i1], d[i1]); } return 0; }
/************************************/ /* 平均値の計算(平均点以下の出力) */ /* coded by Y.Suganuma */ /************************************/ #include <stdio.h> int main() { double mean1, mean2, sum1, sum2, x[50], y[50]; int max, n, i1, kazu; /* 初期設定 */ sum1 = 0.0; sum2 = 0.0; max = 50; kazu = 0; /* データの数の読み込み */ printf("人数は? "); scanf("%d", &n); if (n > max) printf("人数が多すぎます\n"); /* データの読み込み */ else { for (i1 = 0; i1 < n; i1++) { printf("%d 番目の人の英語と数学の点は? ", i1+1); scanf("%lf %lf", &(x[i1]), &(y[i1])); sum1 += x[i1]; sum2 += y[i1]; } /* 結果の計算と出力 */ if (n <= 0) printf("データがない!\n"); else { mean1 = sum1 / n; mean2 = sum2 / n; printf(" 英語=%f 数学=%f\n", mean1, mean2); for (i1 = 0; i1 < n; i1++) { if (x[i1] <= mean1 || y[i1] <= mean2) kazu++; } printf(" 平均点以下の人数は %d 人\n", kazu); } } return 0; }
/****************************/ /* 原点までの距離の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <math.h> int main() { double mean, sum, x1, x[50], y[50], r[50]; int i1, k, max, n; /* 初期設定 */ max = 50; sum = 0.0; k = 0; /* データの入力と距離の計算 */ printf("点の数は? "); scanf("%d", &n); if (n > max) printf("点の数が多すぎます!\n"); else { for (i1 = 0; i1 < n; i1++) { printf("%d 番目の点の座標は? ", i1+1); scanf("%lf %lf", &x[i1], &y[i1]); x1 = x[i1] * x[i1] + y[i1] * y[i1]; r[i1] = sqrt(x1); sum += r[i1]; } /* 計算 */ if (n <= 0) printf("データがありません!\n"); else { mean = sum / n; printf("平均距離は %f\n点の座標は\n", mean); for (i1 = 0; i1 < n; i1++) { if (r[i1] >= mean) { k++; printf("%f %f\n", x[i1], y[i1]); } } printf(" 点の数=%d\n", k); } } return 0; }
/****************************/ /* 成分の%の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> int main() { double data, sum, x[10], y[10]; int max, n, i1; FILE *in, *out; /* 初期設定 */ max = 10; sum = 0.0; n = 0; in = fopen("input", "r"); /* データの読み込み */ while (EOF != fscanf(in, "%lf", &data)) { if (n >= max) { printf("データが多すぎます!\n"); exit(1); } else { x[n] = data; sum += data; n++; } } fclose(in); /* %の計算 */ for (i1 = 0; i1 < n; i1++) y[i1] = x[i1] / sum * 100.0; /* 出力 */ out = fopen("output", "w"); for (i1 = 0; i1 < n; i1++) fprintf(out,"%d 番目の成分 %6.2f %\n", i1+1, y[i1]); fclose(out); return 0; }
RANGE NUM 0- 10 2 ** 11- 20 5 ***** ・・・・ 91-100 3 ***
/****************************/ /* グラフの出力(1) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int i1, i2, k, r1, r2, m, n, num[10]; /* 初期設定 */ r1 = 1; r2 = 10; for (i1 = 0; i1 < 10; i1=i1+1) num[i1] = 0; /* 入力 */ printf("人数は? "); scanf("%d", &n); for (i1 = 0; i1 < n; i1++) { printf("%d 番目の人の点は? ", i1+1); scanf("%d", &m); k = (m - 1) / 10; if (k < 0) k = 0; num[k] += 1; } /* 出力 */ printf(" RANGE NUM\n"); for (i1 = 0; i1 < 10; i1++) { if (i1 == 0) printf("%3d-%3d%5d ", 0, r2, num[i1]); else printf("%3d-%3d%5d ", r1, r2, num[i1]); for (i2 = 0; i2 < num[i1]; i2++) printf("*"); printf("\n"); r1 += 10; r2 += 10; } return 0; }
* * * * * ・・・・・ * * * * * * * -------------- ・・・・・ --------- 1 2 3 ・・・・・ 11 12
/****************************/ /* グラフの出力(2) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int i1, i2, m[12]; /* 入力 */ for (i1 = 0; i1 < 12; i1++) { printf("%d 月の売り上げは(0~9)? ", i1+1); scanf("%d", &m[i1]); } /* 出力 */ printf("\n"); for (i1 = 9; i1 > 0; i1--) { for (i2 = 0; i2 < 12; i2++) { if (m[i2] >= i1) printf(" *"); else printf(" "); } printf("\n"); } printf("------------------------------------\n"); for (i1 = 0; i1 < 12; i1++) printf("%3d",i1+1); printf("\n"); return 0; }
/****************************/ /* 売上の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int i1, k1, k2, m, mean, n, x[30]; /* 初期設定 */ mean = 0; m = 0; /* データの入力 */ for (i1 = 0; i1 < 30; i1++) { printf(" %d 日の売上は? ", i1+1); scanf("%d", &x[i1]); } while (m < 1 || m > 30) { printf("基準日(1から30)は? "); scanf("%d", &m); } /* 計算 */ k1 = m - 3; if (k1 < 1) k1 = 1; k2 = m + 3; if (k2 > 30) k2 = 30; n = k2 - k1 + 1; for (i1 = k1-1; i1 < k2; i1++) mean += x[i1]; mean /= n; /* 出力 */ printf(" 平均=%d\n", mean); return 0; }
/****************************/ /* 0、1、... */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { int i1, n, m, k1, kk[10]; /* 初期設定 */ for (i1 = 0; i1 < 10; i1++) kk[i1] = 0; /* 入力 */ printf("データの数は? "); scanf("%d", &n); for (i1 = 0; i1 < n; i1++) { printf(" 正の整数? "); scanf("%d", &m); k1 = m % 10; kk[k1]++; } /* 出力 */ for (i1 = 0; i1 < 10; i1++) { k1 = kk[i1] * 100 / n; printf("%d %d 個 %d %\n", i1, kk[i1], k1); } return 0; }
/************************************/ /* 平均点と平均点以上の人数 */ /* coded by Y.Suganuma */ /************************************/ #include <stdio.h> #include <stdlib.h> int main() { int i1, i2, max, mean, n, m[5], n_m, m_m, nin, ten[5][50], num[5]; /* 初期設定 */ n_m = 5; m_m = 50; mean = 0; nin = 0; max = 0; /* データの入力と平均点の計算 */ printf("クラスの数は? "); scanf("%d", &n); if (n > n_m) printf("クラスの数が多すぎます!\n"); else { for (i1 = 0; i1 < n; i1++) { printf("%d 番目のクラスの人数は ", i1+1); scanf("%d", &m[i1]); if (m[i1] > m_m) { printf("人数が多すぎます!\n"); exit(1); } else { nin += m[i1]; for (i2 = 0; i2 < m[i1]; i2++) { printf(" %d 番目の人の点は? ",i2+1); scanf("%d", &(ten[i1][i2])); mean += ten[i1][i2]; } } } mean /= nin; /* 比較 */ for (i1 = 0; i1 < n; i1++) { num[i1] = 0; for (i2 = 0; i2 < m[i1]; i2++) { if (ten[i1][i2] > max) max = ten[i1][i2]; if (ten[i1][i2] >= mean) num[i1]++; } } /* 出力 */ printf("最高点=%d 平均点=%d\n", max, mean); printf("平均点以上の人数は\n"); for (i1 = 0; i1 < n; i1=i1+1) printf(" クラス %d 人数 %d\n", i1+1, num[i1]); } return 0; }
/****************************/ /* 点間の距離の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <math.h> int main() { double max_r, r, r1, r2, x[10], y[10]; int k1 = 0, k2 = 0, max, n, i1, i2; /* 初期設定 */ max = 10; max_r = 0.0; /* データの入力 */ printf("点の数は? "); scanf("%d", &n); if (n > max) printf("点の数が大きすぎます!\n"); else { for (i1 = 0; i1 < n; i1++) { printf(" %d 番目の点の座標は? ", i1+1); scanf("%lf %lf", &(x[i1]), &(y[i1])); } /* 計算 */ for (i1 = 0; i1 < n-1; i1++) { for (i2 = i1+1; i2 < n; i2++) { r1 = x[i1] - x[i2]; r2 = y[i1] - y[i2]; r = sqrt(r1 * r1 + r2 * r2); if (r > max_r) { max_r = r; k1 = i1; k2 = i2; } } } /* 出力 */ printf("点(%f,%f)と(%f,%f)間で距離は %f\n", x[k1], y[k1], x[k2], y[k2], max_r); } return 0; }
/****************************/ /* 上位m人の平均 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int main() { double data[10], mean, x; int i1, i2, m, n, limit, num, min; /* 初期設定 */ limit = 10; num = 0; min = -1; mean = 0.0; /* 人数の入力 */ printf("人数は? "); scanf("%d", &n); printf("上位何人? "); scanf("%d", &m); if (m > limit) printf("データが多すぎます!\n"); /* データの入力 */ else { for (i1 = 0; i1 < n; i1++) { printf(" データは? "); scanf("%lf", &x); // m人以下のとき if (num < m) { data[num] = x; if (min < 0 || x < data[min]) min = num; } // m人より多いとき else { if (x > data[min]) { data[min] = x; min = 0; for (i2 = 1; i2 < m; i2++) { if (data[i2] < data[min]) min = i2; } } } num++; } /* 平均値の計算 */ if (m <= 0 || n <= 0 || num <= 0) printf("データがない!\n"); else { if (num < m) m = num; for (i1 = 0; i1 < m; i1++) mean += data[i1]; mean /= m; printf("\n平均値=%f\n", mean); } } return 0; }
/****************************/ /* 成分の%の計算(calloc) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> int main() { double sum, *x; int n, i1; FILE *in; /* 初期設定 */ sum = 0.0; in = fopen("input", "r"); /* データ数の読み込みとメモリの確保 */ fscanf(in, "%d", &n); x = (double *)calloc(n, sizeof(double)); /* データの読み込み */ for (i1 = 0; i1 < n; i1++) { fscanf(in, "%lf", &x[i1]); sum += x[i1]; } /* %の計算と出力 */ for (i1 = 0; i1 < n; i1++) printf("%d 番目の成分 %6.2f %\n", i1+1, x[i1]/sum*100.0); free(x); return 0; }
/****************************/ /* 成分の%の計算(new) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> int main() { double sum, *x; int n, i1; FILE *in; /* 初期設定 */ sum = 0.0; in = fopen("input", "r"); /* データ数の読み込みとメモリの確保 */ fscanf(in, "%d", &n); x = new double [n]; /* データの読み込み */ for (i1 = 0; i1 < n; i1++) { fscanf(in, "%lf", &x[i1]); sum += x[i1]; } /* %の計算と出力 */ for (i1 = 0; i1 < n; i1++) printf("%d 番目の成分 %6.2f %\n", i1+1, x[i1]/sum*100.0); delete [] x; return 0; }
/**********************************/ /* 平均点と平均点以下の人(calloc) */ /* coded by Y.Suganuma */ /**********************************/ #include <stdio.h> #include <stdlib.h> int main() { int i1, i2, **cl, mean = 0, n, nin = 0, *m; char ***name; /* データの入力と平均点の計算 */ printf("クラスの数は? "); scanf("%d", &n); m = (int *)calloc(n, sizeof(int)); // 各クラスの人数 cl = (int **)calloc(n, sizeof(int *)); // 点数 name = (char ***)calloc(n, sizeof(char **)); // 名前 for (i1 = 0; i1 < n; i1++) { printf("%d 番目のクラスの人数は ",i1+1); scanf("%d", &m[i1]); cl[i1] = (int *)calloc(m[i1], sizeof(int)); name[i1] = (char **)calloc(m[i1], sizeof(char *)); nin += m[i1]; for (i2 = 0; i2 < m[i1]; i2++) { name[i1][i2] = (char *)calloc(20, sizeof(char)); printf(" %d 番目の人の名前は? ",i2+1); scanf("%s", name[i1][i2]); printf(" 点は? "); scanf("%d", &(cl[i1][i2])); mean += cl[i1][i2]; } } mean /= nin; printf("平均値 %d\n", mean); /* 比較と出力 */ for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m[i1]; i2++) { if (cl[i1][i2] <= mean) printf(" %3d 点 %s\n", cl[i1][i2], name[i1][i2]); free(name[i1][i2]); } free(cl[i1]); free(name[i1]); } free(cl); free(name); return 0; }
/*******************************/ /* 平均点と平均点以下の人(new) */ /* coded by Y.Suganuma */ /*******************************/ #include <stdio.h> #include <stdlib.h> int main() { int i1, i2, **cl, mean = 0, n, nin = 0, *m; char ***name; /* データの入力と平均点の計算 */ printf("クラスの数は? "); scanf("%d", &n); m = new int [n]; // 各クラスの人数 cl = new int * [n]; // 点数 name = new char ** [n]; // 名前 for (i1 = 0; i1 < n; i1++) { printf("%d 番目のクラスの人数は ",i1+1); scanf("%d", &m[i1]); cl[i1] = new int [m[i1]]; name[i1] = new char * [m[i1]]; nin += m[i1]; for (i2 = 0; i2 < m[i1]; i2++) { name[i1][i2] = new char [20]; printf(" %d 番目の人の名前は? ",i2+1); scanf("%s", name[i1][i2]); printf(" 点は? "); scanf("%d", &(cl[i1][i2])); mean += cl[i1][i2]; } } mean /= nin; printf("平均値 %d\n", mean); /* 比較と出力 */ for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m[i1]; i2++) { if (cl[i1][i2] <= mean) printf(" %3d 点 %s\n", cl[i1][i2], name[i1][i2]); delete [] name[i1][i2]; } delete [] cl[i1]; delete [] name[i1]; } delete [] cl; delete [] name; return 0; }
菅沼ホーム | 演習解答例目次 | 本文目次 | 付録 | 索引 |