/****************************/
/* 大人と子どもの識別 */
/* 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;
}
| 菅沼ホーム | 演習解答例目次 | 本文目次 | 付録 | 索引 |