/****************************/ /* 大人と子どもの識別 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int handan(int); int main() { int nenrei, sw; /* 年齢の入力 */ printf("年齢を入力してください "); scanf("%d", &nenrei); /* 判断 */ sw = handan(nenrei); if (sw > 0) printf(" 大人\n"); else printf(" 子供\n"); return 0; } /***************************/ /* 大人か子供の判断 */ /* nen : 年齢 */ /* return : =0 : 子供 */ /* =1 : 大人 */ /***************************/ int handan(int nen) { int sw; sw = (nen >= 20) ? 1 : 0; return sw; }
/****************************/ /* 正,負,ゼロの識別 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int handan(int); int main() { int kazu, sw; /* 年齢の入力 */ printf("数字を入力してください "); scanf("%d", &kazu); /* 判断 */ sw = handan(kazu); switch (sw) { case 0: printf(" 0\n"); break; case 1: printf(" 正\n"); break; default: printf(" 負\n"); break; } return 0; } /**************************/ /* 正,負,ゼロの識別 */ /* kazu : 整数 */ /* return : =0 : 0 */ /* =-1 : 負 */ /* =1 : 正 */ /**************************/ int handan(int kazu) { int sw; if (kazu == 0) sw = 0; else { if (kazu > 0) sw = 1; else sw = -1; } return sw; }
/****************************/ /* 成績の判定 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int handan(int); int main() { int ten, sw; /* 点数の入力 */ printf("点数は? "); scanf("%d", &ten); /* 判定 */ sw = handan(ten); switch (sw) { case 0: printf(" 不可\n"); break; case 1: printf(" 可\n"); break; case 2: printf(" 良\n"); break; default: printf(" 優\n"); break; } return 0; } /***************************/ /* 成績の判定 */ /* ten : 点数 */ /* return : =0 : 不可 */ /* =1 : 可 */ /* =2 : 良 */ /* =3 : 優 */ /***************************/ int handan(int ten) { int sw; if (ten < 60) sw = 0; else { if (ten < 70) sw = 1; else { if (ten < 80) sw = 2; else sw = 3; } } return sw; }
/****************************/ /* 時間の変換 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> void time_cv(int *, int *, int); int main() { int time, min, sw; /* 変換方法の入力 */ printf("変換方法は(0:時間→分, 1:分→時間)? "); scanf("%d", &sw); /* データと変換 */ if (sw == 0) { printf(" 時間と分は? "); scanf("%d %d", &time, &min); time_cv(&time, &min, sw); printf(" %d 分です\n", min); } else { printf(" 分は? "); scanf("%d", &min); time_cv(&time, &min, sw); printf(" %d 時間 %d 分です\n", time, min); } return 0; } /*****************************/ /* 時間の変換 */ /* time : 時間 */ /* min : 分 */ /* sw : =0 : 時間から分 */ /* =1 : 分から時間 */ /*****************************/ void time_cv(int *time, int *min, int sw) { if (sw == 0) *min = 60 * *time + *min; else { *time = *min / 60; *min = *min % 60; } }
/****************************/ /* 閏年の判定 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int hantei(int); int main() { int year; /* 年の入力 */ printf("年を入力して下さい? "); scanf("%d", &year); /* 判定 */ if (hantei(year)) printf(" 閏年です\n"); else printf(" 閏年ではありません\n"); return 0; } /******************/ /* 閏年の判定 */ /* yean : 年 */ /******************/ int hantei(int year) { int sw; if (((year%4 == 0) && (year%100 != 0)) || (year%400 == 0)) sw = 1; else sw = 0; return sw; }
/**************************************/ /* 100以上,及び,100未満のデータの和 */ /* coded by Y.Suganum */ /**************************************/ #include <stdio.h> #include <stdlib.h> void sum100(double *, double *, double *, int); int main() { double sum1, sum2, *x; int i1, n; /* データの入力 */ printf("データの数は? "); scanf("%d", &n); x = (double *)malloc(n*sizeof(double)); for (i1 = 0; i1 < n; i1++) { printf(" データは? "); scanf("%lf", &x[i1]); } /* 計算 */ sum100(&sum1, &sum2, x, n); /* 出力 */ printf("100未満の和 %f 100以上の和 %f\n", sum1, sum2); return 0; } /**************************************/ /* 100以上,及び,100未満のデータの和 */ /* sum1 : 100未満の和 */ /* sum2 : 100以上の和 */ /* x : データ */ /* n : データの数 */ /**************************************/ void sum100(double *sum1, double *sum2, double *x, int n) { int i1; /* 初期設定 */ *sum1 = 0.0; *sum2 = 0.0; /* 計算 */ for (i1 = 0; i1 < n; i1++) { if (x[i1] < 100.0) *sum1 += x[i1]; else *sum2 += x[i1]; } }
/***************************/ /* 正と負の数の個数 */ /* coded by Y.Suganum */ /***************************/ #include <stdio.h> #include <stdlib.h> void kazu(int *, int *, int *, int); int main() { int i1, n, sei, hu, *x; /* データの入力 */ printf("データの数は? "); scanf("%d", &n); x = (int *)malloc(n*sizeof(int)); for (i1 = 0; i1 < n; i1++) { printf(" データは? "); scanf("%d", &x[i1]); } /* 数える */ kazu(&sei, &hu, x, n); /* 出力 */ printf("正の数 %d 負の数 %d\n",sei,hu); return 0; } /*************************/ /* 正と負の数の個数 */ /* sei : 正の数の数 */ /* hu : 負の数の数 */ /* x : データ */ /* n : データの数 */ /*************************/ void kazu(int *sei, int *hu, int *x, int n) { int i1; /* 初期設定 */ *sei = 0; *hu = 0; /* 数える */ for (i1 = 0; i1 < n; i1++) { if (x[i1] != 0) { if (x[i1] > 0) (*sei)++; else (*hu)++; } } }
/***************************/ /* 抵抗の直列と並列 */ /* coded by Y.Suganum */ /***************************/ #include <stdio.h> #include <stdlib.h> void teiko(double *, double *, double *, int); int main() { double cho, hei, *x; int i1, n; /* データの入力 */ printf("抵抗の数は? "); scanf("%d", &n); x = (double *)malloc(n*sizeof(double)); for (i1 = 0; i1 < n; i1++) { printf(" 抵抗の値は? "); scanf("%lf", &x[i1]); } /* 抵抗の計算 */ teiko(&cho, &hei, x, n); /* 出力 */ printf("直列結合 %f 並列結合 %f\n", cho, hei); return 0; } /***********************/ /* 抵抗の直列と並列 */ /* cho : 直列結合 */ /* hei : 並列結合 */ /* x : データ */ /* n : データの数 */ /***********************/ void teiko(double *cho, double *hei, double *x, int n) { int i1; /* 初期設定 */ *cho = 0.0; *hei = 0.0; /* 抵抗の計算 */ for (i1 = 0; i1 < n; i1++) { *cho += x[i1]; *hei += 1.0 / x[i1]; } *hei = 1.0 / *hei; }
/****************************/ /* 優、良、可、不可の割合 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> void seiseki(double *, int *, int); int main() { double a[4]; int i1, *m, n; /* 入力 */ printf("人数は? "); scanf("%d", &n); m = (int *)malloc(n*sizeof(int)); for (i1 = 0; i1 < n; i1++) { printf(" 点数は "); scanf("%d", &m[i1]); } /* 計算 */ seiseki(a, m, n); /* 出力 */ printf("不可=%f%\n", a[0]); printf(" 可=%f%\n", a[1]); printf(" 良=%f%\n", a[2]); printf(" 優=%f%\n", a[3]); return 0; } /*********************************/ /* 優、良、可、不可の割合 */ /* a : 不可,可,良,優の% */ /* m : データ(点数) */ /* n : 人数 */ /*********************************/ void seiseki(double *a, int *m, int n) { int i1; /* 初期設定 */ for (i1 = 0; i1 < 4; i1++) a[i1] = 0.0; /* 計算 */ for (i1 = 0; i1 < n; i1++) { if (m[i1] < 50) a[0] += 1.; else { if (m[i1] < 60) a[1] += 1.; else { if (m[i1] < 80) a[2] += 1.; else a[3] += 1.; } } } /* 計算と出力 */ for (i1 = 0; i1 < 4; i1++) a[i1] = a[i1] / n * 100.0; }
/****************************/ /* 給与の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> void maisu(int *, int *, int); int main() { int i1, *kyuyo, n, m[5]; FILE *in; /* ファイルのオープンとデータの読み込み */ in = fopen("kyuyo", "r"); fscanf(in, "%d", &n); kyuyo = (int *)malloc(n*sizeof(int)); for (i1 = 0; i1 < n; i1++) fscanf(in, "%d", &kyuyo[i1]); fclose(in); /* 枚数の決定 */ maisu(m, kyuyo, n); /* 出力 */ printf("10000円札 %d 枚\n", m[0]); printf("5000円札 %d 枚\n", m[1]); printf("1000円札 %d 枚\n", m[2]); printf("500円硬貨 %d 枚\n", m[3]); printf("100円硬貨 %d 枚\n", m[4]); return 0; } /*****************************************/ /* 給与の計算 */ /* m : 各枚数 */ /* kyuyo : 各人の給与 */ /* (給与の内容変化に注意) */ /* n : 人数 */ /*****************************************/ void maisu(int *m, int *kyuyo, int n) { int i1, k1; /* 初期設定 */ for (i1 = 0; i1 < 5; i1++) m[i1] = 0; /* 計算 */ for (i1 = 0; i1 < n; i1++) { k1 = kyuyo[i1] / 10000; kyuyo[i1] -= k1 * 10000; m[0] += k1; k1 = kyuyo[i1] / 5000; kyuyo[i1] -= k1 * 5000; m[1] += k1; k1 = kyuyo[i1] / 1000; kyuyo[i1] -= k1 * 1000; m[2] += k1; k1 = kyuyo[i1] / 500; kyuyo[i1] -= k1 * 500; m[3] += k1; k1 = kyuyo[i1] / 100; m[4] += k1; } }
/****************************/ /* 数字の分離 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> void sepa(int); int main() { int n; // データの入力 printf("正の整数を入力してください "); scanf("%d", &n); // 分離 sepa(n); return 0; } /***************************/ /* 数字の分離 */ /* n : 対象となる数字 */ /***************************/ void sepa(int n) { int m, k = 100000000, k1, sw = 0; // 正順 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); } }
/****************************/ /* 1のビット数を数える */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int bit(int); int main() { int n; /* 整数の入力 */ printf("整数を入力して下さい "); scanf("%d", &n); /* 数を数え,出力 */ printf("1のビット数は %d\n", bit(n)); return 0; } /****************************/ /* 1のビット数を数える */ /* n : 整数 */ /****************************/ int bit(int n) { int i1, kazu = 0; unsigned int mask = 0x80000000; /* 数を数える */ for (i1 = 0; i1 < 32; i1++) { if ((mask & n) != 0) kazu++; mask >>= 1; } return kazu; }
/***************************/ /* ベクトルの大きさの計算 */ /* code by Y.Suganuma */ /***************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> double ook(int, double *); int main() { double *x; int i1, n; /* データの入力 */ printf("ベクトルの次元は? "); scanf("%d", &n); x = (double *)calloc(n, sizeof(double)); for (i1 = 0; i1 < n; i1++) { printf(" %d 番目の要素は? ",i1+1); scanf("%lf", &x[i1]); } /* 計算と出力 */ printf("結果は=%f\n", ook(n, x)); return 0; } /***********************/ /* ベクトルの大きさ */ /* n : データの数 */ /* x : データ */ /***********************/ double ook(int n, double *x) { double s = 0.0; int i1; /* 計算 */ for (i1 = 0; i1 < n; i1++) s += x[i1] * x[i1]; s = sqrt(s); return s; }
/****************************/ /* ベクトルの和の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> void add(int, double *, double *, double *); int main() { int i1, n; double *a, *b, *c; /* 入力 */ printf("ベクトルの次元は? "); scanf("%d", &n); a = (double *)malloc(n*sizeof(double)); b = (double *)malloc(n*sizeof(double)); c = (double *)malloc(n*sizeof(double)); for (i1 = 0; i1 < n; i1=i1+1) { printf("ベクトルa,bの %d 番目の要素は? ",i1+1); scanf("%lf %lf", &a[i1], &b[i1]); } /* 実行 */ add(n, a, b, c); /* 出力 */ printf("和は\n"); for (i1 = 0; i1 < n; i1=i1+1) printf(" %f", c[i1]); printf("\n"); return 0; } /************************/ /* ベクトルa,bの和c */ /* n : 次元 */ /************************/ void add(int n, double *a, double *b, double *c) { int i1; for (i1 = 0; i1 < n; i1++) c[i1] = a[i1] + b[i1]; }
/****************************/ /* 内積の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> double naiseki(int, double *, double *); int main() { double *a, *b; int n, i1; /* データの入力 */ printf("次元は? "); scanf("%d", &n); a = (double *)malloc(n*sizeof(double)); b = (double *)malloc(n*sizeof(double)); 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])); } /* 計算と出力 */ printf("内積=%f\n", naiseki(n, a, b)); return 0; } /**********************/ /* aとbの内積 */ /* n : 次元 */ /* return : 内積 */ /**********************/ double naiseki(int n, double *a, double *b) { double x = 0.0; int i1; for (i1 = 0; i1 < n; i1++) x += a[i1] * b[i1]; return x; }
/****************************/ /* データの交換 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> int change(double *, double *, int, int *); int main() { double *a, *b; int i1, *k, n, m; /* 入力 */ printf("データの数は? "); scanf("%d", &n); a = (double *)malloc(n*sizeof(double)); b = (double *)malloc(n*sizeof(double)); k = (int *)calloc(n, sizeof(int)); for (i1 = 0; i1 < n; i1++) { printf("a,bの %d 番目のデータは? ",i1+1); scanf("%lf %lf", &a[i1], &b[i1]); } /* 実行と出力 */ m = change(a, b, n, k); printf("操作回数=%d\n", m); for (i1 = 0; i1 < n; i1++) { if (k[i1] > 0) printf(" a,b %f %f\n", b[i1], a[i1]); } return 0; } /*********************************/ /* データの交換 */ /* a,b : データ */ /* n : データの数 */ /* k : 交換したか否かを示す */ /* return : 交換回数 */ /*********************************/ int change(double *a, double *b, int n, int *k) { double x; int i1, m = 0; /* 実行 */ for (i1 = 0; i1 < n; i1++) { if (a[i1] > b[i1]) { x = a[i1]; a[i1] = b[i1]; b[i1] = x; k[i1] = 1; m++; } } return m; }
/************************************/ /* 平均値の計算(平均点以下の出力) */ /* coded by Y.Suganuma */ /************************************/ #include <stdio.h> #include <stdlib.h> int hei(int *, int *, int n); int main() { int n, i1, *x, *y; /* データの読み込み */ printf("人数は? "); scanf("%d", &n); x = (int *)malloc(n*sizeof(int)); y = (int *)malloc(n*sizeof(int)); for (i1 = 0; i1 < n; i1++) { printf("%d 番目の人の英語と数学の点は? ", i1+1); scanf("%d %d", &(x[i1]), &(y[i1])); } /* 結果の計算と出力 */ printf(" 平均点以下の人数は %d 人\n", hei(x, y, n)); return 0; } /********************************************/ /* 平均値の計算(平均点以下の出力) */ /* x : 英語の点 */ /* y : 数学の点 */ /* n : 人数 */ /* return : どちらかが平均点以下の人数 */ /********************************************/ int hei(int x[], int y[], int n) { double mean1 = 0.0, mean2 = 0.0; int i1, kazu = 0; /* 平均値の計算力 */ for (i1 = 0; i1 < n; i1++) { mean1 += x[i1]; mean2 += y[i1]; } mean1 /= n; mean2 /= n; /* 数を数える */ for (i1 = 0; i1 < n; i1++) { if (x[i1] <= mean1 || y[i1] <= mean2) kazu++; } return kazu; }
/****************************/ /* 原点までの距離の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <math.h> #include <stdlib.h> int gen(int, double [], double [], int [], double *); int main() { double mean, *x, *y; int i1, k, n, *ten; /* データの入力 */ printf("点の数は? "); scanf("%d", &n); x = (double *)calloc(n,sizeof(double)); y = (double *)calloc(n,sizeof(double)); ten = (int *)calloc(n,sizeof(int)); for (i1 = 0; i1 < n; i1++) { printf("%d 番目の点の座標は? ", i1+1); scanf("%lf %lf", &x[i1], &y[i1]); } /* 計算 */ k = gen(n, x, y, ten, &mean); /* 出力 */ printf("平均距離は %f\n点の座標は\n", mean); for (i1 = 0; i1 < k; i1++) printf("%f %f\n", x[ten[i1]], y[ten[i1]]); printf(" 点の数=%d\n", k); return 0; } /******************************/ /* 平均距離以上離れた点 */ /* n : 点の数 */ /* x,y : 座標 */ /* ten : 離れた点の番号 */ /* av : 平均距離 */ /* return : 離れた点の数 */ /******************************/ int gen(int n, double x[], double y[], int ten[], double *av) { double mean = 0.0, x1, *z; int i1, k = 0; /* ワークエリア */ z = (double *)calloc(n, sizeof(double)); /* 距離の計算 */ for (i1 = 0; i1 < n; i1++) { x1 = x[i1] * x[i1] + y[i1] * y[i1]; z[i1] = sqrt(x1); mean += z[i1]; } /* 平均距離以上離れた点の数 */ mean /= n; for (i1 = 0; i1 < n; i1++) { if (z[i1] >= mean) { ten[k] = i1; k++; } } free(z); *av = mean; return k; }
/****************************/ /* 成分の%の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> #define STEP 100 void per(double *, double *, int n); int main() { double *x, *y; int dim = STEP, n = 0, i1; FILE *in, *out; /* データの読み込み */ in = fopen("input", "r"); x = (double *)malloc(dim*sizeof(double)); while (EOF != fscanf(in, "%lf", &x[n])) { n++; if (n >= dim) { dim += STEP; x = (double *)realloc(x, dim*sizeof(double)); } } fclose(in); /* %の計算 */ y = (double *)malloc(n*sizeof(double)); per(x, y, n); /* 出力 */ out = fopen("output", "w"); for (i1 = 0; i1 < n; i1++) fprintf(out,"%d 番目の成分 %6.2f %\n", i1+1, y[i1]); fclose(out); return 0; } /*********************/ /* 成分の%の計算 */ /* x : 成分 */ /* y : 成分の% */ /* n : 成分の数 */ /*********************/ void per(double *x, double *y, int n) { double sum = 0.0; int i1; /* 成分の和を計算 */ for (i1 = 0; i1 < n; i1++) sum += x[i1]; /* %の計算 */ for (i1 = 0; i1 < n; i1++) y[i1] = x[i1] / sum * 100.0; }
/****************************/ /* 売上の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> int heikin(int *, int); int main() { int i1, m = 0, x[30]; /* データの入力 */ 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); } /* 計算と出力 */ printf("平均=%d\n", heikin(x, m)); return 0; } /************************/ /* 売上の計算 */ /* x : データ */ /* m : 基準日 */ /* return : 平均値 */ /************************/ int heikin(int *x, int m) { int i1, k1, k2, mean = 0, n; 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; return mean; }
/****************************/ /* 0、1、... */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> void matu(int *, int *, int); int main() { int i1, k1, n, *m, kk[10]; /* 初期設定 */ for (i1 = 0; i1 < 10; i1++) kk[i1] = 0; /* 入力 */ printf("データの数は? "); scanf("%d", &n); m = (int *)malloc(n*sizeof(int)); for (i1 = 0; i1 < n; i1++) { printf(" 正の整数? "); scanf("%d", &m[i1]); } /* 出力 */ matu(m, kk, n); for (i1 = 0; i1 < 10; i1++) { k1 = kk[i1] * 100 / n; printf("%d %d 個 %d %\n", i1, kk[i1], k1); } return 0; } /************************/ /* 0、1、... */ /* m : データ */ /* kk : 各末尾の数 */ /* n : データの数 */ /************************/ void matu(int *m, int *kk, int n) { int i1, k1; for (i1 = 0; i1 < n; i1++) { k1 = m[i1] % 10; kk[k1]++; } }
/****************************/ /* 点間の距離の計算 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> double max(double *x, double *y, int, int *, int *); int main() { double max_r, *x, *y; int n, i1, k1, k2; /* データの入力 */ printf("点の数は? "); scanf("%d", &n); x = (double *)malloc(n*sizeof(double)); y = (double *)malloc(n*sizeof(double)); for (i1 = 0; i1 < n; i1++) { printf(" %d 番目の点の座標は? ", i1+1); scanf("%lf %lf", &(x[i1]), &(y[i1])); } /* 計算と出力 */ max_r = max(x, y, n, &k1, &k2); printf("点(%f,%f)と(%f,%f)間で距離は %f\n", x[k1], y[k1], x[k2], y[k2], max_r); return 0; } /***********************************/ /* 点間の距離の計算 */ /* x,y : 点の座標 */ /* n : 点の数 */ /* k1,k2 : 最大距離を与える点 */ /* return : 最大距離 */ /***********************************/ double max(double *x, double *y, int n, int *k1, int *k2) { double max_r = 0.0, r, r1, r2; int i1, i2; 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; } } } return max_r; }
/**********************************/ /* 平均点と平均点以下の人(calloc) */ /* coded by Y.Suganuma */ /**********************************/ #include <stdio.h> #include <stdlib.h> void heikin(int **, int *, int); int main() { int i1, i2, **cl, n, *m; char ***name; /* データの入力と平均点の計算 */ printf("クラスの数は? "); scanf("%d", &n); cl = (int **)calloc(n, sizeof(int *)); m = (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 *)); 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(" %d 番目の人の点は? ",i2+1); scanf("%d", &(cl[i1][i2])); } } /* 出力 */ heikin(cl, m, n); for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m[i1]; i2++) { if (cl[i1][i2] <= 0) 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; } /*********************************************************/ /* 平均点と平均点以下の人(calloc) */ /* cl[i][j] : i番目のクラスのj番目の人の点 */ /* (平均点以下の場合は,負にして返す) */ /* m[i] : i番目のクラスの人数 */ /* n : クラスの数 */ /*********************************************************/ void heikin(int **cl, int *m, int n) { int i1, i2, mean = 0, nin = 0; /* 平均点の計算 */ for (i1 = 0; i1 < n; i1++) { nin += m[i1]; for (i2 = 0; i2 < m[i1]; i2++) mean += cl[i1][i2]; } mean /= nin; /* 比較 */ for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m[i1]; i2++) { if (cl[i1][i2] <= mean) cl[i1][i2] = -cl[i1][i2]; } } }
/*******************************/ /* 平均点と平均点以下の人(new) */ /* coded by Y.Suganuma */ /*******************************/ #include <stdio.h> void heikin(int **, int *, int); int main() { int i1, i2, **cl, n, *m; char ***name; /* データの入力と平均点の計算 */ printf("クラスの数は? "); scanf("%d", &n); cl = new int * [n]; m = 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]]; for (i2 = 0; i2 < m[i1]; i2++) { name[i1][i2] = new char [20]; printf(" %d 番目の人の名前は? ",i2+1); scanf("%s", name[i1][i2]); printf(" %d 番目の人の点は? ",i2+1); scanf("%d", &(cl[i1][i2])); } } /* 出力 */ heikin(cl, m, n); for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m[i1]; i2++) { if (cl[i1][i2] <= 0) 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; } /*********************************************************/ /* 平均点と平均点以下の人(calloc) */ /* cl[i][j] : i番目のクラスのj番目の人の点 */ /* (平均点以下の場合は,負にして返す) */ /* m[i] : i番目のクラスの人数 */ /* n : クラスの数 */ /*********************************************************/ void heikin(int **cl, int *m, int n) { int i1, i2, mean = 0, nin = 0; /* 平均点の計算 */ for (i1 = 0; i1 < n; i1++) { nin += m[i1]; for (i2 = 0; i2 < m[i1]; i2++) mean += cl[i1][i2]; } mean /= nin; /* 比較 */ for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m[i1]; i2++) { if (cl[i1][i2] <= mean) cl[i1][i2] = -cl[i1][i2]; } } }
/****************************/ /* 行列の足し算(calloc) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> void add(double **, double **, double **, int, int); int main() { double **a, **b, **c; int i1, i2, n, m; /* データの入力 */ printf("行の数は? "); scanf("%d", &n); printf("列の数は? "); scanf("%d", &m); a = (double **)calloc(n, sizeof(double *)); b = (double **)calloc(n, sizeof(double *)); c = (double **)calloc(n, sizeof(double *)); printf("行列a\n"); for (i1 = 0; i1 < n; i1++) { a[i1] = (double *)calloc(m, sizeof(double)); c[i1] = (double *)calloc(m, sizeof(double)); printf(" %d行目\n", i1+1); for (i2 = 0; i2 < m; i2++) { printf(" %d列目のデータは? ", i2+1); scanf("%lf", &a[i1][i2]); } } printf("行列b\n"); for (i1 = 0; i1 < n; i1++) { b[i1] = (double *)calloc(m, sizeof(double)); printf(" %d行目\n", i1+1); for (i2 = 0; i2 < m; i2++) { printf(" %d列目のデータは? ", i2+1); scanf("%lf", &b[i1][i2]); } } /* 計算と出力 */ add(a, b, c, n, m); for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m; i2++) printf("%f ", c[i1][i2]); printf("\n"); free(a[i1]); free(b[i1]); free(c[i1]); } free(a); free(b); free(b); return 0; } /**********************************/ /* n行m列の行列の足し算(calloc) */ /* c = a + b */ /**********************************/ void add(double **a, double **b, double **c, int n, int m) { int i1, i2; for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m; i2++) c[i1][i2] = a[i1][i2] + b[i1][i2]; } }
/****************************/ /* 行列の足し算(new) */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> void add(double **, double **, double **, int, int); int main() { double **a, **b, **c; int i1, i2, n, m; /* データの入力 */ printf("行の数は? "); scanf("%d", &n); printf("列の数は? "); scanf("%d", &m); a = new double * [n]; b = new double * [n]; c = new double * [n]; printf("行列a\n"); for (i1 = 0; i1 < n; i1++) { a[i1] = new double [m]; c[i1] = new double [m]; printf(" %d行目\n", i1+1); for (i2 = 0; i2 < m; i2++) { printf(" %d列目のデータは? ", i2+1); scanf("%lf", &a[i1][i2]); } } printf("行列b\n"); for (i1 = 0; i1 < n; i1++) { b[i1] = new double [m]; printf(" %d行目\n", i1+1); for (i2 = 0; i2 < m; i2++) { printf(" %d列目のデータは? ", i2+1); scanf("%lf", &b[i1][i2]); } } /* 計算と出力 */ add(a, b, c, n, m); for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m; i2++) printf("%f ", c[i1][i2]); printf("\n"); delete [] a[i1]; delete [] b[i1]; delete [] c[i1]; } delete [] a; delete [] b; delete [] c; return 0; } /**********************************/ /* n行m列の行列の足し算(calloc) */ /* c = a + b */ /**********************************/ void add(double **a, double **b, double **c, int n, int m) { int i1, i2; for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < m; i2++) c[i1][i2] = a[i1][i2] + b[i1][i2]; } }
/******************************************/ /* 入力された単語と文字数を数えるコマンド */ /* coded by Y.Suganuma */ /******************************************/ #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int i1, num = 0; for (i1 = 1; i1 < argc; i1++) num += strlen(argv[i1]); printf("単語数は %d 文字数は %d\n", argc-1, num); return 0; }
菅沼ホーム | 演習解答例目次 | 本文目次 | 付録 | 索引 |