プログラミング+α学習ブログ

勉強したことの備忘録です。

入力に出現する数字をカウントして横向きの棒グラフで表示するプログラム

#include <stdio.h> int main(void) { int i, j, ch; int cnt[10] = {0}; // 数字文字の出現回数 while (1) { // 無限ループ ch = getchar(); if (ch == EOF) break; if (ch >= '0' && ch <= '9') cnt[ch - '0']++; } puts("数字文字の出現回数"); for (i = 0; i < 10</stdio.h>…

入力に出現する数字をカウントして表示するプログラム

#include <stdio.h> int main(void) { int i, ch; int cnt[10] = {0}; // 数字文字の出現回数(全ての要素を0で初期化) while (1) { // 無限ループ ch = getchar(); if (ch == EOF) break; if (ch >= '0' && ch <= '9') cnt[ch - '0']++; } puts("数字文字の出現回数</stdio.h>…

ハノイの塔

わからない(ToT) #include <stdio.h> #define N 3 // 枚数 /*--- 円盤をx軸からy軸へ移動 ---*/ void move(int no, int x, int y) { if (no > 1) move(no - 1, x, 6 - x - y); printf("%dを%d軸から%d軸へ移動\n", no, x, y); if (no > 1) move(no - 1, 6 - x - y, y)</stdio.h>…

組み合わせの数を求めるプログラム

#include <stdio.h> /*--- 異なるn個からr個の整数を取り出す組み合わせの数を返す ---*/ int combination(int n, int r) { if (r == 0 || r == n) return (1); else if (r == 1) return (n); return (combination(n - 1, r - 1) + combination(n - 1, r)); } int mai</stdio.h>…

階乗を求めるプログラム(2)

#include <stdio.h> /*--- 階乗値を返す ---*/ int fact(int n) { int f = 1; while (n > 0) f *= n--; return (f); } int main(void) { int num; printf("整数を入力してください:"); scanf("%d", &num); printf("その数の階乗は%dです。\n", fact(num)); return (0</stdio.h>…

階乗を求めるプログラム

#include <stdio.h> /*--- 階乗値を返す ---*/ int factorial(int n) { return (n > 0 ? n * factorial(n - 1) : 1); } int main(void) { int num; printf("整数を入力してください:"); scanf("%d", &num); printf("その数の階乗は%dです。\n", factorial(num)); ret</stdio.h>…

選ばれた季節の趣を表示するプログラム

#include <stdio.h> enum season { Spring, Summer, Fall, Winter, Invalid }; /*--- 春 ---*/ void spring(void) { puts("春はあけぼの"); } /*--- 夏 ---*/ void summer(void) { puts("夏は夜"); } /*--- 秋 ---*/ void fall(void) { puts("秋は夕暮れ"); } /*--- </stdio.h>…

二つの値を交換する関数形式マクロを定義するプログラム

#include <stdio.h> #define swap(type, x, y) do { type temp = x; x = y; y = temp; } while (0) int main(void) { int na, nb; puts("二つの整数を入力せよ。"); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); swap(int, na, nb); /</stdio.h>…

二つの値の差を求める関数形式マクロのプログラム

#include <stdio.h> #define diff(x, y) ((x) > (y) ? ((x) - (y)) : ((y) - (x))) int main(void) { int n1, n2; puts("二つの値を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2); printf("それらの差は%dです。\</stdio.h>…

二乗を求める関数形式マクロと、三乗を求める関数形式マクロ

#include <stdio.h> #define sqr(x) ((x) * (x)) // xの二乗値を求める #define cub(x) ((x) * (x) * (x)) // xの三乗値を求める int main(void) { int nx; double dx; printf("整数を入力してください:"); scanf("%d", &nx); printf("その数の二乗は%dで三乗は%dで</stdio.h>…

静的記憶域期間をもつ配列オブジェクトの暗黙の初期化を確認するプログラム

