『明解C言語』サンプルコードと練習コード[第8章]
10410 ワード
第8章各種プログラムの作成に着手しよう
サンプルコード:
サンプルコード8-1
サンプルコード8-2
サンプルコード8-3
サンプルコード8-4
サンプルコード8-5
サンプルコード8-6
サンプルコード8-7
サンプルコード8-8
サンプルコード8-9
サンプルコード8-10
サンプルコード8-11
練習コード:
練習コードe 8-1
練習コードe 8-2
練習コードe 8-3
練習コードe 8-4
練習コードe 8-5
練習コードe 8-6
練習コードe 8-7
練習コードe 8-8
サンプルコード:
サンプルコード8-1
/*
( )
*/
#include
// int
int sqr_int(int x)
{
return (x * x);
}
// double
double sqr_double(double x)
{
return (x * x);
}
int main(void)
{
int nx;
double dx;
printf(" :");
scanf("%d", &nx);
printf(" %d。
", sqr_int(nx));
printf(" :");
scanf("%lf", &dx);
printf(" %f。
", sqr_double(dx));
return (0);
}
サンプルコード8-2
/*
( )
*/
#include
#define sqr(x)((x) * (x)) // x
int main(void)
{
int nx;
double dx;
printf(" :");
scanf("%d", &nx);
printf(" %d。
", sqr(nx));
printf(" :");
scanf("%lf", &dx);
printf(" %f。
", sqr(dx));
return (0);
}
サンプルコード8-3
/*
( )
*/
#include
#define putsa(str) { putchar('\a'); puts(str); }
int main(void)
{
int na;
printf(" :");
scanf("%d", &na);
if (na)
putsa(" 0。");
else
putsa(" 0。");
return (0);
}
サンプルコード8-4
/*
( )
*/
#include
#define putsa(str) ( putchar('\a'), puts(str) )
int main(void)
{
int na;
printf(" :");
scanf("%d", &na);
if (na)
putsa(" 0。");
else
putsa(" 0。");
return (0);
}
サンプルコード8-5
/*
*/
#include
enum animal { Dog, Cat, Monkey, Invalid };
//
void dog(void)
{
puts(" !");
}
//
void cat(void)
{
puts(" ~!");
}
//
void monkey(void)
{
puts(" !!");
}
//
enum animal select(void)
{
int tmp;
do {
printf("0... 1... 2... 3... :");
scanf("%d", &tmp);
} while (tmp < Dog || tmp > Invalid);
return (tmp);
}
int main(void)
{
enum animal selected;
do {
switch (selected = select()) {
case Dog : dog(); break;
case Cat : cat(); break;
case Monkey : monkey(); break;
}
} while (selected != Invalid);
return (0);
}
サンプルコード8-6
/*
*/
#include
//
int factorial(int n)
{
if (n > 0)
return (n * factorial(n - 1));
else
return (1);
}
int main(void)
{
int num;
printf(" :");
scanf("%d", &num);
printf("\ :%d。
", factorial(num));
return (0);
}
サンプルコード8-7
/*
*/
#include
// vx vy (vx >= vy)
int gcdf(int vx, int vy)
{
return (vy == 0 ? vx : gcdf(vy, vx % vy));
}
// va vb
int gcd(int va, int vb)
{
return (va > vb ? gcdf(va, vb) : gcdf(vb, va)) ;
}
int main(void)
{
int n1, n2;
puts(" 。");
printf(" 1:"); scanf("%d", &n1);
printf(" 2:"); scanf("%d", &n2);
printf(" %d。
", gcd(n1, n2));
return (0);
}
サンプルコード8-8
/*
*/
#include
int main(void)
{
int i, ch;
int cnt[10] = {0}; //
while (1) { //
ch = getchar();
if (ch == EOF) break;
switch (ch) {
case '0' : cnt[0]++; break;
case '1' : cnt[1]++; break;
case '2' : cnt[2]++; break;
case '3' : cnt[3]++; break;
case '4' : cnt[4]++; break;
case '5' : cnt[5]++; break;
case '6' : cnt[6]++; break;
case '7' : cnt[7]++; break;
case '8' : cnt[8]++; break;
case '9' : cnt[9]++; break;
}
}
puts(" ");
for (i = 0; i < 10; i++)
printf("'%d' : %d
", i, cnt[i]);
return(0);
}
サンプルコード8-9
/*
( 2 )
*/
#include
int main(void)
{
int i, ch;
int cnt[10] = {0}; //
while (1) { //
ch = getchar();
if (ch == EOF) break;
if (ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}
puts(" ");
for (i = 0; i < 10; i++)
printf("'%d' : %d
", i, cnt[i]);
return(0);
}
サンプルコード8-10
/*
EOF
*/
#include
int main(void)
{
int i;
printf("EOF = %d
", EOF);
for (i = 0; i < 10; i++)
printf("'%d' = %d
", i, '0' + i);
return (0);
}
サンプルコード8-11
/*
*/
#include
int main(void)
{
int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
return (0);
}
練習コード:
練習コードe 8-1
/*
diff(x, y), x、y
*/
#include
#define diff(x, y) x - y
int main(void)
{
int n1, n2;
printf(" :");
scanf("%d%d", &n1, &n2);
printf(" %d。
", diff(n1, n2));
system("pause");
return (0);
}
練習コードe 8-2
/*
x、y
*/
#include
#define max(x, y) (((x) > (y) ? (x) : (y)))
int main(void)
{
int a, b, c, d;
printf(" :");
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("max(max(a, b), max(c, d)) %d。
", max(max(a, b), max(c, d)));
printf("max(max(max(a, b), c), d) %d。
", max(max(max(a, b), c), d));
system("pause");
return (0);
}
練習コードe 8-3
/*
swap(type, a, b) type
*/
#include
#define swap(type, a, b) type t; t = a; a = b; b = t;
int main(void)
{
int a, b;
double c, d;
printf(" :");
scanf("%d%d", &a, &b);
printf("
:a = %d, b = %d
", a, b);
swap(int, a, b)
printf("
:a = %d, b = %d
", a, b);
/*
printf(" :");
scanf("%lf%lf", &c, &d);
printf("
:c = %f, d = %f
");
swap(double, c, d)
printf("
:c = %f, d = %f
");
*/
return (0);
}
練習コードe 8-4
/*
、 ,
*/
#include
enum sex {male, female};
enum season {spring, summer, fall, winter};
//
enum sex select_s(void)
{
int tmp;
do {
printf("0... 1... ");
scanf("%d", &tmp);
} while (tmp < male || tmp > female);
return (tmp);
}
//
enum season select_ss(void)
{
int tmp;
do {
printf("0... 1... 2... 3... ");
scanf("%d", &tmp);
} while (tmp < spring || tmp > winter);
return (tmp);
}
int main(void)
{
enum sex s;
enum season ss;
s = select_s();
ss = select_ss();
if (s)
printf(" :
");
else
printf(" :
");
switch (ss) {
case 0 : printf(" :
"); break;
case 1 : printf(" :
"); break;
case 2 : printf(" :
"); break;
case 3 : printf(" :
"); break;
}
return (0);
}
練習コードe 8-5
/*
, , n
*/
#include
int fact(int n)
{
int f = 1;
while (n)
f *= n--;
return f;
}
int main(void)
{
int num;
printf(" :");
scanf("%d", &num);
printf("\ :%d。
", fact(num));
return (0);
}
練習コードe 8-6
/*
n r
*/
#include
int combination(int n, int r)
{
int c;
if (r == 0 || n == r)
c = 1;
else if (r == 1)
c = n;
else
c = combination(n - 1, r - 1) + combination(n - 1, r);
return (c);
}
int main(void)
{
int n, r;
printf(" :"); scanf("%d", &n);
printf(" :"); scanf("%d", &r);
printf("%d %d :%d。
", n, r, combination(n, r));
return (0);
}
練習コードe 8-7
/*
( * )
*/
#include
int main(void)
{
int i, ch;
int cnt[10] = {0}; //
while (1) { //
ch = getchar();
if (ch == EOF) break;
if (ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}
puts(" ");
for (i = 0; i < 10; i++) {
printf("'%d' : ", i);
while (cnt[i]--)
printf("*");
putchar('
');
}
return(0);
}
練習コードe 8-8
/*
*/
#include
int main(void)
{
int ch;
int n = 0;
while ((ch = getchar()) != EOF) {
putchar(ch);
if (ch == '
') n++;
}
printf(" %d 。
", n);
return (0);
}