• 検索結果がありません。

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]"

Copied!
7
0
0

読み込み中.... (全文を見る)

全文

(1)

1

C言語Ⅰの復習

・条件判定

(if, 条件式)

・ループ(for[二重まで], while, do)

・配列(1次元、2次元)

・トレース

©Jun Usuki 2006 2

if文(aとbの大きい方を表示)

int a, b;

printf(“整数a:”); scanf(“%d”, &a); printf(“整数b:”); scanf(“%d”, &b);

//①2つのif文で表現する場合 間違えやすい→ どっちに = をつける?

if( a>=b ) printf(“大きい方は%d¥n”, a); if( b > a ) printf(“大きい方は%d¥n”, b); //②1つのif文で表現する場合

if( a>=b ) printf(“大きい方は%d¥n”, a); else printf(“大きい方は%d¥n”, b);

©Jun Usuki 2006

3

if文 と else if文 による条件分岐

n が 0以上 100以下 の値をとる整数とするとき、nを入力すると 90以上の場合 ・・・・・・・S と表示する 80以上90未満の場合・・・ A と表示する 70以上80未満の場合・・・ B と表示する 60以上70未満の場合・・・ C と表示する その他の場合 ・・・・・・・X と表示する と表示するプログラムを次の2通りで作成せよ。

(a)if文だけでプログラミング (else文を使わない)

(b)else if文を使ってプログラミング

条件式では○○以上という表現のみ使う(未満は使わない) ©Jun Usuki 2006

4

解答例:if文 と else if文 による条件分岐

#include <stdio.h>

int main(void){ int n;

printf(“0以上100以下の整数値を入力してください:”); scanf(“%d”, &n);

//ここに異なる解答(a)や(b)が入る。

return 0; }

(a)if文だけでプログラミング (else文を使わない) if( n>= 90 ) printf(“S¥n”); if( n>= 80 && n <90 ) printf(“A¥n”); if( n>= 70 && n <80 ) printf(“B¥n”); if( n>= 60 && n <70 ) printf(“C¥n”); if( n <60 ) printf(“X¥n”);

©Jun Usuki 2006

5

解答例:

if文 と else if文 による条件分岐

#include <stdio.h>

int main(void){ int n;

printf(“0以上100以下の整数値を入力してください:”); scanf(“%d”, &n);

//ここに異なる解答(a)や(b)が入る。 return 0; } (b)else if文を使ってプログラミング 条件式では○○以上という表現のみ使う(未満は使わない) if( n>= 90 ) printf(“S¥n”);

else if( n>= 80 ) printf(“A¥n”); else if( n>= 70 ) printf(“B¥n”); else if( n>= 60 ) printf(“C¥n”);

else printf(“X¥n”); ©Jun Usuki 2006 6

switch文による条件分岐

整数nをキーボードから入力し、 nが1のとき 「おはよう」 と表示して終了 nが2のとき 「こんにちは」 と表示して終了 nが3のとき 「こんばんは」 と表示して終了 それ以外のとき 「おやすみなさい」 と表示して終了 するプログラムを作成せよ。 ©Jun Usuki 2006

(2)

7

解答例:

switch文による条件分岐

#include <stdio.h>

int main(void){ int n;

printf(“整数値を入力してください:”); scanf(“%d”, &n);

return 0; }

switch( n ){

case 1: printf(“おはよう¥n”); break; case 2: printf(“こんにちは¥n”); break; case 3: printf(“こんばんは¥n”); break; default: printf(“おやすみなさい¥n”); } ©Jun Usuki 2006 8

for文による繰り返し

(a)

10から20までの整数値をすべて表示

(b-1)

10から20までの偶数の中で、

3の倍数以外の値をすべて表示

(ただし、 条件式を2つ 使うこと) (b-2)

10から20までの偶数の中で、

3の倍数以外の値をすべて表示

(ただし、 条件式は1つだけ 使うこと:for文を工夫する) ©Jun Usuki 2006 9

解答例:for文による繰り返し

(a)10から20までの整数値をすべて表示 #include <stdio.h> int main(void){ int n; for(n=10;n<=20;n++){ printf(“%3d¥n”, n); } return 0; } ©Jun Usuki 2006 10

解答例:for文による繰り返し

(b-1)10から20までの偶数の中で、 3の倍数以外の値をすべて表示 (ただし、 条件式を2つ 使うこと) #include <stdio.h> int main(void){ int n; for( n=10; n<=20; n++ ){

if((n%2)==0 && (n%3)!=0) printf(“%3d¥n”, n); } return 0; } ©Jun Usuki 2006 11

