「新版 明解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);
}