新・明解C言語 入門編 演習問題の解答(回答)
この記事では、C言語入門書の定番!柴田望洋さんの著書、新・明解C言語 入門編の演習問題に対する回答を載せていこうと思います。すべての問題に回答できておりませんが、随時更新していきますのでよろしくお願いします。
Amazon.comで新・明解C言語 入門編(著・柴田望洋)を購入する。https://amzn.to/3cKXDeM
repl.it(https://repl.it/languages/c)
paiza.io(https://paiza.io/projects/new)
ideon(http://ideone.com)
なぜか、表示されている順番が前後しているのと記事が長いことから、目次からお求めの回答を探すことをお勧めします。
目次
- 本編
本編
第1章:まずは慣れよう
演習1-1
#include <stdio.h>
int main(void)
{
printf("15から37を引いた値は%dです。\n", 15 - 37);
return 0;
}
演習1-2
#include <stdio.h>
int main(void)
{
printf("風\n林\n火\n山\n");
return 0;
}
演習1-3
#include <stdio.h>
int main(void)
{
printf("もしもし。\nこんにちは。\n\nそれでは。\n");
return 0;
}
演習1-4
#include <stdio.h>
int main(void)
{
int d;
printf("整数を入力してください:"); scanf("%d", &d);
printf("その数に10を加えると%dです。\n", d + 10);
return 0;
}
演習1-5
#include <stdio.h>
int main(void)
{
int d;
printf("整数を入力してください:"); scanf("%d", &d);
printf("その数から10を減すと%dです。\n", d - 10);
return 0;
}
演習1-6
#include <stdio.h>
int main(void)
{
puts("風\n林\n火\n山");
return 0;
}
演習1-7
#include <stdio.h>
int main(void)
{
int a,b;
puts("二つの整数を入力してください。");
printf("整数1:"); scanf("%d", &a);
printf("整数2:"); scanf("%d", &b);
printf("それらの積は%dです。\n", a * b);
return 0;
}
演習1-8
#include <stdio.h>
int main(void)
{
int a,b,c;
puts("三つの整数を入力してください。");
printf("整数1:"); scanf("%d", &a);
printf("整数2:"); scanf("%d", &b);
printf("整数3:"); scanf("%d", &c);
printf("それらの和は%dです。\n", a + b + c);
return 0;
}
第2章:演算と型
演習2-1
#include <stdio.h>
int main(void)
{
int a,b;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
printf("Aの値はBの%d%%です。\n",a / b * 100);
return 0;
}
演習2-2
#include <stdio.h>
int main(void)
{
int a,b;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
printf("それらの和は%dで積は%dです。\n", a + b, a * b);
return 0;
}
演習2-3
#include <stdio.h>
int main(void)
{
double a;
printf("実数を入力してください:");
scanf("%lf", &a);
printf("あなたは%fと入力しましたね。\n", a);
return 0;
}
演習2-4
#include <stdio.h>
int main(void)
{
int a1,a2,a3,a4,c1,c2,c3,c4;
double b1,b2,b3,b4,d1,d2,d3,d4;
a1 = 5 * 2;
a2 = 5.0 * 2.0;
a3 = 5.0 * 2;
a4 = 5 * 2.0;
b1 = 5 * 2;
b2 = 5.0 * 2.0;
b3 = 5.0 * 2;
b4 = 5 * 2.0;
c1 = 5 / 2;
c2 = 5.0 / 2.0;
c3 = 5.0 / 2;
c4 = 5 / 2.0;
d1 = 5 / 2;
d2 = 5.0 / 2.0;
d3 = 5.0 / 2;
d4 = 5 / 2.0;
printf("a1:%d\n",a1);
printf("a2:%d\n",a2);
printf("a3:%d\n",a3);
printf("a4:%d\n\n",a4);
printf("b1:%f\n",b1);
printf("b2:%f\n",b2);
printf("b3:%f\n",b3);
printf("b4:%f\n\n",b4);
printf("c1:%d\n",c1);
printf("c2:%d\n",c2);
printf("c3:%d\n",c3);
printf("c4:%d\n\n",c4);
printf("d1:%f\n",d1);
printf("d2:%f\n",d2);
printf("d3:%f\n",d3);
printf("d4:%f\n",d4);
return 0;
}
演習2-5
#include <stdio.h>
int main(void)
{
int a,b;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
printf("Aの値はBの%f%%です。\n",(double)a / (double)b);
return 0;
}
演習2-6
#include <stdio.h>
int main(void)
{
int height;
double weight;
printf("身長を入力して下さい > ");
scanf("%d", &height);
weight = (double)*1
{
printf("%d ", i);
}
i++;
}
if (no > 0)
putchar('\n');
return (0);
}
演習4-10
#include <stdio.h>
int main (void)
{
int i,no;
printf("正の整数を入力して下さい:");
scanf("%d", &no);
i = 2;
while (i <= no)
{
printf("%d ", i);
i *= 2;
}
if (no > 0)
putchar('\n');
return (0);
}
演習4-11
#include <stdio.h>
int main(void)
{
int no;
printf("正の整数を入力して下さい:");
scanf("%d", &no);
while (no-- > 0)
puts("*");
if (no > 0)
putchar('\n');
return (0);
}
演習4-12
#include <stdio.h>
int main(void)
{
int no = 1;
int sum = 0;
for (; no <= 5; no++)
sum += no;
printf(" 1 から 5 までを足した値は %d です。\n", sum);
return (0);
}
演習4-13
#include <stdio.h>
int main(void)
{
unsigned i, no;
printf("整数を入力して下さい:");
scanf("%d", &no);
for (i = 1; i <= no; i++)
printf("%d", i % 10);
putchar('\n');
return (0);
}
演習4-14
#include <stdio.h>
int main(void)
{
int height;
double weight;
int max, min, space;
printf("何cmから:"); scanf("%d", &min);
printf("何cmまで:"); scanf("%d", &max);
printf("何cmごと:"); scanf("%d", &space);
for (height = min; height <= max; height += space)
{
weight = (double)*2;
return 0;
}
演習6-2
#include <stdio.h>
int min3(int x, int y, int z)
{
int min = x;
if ( y < min )
min = y;
if ( z < min )
min = z;
return min;
}
int main(void)
{
int na, nb, nc;
puts("三つの整数を入力して下さい。");
printf("整数1:"); scanf("%d", &na);
printf("整数2:"); scanf("%d", &nb);
printf("整数3:"); scanf("%d", &nc);
printf("最も小さい値は%dです。\n", min3( na, nb, nc ));
return 0;
}
演習6-3
#include <stdio.h>
int sqr(int x)
{
return ( x * x * x );
}
int diff(int x, int y)
{
return ( x > y ? x - y : y - x );
}
int main(void)
{
int kx, ky;
puts("二つの整数を入力して下さい。");
printf("整数1:"); scanf("%d", &kx);
printf("整数2:"); scanf("%d", &ky);
printf("整数1の三乗と整数2の三乗の差は%dです。\n", diff( sqr(kx), sqr(ky) ));
return 0;
}
演習6-4
#include <stdio.h>
int sqr(int x)
{
return (x * x);
}
int pow4(int x)
{
return (sqr(x) * sqr(x));
}
int main(void)
{
int no;
printf("整数を入力して下さい:"); scanf("%d", &no);
printf("%dの4乗値は%dです。\n", no, pow4(no));
return 0;
}
演習6-5
#include <stdio.h>
void alert(int no)
{
while(no-- > 0)
putchar('\a');
}
int main(void)
{
int n;
printf("回数を入力して下さい:"); scanf("%d", &n);
alert(n);
return 0;
}
演習6-6
#include <stdio.h>
void hello(void)
{
printf("こんにちは。");
putchar('\n');
}
int main(void)
{
hello();
return 0;
}
演習6-7
#include <stdio.h>
#define NUMBER 5
int min_of(const int vc, int no)
{
int i;
int min = vc[0];
for( i = 1; i < no; i++ )
if (vc[i] < min)
min = vc[i];
return min;
}
int main(void)
{
int i;
int eng[NUMBER];
int mat[NUMBER];
int min_e, min_m;
printf("%d人の点数を入力して下さい\n", NUMBER);
for ( i = 0; i < NUMBER; i++ ) {
printf("[%d] 英語:", i + 1); scanf("%d", &eng[i]);
printf(" 数学:"); scanf("%d", &mat[i]);
}
min_e = min_of(eng, NUMBER);
min_m = min_of(mat, NUMBER);
printf("英語の最低点=%d\n", min_e);
printf("数学の最低点=%d\n", min_m);
return 0;
}
演習6-8
#include <stdio.h>
#define NUMBER 5
void rev_intary(int vc, int no)
{
int i, temp;
for ( i = 0; i < ( no / 2 ); i++ ) {
temp = vc[i];
vc[i] = vc[(no - 1) - i];
vc[(no - 1) - i] = temp;
}
}
int main(void)
{
int i;
int a[NUMBER];
printf("%d\n", NUMBER);
for ( i = 0; i < NUMBER; i++ ) {
printf("a[%d] <= ", i); scanf("%d", &a[i]);
}
rev_intary(a, NUMBER);
for ( i = 0; i < NUMBER; i++ )
printf("a[%d] => %d\n", i, a[i]);
return 0;
}
演習6-9
#include <stdio.h>
#define NUMBER 5
void intary_rcpy(int v1, const int v2, int no)
{
int i, temp;
for ( i = 0; i < no; i++ )
v1[i] = v2[i];
for ( i = 0; i < ( no / 2 ); i++ ) {
temp = v1[i];
v1[i] = v1[(no - 1) - i];
v1[(no - 1) - i] = temp;
}
}
int main(void)
{
int i;
int a[NUMBER];
int b[NUMBER] = {0};
printf("%d個の数字を入力してください\n", NUMBER);
for ( i = 0; i < NUMBER; i++ ) {
printf("a[%d] <= "); scanf("%d", &a[i]);
}
for ( i = 0; i < NUMBER; i++ )
printf("b[%d] => %d\n", i, b[i]);
puts("順序を逆にすると");
intary_rcpy(b, a, NUMBER);
for ( i = 0; i < NUMBER; i++ )
printf("b[%d] => %d\n", i, b[i]);
return 0;
}
演習6-10
#include <stdio.h>
void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
int i, j, k;
for ( k = 0; k < 2; k++ )
for( i = 0; i < 2; i++ )
for ( j = 0; j < 3; j++ )
mc[i][k] += ma[i][j] * mb[j][k];
}
int main(void)
{
int i, j;
int ma[2][3] = {{ 1, 2, 3 }, { 4, 5, 6 }};
int mb[3][2] = {{ 6, 3 }, { 4, 5 }, { 1, 2 }};
int mc[2][2] = { 0 };
mul(ma, mb, mc);
for ( i = 0; i < 2; i++ ) {
for ( j = 0; j < 2; j++ )
printf("%3d", mc[i][j]);
putchar('\n');
}
return 0;
}
演習6-11
#include <stdio.h>
#define NINZU 5
#define KYOKA 3
void max(const int ma[NINZU][KYOKA], int no, int mb[KYOKA])
{
int i, j;
for ( i = 0; i < KYOKA; i++ ) {
mb[i] = ma[0][i];
}
for ( i = 1; i < no; i++ )
for ( j = 0; j < KYOKA; j++ )
if ( mb[j] < ma[i][j] )
mb[j] = ma[i][j];
}
void avg(const int va[NINZU][KYOKA], int no, int vc[KYOKA])
{
int i, j;
for ( i = 0; i < no; i++ )
for( j = 0; j < KYOKA; j++ )
vc[j] += va[i][j];
for ( i = 0; i < KYOKA; i++ )
vc[i] /= no;
}
int main(void)
{
int i;
int a[NINZU][KYOKA] = { 0 };
int b[KYOKA] = { 0 };
int c[KYOKA] = { 0 };
printf("%d人の国語、数学、英語の点数を入力して下さい。\n", NINZU);
for ( i = 0; i < NINZU ; i++ ) {
printf("[%02d] 国語:", i + 1); scanf("%d", &a[i][0]);
printf(" 数学:"); scanf("%d", &a[i][1]);
printf(" 英語:"); scanf("%d", &a[i][2]);
}
max(a, NINZU, b);
avg(a, NINZU, c);
printf("国語の最高点:%d\n", b[0]);
printf("国語の平均点:%d\n", c[0]);
printf("数学の最高点:%d\n", b[1]);
printf("数学の平均点:%d\n", c[1]);
printf("英語の最高点:%d\n", b[2]);
printf("英語の平均点:%d\n", c[2]);
return 0;
}
第7章:基本型
演習7-1
#include <stdio.h>
int main(void)
{
unsigned no, no1, no2;
int i, x;
printf("非負の整数を入力してください:");
scanf("%u", &no);
printf("何ビットシフト(乗除)しますか:");
scanf("%d", &x);
no1 = no2 = no;
for( i = 0; i < x; i++ ) {
no1 <<= 1;
no2 *= 2;
}
printf("左にシフトした数:%u\n", no1);
printf("乗算した数:%u\n", no2);
no1 = no2 = no;
for( i = 0; i < x; i++ ) {
no1 >>= 1;
no2 /= 2;
}
printf("右にシフトした数:%u\n", no1);
printf("除算した数:%u\n", no2);
return 0;
}
演習7-2
#include <stdio.h>
int count_bits(unsigned x)
{
int count = 0;
while(x){
if ( x & 1U ) count++;
x >>= 1;
}
return count;
}
int int_bits(void)
{
return count_bits(~0U);
}
void print_bits(unsigned x)
{
int i;
for ( i = int_bits() - 1; i >= 0; i-- )
putchar((( x >> i ) & 1U ) ? '1' : '0');
putchar('\n');
}
unsigned rrotate(unsigned x, int n)
{
int width = int_bits();
return x >> n % width | x << (width - n % width);
}
unsigned lrotate(unsigned x, int n)
{
int width = int_bits();
return x << n % width | x >> (width - n % width);
}
int main(void)
{
unsigned no, nor, nol;
int n;
printf("非負の整数を入力してください:");
scanf("%u", &no);
puts("ビットの中身");
print_bits(no);
printf("何ビットシフトしますか:");
scanf("%d", &n);
puts("右にシフトした後の内容");
nor = rrotate(no, n);
print_bits(nor);
puts("左にシフトした後の内容");
nol = lrotate(no, n);
print_bits(nol);
return 0;
}
演習7-3
#include <stdio.h>
int count_bits(unsigned x)
{
int count = 0;
while(x){
if ( x & 1U ) count++;
x >>= 1;
}
return count;
}
int int_bits(void)
{
return count_bits(~0U);
}
void print_bits(unsigned x)
{
int i;
for ( i = int_bits() - 1; i >= 0; i-- )
putchar((( x >> i ) & 1U ) ? '1' : '0');
putchar('\n');
}
unsigned set(unsigned x, int pos)
{
unsigned i = 1U;
int width = int_bits();
i <<= pos % width - 1;
return i | x;
}
unsigned reset(unsigned x, int pos)
{
unsigned i = 1U;
int width = int_bits();
i <<= pos % width - 1;
i = ~i;
return i & x;
}
unsigned inverse(unsigned x, int pos)
{
unsigned i = 1U;
int width = int_bits();
i <<= pos % width - 1;
return i ^ x;
}
int main(void)
{
unsigned no;
int bit;
printf("整数を入力してください:"); scanf("%lu", &no);
puts("ビットの中身");
print_bits(no);
printf("何ビット目を処理しますか:"); scanf("%d", &bit);
printf("ON:\t");
print_bits(set(no, bit));
printf("OFF:\t");
print_bits(reset(no, bit));
printf("INVERSE:");
print_bits(inverse(no, bit));
return 0;
}
演習7-4
#include <stdio.h>
int count_bits(unsigned x)
{
int count = 0;
while(x) {
if ( x & 1U ) count++;
x >>= 1;
}
return count;
}
int int_bits(void)
{
return count_bits(~0U);
}
void print_bits(unsigned x)
{
int i;
for ( i = int_bits() - 1; i >= 0; i-- )
putchar((( x >> i ) & 1U ) ? '1' : '0');
putchar('\n');
}
unsigned set_n(unsigned x, int pos, int n)
{
unsigned i = 1U;
int j,no,po;
po = pos % int_bits();
no = n % po;
for ( j = 0; j < no - 1; j++ ) {
i <<= 1;
i += 1;
}
i <<= po - no;
return i | x;
}
unsigned reset_n(unsigned x, int pos, int n)
{
unsigned i = 1U;
int j,no,po;
po = pos % int_bits();
no = n % po;
for ( j = 0; j < no - 1; j++ ) {
i <<= 1;
i += 1;
}
i <<= po - no;
i = ~i;
return i & x;
}
unsigned inverse_n(unsigned x, int pos, int n)
{
unsigned i = 1U;
int j,no,po;
po = pos % int_bits();
no = n % po;
for ( j = 0; j < no - 1; j++ ) {
i <<= 1;
i += 1;
}
i <<= po - no;
return i ^ x;
}
int main(void)
{
unsigned no;
int bit,n;
printf("整数を入力してください:"); scanf("%lu", &no);
puts("ビットの中身");
print_bits(no);
printf("何ビット目を処理しますか:"); scanf("%d", &bit);
printf("何個処理しますか:"); scanf("%d", &n);
printf("ON_n:\t\t");
print_bits(set_n(no, bit, n));
printf("OFF_n:\t\t");
print_bits(reset_n(no, bit, n));
printf("INVERSE_n:\t");
print_bits(inverse_n(no, bit, n));
return 0;
}
演習7-5
#include <stdio.h>
int main(void)
{
unsigned x = 3000000000000;
unsigned y = 2000000000000;
unsigned z;
z = x + y;
printf("%u\n", z);
return 0;
}
第8章:いろいろなプログラムを作ってみよう
演習8-1
#include <stdio.h>
#define diff(x, y) (((x) > (y)) ? *3 : *4;
return 0;
}
演習8-2
#include <stdio.h>
#define max(x, y) (((x) > (y)) ? (x) : (y))
int main(void)
{
int a, b, c, d;
puts("四つの整数を入力してください");
printf("整数1:"); scanf("%d", &a);
printf("整数2:"); scanf("%d", &b);
printf("整数3:"); scanf("%d", &c);
printf("整数4:"); scanf("%d", &d);
printf("一番大きい値は%dです\n", max(max(max(a, b), c), d));
return 0;
}
演習8-3
#include <stdio.h>
#define swap(type, a, b) { type tmp; tmp = a; a = b; b = tmp; }
int main(void)
{
int x, y;
float i, j;
puts("二つの整数を入力してください");
printf("整数1:"); scanf("%d", &x);
printf("整数2:"); scanf("%d", &y);
swap(int, x, y);
printf("整数1の値:%d\n", x);
printf("整数2の値:%d\n", y);
puts("二つの実数を入力してください");
printf("実数1:"); scanf("%f", &i);
printf("実数2:"); scanf("%f", &j);
swap(float, i, j);
printf("実数1の値:%f\n", i);
printf("実数2の値:%f\n", j);
return 0;
}
演習8-4
#include <stdio.h>
enum season { Spring, Summer, Fall, Winter, Invalid };
int main(void)
{
enum season month;
int tmp;
do {
printf("月を入力してください。:"); scanf("%d", &tmp);
if(tmp >= 3 && tmp <= 5) month = Spring;
else if(tmp >= 6 && tmp <= 8) month = Summer;
else if(tmp >= 9 && tmp <= 11) month = Fall;
else if(tmp == 1 || tmp == 2 || tmp == 12) month = Winter;
else month = Invalid;
if(month == Invalid) puts("不正な月です。");
} while(month == Invalid);
switch(month) {
case Spring : puts("ポカポカして気持ちいいですねぇ"); break;
case Summer : puts("暑い><こんなときは海だね"); break;
case Fall : puts("なんだか寂しいですよね…"); break;
case Winter : puts("寒い><ストーブが欲しいっすね"); break;
}
return 0;
}
演習8-5
#include <stdio.h>
int fact(int n)
{
int i;
unsigned long fct = 1;
for( i = n; i > 0; i-- )
fct *= i;
return (n == 0) ? 1 : fct;
}
int main(void)
{
int no;
printf("整数を入力してください:"); scanf("%d", &no);
printf("階乗した値は%luです\n", fact(no));
return 0;
}
演習8-6
#include <stdio.h>
int combination(int n, int r)
{
if(n == r || r == 0) return 1;
if(r == 1) return n;
return combination(n -1, r - 1) + combination(n - 1, r);
}
int combi(int a, int b)
{
return (a > b) ? combination(a, b) : combination(b, a);
}
int main(void)
{
int dn, dr;
puts("二つの整数を入力してください");
printf("整数1:"); scanf("%d", &dn);
printf("整数2:"); scanf("%d", &dr);
printf("組み合わせの数は%d個です\n", combi(dn, dr));
return 0;
}
演習8-7
#include <stdio.h>
int main(void)
{
int i, ch, j;
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);
for( j = 0; j < cnt[i]; j++ )
putchar('*');
putchar('\n');
}
return 0;
}
演習8-8
#include <stdio.h>
int main(void)
{
int str, cnt = 0;
while(1) {
str = getchar();
if( str == EOF ) break;
if( str == '\n') cnt++;
}
printf("入力された行数は%dです。\n", cnt);
return 0;
}
第9章:文字列の基本
演習9-1
#include <stdio.h>
int main(void)
{
char str = "ABC\0DEF";
printf("文字列strは%sです。\n", str);
return 0;
}
演習9-2
#include <stdio.h>
int main(void)
{
char str = "ABC";
int sz, i;
sz = sizeof(str);
for( i = 0; i < sz; i++ )
str[i] = '\0';
for( i = 0; i < sz; i++ )
printf("%c", str[i]);
putchar('\n');
return 0;
}
演習9-3
#include <stdio.h>
int str_char(const char str, int c)
{
int len = 0;
while( str[len] != c ) {
len++;
if( str[len] == '\0' ) {
len = -1;
break;
}
}
return len;
}
int main(void)
{
char str[128];
int c;
int leng;
printf("文字列を入力してください:");
scanf("%s", str);
while(getchar() != '\n' );
printf("検索する文字を入力してください:");
scanf("%c", &c);
if( (leng = str_char(str, c)) == -1 )
printf("指定された文字は見つかりませんでした。\n");
else
printf("%cは%d文字目にありました。\n", c, leng + 1);
return 0;
}
演習9-4
#include <stdio.h>
int str_chnum(const char str, int c)
{
int i = 0, num = 0;
while( str[i] != '\0' ) {
if( str[i] == c )
num++;
i++;
}
return num;
}
int main(void)
{
char str[128];
int c;
int num;
printf("文字列を入力してください:");
scanf("%s", str);
while(getchar() != '\n');
printf("検索する文字を入力してください:");
scanf("%c", &c);
if( (num = str_chnum(str, c)) != 0 )
printf("%cは%d個見つかりました。\n", c, num);
else
printf("指定された文字は見つかりませんでした。\n");
return 0;
}
演習9-5
#include <stdio.h>
void put_string(const char str)
{
printf("%s\n", str);
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
return 0;
}
演習9-6
#include <stdio.h>
void put_stringn(const char str, int no)
{
while(no--)
printf("%s\n", str);
}
int main(void)
{
char str[128];
int no;
printf("文字列を入力してください:");
scanf("%s", str);
while(getchar() != '\n');
printf("表示する回数を入力してください:");
scanf("%d", &no);
put_stringn(str, no);
return 0;
}
演習9-7
#include <stdio.h>
void put_rstring(const char str)
{
unsigned i = 0;
while(str[i]) i++;
i--;
while(str[i])
putchar(str[i--]);
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
printf("逆にした文字列は");
put_rstring(str);
printf("です。\n");
return 0;
}
演習9-8
#include <stdio.h>
void rev_string(char str)
{
int i = 0, j = 0;
char tmp;
while(str[i]) i++;
i--;
for( ; j <= (i / 2); j++ ) {
tmp = str[j];
str[j] = str[i - j];
str[i - j] = tmp;
}
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
rev_string(str);
printf("逆にした文字列は%sです。\n", str);
return 0;
}
演習9-9
#include <stdio.h>
void null_string(char str)
{
unsigned i = 0;
while(str[i]) {
str[i] = '\0';
i++;
}
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
null_string(str);
printf("文字列の内容は%sです。\n", str);
return 0;
}
演習9-10
#include <stdio.h>
void del_digit(char str)
{
unsigned i = 0;
while(str[i]) {
if(str[i] >= '0' && str[i] <= '9') {
unsigned j = i;
while(str[j]) {
str[j] = str[j + 1];
j++;
}
}
else
i++;
}
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
del_digit(str);
printf("数字を削除した文字列は%sです。\n", str);
return 0;
}
第10章:ポインタ
演習10-1
#include <stdio.h>
int err = 0;
int IsLeepYear(int y)
{
return (
(((y % 400) == 0) && (((y % 10000) != 0) || *5 ||
(((y % 4) == 0) && *6
) ? 1 : 0;
}
void yesterday(int *y, int *m, int *d)
{
int ld[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if(IsLeepYear(*y)) ld[1]++;
if(*d == 1) {
*d = ld[(*m) - 2];
if (--(*m) <= 0) {
*m = 12;
(*y)--;
}
}
else
(*d)--;
}
void tomorrow(int *y, int *m, int *d)
{
int ld[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if(IsLeepYear(*y)) ld[1]++;
if(*d == ld[(*m) - 1]) {
*d = 1;
if (++(*m) > 12) {
*m = 1;
(*y)++;
}
}
else
(*d)++;
}
void syear(int *y)
{
err = 0;
printf("西暦を入力してください:"); scanf("%d", y);
while(getchar() != '\n');
if(*y < 1900 || *y > 3000) {
err = 1;
puts("無効な年を入力しないでください!");
}
}
void smanth(int *m)
{
err = 0;
printf("月を入力してください:"); scanf("%d", m);
while(getchar() != '\n'); /*バッファを空にする*/
if(*m < 1 || *m > 12) {
err = 1;
puts("無効な月を入力しないでください!");
}
}
void sday(const int *y, const int *m, int *d)
{
int ld[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
err = 0;
if(IsLeepYear(*y)) ld[1]++;
printf("日を入力してください:"); scanf("%d", d);
while(getchar() != '\n');
if(*d < 1 || *d > ld[*m - 1]) {
err = 1;
puts("無効な日を入力しないでください!");
}
}
int main(void)
{
int y, m, d;
int yy, my, dy;
int yt, mt, dt;
do { syear(&y); } while(err);
do { smanth(&m); } while(err);
do { sday(&y, &m, &d); } while(err);
yy = yt = y;
my = mt = m;
dy = dt = d;
printf("%04d/%02d/%02dの前の日は", y, m, d);
yesterday(&yy, &my, &dy);
printf("%04d/%02d/%02dです。\n", yy, my, dy);
printf("%04d/%02d/%02dの次の日は", y, m, d);
tomorrow(&yt, &mt, &dt);
printf("%04d/%02d/%02dです。\n", yt, mt, dt);
return 0;
}
演習10-2
#include <stdio.h>
void swap(int *nx, int *ny)
{
int temp = *nx;
*nx = *ny;
*ny = temp;
}
void sort3(int *n1, int *n2, int *n3)
{
if(*n2 > *n3)
swap(n2, n3);
if(*n1 > *n2)
swap(n1, n2);
if(*n2 > *n3)
swap(n2, n3);
}
int main(void)
{
int na, nb, nc;
puts("三つの整数を入力してください。");
printf("整数A:"); scanf("%d", &na);
while(getchar() != '\n');
printf("整数B:"); scanf("%d", &nb);
while(getchar() != '\n');
printf("整数C:"); scanf("%d", &nc);
while(getchar() != '\n');
sort3(&na, &nb, &nc);
puts("これらの値を昇順に並べ替えました。");
printf("整数Aは%dです。\n", na);
printf("整数Bは%dです。\n", nb);
printf("整数Cは%dです。\n", nc);
return 0;
}
第11章:文字列とポインタ
演習11-1
#include <stdio.h>
void put_string(const char *str)
{
while(*str)
putchar(*str++);
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar('\n');
return 0;
}
演習11-2
#include <stdio.h>
char *str_chr(const char *str, int c)
{
while(*str) {
if(*str == c)
return (char*)str;
str++;
}
return NULL;
}
int main(void)
{
char str[128];
int c;
char *p;
printf("文字列を入力してください:");
scanf("%s", str);
while(getchar() != '\n' );
printf("検索する文字を入力してください:");
scanf("%c", &c);
if( (p = str_chr(str, c)) == NULL )
printf("指定された文字は見つかりませんでした。\n");
else
printf("%cは%d文字目にありました。\n", c, p - &str[0] + 1);
return 0;
}
演習11-3
#include <stdio.h>
int str_chnum(const char *str, int c)
{
unsigned i = 0;
while(*str) {
if(*str == c)
i++;
str++;
}
return i;
}
int main(void)
{
char str[128];
int c;
int num;
printf("文字列を入力してください:");
scanf("%s", str);
while(getchar() != '\n');
printf("検索する文字を入力してください:");
scanf("%c", &c);
if( (num = str_chnum(str, c)) != 0 )
printf("%cは%d個見つかりました。\n", c, num);
else
printf("指定された文字は見つかりませんでした。\n");
return 0;
}
演習11-4
#include <stdio.h>
#include <ctype.h>
void str_toupper(char *str)
{
while(*str) {
*str = toupper(*str);
str++;
}
}
void str_tolower(char *str)
{
while(*str) {
*str = tolower(*str);
str++;
}
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
str_toupper(str);
printf("大文字:%s\n", str);
str_tolower(str);
printf("小文字:%s\n", str);
return 0;
}
演習11-5
#include <stdio.h>
void del_digit(char *str)
{
char *sp;
while(*str) {
if(*str >= '1' && *str <= '9') {
sp = str;
while(*sp) {
*sp = *(sp + 1);
sp++;
}
}
else
str++;
}
}
int main(void)
{
char str[128];
printf("文字列を入力してください:");
scanf("%s", str);
del_digit(str);
printf("数字を削除した文字列は%sです。\n", str);
return 0;
}
演習11-6
#include <stdio.h>
int strtoi(const char *nptr)
{
int i = 0;
const char *p = nptr;
if(*nptr == '-')
nptr++;
while(*nptr) {
if(*nptr >= '0' && *nptr <= '9') {
i += *nptr - '0';
nptr++;
if(*nptr >= '0' && *nptr <= '9')
i *= 10;
}
else
break;
}
if(*p == '-')
i = -i;
return i;
}
long strtol(const char *nptr)
{
int i = 0;
const char *p = nptr;
if(*nptr == '-')
nptr++;
while(*nptr) {
if(*nptr >= '0' && *nptr <= '9') {
i += *nptr - '0';
nptr++;
if(*nptr >= '0' && *nptr <= '9')
i *= 10;
}
else
break;
}
if(*p == '-')
i = -i;
return i;
}
double strtof(const char *nptr)
{
double d = 0;
const char *p = nptr;
double i = 10.0;
if(*nptr == '-')
nptr++;
while(*nptr) {
if(*nptr >= '0' && *nptr <= '9') {
d += *nptr - '0';
nptr++;
if(*nptr >= '0' && *nptr <= '9')
d *= 10;
}
else
break;
}
if(*nptr == '.')
nptr++;
while(*nptr) {
if(*nptr >= '0' && *nptr <= '9') {
d += (*nptr - '0') / i;
nptr++;
i *= 10.0;
}
else
break;
}
if(*p == '-')
d = -d;
return d;
}
int main(void)
{
char no[32];
printf("整数文字を入力してください:");
scanf("%s", no);
printf("入力された数字は%dです。\n", strtoi(no));
printf("整数文字を入力してください:");
scanf("%s", no);
printf("入力された数字は%ldです。\n", strtol(no));
printf("実数文字を入力してください:");
scanf("%s", no);
printf("入力された数字は%fです。\n", strtof(no));
return 0;
}
第12章:構造体
演習12-1
#include <stdio.h>
#include <time.h>
void put_time(void)
{
time_t current;
struct tm *local;
time(¤t);
local = localtime(¤t);
printf("%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);
}
int main(void)
{
printf("現在の時刻は");
put_time();
printf("です。\n");
return (0);
}
演習12-2
#include <stdio.h>
#define MAX 3
typedef struct {
char addr[128];
char name[32];
char tel[16];
} customer;
int main(void)
{
customer blist[MAX];
int i;
for( i = 0; i < MAX; i++ ) {
printf("%dl–Ú\n", i + 1);
printf("ZŠ‚ð“ü—Í‚µ‚Ä‚‚¾‚³‚¢F");
scanf("%s", &blist[i].addr);
printf("Ž–¼‚ð“ü—Í‚µ‚Ä‚‚¾‚³‚¢F");
scanf("%s", &blist[i].name);
printf("“d˜b”Ô†‚ð“ü—Í‚µ‚Ä‚‚¾‚³‚¢F");
scanf("%s", &blist[i].tel);
}
puts("\n--- ƒuƒ‰ƒbƒNƒŠƒXƒg ---");
puts("ZŠ\tŽ–¼\t“d˜b”Ô†");
for( i = 0; i < MAX; i++ )
printf("%s\t%s\t%s\n", blist[i].addr, blist[i].name, blist[i].tel);
return (0);
}
第13章:ファイル処理
演習13-1
#include <stdio.h>
int main(void)
{
FILE *fp;
char fname[256];
printf("ファイル名を指定してください:");
scanf("%s", fname);
fp = fopen(fname, "r"); /* ファイルのオープン */
if(fp == NULL)
printf("\aファイルをオープンできません。\n");
else {
/* ファイルから読み込みなどを行う */
fclose(fp); /* ファイルのクローズ */
}
return 0;
}
演習13-2
#include <stdio.h>
int main(void)
{
FILE *fp;
char fname[256];
printf("ファイル名を指定してください:");
scanf("%s", fname);
if*7 == NULL)
puts("\aそのファイルは存在しません。");
else {
puts("\aそのファイルは存在します。");
fclose(fp);
}
return 0;
}
演習13-3
未回答
演習13-4
#include <stdio.h>
typedef struct {
char name[128];
double height;
double weight;
} nhw;
int main(void)
{
FILE *wfp;
nhw people;
char fname[256] = "hw2.dat";
if*8 == NULL)
puts("\aファイルをオープンできません。");
else {
printf("名前を入力してください:");
scanf("%s", &people.name);
printf("身長を入力してください:");
scanf("%lf", &people.height);
printf("体重を入力してください:");
scanf("%lf", &people.weight);
fprintf(wfp, "%s %.0lf %.1lf", people.name, people.height, people.weight);
fclose(wfp);
}
return 0;
}
演習13-5
#include <stdio.h>
#include <time.h>
char data_file = "datetime.dat";
void get_data(void)
{
FILE *fp;
int y, mo, d, h, m, s;
char feel[64];
if((fp = fopen(data_file, "r")) == NULL)
puts("本プログラムを実行するのは初めてですね。");
else {
fscanf(fp, "%d%d%d%d%d%d%s", &y, &mo, &d, &h, &m, &s, feel);
printf("前回は%4d年%02d月%02d日%02d時%02d分%02d秒で、"
"気分は%sでした。\n", y, mo, d, h, m, s, feel);
fclose(fp);
}
}
void put_data(void)
{
FILE *fp;
time_t t;
struct tm *local;
char feel[64] = "普通";
time(&t);
local = localtime(&t);
if((fp = fopen(data_file, "w")) == NULL)
puts("\aファイルをオープン出来ません。");
else {
printf("現在の気分は:"); scanf("%s", feel);
fprintf(fp, "%d %d %d %d %d %d %s\n",
local->tm_year + 1900, local->tm_mon + 1, local->tm_mday,
local->tm_hour, local->tm_min, local->tm_sec, feel);
fclose(fp);
}
}
int main(void)
{
get_data();
put_data();
return 0;
}
演習13-6
#include <stdio.h>
int main(void)
{
FILE *fp;
char fname[256];
int ch;
int cnt = 0;
printf("ファイル名を指定してください:");
scanf("%s", fname);
if((fp = fopen(fname, "r")) == NULL)
puts("\aファイルをオープン出来ません。");
else {
while((ch = fgetc(fp)) != EOF)
if(ch == '\n') cnt++;
fclose(fp);
printf("指定されたファイルは%d個改行がありました。\n", cnt);
}
return 0;
}
演習13-7
#include <stdio.h>
int main(void)
{
FILE *fp;
char fname[256];
int ch;
int cnt = 0;
printf("ファイル名を指定してください:");
scanf("%s", fname);
if((fp = fopen(fname, "r")) == NULL)
puts("\aファイルをオープン出来ません。");
else {
while((ch = fgetc(fp)) != EOF)
if(ch >= '0' && ch <= '9') cnt++;
fclose(fp);
printf("指定されたファイルは%d個数字文字がありました。\n", cnt);
}
return 0;
}
演習13-8
#include <stdio.h>
int main(void)
{
int ch;
FILE *rfp, *wfp;
char rname[64], wname[64];
printf("コピー元ファイル名:"); scanf("%s", rname);
printf("コピー先ファイル名:"); scanf("%s", wname);
if((rfp = fopen(rname, "r")) == NULL)
puts("\aコピー元ファイルをオープン出来ません。");
else {
if((wfp = fopen(wname, "w")) == NULL)
puts("\aコピー先ファイルをオープン出来ません。");
else {
while((ch = fgetc(rfp)) != EOF) {
putchar(ch);
fputc(ch, wfp);
}
fclose(wfp);
}
fclose(rfp);
}
putchar('\n');
return 0;
}
演習13-9
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int ch;
FILE *rfp, *wfp;
char rname[64], wname[64];
printf("コピー元ファイル名:"); scanf("%s", rname);
printf("コピー先ファイル名:"); scanf("%s", wname);
if((rfp = fopen(rname, "r")) == NULL)
puts("\aコピー元ファイルをオープン出来ません。");
else {
if((wfp = fopen(wname, "w")) == NULL)
puts("\aコピー先ファイルをオープン出来ません。");
else {
while((ch = fgetc(rfp)) != EOF) {
ch = toupper(ch);
fputc(ch, wfp);
}
fclose(wfp);
}
fclose(rfp);
}
return 0;
}
演習13-10
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int ch;
FILE *rfp, *wfp;
char rname[64], wname[64];
printf("コピー元ファイル名:"); scanf("%s", rname);
printf("コピー先ファイル名:"); scanf("%s", wname);
if((rfp = fopen(rname, "r")) == NULL)
puts("\aコピー元ファイルをオープン出来ません。");
else {
if((wfp = fopen(wname, "w")) == NULL)
puts("\aコピー先ファイルをオープン出来ません。");
else {
while((ch = fgetc(rfp)) != EOF) {
ch = tolower(ch);
fputc(ch, wfp);
}
fclose(wfp);
}
fclose(rfp);
}
return 0;
}
演習13-11
#include <stdio.h>
#define N 10
int main(void)
{
double dx[N] = {
3.141592653589793238,
3.142,
3.1,
3.1416,
3.14159,
3.14,
3.141593,
1.41421356,
1.7320508,
1.111111111111110001010
};
FILE *fp;
int i;
if((fp = fopen("float.dat", "wb")) == NULL)
puts("\aファイルをオープン出来ません。");
else {
fwrite(dx, sizeof(double), N, fp);
fclose(fp);
}
if((fp = fopen("float.dat", "rb")) == NULL)
puts("\aファイルをオープン出来ません。");
else {
fread(dx, sizeof(double), N, fp);
puts("配列の内容は:");
for( i = 0; i < N; i++ )
printf("%.21lf\n", dx[i]);
fclose(fp);
}
return 0;
}
演習13-12
#include <stdio.h>
#include <time.h>
char data_file = "datetime.bin";
void get_bdata(void)
{
FILE *fp;
struct tm times;
if*9 == NULL)
puts("\a本プログラムを実行するのは初めてですね。");
else {
fread(×, sizeof(struct tm), 1, fp);
printf("前回は%4d年%02d月%02d日%02d時%02d分%02d秒でした。\n",
times.tm_year + 1900, times.tm_mon + 1, times.tm_mday,
times.tm_hour, times.tm_min, times.tm_sec);
fclose(fp);
}
}
void put_bdata(void)
{
FILE *fp;
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
if*10 == NULL)
puts("\aファイルをオープン出来ません。");
else {
fwrite(local, sizeof(struct tm), 1, fp);
fclose(fp);
}
}
int main(void)
{
get_bdata();
put_bdata();
return 0;
}
*1:height - 100) * 0.9);
printf("標準体重は%.1fです。\n", weight);
return 0;
}
第3章:プログラムの流れの分岐
演習3-1
#include <stdio.h>
int main(void)
{
int a,b;
puts("二つの整数を入力して下さい。");
printf("整数A:"); scanf("%d",&a);
printf("整数B:"); scanf("%d",&b);
if(a % b)
{
puts("BはAの約数ではありません。");
}
else
{
puts("BはAの約数です。");
}
return 0;
}
演習3-2
未回答
演習3-3
#include <stdio.h>
int main(void)
{
int num;
printf("整数を入力してください:"); scanf("%d",&num);
if(num < 0)
{
num = -num;
}
printf("その数の絶対値は%dです。\n", num);
return 0;
}
演習3-4
#include <stdio.h>
int main(void)
{
int a,b;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d",&a);
printf("整数B:"); scanf("%d",&b);
if(a == b)
{
puts("AとBは等しいです。");
}
else if(a > b)
{
puts("AはBより大きいです。");
}
else
{
puts("AはBより小さいです。");
}
return 0;
}
演習3-5
#include <stdio.h>
int main(void)
{
int one,two,three,min;
puts("三つの整数を入力してください。");
printf("整数1:"); scanf("%d", &one);
printf("整数2:"); scanf("%d", &two);
printf("整数3:"); scanf("%d", &three);
min = one;
if(two < min)
{
min = two;
}
if(three < min)
{
min = three;
}
printf("最小値は%dです。\n", min);
return 0;
}
演習3-6
#include <stdio.h>
int main(void)
{
int one,two,three,four,max;
puts("三つの整数を入力してください。");
printf("整数1:"); scanf("%d", &one);
printf("整数2:"); scanf("%d", &two);
printf("整数3:"); scanf("%d", &three);
printf("整数4:"); scanf("%d", &four);
max = one;
if(two > max)
{
max = two;
}
if(three > max)
{
max = three;
}
if(four > max)
{
max = four;
}
printf("最大値は%dです。\n", max);
return 0;
}
演習3-7
#include <stdio.h>
int main(void)
{
int n1, n2, max;
puts("二つの整数を入力して下さい。");
printf("整数1:"); scanf("%d", &n1);
printf("整数2:"); scanf("%d", &n2);
if(n1 > n2)
{
max = n1;
}
else
{
max = n2;
}
printf("大きい方の値は%dです。\n", max);
return 0;
}
演習3-8
#include <stdio.h>
int main(void)
{
int one,two,three,min;
puts("三つの整数を入力してください。");
printf("整数1:"); scanf("%d", &one);
printf("整数2:"); scanf("%d", &two);
printf("整数3:"); scanf("%d", &three);
min = one;
min = (two < min) ? two : (three < min) ? three : one;
printf("最小値は%dです。\n", min);
return 0;
}
演習3-9
#include <stdio.h>
int main(void)
{
int a, b, c;
puts("三つの整数を入力して下さい。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
printf("整数C:"); scanf("%d", &c);
if(a == b == c)
{
puts("三つの値は等しいです。");
}
else if(a == b || b == c || a == c)
{
puts("二つの値が等しいです。");
}
else
{
puts("三つの値は異なります。");
}
return 0;
}
演習3-10
#include <stdio.h>
int main(void)
{
int a, b;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
if((a - b) > 10 || (a - b) < -10) puts("それらの差は11以上です。");
else puts("それらの差は10以下です。");
return 0;
}
演習3-11
未回答
演習3-12
#include <stdio.h>
int main(void)
{
int month;
printf("何月ですか:"); scanf("%d", &month);
switch(month)
{
case 1: puts("冬です。"); break;
case 2: puts("冬です。"); break;
case 3: puts("春です。"); break;
case 4: puts("春です。"); break;
case 5: puts("春です。"); break;
case 6: puts("夏です。"); break;
case 7: puts("夏です。"); break;
case 8: puts("夏です。"); break;
case 9: puts("秋です。"); break;
case 10:puts("秋です。"); break;
case 11:puts("秋です。"); break;
case 12:puts("冬です。"); break;
default : puts("そんな月有りませんよ!\a"); break;
}
return 0;
}
第4章:プログラムの流れの繰り返し
演習4-1
#include <stdio.h>
int main(void)
{
int num1, num2;
do
{
printf("非負の整数を入力して下さい:");
scanf("%d", &num1);
if(num1 < 0)
puts("\a負の数を入力しないでください。");
} while(num1 < 0);
num2 = num1;
printf("%dを逆から読むと", num2);
do
{
printf("%d", num1 % 10);
num1 = num1 / 10;
} while(num1 > 0);
puts("です。");
return 0;
}
演習4-2
#include <stdio.h>
int main(void)
{
int num1,num2;
int dig;
do {
printf("非負の整数を入力して下さい:");
scanf("%d", &num1);
if (num1 < 0)
puts("\a負の数を入力しないで下さい。");
} while (num1 < 0);
num2 = num1;
dig = 0;
do {
num1 = num1 / 10;
dig = dig + 1;
} while (num1 > 0);
printf("%dは%d桁です。\n", num2, dig);
return (0);
}
演習4-3
#include <stdio.h>
int main (void)
{
int num1,num2;
int sum = 0;
int tmp1,tmp2;
do {
puts("二つの整数を入力して下さい。");
printf("整数1:"); scanf("%d", &num1);
printf("整数2:"); scanf("%d", &num2);
if (num1 == num2)
puts("同じ数値を入力しないで下さい!");
} while (num1 == num2);
//整数1より整数2の方が大きかったらnum1とnum2を入れ替える
if (num1 > num2)
{
tmp1 = num1;
num1 = num2;
num2 = tmp1;
}
tmp2 = num1;
do {
sum = sum + tmp2;
tmp2++;
} while (tmp2 <= num2);
printf(" %d 以上 %d 以下の全整数の和は %d です。\n", num1, num2, sum);
return (0);
}
演習4-4
#include <stdio.h>
int main(void)
{
int num;
do {
printf("非負の整数を入力して下さい:");
scanf("%d", &num);
if (num < 0)
puts("\a負の数を入力しないで下さい。");
} while (num < 0);
printf("その数を逆から読むと");
do {
printf("%d", num % 10);
num /= 10;
} while (num > 0);
puts("です。");
return (0);
}
演習4-5
#include <stdio.h>
int main (void)
{
int num;
int dig;
do {
printf("非負の整数を入力して下さい:");
scanf("%d", &num);
if (num < 0)
puts("\a負の数を入力しないで下さい。");
} while (num < 0);
dig = 0;
do {
num /= 10;
dig++;
} while (num > 0);
printf("その数は%d桁です。\n", dig);
return (0);
}
演習4-6
#include <stdio.h>
int main (void)
{
int no;
printf("整数を入力して下さい:");
scanf("%d", &no);
if (no >= 0)
{
while (no >= 0)
{
printf("%d ", no);
no--;
}
putchar('\n');
}
return (0);
}
演習4-7
#include <stdio.h>
int main (void)
{
int no;
printf("正の整数を入力して下さい:");
scanf("%d", &no);
while (no > 0)
printf("%d ", no--);
putchar('\n');
return (0);
}
演習4-8
#include <stdio.h>
int main (void)
{
int i,no;
printf("正の整数を入力して下さい:");
scanf("%d", &no);
i = 1;
while (i <= no)
printf("%d ", i++);
if (no > 0)
putchar('\n');
return (0);
}
演習4-9
#include <stdio.h>
int main (void)
{
int i,no;
printf("正の整数を入力して下さい:");
scanf("%d", &no);
i = 1;
while (i <= no)
{
if (!(i % 2
*2:height - 100) * 0.9);
printf("%dcm\t%.2fkg\n", height, weight);
}
return 0;
}
演習4-15
#include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 9; i++)
{
if (i == 1)
{
printf(" |");
for (j = 1; j <= 9; j++)
printf("%3d", j);
putchar('\n');
puts("-------------------------------");
}
printf(" %d |", i);
for (j = 1; j <= 9; j++)
printf("%3d", i * j);
putchar('\n');
}
return (0);
}
演習4-16
#include <stdio.h>
int main(void)
{
int i, j;
int width, height;
puts("長方形を作りましょう");
printf("一辺(その1):"); scanf("%d", &height);
printf("一辺(その2):"); scanf("%d", &width);
for (i = 1; i <= height; i++)
{
for (j = 1; j <= width; j++)
putchar('*');
putchar('\n');
}
return (0);
}
演習4-17-1
#include <stdio.h>
int main(void)
{
int i, j, In;
printf("何段ですか:");
scanf("%d", &In);
for (i = 0; i < In; i++)
{
for (j = 0; j < In - i; j++)
putchar('*');
putchar('\n');
}
return (0);
}
演習4-17-2
#include <stdio.h>
int main(void)
{
int i, j, In;
printf("何段ですか:");
scanf("%d", &In);
for (i = 0; i < In; i++)
{
for (j = 0; j < i; j++)
putchar(' ');
for (j = 0; j < In - i; j++)
putchar('*');
putchar('\n');
}
return (0);
}
演習4-18
#include <stdio.h>
int main(void)
{
int i, j, no;
printf("何段ですか:");
scanf("%d", &no);
for (i = 1; i <= no; i++)
{
for (j = 0; j < no - i; j++)
putchar(' ');
for (j = 0; j < (i * 2) - 1; j++)
putchar('*');
putchar('\n');
}
return (0);
}
第5章:配列
演習5-1
#include <stdio.h>
int main(void)
{
int i;
int vc[5];
for (i = 0; i < 5; i++)
vc[i] = i;
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return(0);
}
演習5-2
#include <stdio.h>
int main(void)
{
int i;
int vc[5];
for (i = 0; i < 5; i++)
vc[i] = 5 - i;
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return(0);
}
演習5-3
#include <stdio.h>
int main(void)
{
int i;
int vc[5] = {5, 4, 3, 2 ,1};
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return (0);
}
演習5-4
#include <stdio.h>
int main(void)
{
int i;
int va[5] = {15, 20, 30};
int vb[5];
for(i = 0; i < 5; i++)
vb[i] = va[5 - i - 1];
puts(" va vb");
puts("------");
for(i = 0; i < 5; i++)
printf("%3d%3d\n", va[i], vb[i]);
return (0);
}
演習5-5
#include <stdio.h>
int main(void)
{
int i;
int vx[8];
for (i = 0; i < 8; i++)
{
printf("vx[%d]", i);
scanf("%d", &vx[i]);
}
for (i = 0; i < 4; i++)
{
int temp = vx[i];
vx[i] = vx[7 - i];
vx[7 - i] = temp;
}
for(i = 0; i < 8; i++)
printf("vx[%d]、%d\n", i, vx[i]);
return (0);
}
演習5-6
未回答
演習5-7
#include <stdio.h>
int main(void)
{
int i, j, k;
int ma[2][3] = { {1, 2, 3}, {4, 5, 6} };
int mb[3][2] = { {1, 5}, {5, 3}, {8, 1} };
int mc[2][2] = { 0 };
for (i = 0; i < 2; i++)
{
for (k = 0; k < 2; k++)
for (j = 0; j < 3; j++)
mc[i][k] += ma[i][j] * mb[j][k];
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
printf("%3d", mc[i][j]);
putchar('\n');
}
return (0);
}
第6章:関数
演習6-1
#include <stdio.h>
int minof(int x, int y)
{
int min;
min = x;
if ( y < min )
min = y;
return min;
}
int main(void)
{
int na, nb;
puts("二つの整数を入力して下さい。");
printf("整数1:"); scanf("%d", &na);
printf("整数2:"); scanf("%d", &nb);
printf("小さい方の値は%dです。\n", minof( na, nb
*3:x) - (y
*4:y) - (x)))
int main(void)
{
int a, b;
puts("二つの整数を入力してください");
printf("整数1:"); scanf("%d", &a);
printf("整数2:"); scanf("%d", &b);
printf("二つの整数の差は%dです\n", diff(a, b
*5:y % 4000) != 0))) ||
(((y % 100) == 0) && ((y % 400) == 0
*6:y % 100) != 0
*7:fp = fopen(fname, "r"
*8:wfp = fopen(fname, "w"
*9:fp = fopen(data_file, "rb"
*10:fp = fopen(data_file, "wb"