解答例:for文による繰り返し

(b-2)10から20までの偶数の中で、 3の倍数以外の値をすべて表示 (ただし、 条件式は1つだけ 使うこと:for文を工夫!) #include <stdio.h> int main(void){ int n; for( n=10; n<=20;n+=2){ if(n%3!=0) printf(“%3d¥n”, n); } return 0; } ©Jun Usuki 2006 12

for文の特殊な使い方(1)

#include <stdio.h> int main(void){ int x=0, s=0; printf("Test 1¥n"); for( ; s!=12; x+=2){ s+=x; printf(" s=%d¥n", s); } return 0; } #include <stdio.h> int main(void){ int y=0, s=0; printf("Test 2¥n"); for( ; s<12 ; y+=2){ s+=y; printf(" s=%d¥n", s); } return 0; } ©Jun Usuki 2006

(3)

13

for文の特殊な使い方(2)

#include <stdio.h> int main(void){ int z=1; printf("1を入力しEnterキーを押す。 これを繰り返してください。¥n"); printf("他の整数値を入力しても良いですが、 記号や文字は入力しないでください。¥n"); for( ; z==1 ; ){ scanf("%d",&z); printf("入力した数値は[%d]です。¥n",z); } return 0; } ©Jun Usuki 2006 14

for文の特殊な使い方(3:文字列の知識が必要)

#include <stdio.h>

#include <conio.h>//getch()用

int main(void){ char ch='y'; printf("yだけ押し続けてください¥n"); for( ; ch==' y' ; ){ ch=getch(); //scanf("%c",&ch); getchar(); printf("入力文字は[%c]です。¥n",ch); } return 0; } ©Jun Usuki 2006 C言語1 の範囲外 15

while文による繰り返し

(a)

0以下の値がキーボード入力される間は

「負」と表示するプログラム。

(b)

0以下、または 5以上が入力される間は

「×」を表示するプログラム。

(c)

(b)を用い、switch文の例題において、

n=1,2,3,4以外 の数値 が入力されている間は

繰り返しキーボード入力を要求するプログラム。

©Jun Usuki 2006 16

解答例:

while文による繰り返し

#include <stdio.h> int main(void){ int n; scanf(“%d”, &n); while( n<=0 ){ printf(“負¥n”); scanf(“%d”, &n); } return 0; } (a)0以下の値がキーボード入力される間は 「負」と表示するプログラム。 ©Jun Usuki 2006 17

解答例:

while文による繰り返し

#include <stdio.h> int main(void){ int n; scanf(“%d”, &n); while( n<=0 || n>=5 ){ printf(“×¥n”); scanf(“%d”, &n); } return 0; } (b)0以下、または 5以上が入力される間は 「×」を表示するプログラム。 ©Jun Usuki 2006 18

解答例:

while文による繰り返し

#include <stdio.h> int main(void){ switch( n ){

case 1: printf(“おはよう¥n”); break; case 2: printf(“こんにちは¥n”); break; case 3: printf(“こんばんは¥n”); break; default: printf(“おやすみなさい¥n”); } return 0; } (c)nに1~4以外 の整数値 が入力 されている間は繰り返しキー ボード入力を要求するプログラム。 int n= -1; while(n<=0 || n>=5){ // ← !(n>0 && n<=4)でもよい printf(“整数値を入力してください:”); scanf(“%d”, &n); } ©Jun Usuki 2006

(4)

19

do文とwhile文の違い

while文のプログラム(a)do文に書き換えて実行(負の値と正の値を入力してみる)すると? #include <stdio.h> int main(void){ int n; scanf(“%d”, &n); do { printf(“負¥n”); scanf(“%d”, &n); } while( n<=0 ); return 0; } #include <stdio.h> int main(void){ int n; scanf(“%d”, &n); while( n<=0 ){ printf(“負¥n”); scanf(“%d”, &n); } return 0; } ©Jun Usuki 2006 20

do文とwhile文による繰り返し

(検討)以下の2つのプログラム1から読み込んだ整数値までを加算し、 その結果を表示)について次の値を入力実行し、 do文とwhile文の違いを考えよ。 入力値:1, 0, -1 #include <stdio.h> int main(void){

