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

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

2013-10-09から1日間の記事一覧

階乗を求めるプログラム(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>…