#include <stdio.h> #define MAX 14 int a[MAX]; // 静的記憶域期間(全要素が0で初期化される) int main(void) { int i; static int b[MAX]; // 静的記憶域期間(全要素が0で初期化される) int c[MAX]; // 自動記憶域期間(不定値で初期化される) printf("a "); </stdio.h>…

配列の要素数を求め、全ての要素に0を代入するプログラム

#include <stdio.h> int main(void) { int i; int vc[10]; int vc_no = sizeof(vc) / sizeof(vc[0]); for (i = 0; i < vc_no; i++) vc[i] = 0; for (i = 0; i < vc_no; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); } 実行結果 vc[0] = 0 vc[1] = 0 vc[2] = </stdio.h>…

0.0から1.0まで0.01単位で増やし、その値と2乗値を表示するプログラム

#include <stdio.h> int main(void) { int i; float x; printf(" x x * x\n"); printf("-------------------\n"); for (i = 0; i <= 100; i++) { x = i / 100.0; printf("%f %f\n", x, x*x); } return (0); } x x * x ------------------- 0.000000 0.000000 0.010000</stdio.h>…

符号無し整数の算術演算がオーバフローを起こさないことを確認するプログラム

#include <stdio.h> #include <limits.h> int main(void) { unsigned x = UINT_MAX - 1; printf("unsigned型の最大値:%u\n", UINT_MAX); printf("x = %u\n", x); printf("x + 3 = %u\n", x + 3); printf("x * 2 = %u\n", x * 2); return (0); } 実行結果 unsigned型の最大値:4</limits.h></stdio.h>…

符号無し整数の任意の連続したビットを操作するプログラム

↓バグあり(ToT) #include <stdio.h> /*--- 整数x中のセットされたビット数を返す ---*/ int count_bits(unsigned x) { int count = 0; while (x) { if (x & 1U) count++; x >>= 1; } return (count); } /*--- unsigned型のビット数を返す ---*/ int int_bits(void) { </stdio.h>…

符号無し整数の任意のビットを操作するプログラム

#include <stdio.h> /*--- 整数x中のセットされたビット数を返す ---*/ int count_bits(unsigned x) { int count = 0; while (x) { if (x & 1U) count++; x >>= 1; } return (count); } /*--- unsigned型のビット数を返す ---*/ int int_bits(void) { return (count_b</stdio.h>…

符号無し整数のビットを左右に回転するプログラム

#include <stdio.h> /*--- 整数x中のセットされたビット数を返す ---*/ int count_bits(unsigned x) { int count = 0; while (x) { if (x & 1U) count++; x >>= 1; } return (count); } /*--- unsigned型のビット数を返す ---*/ int int_bits(void) { return (count_b</stdio.h>…

符号無し整数のシフトが2のべき乗での乗除算と等しいことを確認するプログラム

#include <stdio.h> /*--- 2のno乗を返す ---*/ unsigned pow2(unsigned no) { unsigned pw = 1; while (no--) pw *= 2; return (pw); } int main(void) { unsigned m_pow, d_pow, l_sht, r_sht; unsigned a, n; printf("整数Aを入力してください:"); scanf("%u", &</stdio.h>…

備忘録/ユーザーインターフェース設計入門(11)

UI

備忘録続き。これ読んでます。 〔重点〕これからのUIの教科書 ~ユーザーインターフェース設計入門 ウィザード形式 ウィザード形式の特徴 必ず同じ手順を強要される。利用者の逸脱を許さない。モードがある。特定のページを必ず経由する。利用者のわがままを…

備忘録/ユーザーインターフェース設計入門(10)

UI

備忘録続き。コレ読んでます。〔重点〕これからのUIの教科書 ~ユーザーインターフェース設計入門 モードの有無 モードがないUIとは ある操作をしたとき、必ず同じ機能として受け付けられるもの モードがあるUIとは 状況次第で異なる機能として受け付けられる…

0〜UINT_MAXを2進・8進・10進・16進で表示するプログラム