int i=1, sum=0, x;

printf("整数値を入力してください:"); scanf("%d",&x); while( i <= x ){ sum+=i; i++; } printf("0から%dまでの合計は%dです。¥n", x, sum ); return 0; } do{ sum+=i; i++; }while( i<=x ); ©Jun Usuki 2006 21

x に -1 を代入した場合をトレース

#include <stdio.h> int main(void){

int i=1, sum=0, x;

printf("整数値を入力してください:"); scanf("%d",&x); while( i <= x ){ sum+=i; i++; } printf("0から%dまでの合計は%dです。¥n", x, sum ); return 0; } do{ sum+=i; i++; }while( i<=x ); while文の場合 start loop1 i 1 なし sum 0 なし x -1 なし do文の場合

start loop1 loop2

i 1 2 なし

sum 0 1 なし

x -1 -1 なし

©Jun Usuki 2006

22

for, do, while文の確認練習

(c-2)

while文を使って、

2のn乗を求めるプログラム。

©Jun Usuki 2006

23

for, do, while文の確認練習

(c-2)

while文を使って、2のn乗を求めるプログラム。

#include <stdio.h> int main(void){ int i=0, n, x=1; printf("2の何乗を求めますか?:"); scanf("%d",&n); while(i<n){ x*=2; i++; } printf("2のn乗は%dです¥n", x); return 0; } ©Jun Usuki 2006 24

for文による2重ループの練習

(問)

九九を以下のようにすべて表示する。

例:

1

2

3

4

5

6

7

8

9

2

4

6

8

10

12

14

16

18

3

6

9

12

15

18

21

24

27

9

18

27

36

45

54

63

72

81

©Jun Usuki 2006

(5)

25

for文による2重ループの練習

(問)

九九をすべて表示する。

#include <stdio.h> int main(void){ int y, x, ans; for(y=1; y<10; y++){

for(x=1; x<10; x++){ ans =y*x; printf("%3d", ans ); } printf("¥n"); } return 0; } ©Jun Usuki 2006 26

1次元配列の確認練習

以下の気温をtemp[7]変数に入力し・・・ (a)28度以上の気温をすべて表示する(while文)。 (b)7日間の平均気温を求める(for文) 。 (c)気温の最小値を求める。 ※ 変数の型は適当と思われるものを考えること。

1

32℃

2

30℃

3

28℃

4

21℃

5

23℃

6

26℃

7

25℃

右上の数値:日付 ©Jun Usuki 2006 27

1次元配列の確認練習

以下の気温を

temp[7]変数に入力し・・・

(a)

28度以上の気温をすべて表示する(while文)

#include <stdio.h> int main(void){ int i, temp[7]; for( i=0; i<7; i++){

printf("%d日の気温:",i+1);scanf("%d",&temp[i]); }

i=0; printf("28℃以上の気温:"); while(i<7){

if(temp[i]>=28) printf(" %d",temp[i]);

i++; } printf("¥n"); return 0; } ©Jun Usuki 2006 28

1次元配列の確認練習

以下の気温を

temp[7]変数に入力し・・・

(b)

7日間の平均気温を求める(for文)

#include <stdio.h> int main(void){

int i, temp[7], sum=0; for( i=0; i<7; i++ ){

printf("%d日の気温:", i+1); scanf("%d", &temp[i]); }

for( i=0; i<7; i++ ){

sum+=temp[i]; // ここは sum=sum+temp[i]; でも良い }

printf("平均気温は%f℃です。¥n",(double)sum/7 ); return 0; } ©Jun Usuki 2006 29

