教科書の回答がありませんので、順番にまとめていきます。
本当の初心者ですので、間違いなどありましたらご教授のほどお願いいたします。
また、回答は私個人で作成していますので、ご了承くださいませ。
第1章 まずは慣れよう
演習問題 1-1(更新 2021年2月7日)
演習問題 1-2(更新 2021年2月7日)
演習問題 1-3(更新 2021年2月7日)
演習問題 1-4(更新 2021年2月7日)
演習問題 1-5(更新 2021年2月7日)
演習問題 1-8(更新 2021年2月7日)
第2章 演算と型
演習問題 2-1(更新 2021年2月14日)
演習問題 2-2(更新 2021年2月14日)
演習問題 2-3(更新 2021年2月14日)
演習問題 2-4(更新 2021年2月14日)
演習問題 2-5(更新 2021年2月14日)
演習問題 2-6(更新 2021年2月14日)
第3章 プログラムの流れの分岐
演習問題 3-1(更新 2021年2月20日)
演習問題 3-2(更新 2021年2月20日)
演習問題 3-3(更新 2021年2月20日)
演習問題 3-4(更新 2021年2月20日)
演習問題 3-5(更新 2021年2月20日)
演習問題 3-6(更新 2021年2月20日)
演習問題 3-7(更新 2021年2月20日)
演習問題 3-8(更新 2021年2月20日)
演習問題 3-9(更新 2021年5月19日)
演習問題 3-10(更新 2021年2月20日)
演習問題 3-11(更新 2021年2月20日)
演習問題 3-12(更新 2021年2月20日)
演習問題 3-13(更新 2021年2月20日)
第4章 プログラムの流れの繰返し
演習問題 4-1(更新 2021年3月2日)
演習問題 4-2(更新 2021年3月2日)
演習問題 4-3(更新 2021年3月2日)
演習問題 4-4(更新 2021年3月2日)
演習問題 4-5(更新 2021年3月2日)
演習問題 4-6(更新 2021年3月2日)
演習問題 4-7(更新 2021年3月2日)
演習問題 4-8(更新 2021年3月2日)
演習問題 4-9(更新 2021年3月2日)
演習問題 4-10(更新 2021年3月2日)
演習問題 4-11(更新 2021年3月2日)
演習問題 4-12(更新 2021年3月2日)
演習問題 4-13(更新 2021年3月2日)
演習問題 4-14(更新 2021年3月2日)
演習問題 4-15(更新 2021年3月2日)
演習問題 4-16(更新 2021年3月2日)
演習問題 4-17(更新 2021年3月2日)
演習問題 4-18(更新 2021年3月2日)
演習問題 4-19(更新 2021年3月2日)
演習問題 4-20(更新 2021年3月2日)
演習問題 4-21(更新 2021年3月2日)
演習問題 4-22(更新 2021年3月2日)
演習問題 4-23(更新 2021年3月2日)
演習問題 4-24(更新 2021年3月2日)
演習問題 4-25(更新 2021年3月2日)
第5章 配列
演習問題 5-1(更新 2021年3月26日)
演習問題 5-2(更新 2021年3月26日)
演習問題 5-3(更新 2021年3月26日)
演習問題 5-4(更新 2021年3月26日)
演習問題 5-5(更新 2021年3月26日)
演習問題 5-6(更新 2021年3月26日)
演習問題 5-7(更新 2021年3月26日)
演習問題 5-8(更新 2021年3月26日)
演習問題 5-9(更新 2021年3月26日)
演習問題 5-10(更新 2021年3月26日)
演習問題 5-11(更新 2021年3月26日)
演習問題 5-12(更新 2021年3月26日)
第6章 関数
演習問題 6-1(更新 2021年5月28日)
演習問題 6-2(更新 2021年3月28日)
演習問題 6-3(更新 2021年3月28日)
演習問題 6-4(更新 2021年3月28日)
演習問題 6-5(更新 2021年3月28日)
演習問題 6-6(更新 2021年3月28日)
演習問題 6-7(更新 2021年3月28日)
演習問題 6-8(更新 2021年3月28日)
演習問題 6-9(更新 2021年3月28日)
演習問題 6-10(更新 2021年3月28日)
演習問題 6-11(更新 2021年5月31日)
演習問題 6-12(更新 2021年3月28日)
演習問題 6-13(更新 2021年3月28日)
演習問題 6-14(更新 2021年3月28日)
演習問題 6-15(更新 2021年3月28日)
第7章 整数型と文字型
演習問題 7-1(更新 2021年3月28日)
演習問題 7-2(更新 2021年3月28日)
演習問題 7-3(更新 2021年3月28日)
演習問題 7-4(更新 2021年3月28日)
演習問題 7-5(更新 2021年3月28日)
演習問題 7-6(更新 2021年3月28日)
演習問題 7-7(更新 2021年3月28日)
演習問題 7-8(更新 2021年3月28日)
演習問題 7-9(更新 2021年3月28日)
演習問題 7-10(更新 2021年3月28日)
演習問題 7-11(更新 2021年3月28日)
第8章 いろいろなプログラムを作ってみよう
演習問題 8-1(更新 2021年4月12日)
演習問題 8-2(更新 2021年4月12日)
演習問題 8-3(更新 2021年4月12日)
演習問題 8-4(更新 2021年4月12日)
演習問題 8-5(更新 2021年4月12日)
演習問題 8-6(更新 2021年4月12日)
演習問題 8-7(更新 2021年4月12日)
演習問題 8-8(更新 2021年4月12日)
演習問題 8-9(更新 2021年4月12日)
演習問題 8-10(更新 2021年4月12日)
第9章 文字列の基本
演習問題 9-1(更新 2021年4月12日)
演習問題 9-2(更新 2021年4月12日)
演習問題 9-3(更新 2021年5月23日)
演習問題 9-4(更新 2021年4月12日)
演習問題 9-5(更新 2021年4月12日)
演習問題 9-6(更新 2021年4月12日)
演習問題 9-7(更新 2021年4月12日)
演習問題 9-8(更新 2021年4月12日)
演習問題 9-9(更新 2021年4月12日)
演習問題 9-10(更新 2021年4月12日)
演習問題 9-11(更新 2021年4月12日)
演習問題 9-12(更新 2021年4月12日)
第10章 ポインタ
演習問題 10-1(更新 2021年4月24日)
演習問題 10-2(更新 2021年4月24日)
演習問題 10-3(更新 2021年4月24日)
演習問題 10-4(更新 2021年4月24日)
演習問題 10-5(更新 2021年4月24日)
第11章 文字列とポインタ
演習問題 11-1(更新 2021年4月24日)
演習問題 11-2(更新 2021年4月24日)
演習問題 11-3(更新 2021年4月24日)
演習問題 11-4(更新 2021年4月24日)
演習問題 11-5(更新 2021年4月24日)
演習問題 11-6(更新 2021年4月24日)
演習問題 11-7(更新 2021年4月24日)
演習問題 11-8(更新 2021年4月24日)
演習問題 11-9(更新 2021年4月24日)
演習問題 11-10(更新 2021年4月24日)
第12章 構造体
演習問題 12-1(更新 2021年5月3日)
演習問題 12-2(更新 2021年5月3日)
演習問題 12-3(更新 2021年5月3日)
演習問題 12-4(更新 2021年5月3日)
演習問題 12-5(更新 2021年5月3日)
第13章 ファイル処理
演習問題 13-1(更新 2021年5月3日)
演習問題 13-2(更新 2021年5月3日)
演習問題 13-3(更新 2021年5月3日)
演習問題 13-4(更新 2021年5月3日)
演習問題 13-5(更新 2021年5月3日)
演習問題 13-6(更新 2021年5月3日)
演習問題 13-7(更新 2021年5月3日)
演習問題 13-8(更新 2021年5月3日)
演習問題 13-9(更新 2021年5月3日)
演習問題 13-10(更新 2021年5月3日)
演習問題 13-11(更新 2021年5月3日)
演習問題 13-12(更新 2021年5月3日)
演習問題 13-13(更新 2021年5月3日)
第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人");
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 x = 3.14; int y = 5.7; printf("3.14は%dとなる。\n",x); printf("5.7は%dとなる。\n",y); return 0; }
(回答)
演習問題 1-5
#include<stdio.h> int main(void) { int no ; printf("数値を入力してください。:"); scanf("%d",&no); printf("%dに12を加えると%dです。\n", no , no + 12); return 0; }
(回答)
演習問題 1-6
#include<stdio.h> int main(void) { int no ; printf("数値を入力してください。:"); scanf("%d",&no); printf("%dに6を減じるとると%dです。\n", no , no - 6); return 0; }
(回答)
演習問題 1-7
#include<stdio.h> int main(void) { puts("天\n地\n人\n"); return 0; }
(回答)
演習問題 1-8
#include<stdio.h> int main(void) { int n1,n2; int wa; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); wa = n1 * n2; printf("それらの積は%dです。",wa); return 0; }
(回答)
演習問題 1-9
#include<stdio.h> int main(void) { int n1,n2,n3; int wa; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("整数3:"); scanf("%d",&n3); wa = n1 +n2 + n3; printf("それらの和は%dです。",wa); return 0; }
第2章 (回答)演算と型
(回答)
演習問題 2-1
#include<stdio.h> int main(void) { int x , y; puts("二つの整数を入力してください。"); printf("整数x:"); scanf("%d",&x); printf("整数y:"); scanf("%d",&y); printf("xの値はyの%d%です。\n", 100 * x / y); return 0; }
(回答)
演習問題 2-2
#include<stdio.h> int main(void) { int x , y; puts("二つの整数を入力してください。"); printf("整数x:"); scanf("%d",&x); printf("整数y:"); scanf("%d",&y); printf("それらの和は%dで積は%dです。\n", x + y, x * y); return 0; }
(回答)
演習問題 2-3
#include<stdio.h> int main(void) { double no; printf("実数を入力してください。:"); scanf("%lf", &no); printf("あなたは%fと入力しましたね。\n",no); return 0; }
(回答)
演習問題 2-4
#include<stdio.h> int main(void) { double no; printf("実数を入力してください。:"); scanf("%lf", &no); printf("あなたは%fと入力しましたね。\n",no); 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)100 * a / b ); return 0; }
(回答)
演習問題 2-6
#include<stdio.h> int main(void) { int a; double ave; printf("身長を入力してください。:"); scanf("%d",&a); ave = (double)( a - 100) * 0.9; printf("標準体重は%3.1fです。\n", ave); 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
#include<stdio.h> int main(void) { int no; printf("整数を入力してください。"); scanf("%d",&no); if( no == 0) puts("その数は0です。"); else if( no > 0) puts("その数は正です。"); else if( no < 0) puts("その数は負です。"); return 0; }
(回答)
演習問題 3-3
#include<stdio.h> int main(void) { int no; printf("整数を入力してください。:"); scanf("%d",&no); if( no > 0) printf("絶対値は%dです。", no); else printf("絶対値は%dです。",-no); 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 a, b; puts("二つの整数を入力してください。:"); printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); puts("等価演算子"); if( a == 0) printf("a == b : 1\n"); else printf("a == b : 0\n"); if( a != 0) printf("a != b : 1\n"); else printf("a != b : 0\n"); puts("関係演算子"); if( a < b) printf("a < b : 1\n"); else printf("a < b : 0\n"); if( a > b) printf("a > b : 1\n"); else printf("a > b : 0\n"); if( a <= b) printf("a <= b : 1\n"); else printf("a <= b : 0\n"); if( a >= b) printf("a <= b : 1\n"); else printf("a <= b : 0\n"); return 0; }
(回答)
演習問題 3-6
#include<stdio.h> int main(void) { int n1, n2, n3, min; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("整数3:"); scanf("%d",&n3); min = n1; if( n2 < min) min = n2; if( n3 < min) min = n3; printf("入力した最小値は%dです。\n", min); return 0; }
(回答)
演習問題 3-7
#include<stdio.h> int main(void) { int n1, n2, n3, n4, max; puts("四つの整数を入力してください。"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("整数3:"); scanf("%d",&n3); printf("整数4:"); scanf("%d",&n4); max = n1; if( n2 > max) max = n2; if( n3 > max) max = n3; if( n4 > max) max = n4; printf("入力した最大値は%dです。\n", max); return 0; }
(回答)
演習問題 3-8
#include<stdio.h> int main(void) { int n1, n2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); if( n1 > n2) printf("それらの差は%dです。\n", n1 - n2); else printf("それらの差は%dです。\n", n2 - n1); return 0; }
(回答)
演習問題 3-9
#include<stdio.h> int main(void) { int n1, n2, n3, min; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("整数3:"); scanf("%d",&n3); min = (n1 < n2) ? n1 : n2; min = (min < n3) ? min : n3; printf("入力した最小値は%dです。\n", min); return 0; }
(回答)
演習問題 3-10
#include<stdio.h> int main(void) { int n1, n2, n3; puts("三つの整数を入力してください。"); printf("整数A:"); scanf("%d",&n1); printf("整数B:"); scanf("%d",&n2); printf("整数C:"); scanf("%d",&n3); if(n1 == n2 && n2 == n3) printf("三つの値は等しいです。\n"); else if(n1 == n2 || n1 == n3 || n2 == n3) printf("二つの値が等しいです。\n"); else printf("三つの値は異なります。\n"); return 0; }
(回答)
演習問題 3-11
#include<stdio.h> int main(void) { int n1, n2; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d",&n1); printf("整数B:"); scanf("%d",&n2); if((n1 > n2 && n1 - n2 <= 10) || (n2 > n1 && n2 - n1 <= 10)) printf("それらの差は10以下です。\n"); else printf("それらの差は11以上です。\n"); return 0; }
(回答)
演習問題 3-12
#include<stdio.h> int main(void) { int no; printf("整数を入力してください。:"); scanf("%d",&no); switch(no % 2){ case 0:puts("その数は偶数です。"); break; default:puts("その数は奇数です。"); break; } return 0; }
(回答)
演習問題 3-13
#include<stdio.h> int main(void) { int month; printf("何月ですか。:"); scanf("%d",&month); switch(month){ case 1: case 2:printf("%d月は冬です。\n",month); break; case 3: case 4: case 5:printf("%d月は春です。\n",month); break; case 6: case 7: case 8:printf("%d月は夏です。\n",month); break; case 9: case 10: case 11:printf("%d月は秋です。\n",month); break; case 12:printf("%d月は冬です。\n",month); break; default:printf("%d月はありません。\n",month); break; } return 0; }
第4章 (回答)プログラムの流れの繰返し
(回答)
演習問題 4-1
#include<stdio.h> int main(void) { int no; int retty; do{ printf("整数を入力してください。:"); scanf("%d",&no); if(no == 0) puts("その数は0です。"); else if(no > 0) puts("その数は正です。"); else puts("その数は負です。"); printf("もう一度?【はい・・・0 / 終了・・・9】"); scanf("%d",&retty); }while( retty == 0); return 0; }
(回答)
演習問題 4-2
#include<stdio.h> int main(void) { int a = 0; int b = 0; int f = 0; int sum = 0; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d",&a); printf("整数B:"); scanf("%d",&b); if(a <= b){ do{ sum = sum + a; a = a +1; f = f +1; }while( a <= b); printf("%d以上%d以下の全数値の和は%dです。\n", a - f, b, sum); } else{ do{ sum = sum + b; b = b + 1; f = f + 1; }while( a >= b ); printf("%d以上%d以下の全数値の和は%dです。\n",b - f, a, sum); } return 0; }
(回答)
演習問題 4-3
#include<stdio.h> int main(void) { int no; printf("正の整数を入力してください。:"); scanf("%d",&no); while(no >= 0){ printf("%d ",no); if(no == 0){ printf("\n"); } no--; } return 0; }
(回答)
演習問題 4-4
#include<stdio.h> int main(void) { int no; printf("整数を入力してください。:"); scanf("%d",&no); while(no >= 1){ printf("%d ",no); no--; } return 0; }
(回答)
演習問題 4-5
#include<stdio.h> int main(void) { int i, no; printf("整数を入力してください。:"); scanf("%d",&no); i = 1; while(i <= no){ printf("%d ",i++); if(i == no + 1){ printf("\n"); } } return 0; }
(回答)
演習問題 4-6
#include<stdio.h> int main(void) { int i = 2; int no; printf("整数を入力してください。:"); scanf("%d",&no); while(i <= no){ printf("%d ",i); i = i +2; } printf("\n"); return 0; }
(回答)
演習問題 4-7
#include<stdio.h> int main(void) { int i = 2; int no; printf("整数を入力してください。:"); scanf("%d",&no); while(i <= no){ printf("%d ",i); i = i * 2; } printf("\n"); return 0; }
(回答)
演習問題 4-8
#include<stdio.h> int main(void) { int no; printf("正の整数:"); scanf("%d",&no); if(no > 1){ while(no-- > 0) putchar('*'); putchar('\n'); return 0; } }
(回答)
演習問題 4-9
#include<stdio.h> int main(void) { int i = 0; int no; printf("正の整数:"); scanf("%d", &no); while(i < no){ i++; if(i % 2) putchar('+'); else putchar('-'); } printf("\n"); return 0; }
(回答)
演習問題 4-10
#include<stdio.h> int main(void) { int i = 0; int no; printf("正の整数:"); scanf("%d", &no); while(i < no){ putchar('*'); i++; printf("\n"); } return 0; }
(回答)
演習問題 4-11
#include<stdio.h> int main(void) { int no; do{ printf("正の整数を入力してください。:"); scanf("%d",&no); if(no <= 0) puts("\a正ではない数を入力しないでください。"); }while(no <= 0); printf("%dを逆から読むと",no); while(no > 0){ printf("%d", no % 10); no /= 10; } puts("です。"); return 0; }
(回答)
演習問題 4-12
#include<stdio.h> int main(void) { int no; int count = 0; do{ printf("正の整数を入力してください。:"); scanf("%d",&no); if(no <= 0) puts("\a正ではない数を入力しないでください。"); }while(no <= 0); printf("%d", no); while(no > 0){ no /= 10; count++; } printf("は%d桁です。", count); return 0; }
(回答)
演習問題 4-13
#include<stdio.h> int main(void) { int n, i; int sum = 0; printf("nの値:"); scanf("%d",&n); for(i = 0; i <= n; i++) sum = sum + i; printf("1から%dまでの和は%dです。", n, sum); return 0; }
(回答)
演習問題 4-14
#include<stdio.h> int main(void) { int i, no; printf("正の整数を入力してください。:"); scanf("%d",&no); for(i = 1; i <= no; i++) printf("%d", i % 10); return 0; }
(回答)
演習問題 4-15
#include<stdio.h> int main(void) { int no1, no2, i, ave; printf("何㎝から:"); scanf("%d",&no1); printf("何㎝まで:"); scanf("%d",&no2); for(i = no1; i <= no2; i += 5){ printf("%dcm %.2fkg\n",i ,(double)(i -100) * 0.9); } return 0; }
(回答)
演習問題 4-16
#include<stdio.h> int main(void) { int i, n; printf("整数値:"); scanf("%d",&n); for(i = 1; i <= n; i += 2) printf("%d ", i); putchar('\n'); return 0; }
(回答)
演習問題 4-17
#include<stdio.h> int main(void) { int i, n; printf("nの整数値:"); scanf("%d",&n); for(i = 1; i <= n; i++) printf("%dの2乗は%d\n", i, i * i); return 0; }
(回答)
演習問題 4-18
#include<stdio.h>
int main(void)
{
int i, n;
printf("何個*を表\示しますか。:");
/*shify_JIS 0x5c問題「表」の表示をする為¥を挿入*/
scanf("%d",&n);
for(i = 1;i <= n;i++){
putchar('*');
if(i % 5 == 0){
putchar('\n');
}
}
return 0;
}
(回答)
演習問題 4-19
#include<stdio.h> int main(void) { int i, n; int sum = 0; printf("整数値:"); scanf("%d",&n); for(i = 1;i <= n;i++){ if(n % i == 0){ printf("%d\n",i); sum++; } } printf("約数は%d個です\n",sum); return 0; }
(回答)
演習問題 4-20
#include<stdio.h> int main(void) { int i, j; do{ printf(" |"); for(i = 1; i <= 9; i++) printf("%3d",i); }while(i <= 9); putchar('\n'); printf("---+---------------------------\n"); for(i = 1;i <= 9; i++){ printf(" %d |", i); for(j = 1;j <= 9; j++) printf("%3d", i * j); putchar('\n'); } return 0; }
(回答)
演習問題 4-21
#include<stdio.h> int main(void) { int i , j, n; puts("正方形を作ります。"); printf("何段ですか。:"); scanf("%d",&n); for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++) putchar('*'); putchar('\n'); } return 0; }
(回答)
演習問題 4-22
#include<stdio.h> int main(void) { int n1, n2, i, j, height, wide; puts("横長の長方形を作ります。"); printf("一辺(その一):"); scanf("%d",&n1); printf("一辺(その二):"); scanf("%d",&n2); if(n1 < n2){ height = n1; wide = n2; }else{ height = n2; wide = n1; } for(i = 1; i <= height; i++){ for(j = 1; j <= wide; j++) putchar('*'); putchar('\n'); } return 0; }
(回答)
演習問題 4-23①
#include<stdio.h> int main(void) { int i, j, len; puts("左上直角二等辺三角形を作ります。"); printf("短辺:"); scanf("%d",&len); for(i = 1; i <= len; i++){ for(j = len; j >= i; j--) putchar('*'); putchar('\n'); } return 0; }
(回答)
演習問題 4-23②
#include<stdio.h> int main(void) { int i, j, len; puts("右上直角二等辺三角形を作ります。"); printf("短辺:"); scanf("%d",&len); for(i = 1; i <= len; i++){ for(j = len; j >= len + 1; j--) putchar(' '); for(j = len; j >= i; j--) putchar('*'); putchar('\n'); } return 0; }
(回答)
演習問題 4-24
#include<stdio.h> int main(void) { int i, j, len; puts("ピラミッドをつくります。"); printf("何段ですか:"); scanf("%d",&len); for(i = 1; i <= len; i++){ for(j = len - i; j > 0; j--){ putchar(' '); } for(j = 0; j < ( i - 1 ) * 2 + 1; j++){ putchar('*'); } putchar('\n'); } return 0; }
(回答)
演習問題 4-25
#include<stdio.h> int main(void) { int i, j, len; puts("下向きピラミッドを作ります。"); printf("何段ですか:"); scanf("%d",&len); for(i = 1; i <= len; i++){ for(j = 1; j < i; j++){ putchar(' '); } for(j = 1; j <= ( len - i ) * 2 + 1; j++){ printf("%d", i % 10); } putchar('\n'); } return 0; }
第5章 (回答)配列
(回答)
演習問題 5-1
#include<stdio.h> int main(void) { int i; int v[5]; for(i = 0; i < 5; i++) v[i] = i; for(i = 0; i < 5; i++) printf("v[%d] = %d\n", i, v[i]); return 0; }
(回答)
演習問題 5-2
#include<stdio.h> int main(void) { int i; int v[5]; for(i = 0; i < 5; i++) v[i] = 5 - i; for(i = 0; i < 5; i++) printf("v[%d] = %d\n", i, v[i]); return 0; }
(回答)
演習問題 5-3
#include<stdio.h> int main(void) { int i; int v[5] = {5, 4, 3, 2, 1}; for(i = 0; i < 5; i++) printf("v[%d] = %d\n", i, v[i]); return 0; }
(回答)
演習問題 5-4
#include<stdio.h> int main(void) { int i; int a[5] = {17, 23, 36}; int b[5]; for(i = 0; i < 5; i++) b[i] = a[5 - i]; puts(" a b"); puts("--------"); for(i = 0; i < 5; i++) printf("%4d%4d\n",a[i], b[i]); return 0; }
(回答)
演習問題 5-5
#include<stdio.h> #define NUMBER 7 int main(void) { int i; int x[NUMBER]; for(i = 0; i < NUMBER; i++){ printf("x[%d]:", i); scanf("%d",&x[i]); } for(i = 0; i < NUMBER / 2; i++){ int temp = x[i]; x[i] = x[(NUMBER - 1) - i]; x[(NUMBER - 1) - i] = temp; } puts("反転しました。"); for(i = 0;i < NUMBER; i++) printf("x[%d] = %d\n", i, x[i]); return 0; }
(回答)
演習問題 5-6
a = ( b = 1.5)であるため、bは整数に変換されるため「b = 1]となる。 a = 1 となり、aはdouble型であるため少数点を含む1.00となる。
(回答)
演習問題 5-7
#include<stdio.h> #define NUMBER 80 int main(void) { int i; int num; int tensu[NUMBER]; printf("データ数:"); scanf("%d",&num); for(i = 0; i < num; i++){ printf("%d番:", i + 1); scanf("%d",&tensu[i]); } printf("{%d,",tensu[0]); for(i = 1; i < num - 1; i++){ printf(" %d,", tensu[i]); } printf(" %d}\n", tensu[num -1]); return 0; }
(回答)
演習問題 5-8
#include<stdio.h> #define MEMBER 80 int main(void) { int i, j; int num; int tensu[MEMBER]; int bunpu[11] = {0}; printf("人数を入力してください。:"); do{ scanf("%d",&num); if(num < 1 || num > MEMBER) printf("\a1~%dで入力して下さい。", MEMBER); }while( num < 1 || num > MEMBER); printf("%d人の点数を入力して下さい。:\n", num); for(i = 0; i < num; i++){ printf("%2d番:", i + 1); do{ scanf("%d",&tensu[i]); if(tensu[i] < 0 || tensu[i] > 100) printf("\a1~100で入力して下さい。:"); }while(tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n---分布グラグ---"); for(i = 0; i <= num; i++){ printf("%3d ~%3d:",i * 10, i * 10 + 9); for(j = 0; j < bunpu[i]; j++) putchar('*'); putchar('\n'); } printf(" 100:"); for(j = 0; j < bunpu[10]; j++) putchar('*'); putchar('\n'); return 0; }
(回答)
演習問題 5-9
#include<stdio.h> #define MEMBER 80 int main(void) { int i, j; int num, max; int tensu[MEMBER]; int bunpu[11] = {0}; printf("人数を入力してください。:"); do{ scanf("%d",&num); if(num < 1 || num > MEMBER) printf("\a1~%dで入力して下さい。", MEMBER); }while( num < 1 || num > MEMBER); printf("%d人の点数を入力して下さい。:\n", num); for(i = 0; i < num; i++){ printf("%2d番:", i + 1); do{ scanf("%d",&tensu[i]); if(tensu[i] < 0 || tensu[i] > 100) printf("\a1~100で入力して下さい。:"); }while(tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } printf("\n"); max = bunpu[0]; for(i = 1; i <= 10; i++){ if(max < bunpu[i]){ max = bunpu[i]; } } for(i = max; i > 0; i--){ for(j = 0; j <= 10; j++){ if(i == bunpu[j]){ printf(" * "); bunpu[j]--; }else{ printf(" "); } } putchar('\n'); } printf("--------------------------------\n"); printf(" 0 10 20 30 40 50 60 70 80 90 100\n"); return 0; }
(回答)
演習問題 5-10
#include<stdio.h> int main(void) { int i, j, k; int a[4][3]; int b[3][4]; int sum = 0; puts("4行3列の数字を入力してください。"); for(i = 0; i < 4; i++){ for(j = 0; j < 3; j++){ printf("%d行%d列の数値:", i, j); scanf("%d",&a[i][j]); } putchar('\n'); } puts("3行4列の数字を入力して下さい。"); for(i = 0; i < 3; i++){ for(j = 0; j < 4; j++){ printf("%d行%d列の数値:", i, j); scanf("%d",&b[i][j]); } putchar('\n'); } printf("4行3列の行列と3行4列の積は:\n"); for(k = 0; k < 4; k++){ for(i = 0; i < 4; i++){ for(j = 0; j < 3; j++){ sum = sum + (a[k][j] * b[j][i]); } printf("%3d", sum); sum = 0; } printf("\n"); } return 0; }
(回答)
演習問題 5-11
#include<stdio.h> int main(void) { int i, j; int tensu[6][2] = {{50, 30},{30, 30},{40,50},{100,100},{80, 60},{90, 40}}; int sum1 = 0; int sum2 = 0; int sum3 = 0; for(i = 0; i < 6; i++){ sum1 = sum1 + tensu[i][0]; } printf("国語の合計点数:%4d 平均点:%.2f\n", sum1, (double)sum1 / 6); for(i = 0; i < 6; i++){ sum2 = sum2 + tensu[i][1]; } printf("数学の合計点数:%4d 平均点:%.2f\n", sum2, (double)sum2 / 6); for(i = 0; i < 6; i++){ for(j = 0; j < 2; j++){ sum3 = sum3 + tensu[i][j]; } printf("学生%d:合計点%3d 平均点%5.2f\n",i + 1, sum3, (double)sum3 / 2); sum3 = 0; } return 0; }
(回答)
演習問題 5-12
#include<stdio.h> int main(void) { int i, j, k; int tensu[2][4][3] = { {{91, 72, 46},{67, 72, 46},{89, 34, 53},{32, 54, 34}}, {{97 ,67, 82},{73, 43, 46},{97, 56, 21},{85, 46, 35}}}; int sum[4][3] = {0}; for(i = 0; i < 2; i++){ printf("%d回目の点数\n",i +1); for(j = 0; j < 4; j++){ for(k = 0; k < 3; k++){ printf("%4d", tensu[i][j][k]); } putchar('\n'); } } for(j = 0; j < 4; j++){ for(k = 0; k < 3; k++){ for(i = 0; i < 2; i++){ sum[j][k] = sum[j][k] + tensu[i][j][k]; } } } printf("合計点\n"); for(j = 0; j < 4; j++){ for(k = 0; k < 3; k++){ printf("%4d",sum[j][k]); } putchar('\n'); } return 0; }
第6章 (回答)関数
(回答)
演習問題 6-1
#include<stdio.h> int min2(int a, int b) { return(a < b) ? a : b; } int main(void) { int a, b; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d",&a); printf("整数2:"); scanf("%d",&b); printf("最小値は%dです。\n", min2(a,b)); return 0; }
(回答)
演習問題 6-2
#include<stdio.h> int min2(int a, int b, int c) { int small = a; if(b < small) small = b; if(c < small) small = c; return small; } 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", min2(a, b, c)); return 0; }
(回答)
演習問題 6-3
#include<stdio.h> int cube(int x) { return x * x * x; } int main(void) { int x; puts("整数を入力してください。"); printf("整数:"); scanf("%d",&x); printf("入力された整数の3乗は%dです。\n", cube(x)); return 0; }
(回答)
演習問題 6-4
#include<stdio.h> int spr(int x) { return x * x; } int pow4(int x) { return spr(x) * spr(x); } int main(void) { int x; puts("整数を入力してください。"); printf("整数:"); scanf("%d",&x); printf("入力された整数の4乗は%dです。\n", pow4(x)); return 0; }
(回答)
演習問題 6-5
#include<stdio.h> int sumup(int n) { return (n + 1) * n / 2; } int main(void) { int a; puts("整数を入力してください。:"); printf("整数:"); scanf("%d",&a); printf("1から%dまでの全整数の和は%dです。\n",a , sumup(a)); return 0; }
(回答)
演習問題 6-6
#include<stdio.h> void alert(int n) { while(n-- > 0) putchar('\a'); } int main(void) { int i, n; printf("アラーム回数:"); scanf("%d",&n); alert(n); return 0; }
(回答)
演習問題 6-7
#include<stdio.h> void hello(void) { printf("こんにちは。\n"); } int main(void) { hello(); return 0; }
(回答)
演習問題 6-8
#include<stdio.h> #define NUMBER 5 int min_of(const int v[], int n) { int i; int min = v[0]; for(i = 0; i < n; i++){ if(min > v[i]) min = v[i]; } return min; } int main(void) { int i; int eng[NUMBER]; int mat[NUMBER]; int eng_min, mat_min; printf("%d人の点数を入力して下さい。\n",NUMBER); for(i = 0; i < NUMBER; i++){ printf("[%d] 英語:", i + 1); scanf("%d",&eng[i]); printf(" 数学:", i + 1); scanf("%d",&mat[i]); } eng_min = min_of(eng, NUMBER); mat_min = min_of(mat, NUMBER); printf("英語の最小点は%dです。\n", eng_min); printf("数学の最小点は%dです。\n", mat_min); return 0; }
(回答)
演習問題 6-9
#include<stdio.h> void rev_intary(int v[],int n) { int i; for(i = 0; i < n / 2; i++){ int temp = v[i]; v[i] = v[n - i - 1]; v[n - i - 1] = temp; } for(i = 0; i < n; i++) printf("v[%d]:%d\n",i,v[i]); } int main(void) { int n; int i; printf("要素数を記入してください。:"); scanf("%d",&n); int v[n]; puts("要素に数字を記入してください。"); for(i = 0; i < n; i++){ printf("v[%d]:", i); scanf("%d",&v[i]); } puts("反転しました。"); rev_intary(v, n); return 0; }
(回答)
演習問題 6-10
#include<stdio.h> int intary_rcpy(int v1[],const int v2[],int n) { int i; for(i = 0; i < n; i++){ v1[i] = v2[n - i - 1]; } } int main(void) { int n; int i; printf("要素数を記入してください。:"); scanf("%d",&n); int v1[n],v2[n]; puts("要素に数字を記入してください。"); for(i = 0; i < n; i++){ printf("v[%d]:", i); scanf("%d",&v2[i]); } puts("反転しました。"); intary_rcpy(v1,v2,n); for(i = 0; i < n; i++) printf("v[%d]:%d\n", i, v1[i]); return 0; }
(回答)
演習問題 6-11
#include<stdio.h> #define NUMBER 5 int idx[NUMBER]; int search_idx(const int v[], int idx[], int key, int n) { int x = 0; for(int i = 0; i < n; i++){ if(v[i] == key){ idx[x] = i; x++; } } return x; } int main(void) { int i,key,n = 0; int v[NUMBER]; for(i = 0;i < NUMBER; i++){ printf("v[%d]:",i); scanf("%d",&v[i]); } printf("探す値:"); scanf("%d",&key); n = search_idx(v,idx,key,NUMBER); printf("等しい値の要素数は%dです。\n",n); printf("idx{"); for(i = 0;i < n; i++){ if(i == n - 1){ printf("%2d",idx[n - 1]); break; } printf("%2d,", idx[i]); } printf("}\n"); return 0; }
(回答)
演習問題 6-12
#include<stdio.h> #define NUMBER 5 int idx[NUMBER]; int search_idx(const int v[], int idx[],int key, int n) { int i; for(i = 0; i < NUMBER; i++){ if(v[i] == key){ idx[n] = i; n++; } } return n; } int main(void) { int i,key,n = 0; int v[NUMBER]; for(i = 0;i < NUMBER; i++){ printf("v[%d]:",i); scanf("%d",&v[i]); } printf("探す値:"); scanf("%d",&key); n = search_idx(v,idx,key,n); printf("等しい値の要素数は%dです。\n",n); printf("idx{"); for(i = 0;i < n; i++){ if(i == n - 1){ printf("%2d",idx[n - 1]); break; } printf("%2d,", idx[i]); } printf("}\n"); return 0; }
(回答)
演習問題 6-13
#include<stdio.h> void mat_add(const int a[2][4][3], int b[1][4][3]) { int i, j, k; for(i = 0; i < 4; i++){ for(j = 0; j < 3; j++){ for(k = 0; k < 2; k++){ b[0][i][j] += a[k][i][j]; } } } } void mat_print(const int m[2][4][3], int n) { int i, j, k; for(i = 0; i < 4; i++){ for(j = 0; j < 3; j++){ printf("%4d",m[n][i][j]); } putchar('\n'); } } int main(void) { int tensu[2][4][3] = {{{91,63,78},{67,72,46},{89,34,53},{32,54,34}},{{97,67,82},{73,43,46},{97,56,21},{85,46,35}}}; int sum[1][4][3] = {0}; mat_add(tensu,sum); puts("1回目の点数"); mat_print(tensu,0); puts("2回目の点数"); mat_print(tensu,1); puts("合計点"); mat_print(sum,0); return 0; }
(回答)
演習問題 6-14
#include<stdio.h> double a[5]; int main(void) { int i; static double b[5]; for(i = 0; i < 5; i++){ printf("a[%d] = %.1f ",i,a[i]); printf("b[%d] = %.1f\n",i,b[i]); } return 0; }
(回答)
演習問題 6-15
#include<stdio.h> void put_count() { static int a = 1; printf("put_count:%d回目",a++); } int main(void) { int i,n; printf("何回呼び出しますか。:"); scanf("%d",&n); for(i = 1; i <= n; i++){ put_count(); putchar('\n'); } return 0; }
第7章 (回答)基本形
(回答)
演習問題 7-1
#include<stdio.h> #define n 3 int main(void) { printf("sizeof 1 = %u\n", sizeof 1); /*int型なので4*/ printf("sizeof+1 = %u\n", sizeof + 1);/*int型なので4*/ printf("sizeof-1 = %u\n", sizeof - 1);/*int型なので4*/ printf("sizeof(unsigend)-1 = %u\n", sizeof(unsigned) - 1); /*int型なので4-1=3*/ printf("sizeof(double)-1 = %u\n", sizeof(double) - 1); /*double型なので8-1=7*/ printf("sizeof((double)-1)) = %u\n", sizeof((double) - 1)); /*double型-int型なので8-1=7*/ printf("sizeof n+2 = %u\n", sizeof n + 2); /*int型n+2=6*/ printf("sizeof(n+2) = %u\n", sizeof(n + 2)); /*int型 + int型なので4*/ printf("sizeof(n+2.0) = %u\n", sizeof(n + 2.0)); /*int型 + double型なので8*/ return 0; }
(回答)
演習問題 7-2
#include<stdio.h> //2乗のn乗を計算 unsigned expo(unsigned n) { unsigned pw = 1; while(n--){ pw *= 2; } return(pw); } int main(void) { unsigned n_mul, n_div, l_sht, r_sht; unsigned a, n; printf("整数を入力してください。:"); scanf("%u",&a); printf("いくつシフトしますか:"); scanf("%u",&n); n_mul = a * expo(n); /*2のn乗をかけた値*/ n_div = a / expo(n); /*2のn乗で割った値*/ l_sht = a << n; /*nビット左にシフト*/ r_sht = a >> n; /*nビット右シフト*/ printf("%u × (2の%u乗) = %u\n", a, n, n_mul); printf("%u << %u = %u\n", a, n, l_sht); printf("%u ÷ (2の%u乗) = %u\n", a, n, n_div); printf("%u >> %u = %u\n", a, n, r_sht); return 0; }
(回答)
演習問題 7-3
#include<stdio.h> int count_bits(unsigned x) { int bits = 0; while(x){ if(x & 1U) bits++; x >>= 1; } return bits; } int int_bits() { 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'); } unsigned rrotate(unsigned x, int n) { int i = int_bits(); return((x >> n | (x << (i - n)))); } unsigned lrotate(unsigned x, int n) { int i = int_bits(); return((x << n | x >> (i - n))); } int main(void) { unsigned x, n; printf("非負の整数を入力して下さい:"); scanf("%u",&x); printf("何ビット回転しますか:"); scanf("%u",&n); printf("\n整数 :"); print_bits(x); printf("\n右に%d回転 :",n); print_bits(rrotate(x,n)); printf("\n左に%d回転 :",n); print_bits(lrotate(x,n)); return 0; }
(回答)
演習問題 7-4
#include<stdio.h> int count_bits(unsigned x) { int bits = 0; while(x){ if(x & 1U) bits++; x >>= 1; } return bits; } int int_bits() { 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'); } unsigned lrotate(unsigned x, int n) { int i = int_bits(); return((x << n | x >> (i - n))); } unsigned set(unsigned x, int pos) { return(x | lrotate(1U, pos - 1)); //1U = 0000000000000001(16bit) } unsigned reset(unsigned x, int pos) { return(x & ~lrotate(1U, pos - 1)); } unsigned inverse(unsigned x, int pos) { return(x ^ lrotate(1U, pos - 1)); } int main(void) { unsigned x, pos; printf("非負の整数を入力して下さい:"); scanf("%u",&x); printf("何ビット目を変更しますか:"); scanf("%u",&pos); printf("\n整数 :"); print_bits(x); printf("\n%dビット目を1にします。 :",pos); print_bits(set(x,pos)); printf("\n%dビット目を0にします。 :",pos); print_bits(reset(x,pos)); printf("\n%dビット目を反転します。 :",pos); print_bits(inverse(x,pos)); putchar('\n'); return 0; }
(回答)
演習問題 7-5
#include<stdio.h> int count_bits(unsigned x) { int bits = 0; while(x){ if(x & 1U) bits++; x >>= 1; } return bits; } int int_bits() { 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'); } unsigned lrotate(unsigned x, int n) { int i = int_bits(); return((x << n | x >> (i - n))); } unsigned set_n(unsigned x, int pos, int n) { for(int i = pos ; i <= (pos + n); i ++){ x = (x | lrotate(1U, i)); } return x ; } unsigned reset_n(unsigned x, int pos, int n) { for(int i = pos ; i <= (pos + n); i ++){ x = (x & ~lrotate(1U, i)); } return x ; } unsigned inverse_n(unsigned x, int pos, int n) { for(int i = pos ; i <= (pos + n); i ++){ x = (x ^ lrotate(1U, i)); } return x ; } int main(void) { unsigned x, pos, n; printf("非負の整数を入力して下さい:"); scanf("%u",&x); printf("何ビット目を変更しますか:"); scanf("%u",&pos); printf("何個変換しますか:"); scanf("%u",&n); printf("\n整数 :"); print_bits(x); printf("\n%dビット目から%d個のビット1にします。 :",pos, n); print_bits(set_n(x,pos,n)); printf("\n%dビット目から%d個のビット0にします。 :",pos, n); print_bits(reset_n(x,pos,n)); printf("\n%dビット目から%d個のビット反転にします。:",pos, n); print_bits(inverse_n(x,pos,n)); putchar('\n'); return 0; }
(回答)
演習問題 7-6
#include<stdio.h> #include<limits.h> int main(void) { unsigned x, y, z; printf("本環境の符号なし整数型の値の範囲\n"); printf("unsigned int 型 : %u ~ %u\n", 0, UINT_MAX); x = UINT_MAX; printf("x = %u\n",x); printf("x + 2 = %u\n", x + 2); printf("x × 2 = %u\n", x * 2); return 0; }
(回答)
演習問題 7-7
#include<stdio.h> int main(void) { printf("少数点の数字を記入して下さい。\n"); float a; double b; long double c; printf("long型 : "); scanf("%f",&a); printf("double型 : "); scanf("%lf",&b); printf("long double型 : "); scanf("%lf",&c); printf("float型の値は %fです。\n", a); printf("double型の値は %fです。\n", b); printf("lpng double型の値は%lfです。\n", c); return 0; }
(回答)
演習問題 7-8
#include<stdio.h> int main(void) { float a; printf("少数点の数字を記入して下さい。:"); scanf("%f",&a); double b = a; long double c = a; printf("float型 : %f\n",a); printf("double型 : %f\n",b); printf("long double型 ; %LF\n",c); return 0; }
(回答)
演習問題 7-9
#include<stdio.h> int main(void) { float a; double b; long double c; printf("float型 サイズ:%d\n",sizeof(a)); printf("double型 サイズ:%d\n",sizeof(b)); printf("long double型 サイズ:%d\n",sizeof(c)); return 0; }
(回答)
演習問題 7-10
#include<stdio.h> int main(void) { int i; float x = 0.0; float y; for(i = 0; i <= 100; i++){ y = i / 100.0 ; printf("x = %f x = %f\n", x, y); x += 0.01; } return 0; }
(回答)
演習問題 7-11
#include<stdio.h> int main(void) { int i; float x = 0.0; float y; float a = 0.0; float b = 0.0; for(i = 0; i <= 100; i++){ y = i / 100.0 ; x += 0.01; a += y; b += x; } printf(" List7-11 = %f List7-12 = %f", a,b); return 0; }
第8章 (回答)いろいろなプログラムを作ってみよう
(回答)
演習問題 8-1
#include<stdio.h> #define diff(x , y) (((x) > (y)) ? ((x) - (y)) : ((y) - (x))) int main(void) { int a, b; printf("整数 a :"); scanf("%d",&a); printf("整数 b :"); scanf("%d",&b); printf("整数 a と整数 b の差は%dです。", diff(a,b)); return 0; }
(回答)
演習問題 8-2
#include<stdio.h> #define max(x , y) (((x) > (y)) ? (x) : (y)) max(max(a,b),max(c,d)) /* ? (a > b ? a : b) ? (c > b ? c : d) ? (? > ? ? ? : ?) */ max(max(a,b),c),d); /* ? (a > b ? a : b) ? ? > c ? ? : c ? ? > d ? ? : d */
(回答)
演習問題 8-3
#include<stdio.h> #define swap(type, a, b) do{type t = a ; a = b ; b = t;}while(0) int main(void) { int a = 10; int b = 20; printf("a = %d b = %d\n",a,b); swap(int,a,b); printf("入れ替えます\na = %d b = %d\n",a,b); return 0; }
(回答)
演習問題 8-4
#include<stdio.h> #define NUMBER 5 void bsort(int a[], int n) { int i, j; for(i = n - 1; i > 0; i--){ for(j = 0; j < i ; j++){ if(a[j + 1] > a[j]){ int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } int main(void) { int i; int height[NUMBER]; printf("%d人の身長を入力して下さい。\n"); for(i = 0; i < NUMBER; i++){ printf("%2d番:",i + 1); scanf("%d",&height[i]); } bsort(height, NUMBER); puts("降順にソ\ートしました。"); for(i = 0; i < NUMBER; i++) printf("%2d番:%d\n",i + 1, height[i]); return 0; }
(回答)
演習問題 8-5
#include<stdio.h> enum gender {Men, Women, Invalid}; void men(void) { puts("男性です。"); } void women(void) { puts("女性です。"); } enum gender select(void) { int tmp; do{ printf("0・・・男性 1・・・女性 2・・・終了 :"); scanf("%d",&tmp); }while(tmp < Men || tmp > Invalid); return tmp; } int main(void) { enum gender selected; do{ switch (selected = select()){ case Men : men(); break; case Women : women(); break; } }while(selected != Invalid); return 0; }
(回答)
演習問題 8-6
#include<stdio.h> int main(void) { int i, num; printf("整数を入力して下さい。:"); scanf("%d",&num); int tmp = num; if(num <= 0) tmp = 1; for(i = (num - 1); i > 0; i--) tmp = tmp * i; printf("%dの階乗は%dです。\n",num,tmp); return 0; }
(回答)
演習問題 8-7
#include<stdio.h> int combination(int n, int r) { if(n == 0 || r == 0) return 1; else return combination(n,r-1) * (n - r + 1) / r; } int main(void) { int n, r; printf("いくつの個数:"); scanf("%d",&n); printf("いくつ取り出す:"); scanf("%d",&r); printf("組み合わせの数は%d通りです。\n",combination(n,r)); return 0; }
(回答)
演習問題 8-8
#include<stdio.h> int gcd(int x, int y) { int r; while(y != 0){ r = x % y; x = y; y = r; } return x; } int main(void) { int a, b, tmp; printf("2つの値の最大公約数を求めます。\n"); printf("整数 a :"); scanf("%d",&a); printf("整数 b :"); scanf("%d",&b); if(a < b){ tmp = a; a = b; b = tmp; } printf("最大公約数は%dです。",gcd(a,b)); return 0; }
(回答)
演習問題 8-9
#include<stdio.h> int main(void) { int i, ch; while((ch = getchar()) != EOF){ if(ch == '\n')i++; } printf("行数は%dです。\n",i); return 0; }
(回答)
演習問題 8-10
#include<stdio.h> int main(void) { int i, j, ch; int cnt[10] = {0}; while((ch = getchar()) != EOF){ 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; }
第9章 (回答)文字列の基本
(回答)
演習問題 9-1
#include<stdio.h>
int main(void)
{
char str[] = "ABC\0DEF";
char str2[] = "ABC\\0DEF";
/*初期化する際「\0」はナル文字として認識され文字列の終了と判断される*/
/*「\0」を表記するには「\\0」と表記が必要*/
printf("文字列strは\"%s\"です。\n",str);
printf("文字列str2は\"%s\"です。", str2);
return 0;
}
(回答)
演習問題 9-2
#include<stdio.h>
int main(void)
{
char s[] = "ABC";
printf("%s\n",s);
s[0] = '\0';
printf("%S\n",s);
/*「A」にナル文字を代入することで文字列の終了を認識させる*/
return 0;
}
(回答)
演習問題 9-3
#include<stdio.h> #define NUMBER 10 int main(void) { int i, j; int n = 0; char s[NUMBER][128] = {0}; for(i = 0; i < NUMBER; i++){ printf("s[%d] : ",i); scanf("%s",s[i]); n++; if(s[i][0] == '$' && s[i][1] == '$' && s[i][2] == '$' && s[i][3] == '$' && s[i][4] == '$'){ i = NUMBER; } } for(i = 0; i < n; i++) printf("s[%d] = \"%s\"\n" , i,s[i]); return 0; }
(回答)
演習問題 9-4
#include<stdio.h> int null_string(char s[]) { s[0] = '\0'; return s[0]; } int main(void) { char str[128]; printf("文字列を入力して下さい。:"); scanf("%s",str); printf("入力された文字は\"%s\"です。\n",str); null_string(str); printf("空文字変更:文字列は\"%s\"です。\n", str); return 0; }
(回答)
演習問題 9-5
#include<stdio.h> int str_char(const char s[], int c) { for(int i = 0; s[i] != '\0'; i++){ if(s[i] == c) return i; } return -1; } int main(void) { int kekka; char str[128]; printf("文字列を入力して下さい。:"); scanf("%s",str); kekka = str_char(str, 'c'); if(kekka == -1) printf("cは含まれていません「%d」\n",kekka); else printf("cは%d列目にあります。\n", kekka); return 0; }
(回答)
演習問題 9-6
#include<stdio.h> int str_chnum(const char s[], int c) { int num = 0; for(int i = 0; s[i] != '\0'; i++){ if(s[i] == c) num++; } return num; } int main(void) { int kekka; char str[128]; printf("文字列を入力して下さい。:"); scanf("%s",str); kekka = str_chnum(str, 'c'); printf("文字cが含まれている個数は%dです。\n", kekka); return 0; }
(回答)
演習問題 9-7
#include<stdio.h> void put_stringn(const char s[], int n) { int i; for(i = 0; i < n; i++){ printf("%s",s); } putchar('\n'); } int main(void) { char s[128]; int n = 0; printf("文字を入力してください。:"); scanf("%s",s); printf("何個繰り返しますか:"); scanf("%d",&n); put_stringn(s,n); return 0; }
(回答)
演習問題 9-8
#include<stdio.h> void put_stringr(const char s[]) { int i; int moji = 0; for(i = 0; s[i] != '\0'; i++){ moji++; /*文字列をint型mojiに格納*/ } for(i = moji - 1; i >= 0; i--){ /*moji -1 例えば 「A B C \0」 s[3] - 1 = s[2] 「A B C」の「c」から表示させる。*/ /* '\0'を表示させないようにしている。*/ printf("%c",s[i]); } putchar('\n'); } int main(void) { char s[128]; printf("文字を入力してください。:"); scanf("%s",s); printf("反転します。\n"); put_stringr(s); return 0; }
(回答)
演習問題 9-9
#include<stdio.h> void rev_string(char s[]) { int i = 0; int moji = 0; char tmp[128]; while(s[i]){ tmp[i] = s[i]; moji++; i++; } for(i = 0; i < moji; i++){ s[i] = tmp[moji - 1 - i]; } } int main(void) { char s[128]; printf("文字を入力してください。:"); scanf("%s",s); printf("反転します。\n"); rev_string(s); printf("\"%s\"\n",s); return 0; }
(回答)
演習問題 9-10
#include<stdio.h> void del_digit(char s[]) { int i , j = 0; while(s[i]){ if(s[i] >= '0' && s[i] <= '9'){ j++; } else{ s[i - j] = s[i]; } i++; } s[i - j] = '\0'; } int main(void) { char s[128]; printf("文字列を入力してください。:"); scanf("%s",s); del_digit(s); printf("数字文字削除:%s",s); return 0; }
(回答)
演習問題 9-11
#include<stdio.h> #define NUMBER 10 #define moji 128 int main(void) { int i, j; int cnt = 0; char s[NUMBER][moji] = {0}; for(i = 0; i < NUMBER; i++){ printf("s[%d] : ",i); scanf("%s",s[i]); cnt++; for(j = 0; j < moji; j++){ if( s[i][j] == '$') i = NUMBER; } } puts("表\示します"); for(i = 0; i < (cnt - 1); i++) printf("s[%d] = \"%s\"\n" , i,s[i]); return 0; }
(回答)
演習問題 9-12
#include<stdio.h> void rev_string(char s[][128], int n) { int i, j, k; char t; for(j = 0; j < n; j++){ for(k = 0; s[k][i] != '\0'; k++); for(j = 0; j < k / 2; j++){ t = s[i][j]; s[i][j] = s[i][k - j - 1]; s[i][k - j - 1] = t; } } } int main(void) { char s[][128] = {"SEC", "ABC"}; int i; rev_string(s,2); for(i = 0; i < 2; i++) printf("\"%s\"",s[i]); printf("\n"); return 0; }
第10章 (回答)ポインタ
(回答)
演習問題 10-1
#include<stdio.h> void adjust_poin(int *n) { if(*n < 0) *n = 0; if(*n > 100) *n = 100; } int main(void) { int i; printf("数字を入力してください。:"); scanf("%d",&i); adjust_poin(&i); printf("%d",i); return 0; }
(回答)
演習問題 10-2
#include<stdio.h> void decrement_date(int *y, int *m, int *d) { *d = *d - 1; /*0日の場合のみ計算*/ if (*d < 1) { *m = *m - 1; if (*m == 4 || *m == 6 || *m == 9 || *m == 11) { *d = 30; } else if (*m == 2) { /*うるう年*/ *d = 28; if (*y % 4 == 0) { *d = 29; } } else { *d = 31; } /*1月の場合年を減らす*/ if (*m < 1) { *y = *y - 1; *m = 12; } } } void invrement_date(int *y, int *m, int *d) { *d = *d + 1; if (*d > 28 && *m == 2) { *m = *m + 1; *d = 1; if (*y % 4 == 0) { *m = 2; *d = 29; } } if (*d > 30 && *m == 4 || *m == 6 || *m == 9 || *m == 11) { *m = *m + 1; *d = 1; } if (*d > 31) { *m = *m + 1; *d = 1; if (*m > 12) { *y = *y + 1; *m = 1; } } } int main(void) { int i; int nen,tuki,hi; printf("西暦:"); scanf("%d",&nen); printf("月:"); scanf("%d",&tuki); printf("日:"); scanf("%d",&hi); printf("%d年%d月%d日\n",nen,tuki,hi); printf("番号を入力してください。(1_1日増やす、2_1日減らす)\n"); scanf("%d",&i); if(i == 1){ invrement_date(&nen,&tuki,&hi); printf("%d年%d月%d日\n",nen,tuki,hi); } if(i == 2){ decrement_date(&nen,&tuki,&hi); printf("%d年%d月%d日\n",nen,tuki,hi); } return 0; }
(回答)
演習問題 10-3
#include<stdio.h> void swap(int *px, int *py) { int temp = *px; *px = *py; *py = temp; } void sort3(int *n1, int *n2, int *n3) { if(*n1 > *n2) swap(n1, n2); if(*n1 > *n3) swap(n1, n3); if(*n2 > *n3) swap(n2, n3); } int main(void) { int na ,nb ,nc; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d",&na); printf("整数B:"); scanf("%d",&nb); printf("整数C:"); scanf("%d",&nc); sort3(&na,&nb,&nc); puts("昇順にソ\ートしました。"); printf("整数Aは%dです。\n",na); printf("整数Bは%dです。\n",nb); printf("整数Cは%dです。\n",nc); return 0; }
(回答)
演習問題 10-4
#include<stdio.h> void set_idx(int v[], int n) { int i; for(i = 0; i < n; i++) v[i] = i; } int main(void) { int i; int s[] = {1,2,3,4,5}; set_idx(s, 5); for(i = 0; i < 5; i++) printf("v[%d] = %d\n",i, s[i]); return 0; }
(回答)
演習問題 10-5
#include<stdio.h>
void ary_set(int v[], int n, int val)
{
int i;
for(i = 0; i < n; i++)
v[i] = val;
}
int main(void)
{
int i;
int a[] = {1,2,3,4,5};
ary_set(&a[2],2,99);
/*ary_set(a[2],2,99)を渡しいる。
すなわち a[0] = a[2]のアドレスと判断する。
n = 2 の為、a[2],a[3]の数字を入れ替え返す*/
for(i = 0; i < 5; i++)
printf("a[%d] = %d\n", i, a[i]);
return 0;
}
第11章 (回答)文字列とポインタ
(回答)
演習問題 11-1
#include<stdio.h>
int main(void)
{
char *p = "123";
printf("p = \"%s\"\n", p);
p = "456" + 1;
/* アドレス"456"を記憶して"4"のアドレスから1つプラスした
アドレスを指すため"56"のみ記憶するため。*/
printf("p = \"%s\"\n", p);
return 0;
}
(回答)
演習問題 11-2
#include<stdio.h> int main(void) { int i; char a[][5] = {"LISP","C","Ada" }; char *p[] = {"PAUL","X","MAC"}; /*配列全体のサイズ(配列の要素のサイズ×配列の要素数)sizeof(a)を 配列の要素のサイズsizeof(a[0])で割ると配列の要素数が求められる*/ printf("sizeof(a) = %d, sizeof(*a) = %d\n", sizeof(a), sizeof(*a)); printf("sizeof(p) = %d, sizeof(*p) = %d\n", sizeof(p), sizeof(*p)); for(i = 0; i < (sizeof(a) / sizeof(*a)); i++) /* sizeof(a)は要素全体のビット数 すなわち 3×5=15 sizeof(*a) = a[0]の為 5 となり 15÷5= 3*/ printf("a[%d] = \"%s\"\n",i ,a[i]); for(i = 0; i < (sizeof(p) / sizeof(*p)); i++) printf("a[%d] = \"%s\"\n",i ,p[i]); return 0; }
(回答)
演習問題 11-3
#include<stdio.h> char *str_copy(char *d, const char *s) { char *t = d; while(*d++ = *s++) ; return t; } int main(void) { char str[128] = "ABC"; char tmp[128]; printf("コピーするのは:"); scanf("%s", tmp); printf("コピーしました。\n"); printf("str = \"%s\"\n", str_copy(str, tmp)); return 0; }
(回答)
演習問題 11-4
#include<stdio.h> #include<string.h> void put_string(const char *s) { int i; for(i = 0; i < strlen(s); i++){ printf("%c", *(s + i)); } } int main(void) { char s[256]; printf("文字を入力してください。"); scanf("%s",s); put_string(s); return 0; }
(回答)
演習問題 11-5
#include <stdio.h> int str_chnum(const char *s,int c) { int k = 0; while(*s){ if(*s++ == c) k++; } return k; } int main(void) { char s[256]; printf("文字を入力してください。:"); scanf("%s",s); printf("入力した文字にcは%d個ある。\n",str_chnum(s,'c')); return 0; }
(回答)
演習問題 11-6
#include <stdio.h> #include<string.h> char *str_chr(const char *s, int c) { do{ if(*s == c){ return s; } }while(*s++); return NULL; } int main(void) { char s[128]; int c; printf("文字列入力:"); scanf("%s",s); printf("%s\n",str_chr(s, 'c')); return 0; }
(回答)
演習問題 11-7
#include<ctype.h> #include<stdio.h> void str_toupper(char *s) { while(*s){ *s = toupper(*s); s++; } } void str_tolower(char *s) { while(*s){ *s = tolower(*s); s++; } } 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-8
#include<stdio.h> void del_digit(char *str) { int i,d; for(i = 0; str[i]; i++){ if(str[i] >= '0' && str[i] <= '9'){ for(d = 0; str[d]; ++d) str[d] = str[d + 1]; --i; } } return; } int main(void) { char s[258]; printf("文字や数字を入力してください。:"); scanf("%s",s); del_digit(s); printf("%s\n", s); }
(回答)
演習問題 11-9
#include<stdio.h> #include<string.h> int main(void) { int i; char s[258]; char x[258]; char m[258] = "ABCDEFG"; printf("文字を入力してください。:"); scanf("%s",s); printf("入力された文字列の長さは%dです。\n", strlen(&s)); strcpy(x, s); printf("「x」へコピーします。:%s\n",x); strncpy(m,x,strlen(&x)); printf("「m」へ「x」の文字数をコピーします。:%s\n",m); if(strcmp(x,s)==0){ puts("文字列xと文字列sの文字列は一致しています。"); }else{ puts("文字列xと文字列sの文字列は一致していません。"); } if(strncmp(m,x,strlen(&x))==0){ puts("「m」と「x」の文字数の文字列は一致しています。"); }else{ puts("「m」と「x」の文字数の文字列は一致していません。"); } return 0; }
(回答)
演習問題 11-10
#include <stdio.h> #include <string.h> int strtoi(const char *nptr) { int num = 0; num = atoi(nptr); return num; } long strtol(const char *nptr) { long num = 0; num = atol(nptr); return num; } double power (double n){ double o = 1; if(n > 0){ while(n--){ o *= 10; } }else if(n == 0){ o *= 1; }else{ while(n++){ o /= 10; } } return o; } int integer (const char *nptr){ int o = 0; while(*nptr){ if(*nptr == '.') break; o++; nptr++; } return o; } double strtof(const char *nptr){ int n = strlen(nptr); int i = integer(nptr); double o = 0; while(n--){ if(i > 0){ o += (*nptr - '0') * (int)power(i - 1); }else if(i < 0){ o += (*nptr - '0') * (double)power(i); } nptr++; i--; } return o; } int main(void) { char str[128]; printf("文字を入力してください。:"); scanf("%s",str); printf("%d\n",strtoi(&str)); printf("%d\n",strtol(&str)); printf("%f\n",strtof(&str)); return 0; }
第12章 (回答)構造体
(回答)
演習問題 12-1
#include<stdio.h> #include<string.h> #define NAME_LEN 64 struct student{ char name[NAME_LEN]; int height; float weight; long schols; }; int main(void) { struct student takao = {"Takao", 173, 86.2}; printf("氏名 = %p\n", &takao.name); printf("身長 = %p\n", &takao.height); printf("体重 = %p\n", &takao.weight); printf("奨学金 = %p\n", &takao.schols); return 0; }
(回答)
演習問題 12-2
#include<stdio.h> #define NAME_LEN 64 typedef struct { char name[NAME_LEN]; int height; float weight; long schols; }student; void hiroko(student *std) { if(std->height < 180) std->height = 180; if(std->weight > 80) std->weight = 80; } int main(void) { student sanaka; puts("各項目を記入してください。"); printf("氏名:"); scanf("%s",&sanaka.name); printf("身長:"); scanf("%d",&sanaka.height); printf("体重:"); scanf("%f",&sanaka.weight); printf("奨学金の金額:"); scanf("%ld",&sanaka.schols); hiroko(&sanaka); printf("氏名 = %s\n",sanaka.name); printf("身長 = %d\n", sanaka.height); printf("体重 = %.lf\n", sanaka.weight); printf("奨学金 = %ld\n", sanaka.schols); return 0; }
(回答)
演習問題 12-3
#include<stdio.h> struct xyz{ int x; long y; double z; }; struct xyz scan_xyz() { struct xyz temp; printf("int型 :"); scanf("%d",&temp.x); printf("long型 :"); scanf("%ld",&temp.y); printf("double型:"); scanf("%lf",&temp.z); return temp; } int main(void) { struct xyz x; x = scan_xyz(); printf("xyz.x = %d\n",x.x); printf("xyz.y = %ld\n",x.y); printf("xyz.z = %f\n",x.z); return 0; }
(回答)
演習問題 12-4
#include <stdio.h> #include <string.h> #define NUMBER 5 #define NAME_LEN 64 typedef struct{ char name[NAME_LEN]; int height; float weight; long schols; }Student; void swap_Student(Student *x, Student *y){ Student tmp = *x; *x = *y; *y = tmp; } void sort_by_height(Student a[], int n){ int i, j; for(i = 0; i < n; i++){ for(j = n - 1; j > i; j--){ if(a[j - 1].height > a[j].height) swap_Student(&a[j - 1], &a[j]); } } } void sort_by_name(Student a[], int n){ int i, j; for(i = 0; i < n; i++){ for(j = n - 1; j > i; j--){ if(strcmp(a[j - 1].name, a[j].name) > 0){ swap_Student(&a[j - 1], &a[j]); } } } } int main(void){ int i, n; Student std[256]; for(i = 0; i < NUMBER; i++){ printf("名前 : "); scanf("%s", std[i].name); printf("身長 : "); scanf("%d", &std[i].height); printf("体重 : "); scanf("%f", &std[i].weight); printf("奨学金 : "); scanf("%ld", &std[i].schols); } printf("ソ\ート方法を選んでください。 1.身長 2.名前 :"); scanf("%d",&n); if(n == 1){ sort_by_height(std, n); printf("身長順にソ\ートしました\n"); } else if(n == 2){ sort_by_name(std, n); printf("名前順にソ\ートしました\n"); } for(i = 0; i < NUMBER; i++){ printf("%-8s %6d%6.1f%7ld\n", std[i].name, std[i].height, std[i].weight, std[i].schols); } return 0; }
(回答)
演習問題 12-5
#include<math.h> #include<stdio.h> #define sqr(n) ((n) * (n)) typedef struct{ double x; double y; }Point; typedef struct{ Point pt; double fuel; }Car; double distance_of(Point pa, Point pb) { return sqrt(sqr(pa.x - pb.x) + sqr(pa.y - pb.y)); } void put_info(Car c) { printf("現在位置:(%.2f, %.2f)\n", c.pt.x, c.pt.y); printf("残り燃料: %.2fリットル\n", c.fuel); } int move(Car *c, Point dest) { double d = distance_of(c->pt, dest); if(d > c->fuel) return 0; c->pt = dest; c->fuel -= d; return 1; } int main(void) { Car mycar = {{0.0, 0.0}, 90.0}; while(1){ int select; Point dest; put_info(mycar); printf("移動しますか【yes ... 1 / no ... 0】:"); scanf("%d", &select); if(select != 1) break; printf("目的を入力 ・・・ 1 / 移動距離を入力 ・・・ 2 :"); scanf("%d",&select); if(select == 1){ printf("目的地のX座標:"); scanf("%lf", &dest.x); printf(" Y座標:"); scanf("%lf", &dest.y); if(!move(&mycar, dest)) puts("\a燃料不足で移動できません。"); }else if(select == 2){ printf("X方向の移動距離:"); scanf("%lf", &dest.x); printf("Y方向の移動距離:"); scanf("%lf", &dest.y); dest.x += mycar.pt.x; dest.y += mycar.pt.y; if(!move(&mycar, dest)) puts("\a燃料不足で移動できません。"); } } return 0; }
第13章 (回答)ファイル処理
(回答)
演習問題 13-1
#include<stdio.h> int main(void) { FILE *fp; char x[128]; printf("ファイル名を入力してください。:"); scanf("%s",x); fp = fopen(x,"r"); if(fp == NULL) printf("そのファイルは存在しません。\n"); else{ printf("そのファイルは存在します。\n"); fclose(fp); } return 0; }
(回答)
演習問題 13-2
#include<stdio.h> int main(void) { FILE *fp; char x[128]; printf("ファイル名を入力してください。:"); scanf("%s",x); fp = fopen(x,"w"); if(fp == NULL) printf("そのファイルは存在しません。\n"); else{ printf("そのファイルの中身を消去します。\n"); fclose(fp); } return 0; }
(回答)
演習問題 13-3
#include<stdio.h> #include<string.h> typedef struct { char name[100]; double height; double weight; }student; void swap_hw(student *x, student *y) { student tmp = *x; *x = *y; *y = tmp; } void sort_by_hw(student a[], int n) { int i, j; for(i = 0; i < n; i++){ for(j = n - 1; j > 1; j--){ if(a[j - 1].height > a[j].height) swap_hw(&a[j - 1], &a[j]); } } } int main(void) { FILE *fp; student std[256]; int i, ninzu = 0; double hsum = 0.0; double wsum = 0.0; if((fp = fopen("hw.dat","r")) == NULL){ printf("\aファイルをオープンできません。\n"); } else{ while(fscanf(fp,"%s%lf%lf", std[ninzu].name, &std[ninzu].height, &std[ninzu].weight) == 3){ hsum += std[ninzu].height; wsum += std[ninzu].weight; ninzu++; } sort_by_hw(std, ninzu); for(i = 0; i < ninzu; i++){ printf("%-10s %5.1f %5.1f\n", std[i].name, std[i].height, std[i].weight); } printf("---------------------\n"); printf("平均 %5.1f %5.1f\n", hsum / ninzu, wsum / ninzu); fclose(fp); } return 0; }
(回答)
演習問題 13-4
#include<stdio.h> int main(void) { FILE *fp; int ninzu = 0; char name[100]; double height, weight; double hsum; double wsum; int i = 0; if((fp = fopen("hw.dat", "w")) == NULL) printf("\aファイルをオープンできません。\n"); else{ while(1){ printf("名前:"); scanf("%s", name); printf("身長:"); scanf("%lf", &height); printf("体重:"); scanf("%lf", &weight); fprintf(fp, "名前:%s 身長:%.1f 体重:%.1f\n", name, height, weight); printf("続けますか?(Yes : 1 / No : 0) : "); scanf("%d", &i); if(i==0){ break; } } fclose(fp); } return 0; }
(回答)
演習問題 13-5
#include<time.h> #include<stdio.h> char data_file[] = "datatime.dat"; void get_data(void) { FILE *fp; int year, month, day, h, m, s; char feel[100]; if((fp = fopen(data_file, "r")) == NULL){ printf("本プログラムを実行するのは初めてですね。\n"); }else{ fscanf(fp, "%d%d%d%d%d%d%s", &year, &month, &day, &h, &m, &s, feel); printf("前回は%d年%d月%d日%d時%d分%d秒で、気分は%sでした。\n", year, month, day, h, m, s, feel); fclose(fp); } } void put_data(void) { FILE *fp; time_t curret = time(NULL); struct tm *timer = localtime(&curret); char feel[100]; if((fp = fopen(data_file, "w")) == NULL) printf("\aファイルをオープンできません。\n"); else{ printf("今日の気分は:"); scanf("%s", feel); fprintf(fp, "%d %d %d %d %d %d %s\n", timer->tm_yday + 1900, timer->tm_mon + 1, timer->tm_mday, timer->tm_hour, timer->tm_min, timer->tm_sec, feel); fclose(fp); } } int main(void) { get_data(); put_data(); return 0; }
(回答)
演習問題 13-6
#include<stdio.h> int main(void) { int ch; int count = 0; FILE *fp; char fname[FILENAME_MAX]; printf("ファイル名:"); scanf("%s", fname); if((fp = fopen(fname, "r")) == NULL) printf("\aファイルをオープンできません。\n"); else{ while((ch = fgetc(fp)) != EOF) if(ch == '\n') count++; fclose(fp); printf("改行文字は%d個です。\n", count); } return 0; }
(回答)
演習問題 13-7
#include<stdio.h> int main(void) { int ch; int count = 0; FILE *fp; char fname[FILENAME_MAX]; printf("ファイル名:"); scanf("%s", fname); if((fp = fopen(fname, "r")) == NULL) printf("\aファイルをオープンできません。\n"); else{ while((ch = fgetc(fp)) != EOF) if(ch >= '0' && ch <= '9') count++; fclose(fp); printf("数字文字は%d個です。\n", count); } return 0; }
(回答)
演習問題 13-8
#include<stdio.h> int main(void) { int ch; FILE *sfp; FILE *dfp; char sname[FILENAME_MAX]; char dname[FILENAME_MAX]; printf("コピー元ファイル名:"); scanf("%s", sname); printf("コピー先ファイル名:"); scanf("%s", dname); if((sfp = fopen(sname, "r")) == NULL) printf("\aコピー元ファイルをオープンできません。\n"); else{ if((dfp = fopen(dname, "w")) == NULL) printf("\aコピー先ファイルをオープンできません。\n"); else{ while((ch = fgetc(sfp)) != EOF) fputc(ch, dfp); fclose(dfp); } fclose(sfp); } return 0; }
(回答)
演習問題 13-9
#include<stdio.h> #include<ctype.h> int main(void) { int ch; FILE *sfp; FILE *dfp; char sname[FILENAME_MAX]; char dname[FILENAME_MAX]; printf("コピー元ファイル名:"); scanf("%s", sname); printf("コピー先ファイル名:"); scanf("%s", dname); if((sfp = fopen(sname, "r")) == NULL) printf("\aコピー元ファイルをオープンできません。\n"); else{ if((dfp = fopen(dname, "w")) == NULL) printf("\aコピー先ファイルをオープンできません。\n"); else{ while((ch = fgetc(sfp)) != EOF){ ch = toupper(ch); fputc(ch, dfp); } fclose(dfp); } fclose(sfp); } return 0; }
(回答)
演習問題 13-10
#include<stdio.h> #include<ctype.h> int main(void) { int ch; FILE *sfp; FILE *dfp; char sname[FILENAME_MAX]; char dname[FILENAME_MAX]; printf("コピー元ファイル名:"); scanf("%s", sname); printf("コピー先ファイル名:"); scanf("%s", dname); if((sfp = fopen(sname, "r")) == NULL) printf("\aコピー元ファイルをオープンできません。\n"); else{ if((dfp = fopen(dname, "w")) == NULL) printf("\aコピー先ファイルをオープンできません。\n"); else{ while((ch = fgetc(sfp)) != EOF){ ch = tolower(ch); fputc(ch, dfp); } fclose(dfp); } fclose(sfp); } return 0; }
(回答)
演習問題 13-11
#include<stdio.h> #define N 10 int main(void) { FILE *fp; int i; double pi[N] = {0,1,2,3,4,5,6,7,8,9}; if((fp = fopen("PI.bin", "wb")) == NULL) printf("\aファイルをオープンできません。\n"); else{ fwrite(pi, sizeof(double), N, fp); fclose(fp); } if((fp = fopen("PI.bin", "rb")) == NULL) printf("\aファイルをオープンできません。\n"); else{ fread(pi, sizeof(double), N, fp); puts("配列の内容は:"); for(i = 0; i < N; i++) printf("fp[%d] = %23.21lf\n", i, pi[i]); fclose(fp); } return 0; }
(回答)
演習問題 13-12
#include<time.h> #include<stdio.h> char data_file[] = "datatime.bin"; void get_data(void) { FILE *fp; struct tm times; if((fp = fopen(data_file, "rb")) == NULL) printf("本プログラムを実行するのは初めてですね。\n"); else{ fread(×, sizeof(struct tm), 1, fp); printf("前回は%d年%d月%d日%d時%d分%d秒でした。\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_data(void) { FILE *fp; time_t t; struct tm *local; time(&t); local = localtime(&t); if((fp = fopen(data_file, "wb")) == NULL) printf("\aファイルをオープンできません。\n"); else{ fwrite(local, sizeof(struct tm), 1, fp); fclose(fp); } } int main(void) { get_data(); put_data(); return 0; }
(回答)
演習問題 13-13
#include<stdio.h> int main(void) { int ch; FILE *sfp; FILE *dfp; char sname[FILENAME_MAX]; char dname[FILENAME_MAX]; printf("コピー元ファイル名:"); scanf("%s", sname); printf("コピー先ファイル名:"); scanf("%s", dname); if((sfp = fopen(sname, "rb")) == NULL) printf("\aコピー元ファイルをオープンできません。\n"); else{ if((dfp = fopen(dname, "wb")) == NULL) printf("\aコピー先ファイルをオープンできません。\n"); else{ while((fread(&ch, sizeof(int), 1, sfp)) > 0){ fwrite(&ch, sizeof(int), 1, dfp); putchar(ch); } fclose(dfp); } fclose(sfp); } return 0; }
コメント