#include <stdio.h> #include <limits.h> /*--- 整数x中のセットされたビット数を返す ---*/ int count_bits(unsigned x) { int count = 0; while (x) { if (x & 1U) count++; x >>= 1; } return (count); } /*--- unsigned型のビット数を返す ---*/ int int_bits(void) { /* 整</limits.h></stdio.h>…

char型が符号付きか符号無しかを判定してその表現範囲を表示するプログラム

#include <stdio.h> #include <limits.h> int main(void) { printf("この処理系のchar型は"); if (CHAR_MIN) // <limits.h>で定義されているCHAR_MINの値が0かどうかで判断 puts("符号付きで、"); else puts("符号無しで、"); printf("%d~%dを表すことができます。\n", CHAR_MIN, CHAR_MAX</limits.h></limits.h></stdio.h>…

型の大きさを表示するプログラム

#include <stdio.h> int main(void) { printf("sizeof(char) = %u\n", (unsigned)sizeof(char)); printf("sizeof(signed char) = %u\n", (unsigned)sizeof(signed char)); printf("sizeof(unsigned char) = %u\n", (unsigned)sizeof(unsigned char)); printf("sizeof(</stdio.h>…

文字型と整数型の表現範囲を表示するプログラム

#include <stdio.h> #include <limits.h> int main(void) { /* 文字型(character type) */ printf("char : %d~%d\n", CHAR_MIN, CHAR_MAX); printf("signed char : %d~%d\n", SCHAR_MIN, SCHAR_MAX); printf("unsigned char : %d~%d\n", 0, UCHAR_MAX); /* 整数型 */ printf("sh</limits.h></stdio.h>…

自動記憶域期間と静的記憶域期間の変数の挙動を確認するプログラム

#include <stdio.h> int fx = 0; // 静的記憶域期間 + ファイル有効範囲 void func(void) { static int sx = 0; // 静的記憶域期間 + ブロック有効範囲 int ax = 0; // 自動記憶域期間 + ブロック有効範囲 printf("%3d%3d%3d\n", ax++, sx++, fx++); } int main(void)</stdio.h>…

点数を読み込んで合格者(60点以上)の一覧を表示するプログラム

#include <stdio.h> int tensu[5]; void prt(int ten); // 関数原型宣言 int main(void) { extern int tensu[]; int i; puts("5人の点数を入力してください。"); for (i = 0; i < 5; i++) { printf("%d:", i + 1); scanf("%d", &tensu[i]); } puts(" 合格者一覧表 ")</stdio.h>…

5人の学生の3教科(国語・数学・英語)の点数について、各科目別の最高点と、各学生の3教科の平均点を求めるプログラム

#include <stdio.h> #define STD_NO 5 // 学生の人数 #define SUB_NO 3 // 科目数 /*--- 点数の一覧表を出力する ---*/ void print_list(int v[][SUB_NO]) { int i, j; puts("No 国語 数学 英語"); puts("---------------"); for (i = 0; i < STD_NO; i++) { printf("</stdio.h>…

2行3列の行列と3行2列の行列の積を求めるプログラム

#include <stdio.h> /*--- 2行3列の行列maと3行2列の行列mbの積にmcに格納する ---*/ void mul(const int ma[2][3], const int mb[3][2], int mc[2][2]) { int i, j, k; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) { mc[i][j] = 0; for (k = 0; k < 3; k++</stdio.h>…

2行3列の行列の和を求めるプログラム

#include <stdio.h> /*--- 2行3列の行列maとmbの和をmcに格納する ---*/ void mat_add(const int ma[][3], const int mb[][3], int mc[][3]) { int i, j; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) mc[i][j] = ma[i][j] + mb[i][j]; } int main(void) { int</stdio.h>…

配列の全要素を逆順に他の配列にコピーするプログラム

#include <stdio.h> #define NUMBER 5 // 配列の要素数 /*--- 要素数noの配列v2の全要素を逆順にして配列v1に格納 ---*/ void intary_rcpy(int v1[], const int v2[], int no) { int i; for (i = 0; i < no; i++) v1[i] = v2[no - i - 1]; } int main(void) { int i; </stdio.h>…