1次元配列の確認練習

以下の気温を

temp[7]変数に入力し・・・

(c)

気温の最小値を求める

#include <stdio.h> int main(void){

int i, temp[7], min=99; //99でなくとも良い for( i=0; i<7; i++ ){

printf("%d日の気温:", i+1); scanf("%d", &temp[i]); }

for(i=0; i<7; i++){

if(min > temp[i]) min=temp[i];

} printf("最も低い気温は%d℃です。¥n",min); return 0; } ©Jun Usuki 2006 30

2次元配列の確認練習

以下のカレンダーについて、 最初の7日の気温を 変数temp[2][7]の宣言時に初期設定し、 のこりの7日の気温を 手入力する。 その後、曜日毎の平均気温を変数week[7]に格納・表示せよ。 ※ 変数の型は適当と思われるものを考えること。

1

32℃

2

30℃

3

28℃

4

21℃

5

23℃

6

26℃

7

25℃

8

27℃

9

26℃

10

26℃

11

25℃

12

30℃

13

29℃

14

31℃

右上の数値:日付 ©Jun Usuki 2006

(6)

31

2次元配列の確認練習

最初の7日の気温を変数temp[2][7]に初期設定し、のこり7日を 手入力する。曜日毎の平均気温を変数week[7]に格納・表示。 #include <stdio.h> int main(void){ int i, temp[2][7]={32,30,28,21,23,26,25}; double week[7];

for( i=0; i<7; i++ ){

printf("%d日の気温:", i+8); scanf("%d", &temp[1][i]); }

printf("平均気温は:"); for(i=0; i<7; i++){

week[i] =(double)( temp[0][i] + temp[1][i] ) / 2; printf(" %4.1f℃", week[i] ); } printf("¥n"); return 0; } ©Jun Usuki 2006 32

関数の練習

1

(引数なし、戻り値なし)

(問)

func1()関数

を作成し、次の

main関数内を

func1()関数の呼び出しとreturn 0; のみにせよ。

#include <stdio.h>

int main( void ){

int i;

for( i=1; i<10; i++ ){

printf("%3d", i );

}

printf("¥n");

return 0;

}

int main( void ){

func1( );

return 0;

}

©Jun Usuki 2006 33

関数の練習

1

(引数なし、戻り値なし)

(問)

func1()関数

を作成し、次の

main関数内を

func1()関数の呼び出しとreturn 0; のみにせよ。

#include <stdio.h>

void func1( void );

int main(void){

func1( );

return 0;

}

void func1( void ){

int i;

for( i=1; i<10; i++ ){

printf("%3d", i );

}

printf("¥n");

}

©Jun Usuki 2006 34

関数の練習

2

(引数あり、戻り値なし)

(問)

次の

赤文字部分

func2()関数として作成せよ。

#include <stdio.h>

int main( void ){

int i

, j;

printf(“1-9の整数を入力してください:”);

scanf(“%d”, &j);

for( i=1; i<10; i++ ){

printf("%3d", j*i );

}

printf("¥n");

return 0;

}

©Jun Usuki 2006 C言語1 の範囲外 35

関数の練習

2

(引数あり、戻り値なし)

(問)

次の

赤文字部分

func2()関数として作成せよ。

#include <stdio.h>

void func2( int k );

int main( void ){

int j;

printf(“1-9の・・・:”);

scanf(“%d”, &j);

func2( j );

return 0;

}

void func2( int k ) {

int i;

for( i=1; i<10; i++ ){

printf("%3d", k*i );

}

printf("¥n");

}

©Jun Usuki 2006 C言語1 の範囲外 36

関数の練習

3

(引数あり、戻り値あり)

(問)

次の

赤文字部分

func3()関数として作成せよ。

#include <stdio.h>

int main(void){

int i

, j,

sum=0

;

printf(“1-9の整数を入力してください:”);

scanf(“%d”, &j);

for( i=1; i<10; i++ ){

printf("%3d", j*i ); sum+=j*i;

}

printf("¥n");

printf(“sum=%d¥n”,sum);

return 0;

}

