「新版 明解C言語 -入門編-」(2004)
著者:柴田望洋
出版:ソフトバンククリエイティブ
*このページに記載されている内容は、正解を保証するものではありません。
*基本的に、その時点で習っていることしか使っていないはずです。
*より良い解答があれば、こっそり教えていただけると助かります。
*問題は各自で確認してください。
*このプログラムは自己責任で使用してください。
*転載可。ただし、転載も自己責任でお願いします。
*インクルードの<>内がタグとして認識されていたので修正しました。07/06/30
*第7章のcount_bits、inverse_n関数を修正。10/01/15
戻る
#include <stdio.h> int main(void) { printf("15から37を引いた数は%dです。\n", 15 - 37); return(0); }
#include <stdio.h> int main(void) { printf("風\n林\n火\n山\n"); return(0); }
#include <stdio.h> int main(void) { printf("もしもし。\nこんにちは。\n\nそれでは。\n"); return(0); }
#include <stdio.h> int main(void) { int no; printf("整数を入力してください。"); scanf("%d", &no); printf("その数に10を加えると%dです。\n", no + 10); return(0); }
#include <stdio.h> int main(void) { int no; printf("整数を入力してください:"); scanf("%d", &no); printf("その数から10を減じると%dです。\n", no - 10); return(0); }
#include <stdio.h> int main(void) { puts("風\n林\n火\n山"); return(0); }
#include <stdio.h> int main(void) { int num1, num2; long ans = 0; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); ans = num1 * num2; printf("それらの積は%dです。\n", ans); return(0); }
#include <stdio.h> int main(void) { int num1, num2, num3; int sum = 0; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); printf("整数3:"); scanf("%d", &num3); sum = num1 + num2 + num3; printf("それらの和は%dです。\n", sum); return(0); }
#include <stdio.h> int main(void) { int num1, num2; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &num1); printf("整数B:"); scanf("%d", &num2); printf("Aの値はBの%d%%です。", 100 * num1 / num2); return(0); }
#include <stdio.h> int main(void) { int num1, num2; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &num1); printf("整数B:"); scanf("%d", &num2); printf("それらの和は%dで積は%dです。\n", num1 + num2, num1 * num2); return(0); }
#include <stdio.h> int main(void) { double num; printf("実数を入力してください:"); scanf("%lf", &num); printf("あなたは%fと入力しましたね。\n", num); return(0); }
#include <stdio.h> int main(void) { int i = 20; double d = 2.0; puts("種々の計算を行なう。"); printf("i = %d d = %f\n", i, d); printf("i + d = %f\n", i + d); printf("i + 22.2 = %f\n", i + 22.2); printf("i * d = %f\n", i * d); printf("i * 3.0 = %f\n", i / 3.0); printf("i / d = %f\n", i / d); printf("i / 4.0 = %f\n", i / 4.0); // 行なってはいけない printf("%d", 実数) puts("\n行なってはいけない計算の結果 printf(\"%d\", 実数)"); printf("3.0 + 4 = %d\n", 3.0 + 4); printf("i + d = %d\n", i + d); printf("i * 3.0 = %d\n", i * 3.0); printf("i / 4.0 = %d\n", i / 4.0); return(0); }
#include <stdio.h> int main(void) { int na, nb; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("Aの値はBの%f%です。", 100.0 * na / nb); return(0); }
#include <stdio.h> int main(void) { int height; printf("身長を入力してください:"); scanf("%d", &height); printf("標準体重は%.1fです。", (height - 100) * 0.9); return(0); }
#include <stdio.h> int main(void) { int num1, num2; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &num1); printf("整数B:"); scanf("%d", &num2); if(num1 % num2) { puts("BはAの約数ではありません。"); } else { puts("BはAの約数です。"); } return(0); }
#include <stdio.h> int main(void) { printf("%d\n", 10 == 10); printf("%d\n", 10 == 9); printf("%d\n", 10 != 10); printf("%d\n", 10 != 9); printf("%d\n", 10 > 9); printf("%d\n", 10 < 9); return(0); }
#include <stdio.h> int main(void) { int num; printf("整数を入力してください:"); scanf("%d", &num); if(num < 0) { num = -num; } printf("絶対値は%dです。", num); return(0); }
#include <stdio.h> int main(void) { int num1, num2; puts("二つの整数を入力してください。"); printf("整数A:"); scanf("%d", &num1); printf("整数B:"); scanf("%d", &num2); if(num1 == num2) { puts("AとBは等しいです。"); } else if(num1 < num2) { puts("AはBより小さいです。"); } else { puts("AはBより大きいです。"); } return(0); }
#include <stdio.h> int main(void) { int num1, num2, num3, min; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); printf("整数3:"); scanf("%d", &num3); min = num1; if(num2 < min) min = num2; if(num3 < min) min = num3; printf("最小値は%dです。\n", min); return(0); }
#include <stdio.h> int main(void) { int num1, num2, num3, num4, max; puts("四つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); printf("整数3:"); scanf("%d", &num3); printf("整数4:"); scanf("%d", &num4); max = num1; if(num2 > max) max = num2; if(num3 > max) max = num3; if(num4 > max) max = num4; printf("最大値は%dです。", max); return(0); }
#include <stdio.h> int main(void) { int num1, num2, ans; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); if(num1 > num2) ans = num1 - num2; else ans = num2 - num1; printf("それらの差は%dです。\n", ans); return(0); }
#include <stdio.h> int main(void) { int num1, num2, num3, max; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); printf("整数3:"); scanf("%d", &num3); max = (num1 > num2) ? num1 : num2; max = (max < num3) ? num3 : max; printf("最大値は%dです。\n", max); return(0); }
#include <stdio.h> int main(void) { int num1, num2, num3; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); printf("整数3:"); scanf("%d", &num3); if( num1 == num2 && num2 == num3) { puts("三つの値は等しいです。"); } else if(num1 != num2 && num2 !=num3 && num3 != num1) { puts("三つの値は異なります。"); } else { puts("二つの値が等しいです。"); } return(0); }
#include <stdio.h> int main(void) { int num1, num2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); if( (num1 - num2) > 10 || (num1 - num2) < -10) { puts("それらの差は11以上です。"); } else { puts("それらの差は10以下です。"); } return(0); }
#include <stdio.h> int main(void) { int no; printf("整数を入力してください:"); scanf("%d", &no); switch(no % 2) { case 0 : puts("その数は偶数です。"); break; case 1 : puts("その数は奇数です。"); break; default : puts("その数は対象外です。"); } return(0); }
#include <stdio.h> int main(void) { int month; printf("何月ですか:"); scanf("%d", &month); switch(month) { case 3 : case 4 : case 5 : puts("春です。"); break; case 6 : case 7 : case 8 : puts("夏です。"); break; case 9 : case 10 : case 11 : puts("秋です。"); break; case 12 : case 1 : case 2 : puts("冬です。"); break; default : puts("そんな月はありませんよ!!\a"); } return(0); }
#include <stdio.h> int main(void) { int num; do { printf("非負の整数を入力してください:"); scanf("%d", &num); if( num < 0 ) { puts("負の数を入力しないでください。\a"); } } while (num < 0); printf("%dを逆から読むと", num); do { printf("%d", num % 10); num = num / 10; } while(num > 0); puts("です。"); return(0); }
#include <stdio.h> int main(void) { int num; int dig = 0; do { printf("非負の整数を入力してください:"); scanf("%d", &num); if(num < 0) { puts("\a負の数を入力しないでください。"); } } while(num < 0); printf("%dは", num); do { num = num / 10; dig++; } while(num > 0); printf("%d桁です。\n", dig); return(0); }
#include <stdio.h> int main(void) { int max, min; int sum = 0; { int num1, num2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); if(num1 > num2) { max = num1; min = num2; } else { max = num2; min = num1; } } printf("%d以上%d以下の整数の和は", min, max); do { sum = sum + min; min = min + 1; } while(min < max + 1); printf("%dです。\n", sum); return(0); }
#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); }
#include <stdio.h> int main(void) { int num; int dig = 0; do { printf("非負の整数を入力してください:"); scanf("%d", &num); if(num < 0) { puts("\a負の数を入力しないでください。"); } } while (num < 0); do { num /= 10; dig++; } while (num > 0); printf("その数は%d桁です。\n", dig); return(0); }
#include <stdio.h> int main(void) { int no; printf("整数を入力してください:"); scanf("%d", &no); while(no >= 0) { printf("%d ", no); no--; if(no < 0 ) { putchar('\n'); } } return(0); }
#include <stdio.h> int main(void) { int no; printf("正の整数を入力してください:"); scanf("%d", &no); while(no >= 1) { printf("%d ", no--); if (no < 1) { putchar('\n'); } } return(0); }
#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) { putchar('\n'); } } return(0); }
#include <stdio> int main(void) { int i, no; printf("整数を入力してください:"); scanf("%d", &no); if(no >= 2) { i = 1; while(2 * i <= no) { printf("%d ", 2 * i++); } putchar('\n'); } return(0); }
#include <stdio.h> int main(void) { int i, no; printf("整数を入力してください:"); scanf("%d", &no); if(no >= 2) { i = 2; while(i <= no) { printf("%d ", i); i *= 2; } putchar('\n'); } return(0); }
#include <stdio.h> int main(void) { int no; printf("正の整数を入力してください:"); scanf("%d", &no); while(no-- > 0) { puts("*"); } return(0); }
#include <stdio.h> int main(void) { int sum = 0; int i; for(i = 1; i < 6; i++) { sum += i; } printf("1から5までの和は%dです。\n", sum); return(0); }
#include <stdio.h> int main(void) { int num; int i = 1; printf("整数を入力してください:"); scanf("%d", &num); for(;i <= num; i++) { printf("%d", i % 10); } putchar('\n'); return(0); }
#include <stdio.h> int main(void) { int start, end, digree; printf("何cmから:"); scanf("%d", &start); printf("何cmまで:"); scanf("%d", &end); printf("何cmごと:"); scanf("%d", &digree); for(; start <= end; start += digree) { printf("%dcm %.2fkg\n", start, (double)(start - 100) * 0.9); } return(0); }
#include <stdio.h> int main(void) { int i, j; printf(" | "); for ( i = 1; i <= 9; i++) { printf("%3d", i); } putchar('\n'); printf("----"); for( i = 0; i <= 9; i++) { printf("---"); } putchar('\n'); for (i = 1; i <= 9; i++) { printf("%2d | ", i); for (j = 1; j <= 9; j++) { printf("%3d", i * j); } putchar('\n'); } return(0); }
#include <stdio.h> int main(void) { int i, j, temp; int height, width; puts("長方形を作りましょう。"); printf("一辺(その1):"); scanf("%d", &height); printf("一辺(その2):"); scanf("%d", &width); if(width > height) { temp = height; height = width; width = temp; } for(i = 0; i < width; i++) { for(j = 0; j < height; j++) { putchar('*'); } putchar('\n'); } return(0); }
/* 直角三角形(左上が直角)を表示 */ #include <stdio.h> int main(void) { int i, j, ln; printf("何段ですか:"); scanf("%d", &ln); for(i = 1; i <= ln; i++) { for (j = 0; j <= ln - i; j++) { putchar('*'); } putchar('\n'); } return(0); }
/* 直角三角形(右上が直角)を表示 */ #include <stdio.h> int main(void) { int i, j, ln; printf("何段ですか:"); scanf("%d", &ln); for(i = 1; i <= ln; i++) { for(j = 1; j < i; j++) { putchar(' '); } for(j = i; j <= ln; j++) { putchar('*'); } putchar('\n'); } return(0); }
#include <stdio.h> int main(void) { int i, j, ln; puts("ピラミッドを作りましょう。"); printf("何段ですか:"); scanf("%d", &ln); for(i = 1; i <= ln; i++) { for(j = ln - i; j > 0; j--) { putchar(' '); } for(j = 1; j <= (2 * i - 1); j++) { putchar('*'); } putchar('\n'); } return(0); }
#include <stdio.h> int main(void) { int i; int vc[5]; for(i = 0; i < 5; i++) { vc[i] = i; printf("vc[%d] = %d\n", i, vc[i]); } return(0); }
#include <stdio.h> int main(void) { int i; int vc[5]; for(i = 0; i < 5; i++) { vc[i] = 5 - i; printf("vc[%d] = %d\n", i, vc[i]); } return(0); }
#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); }
#include <stdio.h> #define NUMBER 5 int main(void) { int i; int va[NUMBER] = {15, 20, 30}; int vb[NUMBER]; for(i = 0; i < 5; i++) { vb[i] = va[NUMBER - i - 1]; } puts(" va vb"); puts("-------"); for(i = 0; i < 5; i++) { printf("%3d%3d\n", va[i], vb[i]); } return(0); }
#include <stdio.h> #define NUMBER 8 int main(void) { int i; int vx[NUMBER]; for (i = 0; i < NUMBER; i++) { printf("vx[%d] : ", i); scanf("%d", &vx[i]); } for (i = 0; i < (int)(NUMBER / 2); i++) { int temp = vx[i]; vx[i] = vx[NUMBER - i - 1]; vx[NUMBER - i - 1] = temp; } for (i = 0; i < NUMBER; i++) { printf("vx[%d] = %d\n", i, vx[i]); } return(0); }
/* a = (b = 1.5) b = 1 a = b a = 1 結果:a も b も 1 */ #include <stdio.h> int main(void) { double a; int b; puts("double a, int b の評価"); puts("a = b = 1.5"); a = b = 1.5; printf("a = %4.1f\n", a); printf("b = %4d\n", b); return(0); }
#include <stdio.h> int main(void) { int x[2][3] = {{1,2,3}, {4, 5, 6}}; int y[3][2] = {{1, 5}, {5, 3}, {8, 1}}; int ans[2][2] = {0}; int i, j, k, temp; for(i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { temp = 0; for(j = 0; j < 3; j++) { temp += x[i][j] * y[j][k]; } ans[i][k] = temp; } } for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { printf("%4d",ans[i][j]); } putchar('\n'); } return(0); }
#include <stdio.h> int minof(int x, int y) { return ( (x > y) ? y : x ); } int main(void) { int na, nb; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &na); printf("整数2:"); scanf("%d", &nb); printf("小さい方の値は%dです。\n", minof(na, nb)); return(0); }
#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); }
#include <stdio.h> int cube(int x) { return ( x * x * x); } int main(void) { int x; printf("整数を入力してください:"); scanf("%d", &x); printf("その数の三乗は%dです。\n", cube(x)); return(0); }
#include <stdio.h> int sqr(int x) { return(x * x); } int pow4(int x) { return (sqr(x) * sqr(x)); } int main(void) { int x; printf("整数を入力してください:"); scanf("%d", &x); printf("その数の4乗は%dです。\n", pow4(x)); return(0); }
#include <stdio.h> void alert(int no) { while(no-- > 0) { printf("\a"); } } int main(void) { int n; printf("整数を入力してください:"); scanf("%d", &n); alert(n); return(0); }
#include <stdio.h> void hello(void) { puts("こんにちは。"); } int main(void) { hello(); return(0); }
#include <stdio.h> #define NUMBER 5 int min_of(const int vc[], int no) { int min = vc[--no]; while (no-- > 0) { if(min > vc[no]) min = vc[no]; } return(min); } int main(void) { int tensu[NUMBER] = {0}; int i = 0; puts("五つの整数を入力します。"); for(; i < NUMBER; i++) { printf("整数を入力してください:"); scanf("%d", &tensu[i]); } printf("最小の整数は%dです。\n", min_of(tensu, NUMBER)); return(0); }
#include <stdio.h> #define NUMBER 5 void rev_intary(int vc[], int no) { int i = 0; int temp; for (; i < (no / 2) ; i++) { temp = vc[i]; vc[i] = vc[no - i - 1]; vc[no - i - 1] = temp; } } int main(void) { int array1[NUMBER] = {0}; int i = 0; for (; i < NUMBER; i++) { array1[i] = i; printf("array1[%d] = %d\n", i, array1[i]); } putchar('\n'); rev_intary(array1, NUMBER); for(i = 0; i < NUMBER; i++) { printf("array1[%d] = %d\n", i, array1[i]); } return(0); }
#include <stdio.h> #define NUMBER 5 void intary_rcpy(int v1[], const int v2[], int no) { int i = 0; for(; i < no; i++) { v1[i] = v2[no - i - 1]; } } int main(void) { int array1[NUMBER] = {0}; int array2[NUMBER] = {0}; int i = 0; for (; i < NUMBER; i++) { array2[i] = i; printf("array2[%d] = %d\n", i, array2[i]); } putchar('\n'); intary_rcpy(array1, array2, NUMBER); for(i = 0; i < NUMBER; i++) { printf("array1[%d] = %d\n", i, array1[i]); } return(0); }
#include <stdio.h> void mul(const int ma[2][3], const mb[3][2], int mc[2][2]) { int i, j, k; 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]; } } } } void main(void) { int i, j; int ma[2][3] = { {1, 2, 3}, {4, 5, 6} }; int mb[3][2] = { {3, 4}, {5, 6}, {7, 8} }; 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'); } }
#include <stdio.h> #define STUDENTS 5 #define SUBJECTS 3 #define JAPANESE 0 #define MATH 1 #define ENGLISH 2 int max_point(const int tensu[STUDENTS][SUBJECTS], int subject) { int i = 0; int max; max = tensu[i++][subject]; for (; i < STUDENTS; i++) { if(max < tensu[i][subject]) max = tensu[i][subject]; } return(max); } void person_av(const int tensu[STUDENTS][SUBJECTS], double ave[STUDENTS]) { int i, j; for (i = 0; i < STUDENTS; i++) { int temp = 0; for (j = 0; j < SUBJECTS; j++) { temp += tensu[i][j]; } ave[i] = (double)temp / SUBJECTS; } } int main(void) { int i; int tensu[STUDENTS][SUBJECTS] = { {88, 90, 73}, {44, 79, 40}, {74, 63, 55}, {95, 89, 99}, {77, 24, 34} }; double ave[STUDENTS] = {0}; person_av(tensu, ave); puts("各学生の平均点:"); for(i = 0; i < STUDENTS; i++) { printf("%d番の学生 : %.2f\n", i, ave[i]); } putchar('\n'); puts("各教科の最高点"); for (i = 0; i < SUBJECTS; i++) { if(i == JAPANESE) printf("Japanese : "); else if(i == MATH) printf("Mathematics : "); else if(i == ENGLISH) printf("English : "); printf("%d\n", max_point(tensu, i)); } return(0); }
#include <stdio.h> int fx[3]; static int fsx[3]; int main(void) { int i; int ax[3]; static int sx[3]; puts(" fx fsx ax sx"); puts("----------------"); for(i = 0; i < 3; i++) { printf("%4d%4d%4d%4d\n", fx[i], fsx[i], ax[i], sx[i]); } puts("----------------"); return(0); }
/* 単に計算結果を表示するだけでも可 */ #include <stdio.h> int main(void) { unsigned int no, snum, temp, i; int temp_no, temp_snum; do { printf("非負の整数を入力してください:"); scanf("%d", &temp_no); } while(temp_no < 0); no = (unsigned)temp_no; do { printf("シフトする数:"); scanf("%d", &temp_snum); } while(temp_snum < 0); snum = (unsigned)temp_snum; putchar('\n'); temp = no; for(i = 0; i < snum; i++) { temp *= 2; } printf("%u << %u = %u\n", no, snum, no << snum); printf("%u * (2 ^ %u) = %u\n", no, snum, temp); putchar('\n'); temp = no; for(i = 0; i < snum; i++) { temp /= 2; } printf("%u >> %u = %u\n", no, snum, no >> snum); printf("%u / (2 ^ %u) = %u\n", no, snum, temp); return(0); }
#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'); } } 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 no; int snum, temp_no; do { printf("非負の整数を入力してください:"); scanf("%d", &temp_no); } while(temp_no < 0); no = (unsigned)temp_no; do { printf("左右にいくつ回転しますか:"); scanf("%d", &snum); } while(snum < 0); putchar('\n'); printf("入力した数のビット内容 :"); print_bits(no); putchar('\n'); printf("右に%d回転したビット内容:", snum); print_bits(rrotate(no, snum)); putchar('\n'); printf("左に%d回転したビット内容:", snum); print_bits(lrotate(no, snum)); putchar('\n'); return(0); }
#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'); } } unsigned set(unsigned x, int pos) { unsigned temp = 1; for (; pos > 1; pos--) { temp *= 2; } return ( x | temp); } unsigned reset(unsigned x, int pos) { return (x & ~set(0U, pos)); } unsigned inverse(unsigned x, int pos) { unsigned temp = x >> (pos - 1); if(temp & 1U) { temp = reset(x, pos); } else { temp = set(x, pos); } return(temp); } int main(void) { unsigned no; int temp_no,snum; do { printf("非負の整数を入力してください:"); scanf("%d", &temp_no); } while(temp_no < 0); no = (unsigned)temp_no; do { printf("何ビット目を変化させますか:"); scanf("%d", &snum); } while(snum < 0); putchar('\n'); printf("入力した数のビット内容 :"); print_bits(no); putchar('\n'); printf("指定した位置を1にした内容:"); print_bits(set(no, snum)); putchar('\n'); printf("指定した位置を0にした内容:"); print_bits(reset(no, snum)); putchar('\n'); printf("指定した位置を反転した内容:"); print_bits(inverse(no, snum)); putchar('\n'); return(0); }
#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'); } } unsigned set(unsigned x, int pos) { unsigned temp = 1; for (; pos > 1; pos--) { temp *= 2; } return(temp | x); } unsigned reset(unsigned x, int pos) { return(x & ~set(0U, pos)); } unsigned inverse(unsigned x, int pos) { unsigned temp; if(x >> (pos - 1) & 1U) { temp = reset(x, pos); } else { temp = set(x, pos); } return(temp); } unsigned set_n( unsigned x, int pos, int n) { int i; unsigned temp; for (i = 0; i < n; i++) { x = set(x, pos + i); } return (x); } unsigned reset_n(unsigned x, int pos, int n) { int i; unsigned temp; for (i = 0; i < n; i++) { x = reset(x, pos + i); } return(x); } unsigned inverse_n(unsigned x, int pos, int n) { int i; for(i = 0; i < n; i++) { x = inverse(x, pos + i); } return(x); } int main(void) { unsigned no; int temp_no,pos , n; do { printf("非負の整数を入力してください:"); scanf("%d", &temp_no); } while(temp_no < 0); no = (unsigned)temp_no; do { printf("始点を入力してください:"); scanf("%d", &pos); } while(pos < 0); do { printf("いくつビットを変更しますか:"); scanf("%d", &n); } while(n < 0); putchar('\n'); printf("入力した数のビット内容 :"); print_bits(no); putchar('\n'); printf("指定位置を1にしたビット内容:"); print_bits(set_n(no, pos, n)); putchar('\n'); printf("指定位置を0にしたビット内容:"); print_bits(reset_n(no, pos, n)); putchar('\n'); printf("指定位置を反転したビット内容:"); print_bits(inverse_n(no, pos, n)); putchar('\n'); return(0); }
#include <stdio.h> #include <limits.h> int main(void) { printf("符号なし整数の最高 = %u\n", UINT_MAX); printf("符号なし整数の最高数 + 83333 = %u\n", UINT_MAX + 83333); return(0); }
#include <stdio.h> #define diff(x, y) ((x > y) ? (x - y) : (y - x)) int main(void) { int num1, num2; double num3, num4; printf("整数A:"); scanf("%d", &num1); printf("整数B:"); scanf("%d", &num2); printf("その差は%dです。\n", diff(num1, num2)); printf("実数C:"); scanf("%lf", &num3); printf("実数D:"); scanf("%lf", &num4); printf("その差は%lfです。\n", diff(num3, num4)); return(0); }
/* max(max(a, b), max(c, d))); は、 ((((((a) > (b)) ? (a) : (b)))) > ((((c) > (d) ? (c) : (d)))) ? ((((a) > (b)) ? (a) : (b))) : ((((c) > (d)) ? (c) : (d)))); max(max(max(a,b), c), d)); は、 ((((((((a) > (b)) ? (a) : (b))) > (c) ? ((((a) > (b)) ? (a) : (b))) : (c))) > (d) ) ? ((((((a) > (b)) ? (a) : (b))) > (c) ? ((((a) > (b)) ? (a) : (b))) : (c))) : (d)); と展開される。 下記プログラムより正しく動作することは確認できるが、 プログラムの効率は非常に悪い。 */ #include <stdio.h> #define max(x, y) (((x) > (y)) ? (x) : (y)) int main(void) { int a, b, c, d, i; for(i = 0; i < 4; i++) { // a b c d の大小が変わっても、常に最小値が表示されていることを確認する a = i % 4; b = (i + 1) % 4; c = (i + 2) % 4; d = (i + 3) % 4; printf("a = %d b = %d c = %d d = %d\n", a, b, c, d); printf("max(max(a, b), max(c, d)) = %d\n", max(max(a, b), max(c, d))); printf("max(max(max(a, b), c), d) = %d\n", max(max(max(a,b), c),d)); putchar('\n'); } return(0); }
/* swap(type, a, b); は、以下のように展開される。 {type temp; temp = a; a = b; b = temp;}; つまり、 { type temp: temp = a; a = b; b = temp; } ; となるのでセミコロンがあっても正常に動作する。 また、{}内の宣言はそのスコープ内でのみ有効なので、 下記のプログラムのように使用しても、 tempの多重宣言とはならない。 */ #include <stdio.h> #define swap(type, a, b) {type temp; temp = a; a = b; b = temp;} #define alert() (putchar('\a')) int main(void) { int a = 2, b = 9; double c = 3.33, d = -22.3; printf("a = %d, b = %d\n", a, b); swap(int, a, b); printf("a = %d, b = %d\n", a, b); printf("c = %lf, d = %lf\n", c, d); swap(double, c, d); printf("c = %lf, d = %lf\n", c, d); alert(); return(0); }
/* 列挙体は、選択肢の中から一つを選ぶような場合に扱いやすい 可読性が多少上がるような気もする 以下はゲーム主人公の状態の例(適当) */ #include <stdio.h> // ステータスの列挙 enum status {normal, paralysis, poison, stone, dying }; // 関数原型宣言 void setStatus(enum status *s); void showStatus(enum status s); int main(void) { enum status s; while(1) { setStatus(&s); showStatus(s); printf("\n"); if(s == dying) break; } return 0; } void setStatus(enum status *s) { int temp; puts("マヒ...0, 毒...1, 石化...2, 攻撃...3, 回復...4, 何もしない...それ以外"); scanf("%d", &temp); switch(temp) { case 0 : *s = paralysis; break; case 1 : *s = poison; break; case 2 : *s = stone; break; case 3 : *s = dying; break; case 4 : *s = normal; break; } } void showStatus(enum status s) { switch(s) { case normal : puts("正常"); break; case paralysis : puts("マヒ"); break; case poison : puts("毒"); break; case stone : puts("石化"); break; case dying : puts("戦闘不能"); break; } }
/* あまり大きな数を入力すると、int の表現できる範囲を超えてしまう。10くらいまで。 */ #include <stdio.h> int fact(int n) { int temp = 1; for(; n > 1; n--) { temp *= n; } return(temp); } int main(void) { int num; do { printf("正の整数を入力してください:"); scanf("%d", &num); } while(num < 0); printf("%dの階乗は%dです。\n", num, fact(num)); return(0); }
#include <stdio.h> int combination(int n, int r) { if(n == r) { return(1); } else if(r == 0) { return(1); } else { return( combination(n - 1, r - 1) + combination(n - 1, r)); } } int main(void) { int n, r; puts("nCrを求めます。"); printf("n = "); scanf("%d", &n); printf("r = "); scanf("%d", &r); if (n >= 0 && r >= 0) { if(n > r - 1) { printf("%dC%d = %d\n", n, r, combination(n, r)); } } else printf("定義できない数です。\n"); return(0); }
#include <stdio.h> int main(void) { int i, ch; int count[10] = {0}; // 0〜9までの数字の個数を格納する。配列の添字がカウントする数を表す。 while(1) { ch = getchar(); if(ch == EOF) break; if (ch >= '0' && ch <= '9') { count[ch - '0']++; } } puts("数字文字の出現回数"); for (i = 0; i < 10; i++) { printf("'%d' : ", i); for(; count[i] > 0; count[i]--) { putchar('*'); } putchar('\n'); } return(0); }
#include <stdio.h> int main(void) { int ch; int count = 1; while( (ch = getchar()) != EOF) { if(ch == '\n') count++; } printf("行数は%dです。", count); return(0); }
/* ヌル文字までを文字列として扱うので、ABCと表示される */ #include <stdio.h> int main(void) { char str[] = "ABC\0DEF"; printf("%s\n", str); return(0); }
#include <stdio.h> int main(void) { char str[] = "ABC"; printf("%s\n", str); str[0] = '\0'; printf("%s\n", str); return(0); }
/* 現在学んでいる内容だけだと、プログラムが汚くなる。 scanf(" %c", &ch); は、空白(改行含む)を読み飛ばして文字を一文字読み込む。 scanf("%*c", &ch); は、改行を読み飛ばして文字を一文字読み込む。 これらを使わない場合、無限ループで改行や空白を読み飛ばす必要がある。 */ #include <stdio.h> int str_char(const char str[], int c) { int i; for(i = 0; str[i] != 0; i++) { if(str[i] == c) return (i); } return(-1); } int main(void) { char str[128]; char ch; int no; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); scanf(" %c", &ch); no = str_char(str, ch); if(no == -1) { printf("%cは見つかりませんでした。\n", ch); } else { printf("%cは添え字%dにあります。\n", ch, no); } return(0); }
/* scanf("%c", &ch); ではなく、 scanf(" %c", &ch); であることに注意する。 */ #include <stdio.h> int str_chnum(const char str[], int c) { int count = 0; int i; for(i = 0; str[i] != '\0'; i++) { if(str[i] == c) count++; } return(count); } int main(void) { char str[128]; int ch; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); scanf(" %c", &ch); printf("%cは%d個ありました。\n", ch, str_chnum(str, ch)); return(0); }
#include <stdio.h> void put_string(const char str[]) { printf("%s", str); } int main(void) { char str[128]; printf("文字列を入力してください:"); scanf("%s", str); put_string(str); putchar('\n'); return(0); }
#include <stdio.h> void put_stringn(const char str[], int no) { for(; no > 0; no--) { printf("%s", str); } } int main(void) { int no; char str[128]; printf("文字列を入力してください:"); scanf("%s", str); printf("表示する回数を入力してください:"); scanf("%d", &no); putchar('\n'); put_stringn(str, no); return(0); }
#include <stdio.h> void put_rstring(const char str[]) { unsigned length = 0; while(str[length]) { length++; } for(; length > 0; length--) { putchar(str[length - 1]); } } int main(void) { char str[128]; printf("文字列を入力してください:"); scanf("%s", str); puts("その文字列の逆順"); put_rstring(str); putchar('\n'); return(0); }
#include <stdio.h> void rev_string(char str[]) { char temp; unsigned i; unsigned length = 0; while(str[length]) { length++; } for(i = 0; i < (length / 2); i++) { temp = str[i]; str[i] = str[length - i - 1]; str[length - i - 1] = temp; } str[length] = '\0'; } int main(void) { char str[128]; printf("文字列を入力してください:"); scanf("%s", str); rev_string(str); printf("%s\n", str); return(0); }
#include <stdio.h> void null_string(char str[]) { str[0] = '\0'; } int main(void) { char str[128]; printf("文字列を入力してください:"); scanf("%s", str); null_string(str); printf("%s\n", str); return(0); }
#include <stdio.h> void del_digit(char str[]) { unsigned i = 0, count = 0; while (str[i]) { if(str[i] >= '0' && str[i] <= '9') { count++; } else { str[i - count] = str[i]; } i++; } str[i - count] = '\0'; } int main(void) { char str[128]; printf("文字列を入力してください:"); scanf("%s", str); del_digit(str); printf("数字文字を削除した内容:%s\n", str); return(0); }
#include <stdio.h> enum {January = 1, February, March, April, May, June, July, August, September, October, November, December}; void yesterday(int *y, int *m, int *d) { if(*d != 1) { (*d)--; // *d++ は *(d++) と同じ } else { if(*m == 1) { (*y)--; *m = 12; } else { (*m)--; } switch (*m) { case February : if ( *y % 400 == 0) { *d = 29; } else if(*y % 100 == 0) { *d = 28; } else if ( *y % 4 == 0) { *d = 29; } else { *d = 28; } break; case April : case June : case September : case November : *d = 30; break; default : *d = 31; } } } void tomorrow( int *y, int *m, int *d) { int limit; switch (*m) { case February : if (*y % 400 == 0) { limit = 29; } else if(*y % 100 == 0) { limit = 28; } else if( *y % 4 == 0) { limit = 29; } else { limit = 28; } break; case April : case June : case September : case November : limit = 30; break; default : limit = 31; } if(*d != limit) { (*d)++; } else { if(*m == December) { (*y)++; *m = 1; *d = 1; } else { (*m)++; *d = 1; } } } int dateExist(int year, int month, int day) { int boolean = 0; if(year >= 0) { if (month <= 12 && month >= 1) { if(day >= 1) { int limit; switch (month) { case February : if( year % 400 == 0) { limit = 29; } else if( year % 100 == 0) { limit = 28; } else if( year % 4 == 0) { limit = 29; } else { limit = 28; } break; case April : case June : case September : case November : limit = 30; break; default : limit = 31; } if(day <= limit) boolean = 1; } } } return(boolean); } int main(void) { int year, month, day; while(1) { puts("好きな日付を入力してください。"); printf("西暦:"); scanf("%d", &year); printf("月 :"); scanf("%d", &month); printf("日 :"); scanf("%d", &day); if(dateExist(year, month, day)) break; printf("そのような日付は存在しません\n\a"); } printf("入力した日付:%d年%2d月%2d日\n", year, month, day); tomorrow(&year, &month, &day); printf("その翌日 :%d年%2d月%2d日\n", year, month, day); yesterday(&year, &month, &day); yesterday(&year, &month, &day); printf("その前日 :%d年%2d月%2d日\n", year, month, day); return(0); }
#include <stdio.h> /* List10-8を使い回す */ void swap(int *nx, int *ny) { int temp = *nx; *nx = *ny; *ny = temp; } void sort2(int *n1, int *n2) { if(*n1 > *n2) { swap(n1, n2); } } void sort3(int *n1, int *n2, int *n3) { sort2(n1, n2); sort2(n2, n3); // 最高値n3が決定する sort2(n1, n2); } int main(void) { int num1, num2, num3; puts("三つの整数を入力してください。"); printf("整数1:"); scanf("%d", &num1); printf("整数2:"); scanf("%d", &num2); printf("整数3:"); scanf("%d", &num3); putchar('\n'); sort3(&num1, &num2, &num3); puts("これらを昇順に並べました。"); printf("整数1:%d\n", num1); printf("整数2:%d\n", num2); printf("整数3:%d\n", num3); return(0); }
#include <stdio.h> void put_string(const char *str) { while(*str) { putchar(*str++); } } int main(void) { char str[100]; printf("文字列を入力してください:"); scanf("%s", str); put_string(str); putchar('\n'); return(0); }
#include <stdio.h> /* scanf("%c", &search); ではなく scanf(" %c", &search); であることに注意する */ char *str_chr(const char *str, char c) { char *find; find = NULL; do { if(*str == c) { find = (char*)str; break; } } while(*str++); return(find); } int main(void) { char str[100] = {0}; char search; char *find; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); scanf(" %c", &search); find = str_chr(str, search); if(find == NULL) { puts("検索した文字は見つかりませんでした。"); } else { printf("検索した文字 %c は\"%p\"にあります。\n", *find , find); } return(0); }
#include <stdio.h> int str_chnum(const char *str, int c) { int count = 0; do { if(*str == c) count++; } while (*str++); return(count); } int main(void) { char *str[100]; char search; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); // 直前にキーボードスキャン等をすると、char に'\n'が代入されてしまうため do { scanf("%c", &search); } while (search == '\n' || search == '\0'); printf("\'%c\'は%d個発見されました。\n", search, str_chnum(str, search)); return(0); }
#include <stdio.h> #include <ctype.h> void str_toupper(char *str) { while (*str = toupper(*str)) { *str++; } } void str_tolower(char *str) { while(*str = tolower(*str)) { *str++; } } int main(void) { char str[100]; printf("文字列を入力してください:"); scanf("%s", str); str_toupper(str); printf("大文字:%s\n", str); str_tolower(str); printf("小文字:%s\n", str); return(0); }
#include <stdio.h> void del_digit(char *str) { int count = 0; do { if( *str >= '0' && *str <= '9') { count++; } else if (count > 0) { *(str - count) = *str; } } while(*str++); } int main(void) { char str[100]; printf("文字列を入力してください:"); scanf("%s", str); puts("文字列の中から数字を消去します。"); del_digit(str); printf("%s\n", str); return(0); }
#include <stdio.h> int strtoi(const char *nptr) { int number = 0; do { if(*nptr <= '9' && *nptr >= '0') { number *= 10; number += (*nptr - '0'); } } while (*nptr++); return(number); } long strtol(const char *nptr) { long number = 0; do { if(*nptr <= '9' && *nptr >= '0') { number *= 10; number += (*nptr - '0'); } } while (*nptr++); return(number); } double strtof(const char *nptr) { int flag = 0; double number; int count = 0; int i; do { if (*nptr == '.') { flag = -1; } if (*nptr <= '9' && *nptr >= '0') { if(flag) { double temp = (*nptr - '0'); count++; for (i = 0; i < count; i++) { temp /= 10; } number += temp; } else { number *= 10; number += (*nptr - '0'); } } } while (*nptr++); return(number); } int main(void) { char str[100]; int i_number; long l_number; double d_number; printf("整数を入力してください:"); scanf("%s", str); i_number = strtoi(str); printf("整数:%d\n", i_number); printf("整数を入力してください:"); scanf("%s", str); l_number = strtol(str); printf("整数:%d\n", l_number); printf("実数を入力してください:"); scanf("%s", str); d_number = strtof(str); printf("浮動小数点数:%f\n", d_number); return(0); }
#include <time.h> #include <stdio.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) { puts("現在の時刻は"); put_time(); puts("です。"); return(0); }
/* そのうち何か作ります */
#include <stdio.h> int main(void) { FILE *fp; char filename[100]; printf("オープンするファイルを入力してください:"); scanf("%s", filename); fp = fopen(filename, "r"); if(fp == NULL) { printf("\aファイルをオープンできません。\n"); } else { fclose(fp); } return(0); }
#include <stdio.h> int main(void) { FILE *fp; char filename[100]; printf("ファイル名を入力してください:"); scanf("%s", filename); fp = fopen(filename, "rb"); if (fp == NULL) { puts("ファイルは存在しません。"); } else { puts("そのファイルは存在します。"); fclose(fp); } return(0); }
#include <stdio.h> #define NUMBER_OF_STUDENTS 6 typedef struct { char name[100]; double height, weight; } Student; void swap(Student *x, Student *y) { if(x->height > y->height) { Student temp = *x; *x = *y; *y = temp; } } void sort(Student data[], int n) { int k = n - 1; while (k >= 0) { int i, j; for(i = 1, j = -1; i <= k; i++) { if(data[i-1].height > data[i].height) { j = i - 1; swap(&data[i], &data[j]); } } k = j; } } int main(void) { FILE *fp; Student students[NUMBER_OF_STUDENTS]; if(( fp = fopen("hw.dat", "r")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { int i = 0; int j; // fscanf は読み取った項目の数を返す while (fscanf(fp, "%s%lf%lf", students[i].name, &students[i].height, &students[i].weight) == 3) { i++; } sort(students, NUMBER_OF_STUDENTS); for(i = 0; i < NUMBER_OF_STUDENTS; i++) { printf("%-10s %5.1f %5.1f\n", students[i].name, students[i].height, students[i].weight); } fclose(fp); } return(0); }
#include <stdio.h> void write_profile(FILE *fp) { double height, weight; char name[100]; printf("名前を入力してください:"); scanf("%s", name); printf("身長を入力してください:"); scanf("%lf", &height); printf("体重を入力してください:"); scanf("%lf", &weight); fprintf(fp, "%s %f %f\n", name, height, weight); printf("ファイルに書き込みました。\n"); } int main(void) { FILE *fp; if((fp = fopen("practice1304_profile.dat", "a")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { int flag = 0; while(1) { write_profile(fp); printf("入力を続けますか? Yes...1 / No...0\n"); scanf("%d", &flag); if(!flag) break; } fclose(fp); } return(0); }
#include <time.h> #include <stdio.h> const char data_file[] = "practice1305_time_and_feel.dat"; void get_data(void) { FILE *fp; if (( fp = fopen(data_file, "r")) == NULL) { printf("本プログラムを実行するのは初めてですね。\n"); } else { int year, month, day, h, m, s; char feel[100]; 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 t; struct tm *local; time(&t); local = localtime(&t); if (( fp = fopen(data_file, "w")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { char feel[100]; 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); }
#include <stdio.h> int main(void) { int ch; FILE *fp; char fname[128]; int count = 1; printf("ファイル名:"); scanf("%s", fname); if((fp = fopen(fname, "r")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { while ((ch = getc(fp)) != EOF) { if(ch == '\n') count++; } fclose(fp); printf("このファイルの行数は%dです。\n", count); } return(0); }
#include <stdio.h> int main(void) { int ch; FILE *fp; char fname[64]; int count = 0; printf("ファイル名:"); scanf("%s", fname); if ((fp = fopen(fname, "r")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { while ((ch = fgetc(fp)) != EOF) { if (ch <= '9' && ch >= '0') count++; } fclose(fp); printf("このファイルに含まれる数字の数は%d個です。", count); } return(0); }
#include <stdio.h> int main(void) { int ch; FILE *sfp, *dfp; char sname[64], dname[64]; 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); / * 変更点 */ putchar(ch); } fclose(dfp); } fclose(sfp); } return(0); }
#include <stdio.h> #include <ctype.h> int main(void) { int ch; FILE *sfp, *dfp; char sname[64], dname[64]; 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-9 の toupper(ch); -> tolower(ch); */ #include <stdio.h> #include <ctype.h> int main(void) { int ch; FILE *sfp, *dfp; char sname[64], dname[64]; 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); }
#include <stdio.h> #define DATA_NUMBER 10 int main(void) { FILE *fp; double data[DATA_NUMBER] = {10.3, 33, 12345, 11.1111, 3.14159265, 0, 7777, 91234, 12340, 5}; if ((fp = fopen("practice1311_data.dat", "wb")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { fwrite(data, sizeof(double), DATA_NUMBER, fp); fclose(fp); } if ((fp = fopen("practice1311_data.dat", "rb")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { int i; fread(data, sizeof(double), DATA_NUMBER, fp); for(i = 0; i < DATA_NUMBER; i++) { printf("%22.10f\n", data[i]); } fclose(fp); } return(0); }
#include <stdio.h> #include <time.h> char data_file[] = "datetime.bin"; int main(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); } if ((fp = fopen(data_file, "rb")) == NULL) { printf("\aファイルをオープンできません。\n"); } else { fread(local, sizeof(struct tm), 1, fp); fclose(fp); printf("%d %d %d %d %d %d \n", local->tm_year + 1900, local->tm_mon + 1, local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec); } return(0); }