プログラミング演習T(第1回)

第1回資料

一次元配列の練習問題

ソリューション名(array),ソースファイル名(array.c)
#include <stdio.h>/*printf()利用のため*/
#include <stdlib.h>/*rand()利用のため*/

int 
sum(int a[],int n)
{

練習問題1)a[0]〜a[n-1]の合計を計算して返す関数を作成 ヒント

} int main(void){ int i; int n = 10; int a[10]; /*n個の擬似一様乱数(0〜9)を生成*/ for(i=0;i<n;i++) a[i] = rand()%10; /*要素を確認*/ for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); /*合計を表示*/ printf("合計 = %d\n",sum(a,n)); return 0; }

マクロ定義の練習問題

ソリューション名(macro),ソースファイル名(macro.c)
#include <stdio.h>/*printf()利用のため*/
#include <stdlib.h>/*rand()利用のため*/
#define N 10
#define int_swap(a,b) {int t; t=a; a=b; b=t;}

void
print_array(int a[],int n){
	int i;
	for(i=0;i<n;i++)
		printf("%d ",a[i]);
	printf("\n");
}
int
main(void){
	int i;
	int n = N;
	int a[N];
	/*n個の擬似一様乱数(0〜9)を生成*/
	for(i=0;i<n;i++)
		a[i] = rand()%10;
	/*要素を確認*/
	print_array(a,n);
	/*配列の順番を反転*/

練習問題2)a[0]〜a[n-1]の順番を反転する ヒント

/*要素を確認*/ print_array(a,n); return 0; }

バブルソート

ソリューション名(b_sort), ソースファイル名(b_sort.c)
#include <stdio.h> /*printf()利用のため*/
#include <stdlib.h> /*rand()利用のため*/
#include <time.h> /*clock()利用のため*/
#define N 1000 /*整列対象要素数*/

void
bubble_sort(int a[],int n){

課題1_1)バブルソートの関数を作成せよ。 ヒント

} int main(void){ int i; int n=N; int a[N]; clock_t start,end; for(i=0;i<n;i++) a[i] = rand(); /*0〜RAND_MAXまでの一様乱数*/ start = clock(); /*開始時刻の取得*/ bubble_sort(a,n); /*バブルソート関数の呼び出し*/ end = clock(); /*終了時刻の取得*/ printf("%d 個の要素のバブルソートの実行に %f [秒]かかりました\n",n,(double)(end-start)/CLOCKS_PER_SEC); /*実行時間の計測*/ return 0; }
課題1_2) 次の関数is_sorted()を用いるなどして整列されているか確かめよ
/*整列されているかどうか確認する関数*/
void
is_sorted(int a[], int n){
	int i;
	for(i=0;i<n-1;i++)
		if(a[i] > a[i+1]){
			printf("整列されていません\n");
			return;
		}
	printf("整列されています\n");
}
課題1_3) 要素数(N)を100,1000,10000,100000とした場合に実行時間を比較せよ
課題1_4) 関数bubble_sort()中で配列の要素の比較、交換の回数をそれぞれ出力できるように改造せよ
出力例
比較を 49995000 回、交換を 24952888 回行いました
10000 個の要素のバブルソートの実行に 0.891000 [秒]かかりました
Top