プログラミング演習2003

第12回 [7月10日、H.15(‘03)]
配列の扱い、探索
有効範囲と記憶域期間
今日のメニュー
1
2
3
6
前回の課題の復習
前回の宿題の復習
今回の課題
演習
PE03-12.ppt
前回の課題
(1)List6-1を参考に演習6ー1(118頁)
(2)List6-2を参考に演習6ー2(118頁)
(3)List6-3を参考に演習6ー3(119頁)
List6-6を参考に演習6ー4(121頁)
(4)List6-7,8を参考に演習6ー5(123
頁)
(5)演習6ー6(125頁)
ファイル名は enB-****.c
提出はいつもと同様、リスト印刷とファイル転送
#include <stdio.h>
int minof( int x, int y) {
演習6-1の関数の中身を記述
}
int min3( int x, int y, int z) {
演習6-2の関数の中身を記述
}
int cube( int x) {
演習6-3の関数の中身を記述
}
int pow4( int x) {
演習6-4の関数の中身を記述
}
void alert( int no) {
演習6-5の関数の中身を記述
}
void hello( void ) {
演習6-6の関数の中身を記述
}
int main(void) {
int na, nb, nc;
/*演習6-1,6-2の場合*/
/*整数を入力する*/
printf("小さい方の値は %d です。\n",
minof( na, nb) );
printf("3数中の最小値は %d です。\n",
min3( na, nb, nc) );
・・・・・・
#include <stdio.h> /*演習6-1、2、3*/
int minof(int x, int y) {
return ( (x-y)>0 ? y : x );
}
int min3(int x, int y, int z) {
int min = x;
if ( y < min ) min = y;
if ( z < min ) min = z;
return ( min );
}
int cube(int x) {
return ( X*x*x);
}
int main(void) { ・・・・ }
前回の課題(演習6-4)
#include <stdio.h>
int sqr(int x) {
関数を利用する
return ( x * x ); } 前に定義しておく
int pow4(int x) {
return ( sqr(
sqr(x)sqr(x)
* sqr(x)
) ); }
int main(void) {
int a;
printf("整数を入力せよ=>");
scanf("%d", &a);
printf("四乗は %d です。\n",
pow4(a));
#include <stdio.h>
/*演習6-5*/
void alert(int no) {
int i;
for ( i=0; i<no; i++)
putchar('\a');
return;
while(no-->0)
}
putchar('\a');
int main(void){
int n;
printf("Enter n =>");
scanf("%d",&n);
alert(n);
return (0);
}
#include <stdio.h> /*演習6-6*/
void hello( void ) {
puts("こんにちは。");
return;
}
int main(void){
int n, i;
printf("Enter n =>");
scanf("%d",&n);
for ( i=1; i<=n; i++)
hello();
return (0);
}
課題の提出について
・プログラムの構成
#include <stdio.h>
/* 関数1を定義する */
int minof(・・・) {
・・・
}
/* 関数2を定義する */
・・・
int main(void) {
int ・・・
puts("番号・氏名");
必要な関数を呼び出す
}
・main関数は最後に記述
する
・演習6-4の pow4 は
教科書List6-3の関数
sqr を用いる
return(x*x*x*x);
return(
sqr(x)*sqr(x) );
return(
sqr( sqr(x) ) );
前回の宿題
(1)List6-12、 List6-13 等参考にし
て、演習6ー7、 演習6-8、 演習6-9
(133頁)を完成せよ。
(2)教科書114~133頁を良く読み直して
復習し、次に、134~145頁を予習せよ。
ファイル名:hwB-****.c
• 締め切り: 7月8日(火) 午後5時(厳守)
int min_of(const int vc[], int no) /*演習6-7*/
{ int i, min = vc[0];
for ( i=1; i<no; i++)
if ( vc[i]<min ) min = vc[i];
return ( min );
}
void rev_intary( int vc[], int no) /*演習6-8*/
{ int i, temp;
for ( i = 0; i< no/2; i++) {
temp = vc[no-i-1];
vc[no-i-1] = vc[i];
vc[i]
= temp;
}
return;
}
void intary_rcpy(int v1[],const int v2[],int no)
{ int i;
/*演習6-9*/
for (i=0;i<no;i++) v1[i]=v2[no-i-1];
return;
}
int main(void)
{ int i, v[10], v1[10], N=10;
puts("整数を10個入力せよ");
for ( i=0; i<N; i++) {
printf("v[%d]=>",i); scanf("%d", &v[i]);
}
printf("配列 v の要素中の最小値は %d です。\n",
min_of(v,N) );
puts("配列 v を逆順にすると");
rev_intary(v,N);
for ( i=0; i<N; i++)
printf("v[%d]=%d\n",i,v[i]);
puts("更に v を逆にして v1 に代入すると");
intary_rcpy(v1, v, N);
for ( i=0; i<N; i++)
printf("v[%d]=%d: v1[%d]=%d\n",
i, v[i], i, v1[i]);
return(0);
}
宿題の提出について
• 配列の入れ替えなどを関数で実行せずに、
mainの中で実行している。
• mainの中で、関数の呼び出しが無い。
• 転送ファイルが無い、番号・氏名が無い、
リストのプリントアウト提出が無い
今日の課題
ファイル名:enC-****.c
(1)List6-20 を参考に、演習6-12 を完成せよ。
(2)第10回の課題・宿題の続きとして、各科目の最
高点・最低点、合計の最高点・最低点の出力を追
加せよ。(最高点、最低点を求める関数を作る)
学籍番号
1023
1026
:
1132
平均点
最高点
最低点
英語 数学 国語 合計点
平均点
63
71
68
202
67.33
49
28
51
128
42.67
:
:
:
81
89
75
245
81.67
67.3 62.1 72.1
201.5 67.17
96
89
92
265
88.33
44
23
46
113
37.67
提出はいつもと同様、リスト印刷とファイル転送
#include <stdio.h>
/*演習6-12*/
int a[5];
関数外で定義・宣言
int main(void){
関数内でstatic付き
static int b[5];
int i, c[5];
printf("\n a : "); 0に初期化される
for(i=0;i<5;i++) printf("%d",a[i]);
printf("\n b : ");
for(i=0;i<5;i++) printf("%d",b[i]);
printf("\n c : ");
for(i=0;i<5;i++) printf("%d",c[i]);
printf("\n");
自動記憶域期間
return (0);
の変数は不定値
}
今日の宿題[提出不要]
以下のプログラムを実行させ、関連する
説明を復習せよ。(134-145頁)
(1)List6-14(134頁)[逐次探索]
(2)List6-15,16(136頁-)[番兵
法]
(3)List6-17(138頁)[多次元配列]
(4)List6-18(140頁)[有効範囲]
(5)List6-19(143頁)[記憶域期間]
次回は
第12回終了 最終回
です。
次回(第13回)の
プログラミング入門、
プログラミング演習は
7月17日です。