©Jun Usuki 2006 C言語1 の範囲外

(7)

37

関数の練習

3

(引数あり、戻り値あり)

(問)

次の

赤文字部分

func3()関数として作成せよ。

#include <stdio.h>

int func3( int k );

int main( void ){

int j,

sum2

;

printf(“1-9の・・・:”);

scanf(“%d”, &j);

sum2 = func3( j );

printf(“

sum2

=%d¥n”,

sum2

);

return 0;

}

int func3( int k ){

int i, sum = 0;

for( i=1; i<10; i++ ){

printf("%3d", k*i );

sum += k*i ; }

printf("¥n");

return sum;

}

©Jun Usuki 2006 C言語1 の範囲外 38

関数の練習

4

(1次元配列の受け渡し、引数戻り値不要)

(問)

次の

赤文字部分

func4()関数として作成せよ。

#include <stdio.h>

int main(void){

double a[5]={ 1.0, 2.0, 3.0, 4.0, 5.0 };

int i;

for( i=0; i<5; i++ ){ a[i] = a[i]*2; }

for( i=0; i<5; i++){

printf(“a[%d]=%4.1f¥n”, i, a[i]);

}

return 0;

}

©Jun Usuki 2006 C言語1 の範囲外 39

関数の練習

4

(1次元配列の受け渡し、引数戻り値不要)

(問)

次の

赤文字部分

func4()関数として作成せよ。

#include <stdio.h>

void func4( double x[5] );

int main( void ){

double a[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };

int i;

func4( a );

for( i=0; i<5; i++ ){ printf(“a[%d]=%4.1f¥n”, i, a[i]); }

return 0;

}

void func4( double x[5] ){

int i;

for( i=1; i<5; i++ ){ x[i] = x[i] * 2; }

}

©Jun Usuki 2006 C言語1 の範囲外 40

関数の練習

5

(2次元配列の受け渡し、引数戻り値不要)

(問)

次の

赤文字部分

func5()関数として作成せよ。

#include <stdio.h>

int main( void ){

int

a[2][3] = { {1, 2, 3}, {4, 5, 6} },

y,

x

;

for( y=0; y<2; y++ ){

for( x=0; x<3; x++ ){ a[y][x] = a[y][x] * 2; } }

for( y=0; y<2; y++ ){

for( x=0; x<3; x++ ){ printf(“%3d”, a[y][x]); }

printf(“¥n”);

}

return 0;

}

©Jun Usuki 2006 C言語1 の範囲外 41

関数の練習

5

(2次元配列の受け渡し、引数戻り値不要)

(問)

次の

赤文字部分

func5()関数として作成せよ。

#include <stdio.h> void func5( int b[2][3] ); int main( void ){

int a[2][3]={ {1, 2, 3}, {4, 5, 6} }, y, x; func5( a );

for( y=0; y<2; y++ ){

for( x=0; x<3; x++ ){ printf(“%3d”, a[y][x]); } printf(“¥n”); }

return 0;

} void func5( int b[2][3] ){

int y, x;

for( y=0; y<2; y++ ){

for( x=0; x<3; x++ ){ b[y][x] = b[y][x] * 2; } }

}

©Jun Usuki 2006

C言語1

参照

関連したドキュメント

LLVM から Haskell への変換は、各 LLVM 命令をそれと 同等な処理を行う Haskell のプログラムに変換することに より、実現される。

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

図 キハダマグロのサプライ・チェーン:東インドネシアの漁村からアメリカ市場へ (資料)筆者調査にもとづき作成 The Yellowfin Tuna Supply Chain: From Fishing Villages in

・大都市に近接する立地特性から、高い県外就業者の割合。(県内2 県内2 県内2/ 県内2 / / /3、県外 3、県外 3、県外 3、県外1/3 1/3

口腔の持つ,種々の働き ( 機能)が障害された場 合,これらの働きがより健全に機能するよう手当

※立入検査等はなし 自治事務 販売業

ダウンロードしたファイルを 解凍して自動作成ツール (StartPro2018.exe) を起動します。.

NISSEI RED EXHIBITION in Nagano2022”