ログイン
編集不可のページディスカッション情報添付ファイル
"solanumaple/programming講習2015"の差分

MMA
1と35のリビジョン間の差分 (その間の編集: 34回)
2015-04-24 17:04:14時点のリビジョン1
サイズ: 161
編集者: solanumaple
コメント:
2015-06-24 15:31:35時点のリビジョン35
サイズ: 4800
編集者: solanumaple
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 5: 行 5:
#acl solanumaple,su_zu:admin,write,read,revert,delete All:
...

<<TableOfContents()>>

= Hello, World! =
{{{#!highlight c
/*スラッシュアスタリスクで囲んでコメントが書ける*/
//スラッシュ二本の後, 行末までコメントになる
#include<stdio.h>

int main(void){
  printf("Hello, World!\n");
  return 0;
}
}}}

{{{#!highlight c
#include<stdio.h>
// printf() を使うために必要なファイルをinclude

int main(void){
    // プログラムを呼ぶと最初に呼ばれる関数

    printf("hello, world");
    // 文字列を出力する(改行なし)

    printf("\n"); // 改行する
  
    return 0; // 必ず書く
}
}}}

== コンパイル ==
{{{
$ gcc -o hello hello.c -std=c99
$ ./hello
}}}

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

= 変数 =
{{{#!highlight c
#include<stdio.h>

int main(void){
  int n = 3;
  n = n + 1;
  printf("%d\n", 4); // 4 と表示,改行される
  return 0;
}
}}}

= 型 =
 * void : 無
 * int : (-2^31^) ~ (2^31^-1) の範囲の整数
 * long long int : (-2^63^) ~ (2^63^-1)の範囲の整数
 * double : 少数

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


== 便利な代入式 ==
{{{#!highlight c
  n++; // n = n + 1;
  ++n; // n = n + 1;
  n--; // n = n - 1;
  --n; // n = n - 1;
  n += 3; // n = n + 3;
  n -= 3; // n = n - 3;
  n *= 3; // n = n * 3;
  n /= 3; // n = n / 3;
  n %= 3; // n = n % 3;}}}


= 数値入力 =
scanf("%d", &変数名);
{{{#!highlight c
#include<stdio.h>

int main(void){
  int n;
  scanf("%d", &n);
  return 0;
}
}}}

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

{{{#!highlight c
#include<stdio.h>
int main(void){
  int n;
  scanf("%d", &n);
  if( n < 10 ){ // (1)なら
    n = n * 100; // [1]する
  }else if( n < 100 ){ // (1)でないかつ(2)であるとき
    n = n * 10; // [2]をする
  }else{ // そうでなければ
    n = n * 5; // [3]する
  }
  printf("%d\n", n);
  return 0;
}
/* 結果
入力されたnが 2 なら
200

入力されたnが 10 なら
1000

入力されたnが 30 なら
300

入力されたnが 400 なら
2000
*/
}}}

= 比較演算子 =
 * < : 小なり
 * <= : 小なりイコール
 * > : 大なり
 * >= : 大なりイコール
 * == : イコール
 * != : notイコール

= 関数 =
一般に関数は引数を受け取って戻り値を返す<<BR>>
[[solanumaple/programming講習2015/examplefunction|いろいろな関数]]<<BR>>

= 反復 =
for(/*一度だけ実行*/; /*ここに書いた条件が成り立つ間波括弧内を繰り返す*/; /*波括弧の後に実行*/){}
{{{#!highlight c
#include<stdio.h>

int main(void){
  int n;
  for(n = 3; n > 0; n = n-1){
    printf("%d\n", n);
  }
  return 0;
}
/* 結果
3
2
1
*/
}}}

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

= GNU Make =
{{{#!highlight make
C = gcc
CFLAGS = -std=c99 -Wall
SOURCE = $(filter-out $(patsubst %.h,%.c,$(wildcard *.h)),$(wildcard *.c))
all: $(basename $(SOURCE))

%: %.c
 $(C) -o $@ $^ $(CFLAGS)\\
}}}

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

= 問4 昇順ソート =
{{{#!highlight c
#include<stdio.h>
void sort(int array[], int size){
}
int main(void){
  int array[10];
  for(int i = 0; i < 10; i = i + 1){
    scanf("%d", &array[i]);
  }
  sort(array, 10);
  for(int i = 0; i < 10; i = i + 1){
    printf("%d\n", array[i]);
  }
  return 0;
}
}}}

= 解答例 =
[[solanumaple/programming講習2015/answer]]

= ためになる外部ページ =
 * [[http://judge.u-aizu.ac.jp/onlinejudge/index.jsp?lang=ja|AIZU ONLINE JUDGE: Programming Challenge]]
 * [[http://9cguide.appspot.com/|苦しんで覚えるC言語]]
 * [[http://www.curiocube.com/mikata/beyondthecode/index.php|コーディングの向こう側 - つくる人の味方]]
 * [[http://www.wakayama-u.ac.jp/~chen/cmake/cmake.html|Learning CMake]]

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 

数値入力

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 (最終更新日時 2015-07-08 17:25:40 更新者 solanumaple)