(4月17日):授業の資料 C言語プログラムの入門の復習(2)

C言語プログラム応用 第2回
本日のメニュー 2014.4.17
• 繰返し文 (教科書75ページ)
do文,while文,for文
List4-14
(教科書77ページ)
• 配列
List5-1,5-2, 5-3
(教科書88~90ページ)
• 配列の初期化,配列のコピー,配列を順番に並べ替える
List5-5
(教科書92ページ)
List5-6
(教科書93ページ)
List5-8
(教科書95ページ)
• オブジェクト形式マクロ
#define
List5-11
(教科書98ページ)
• 演習問題2-1 ★提出
• 演習問題2-2 ★提出
3種類の繰返し文
for文
for (初期値; 条件式;増分量 ){
文;
}
while文
while ( 式 ){
文;
}
do文
do {
文;
} while ( 式 );
少なくとも1回は
文を実行する
int no;
int sum= 0;
for( no=1; no < 6; no++) {
sum += no ;
}
int no =1;
int sum= 0;
while( no < 6){
sum += no ;
no++;
}
int no =1;
int sum= 0;
do {
sum += no ;
no ++;
} while ( no < 6) ;
文を実行しない
こともある
List4-11
整数を指示された個数だけ読み込んで合計値・平均値を表示
#include <stdio.h>
int main(void)
{
int i = 0 ;
int sum = 0;
int num, tmp;
printf(“整数は何個ですか:”);
scanf(“%d”, &num);
while (繰返し条件式) {
点数を読み込んで加算
}
iの値を1つ増やした後
表示する
while( i < num){
printf(“No.%d :”, ++i) ;
scanf(“%d”, &tmp);
sum += tmp;
}
printf(“合計値:%d¥n", sum);
printf(“平均値:%.2f¥n”, (double)sum / num);
return(0);
}
実行例
整数は何個ですか : 3
No.1 :15
No.2 :20
No.3 :30
合計値:65
平均値: 21.67
List4-14
指定された個数だけ整数を読み込で合計値・平均値を表示(for文)
#include <stdio.h>
int main(void)
{
int i;
int sum = 0;
int num, tmp;
printf("整数は何個ですか:");
scanf("%d", &num);
for(i =0; i < num; i++) {
for (初期値; 条件式;増分 ){
printf(“No.%d : ", i+1);
文;
scanf("%d", &tmp);
}
sum += tmp;
}
整数は何個ですか:4
printf(“合計値: %d¥n", sum);
No.1 : 5
printf("平均値: %.2f¥n", (double)sum / num);
return(0);
}
No.2 : 45
No.3 : 8
No.4 : 90
合計値: 148
平均値: 37.00
List 5-2
学生数 5人
配列の宣言 vc[5]
各配列は vc[0], vc[1], vc[2], vc[3], vc[4]
配列の各要素を先頭から順に1,2,3,4,5を代入して表示
#include <stdio.h>
int main()
{
int vc[5]; /*要素が5の配列*/
vc[0]=1;
vc[1]=2;
vc[2]=3;
vc[3]=4;
vc[4]=5;
printf(" vc[0] = %d ¥n", vc[0] );
printf(" vc[1] = %d ¥n", vc[1] );
printf(" vc[2] = %d ¥n", vc[2] );
printf(" vc[3] = %d ¥n", vc[3] );
printf(" vc[4] = %d ¥n", vc[4] );
return(0);
}
1
2
3
4
5
vc[0]
vc[1]
vc[2]
vc[3]
vc[4]
出力
vc[0] =
vc[1] =
vc[2] =
vc[3] =
vc[4] =
1
2
3
4
5
List 5-3
配列の各要素を先頭から順に1,2,3,4,5
を代入して表示(for文)
配列と繰返し文 (for文)
の組み合せ
#include <stdio.h>
int main()
{
int i;
int vc[5];
for(i=0;i<5;i++)
vc[i]=i+1;
vc[0]
vc[1]
vc[2]
/*値の代入*/
for(i=0;i<5;i++) /*表示*/
printf(“vc[%d] = %d ¥n", i, vc[i] );
return(0);
}
1
2
3
4
5
vc[3]
vc[4]
出力
vc[0] =
vc[1] =
vc[2] =
vc[3] =
vc[4] =
1
2
3
4
5
List 5-5
配列の各要素の先頭から順に1,2,3,4,5で初期化
#include <stdio.h>
int main()
{
int i;
int vc[5]={1,2,3,4,5}; / *初期化*/
for(i=0;i<5;i++)
printf(“vc[%d] = %d ¥n", i, vc[i] );
return(0);
}
出力
vc[0] =
vc[1] =
vc[2] =
vc[3] =
vc[4] =
1
2
3
4
5
List 5-6
配列の全要素を別の配列にコピー
#include <stdio.h>
int main(){
int i;
int va[5]={15,20,30};
int vb[5];
/* {15,20,30,0,0}で初期化 */
for(i=0;i<5;i++)
vb[i]=va[i]; /*配列と配列のコピー*/
puts(" va vb");
puts("--------");
for(i=0;i<5;i++)
printf(“%3d%3d ¥n", va[i] ,vb[i] );
return(0);
}
List 5-8
配列の全要素を逆順に並べかえる
int main()
d:¥2008¥ホームエレ¥C言語¥c10
{
int i;
int vx[5];
for(i=0;i<5;i++){
printf(“vx[%d] :",i);
scanf("%d",&vx[i]);
}
for(i=0;i<2;i++){
int temp = vx[i];
i=0のとき:vx[0]とvx[4]を交換
vx[i] = vx[4-i];
i=1のとき: vx[1]とvx[3]を交換
vx[4-i] = temp;
}
for(i=0;i<5;i++)
printf(“vx[%d]=%d ¥n",i, vx[i] );
return (0);
}
List 5-11
マクロ命令 #define
#define文で
配列要素数を設定
配列宣言で tensu [n]
変数nで宣言はできない
#include<stdio.h>
#define NUMBER 5 /* 人数 */
オブジェクト形式の
int main(void){
マクロ命令
int i;
int tensu[NUMBER]; /*学生の点数*/
int max,min;
/*最高点・最低点*/
puts("点数を入力してください。");
for(i=0;i<NUMBER ;i++){
printf("%2d番:",i+1);
scanf("%d",&tensu[i]);
}
min=max=tensu[0];
for(i=0;i<NUMBER ;i++){
if (tensu[i] > max) max = tensu[i]; /*最大*/
if (tensu[i] < min) min = tensu[i]; /*最小*/
}
printf ("最高点:%d ¥n",max);
printf ("最低点:%d ¥n",min);
return(0);
}
演習問題2-1
/* 読み込んだ整数値を0までカウントダウン */
while文を使った右のList4-7
のプログラムをfor文を使った
プログラムに変更せよ.
ソースと実行結果を提出.
#include <stdio.h>
int main(void)
{
int count;
printf("整数を入力して下さい:");
scanf("%d", &count);
while (count >= 0) {
printf("%3d ", count);
count--;
}
printf(“!! ¥n”);
return(0);
}
演習問題2-2
配列を用いて10人の学生の点数(100点満点)を読み込み、60点
未満の不合格者リストと出力例にある再試験日等を表示せよ.
ただし,添付する実行結果は2人以上不合格者になる点数を入
力せよ.
出力例
点数を入力して下さい
1番:95
2番:50
3番:80
・
・
9番:100
10番:55
------------------不合格者リスト
2番 6番 10番
再試験日:2014年7月7日(金)9:30~11:00
場所: W707教室
演習問題2-2 ヒント
#include<stdio.h>
#define MEMBER
int main (void) {
10
/* 人数 */
int i ;
int point[MEMBER] ;
/*学生の点数*/
puts("点数を入力してください。");
for ( i=0; i < MEMBER ; i++ ) {
printf ( "%2d番:“, i+1);
scanf ( "%d“, &point[i] );
}
puts (“------------------------”);
puts (“不合格者リスト”);
for ( i=0; i<MEMBER; i++ ) {
/* 不合格者の出力:
}
/* 再試の出力*/
return(0);
}
if 文を使って60点未満なら、その番号を出力する*/