Login
Immutable PageDiscussionInfoAttachments
Diff for "solanumaple/programming講習2015"

MMA
Differences between revisions 38 and 39
Revision 38 as of 2015-06-24 17:25:06
Size: 5011
Editor: solanumaple
Comment:
Revision 39 as of 2015-06-24 17:28:44
Size: 5009
Editor: solanumaple
Comment:
Deletions are marked like this. Additions are marked like this.
Line 179: Line 179:
== 問3 べき乗 == = 問3 べき乗 =

Hello, World!

   1 /*スラッシュアスタリスクで囲んでコメントが書ける*/
   2 //スラッシュ二本の後, 行末までコメントになる
   3 #include<stdio.h>
   4 
   5 int main(void){
   6   printf("Hello, World!\n");
   7   return 0;
   8 }

   1 #include<stdio.h>
   2 // printf() を使うために必要なファイルをinclude
   3 
   4 int main(void){
   5     // プログラムを呼ぶと最初に呼ばれる関数
   6 
   7     printf("hello, world");
   8     // 文字列を出力する(改行なし)
   9 
  10     printf("\n"); // 改行する
  11   
  12     return 0; // 必ず書く
  13 }

コンパイル

$ gcc -o hello hello.c -std=c99
$ ./hello

数値出力

   1 #include<stdio.h>
   2 int main(void){
   3   printf("%d\n", 5); // 5 と表示,改行される
   4   printf("私は%d歳", 18); // 私は18歳 と表示される
   5   printf("%d\n", 2 * 3 +  14 / 7 - 3 % 2 ); // 2 × 3 + 14 ÷ 7 - 3 mod 2
   6   return 0;
   7 }

変数

   1 #include<stdio.h>
   2 
   3 int main(void){ 
   4   int n = 3;
   5   n = n + 1;
   6   printf("%d\n", 4); // 4 と表示,改行される
   7   return 0;
   8 }

  • void : 無
  • int : (-231) ~ (231-1) の範囲の整数

  • long long int : (-263) ~ (263-1)の範囲の整数

  • double : 少数

算術演算子

  • =: 代入(左辺の変数に右辺の値を格納する)
  • +: 加算(+)
  • -: 減算(ー)
  • *: 乗算(×)
  • /: 除算(÷)
  • %: 剰余(mod)

便利な代入式

   1   n++;    // n = n + 1;
   2   ++n;    // n = n + 1;
   3   n--;    // n = n - 1;
   4   --n;    // n = n - 1;
   5   n += 3; // n = n + 3;
   6   n -= 3; // n = n - 3;
   7   n *= 3; // n = n * 3;
   8   n /= 3; // n = n / 3;
   9   n %= 3; // n = n % 3;
  10 

ビット演算子

  • x & y: ビットごとにand

  • x | y: ビットごとにor
  • x ^ y: ビットごとにxor
  • ~x: ビット反転
  • x << y: xをy回左シフト

  • x >> y: xをy回右シフト

数値入力

scanf("%d", &変数名);

   1 #include<stdio.h>
   2 
   3 int main(void){
   4   int n;
   5   scanf("%d", &n);
   6   return 0;
   7 }

条件分岐

もし (1) ならば [1] をする そうでなく, もし (2) なら [2] をする そうでなければ [3] をする if( ){ }else if( ){ }else{ }

   1 #include<stdio.h>
   2 int main(void){
   3   int n;
   4   scanf("%d", &n);
   5   if( n < 10 ){        // (1)なら
   6     n = n * 100;       // [1]する
   7   }else if( n < 100 ){ // (1)でないかつ(2)であるとき
   8     n = n * 10;        // [2]をする
   9   }else{               // そうでなければ
  10     n = n * 5;         // [3]する
  11   }
  12   printf("%d\n", n);
  13   return 0;
  14 }
  15 /* 結果
  16 入力されたnが 2 なら
  17 200
  18 
  19 入力されたnが 10 なら
  20 1000
  21 
  22 入力されたnが 30 なら
  23 300
  24 
  25 入力されたnが 400 なら
  26 2000
  27 */

比較演算子

  • < : 小なり

  • <= : 小なりイコール

  • > : 大なり

  • >= : 大なりイコール

  • == : イコール
  • != : notイコール

関数

一般に関数は引数を受け取って戻り値を返す
いろいろな関数

反復

for(/*一度だけ実行*/; /*ここに書いた条件が成り立つ間波括弧内を繰り返す*/; /*波括弧の後に実行*/){}

   1 #include<stdio.h>
   2 
   3 int main(void){
   4   int n;
   5   for(n = 3; n > 0; n = n-1){
   6     printf("%d\n", n);
   7   }
   8   return 0;
   9 }
  10 /* 結果
  11 3
  12 2
  13 1
  14 */

問3 べき乗

整数ふたつを引数にとって第1引数の第2引数乗を返す関数を定義してください

GNU Make

   1 C = gcc
   2 CFLAGS = -std=c99 -Wall
   3 SOURCE = $(filter-out $(patsubst %.h,%.c,$(wildcard *.h)),$(wildcard *.c))
   4 all: $(basename $(SOURCE))
   5 
   6 %: %.c
   7         $(C) -o $@ $^ $(CFLAGS)

問3.5 FizzBuzz

1から100までの整数について 15の倍数ならFizzBuzz 3の倍数ならFizz 5の倍数ならBuzz いずれでもないならその数字を 出力するプログラム

問4 昇順ソート

   1 #include<stdio.h>
   2 void sort(int array[], int size){
   3 }
   4 int main(void){
   5   int array[10];
   6   for(int i = 0; i < 10; i = i + 1){
   7     scanf("%d", &array[i]);
   8   }
   9   sort(array, 10);
  10   for(int i = 0; i < 10; i = i + 1){
  11     printf("%d\n", array[i]);
  12   }
  13   return 0;
  14 }

解答例

solanumaple/programming講習2015/answer

ためになる外部ページ

solanumaple/programming講習2015 (last edited 2015-07-08 17:25:40 by solanumaple)