シラバスはここにあります。
テキストは最初の授業で配布しますが,紛失した人は ここからダウンロード してください。このファイルはpdfファイルです。
プログラムの例(素数を求めるプログラム)
1: /* 素数を求めるプログラム prime.c*/
2: #include <stdio.h>
3: #include <stdlib.h>
4: #include <time.h>
5: #define _TRUE 1
6: #define _FALSE 0
7:
8: int main(int argc, char *argv[])
9: {
10: /* 各種変数の宣言 */
11: int i,j,k,n,*prime; /* 整数 */
12: long *list; /* 倍長整数 */
13: time_t start,end; /* 時間変数 */
14:
15: /* パラメータの設定 */
16: if ( argc > 2){
17: printf("Usage: prime Maximum_Integer \n");
18: exit(1);
19: } else if ( argc<2 ){
20: printf("Usage: prime Maximum_Integer \n");
21: printf("Input Maximum_Integer -->");
22: scanf("%d",&n);
23: } else {
24: n=atoi(argv[1]);
25: }
26: /* 時間の計測 始まりの時刻 */
27: time(&start);
28:
29: /* 配列prime[n]とlist[n]の動的確保 */
30: prime=(int *)malloc(n*sizeof(int));
31: list=(long *)malloc(n*sizeof(long));
32: k=1;
33: list[k]=2;
34:
35: for(i=3;i<=n;i+=2) prime[i]=_TRUE;
36: for(i=3;i<=n;i+=2){
37: if(prime[i]){
38: list[++k]=i;
39: for(j=i;j<=n;j+=i) prime[j]=_FALSE;
40: }
41: }
42:
43: for(i=1;i<k;i++){
44: printf("%7d,",list[i]);
45: if(i%10==0) printf("\n");
46: }
47: printf("%7d. \n",list[k]);
48:
49: /* 時間の計測 終わりの時刻 */
50: time(&end);
51:
52: printf("%g[sec]\n",difftime(end,start));
53: return 0;
54: }
1: /* ex0001.c 何もしないプログラム */
2: /* 作成者 xxxxx */
3: /* 作成日 2004/04/14 */
4:
5: int main()
6: {
7: return 0;
8: }
1: /* ex0101.c */
2: /* 作成日 2004/04/21 */
3: /* 作成者 xxxxx */
4: #include <stdio.h>
5:
6: /* 開始 */
7: int main()
8: {
9: printf("Hello, World!\n");
10: return 0;
11: }
12: /* 終了 */
1: /* ex0201.c y=x*x+2*x+1を計算するプログラム */
2: /* 作成日 2004/05/12 */
3: /* 作成者 xxxxx */
4: #include <stdio.h>
5:
6: /* 開始 */
7: int main()
8: {
9: int x,y; /* x,yを整数型変数として宣言。 (宣言文) */
10:
11: printf("xを入力してください->");
12: scanf("%d",&x);/* xに値を整数型のデータとして入力 */
13:
14: y=x*x+2*x+1; /* yに値を代入 (代入文)*/
15:
16: printf("xが%dのとき,y=x*x+2*x+1は %d です\n",x,y);
17: return 0;
18: }
19: /* 終了 */
1: /* ex0206.c 角度を「度」から「ラジアン」に変換するプログラム */
2: /* 作成者 xxxx */
3: /* 作成日 2004/05/26 */
4:
5: #include <stdio.h> /* stdio.hをインクリュードする */
6: int main() /* main関数 */
7: {
8: int radian,degree=0; /* 整数型radian, degreeの宣言 */
9: float PI=3.141592654; /* PI 円周率 */
10:
11: while(degree <= 180){
12: radian = degree*PI/180; /* ラジアンの換算 */
13: printf("%d %d\n",degree,radian); /* 結果の出力 */
14: degree+=10; /* degreeを10増やす */
15: }
16: return 0; /* 終了 */
17: }
1: /* ex0210.c 行列と配列の対応 */
2: /* 作成日 2004/06/02 */
3: /* 作成者 xxxxx */
4: #include <stdio.h>
5:
6: int main()
7: {
8: int a[2][3]={{11,12,13},{21,22,23}};
9: int i,j;
10:
11: i=j=0;
12: while(i<2){
13: while(j<3){
14: printf("aの%1d行%1d列の要素a_{%1d,%1d}=%2d\n",i+1,j+1,i+1,j+1,a[i][j]);
15: j++;
16: }
17: j=0;i++;
18: }
19: return 0;
20: }
1: /* ex0211.c ベクトルの内積 */
2: /* 作成日 2004/06/02 */
3: /* 作成者 XXXXXX */
4: #include <stdio.h>
5: #include <math.h>
6: #define NDIM 2
7:
8: int main()
9: {
10: double alpha,la,lb,ab,a[NDIM],b[NDIM];
11: int i=0;
12:
13: while(i<NDIM){
14: printf("ベクトルaの第%d成分を入力してください-->",i+1);
15: scanf("%lf",&a[i]);
16: printf("ベクトルbの第%d成分を入力してください-->",i+1);
17: scanf("%lf",&b[i]);
18: i++;
19: }
20:
21: la=lb=ab=0.0;
22: i=0;
23: while(i<NDIM){
24: la+=a[i]*a[i];
25: lb+=b[i]*b[i];
26: ab+=a[i]*b[i];
27: i++;
28: }
29: alpha=acos(ab/sqrt(la*lb));
30: printf("aとbの成す角は%10.3f度です\n",alpha/M_PI*180);
31: return 0;
32: }
1: /* ex0301.c1からnまでの和を求めるプログラム*/
2: /* 作成者 xxxxxxxx */
3: /* 作成日 2004/06/16 */
4: #include <stdio.h>
5:
6: int main()
7: {
8: int s,n,i; /* i,s,n を整数型として宣言 */
9:
10: i=0; /* iの初期化 */
11: s=0; /* sの初期化 */
12:
13: printf("Input n -->");
14: scanf("%d",&n); /* nの入力 */
15:
16: while(i<=n){ /* i が n より小さかったら */
17: s+=i; /* sにiを加える */
18: i++; /* iを1増やす */
19: }
20: printf("%5d %5d\n",n,s); /* 結果の出力 */
21: return 0;
22: }
1: /* ex0400.c 星の三角形 for文の例 */
2: /* 作成者 xxxxxxxx */
3: /* 作成日 2004/06/16 */
4: #include <stdio.h>
5: int main(){
6: int i,j;
7:
8: for(i=0;i<10;i++){
9: for(j=0;j<=i;j++) printf("*");
10: printf("\n");
11: }
12:
13: for(i=9;i>=0;i--){
14: for(j=0;j<=i;j++) printf("*");
15: printf("\n");
16: }
17: return 0;
18: }
1: /* ex0401.c 角度を「度」から「ラジアン」に変換するプログラム */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/06/23 */
4: #include <stdio.h>
5:
6: int main()
7: {
8: int degree;
9: float radian;
10: float PI=3.141592654;
11:
12: for(degree=0;degree<=180;degree+=10){
13: radian = degree*PI/180;
14: printf("%4d %8.3f\n",degree,radian);
15: }
16: return 0;
17: }
1: /* ex0404.c 角度を「度」から「ラジアン」に変換するプログラム */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/06/23 */
4: #include <stdio.h>
5:
6: int main()
7: {
8: int degree=0;
9: float radian;
10: float PI=3.141592654;
11:
12: do{
13: radian = degree*PI/180;
14: printf("%4d %8.3f\n",degree,radian);
15: degree+=10;
16: }while(degree<=180);
17: return 0;
18: }
1: /* ex0407.c if文を使ったプログラム */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/06/23 */
4: #include <stdio.h>
5:
6: int main()
7: {
8: int a,b;
9:
10: printf("aとbを入力してください-->");
11: scanf("%d %d",&a,&b);
12:
13: if(a>b){
14: printf("a(%d)はb(%d)より大きい\n",a,b);
15: } else {
16: printf("a(%d)はb(%d)より大きくない\n",a,b);
17: }
18: return 0;
19: }
1: /* ex0409.c 複数の分岐を持つプログラム */
2: /* 作成者 xxxxxxx */
3: /* 作成日 2004/06/23 */
4: #include <stdio.h>
5:
6: int main()
7: {
8: double a;
9:
10: printf("実数 a を入力してください-->");
11: scanf("%lf",&a);
12: if(a>=1000.0){
13: printf("aは1000以上(a=%10.3f)\n",a);
14: }else if(a>=500.0){
15: printf("aは500以上1000未満(a=%10.3f)\n",a);
16: }else if(a>=100.0){
17: printf("a は 100以上500未満(a=%10.3f)\n",a);
18: }else if(a>=50){
19: printf("a は 50以上100未満(a=%10.3f)\n",a);
20: }else if(a>=10){
21: printf("a は 10以上50未満(a=%10.3f)\n",a);
22: }else if(a>=0){
23: printf("a は 0以上10未満(a=%10.3f)\n",a);
24: }else{
25: printf("a は 負(a=%10.3f)\n",a);
26: }
27: return 0;
28: }
1: /* ex0410.c もう1つのif文 */
2: /* 作成者 xxxxx */
3: /* 作成日 2004/06/23 */
4: #include <stdio.h>
5:
6: int main()
7: {
8: int a,b,n,m;
9:
10: n=m=0;
11: printf("整数aを0から10の範囲で入力してください-->");
12: scanf("%d",&a);
13: while(a<0||a>10){ /* 「a<0またはa>10」のとき */
14: ++n;
15: if(n>3) {
16: printf("しつこい奴だ!\n aは 7とするぞ!\n");
17: a=7;
18: }else{
19: printf("もう一度,整数aを0から10の範囲で入力してください-->");
20: scanf("%d",&a);
21: }
22: }
23:
24: printf("整数bを0から10の範囲で入力してください-->");
25: scanf("%d",&b);
26: while(b<0||b>10){ /* 「b<0またはb>10」のとき */
27: ++m;
28: if(m>3){
29: printf("しつこい奴だ!\n bは6とするぞ!\n");
30: b=6;
31: }else{
32: printf("もう一度,整数bを0から10の範囲で入力してください-->");
33: scanf("%d",&b);
34: }
35: }
36: printf("aは%2d, bは%2dです。\n",a,b);
37:
38: if(a-b) printf("38行目: (真) aとbは等しくない。 a-b=%2d\n",a-b);
39: else printf("39行目: (偽) aとbは等しい。 a-b=%2d\n",a-b);
40:
41: if(!(a-b)) printf("41行目:!(真) aとbは等しい (a-b)=%2d\n",a-b);
42: else printf("42行目:!(偽) aとbは等しくない。 a-b=%2d\n",a-b);
43:
44: return 0;
45: }
| tmp.dat | ||||
| 1 | 浅井清和 | 56 | 45 | 2.3 |
| 2 | 井上ひかる | 45 | 66 | 2.5 |
| 3 | 宇野泰三 | 91 | 21 | 4.1 |
| 4 | 遠藤芳美 | 54 | 25 | 5.4 |
| 5 | 岡村文雄 | 87 | 41 | 7.3 |
1: /* ex0501.c データを読み込ませるプログラム */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/07/07 */
4: #include <stdio.h>
5: #include <stdlib.h>
6: #define N 5
7:
8: int main()
9: {
10: FILE *fp;
11: char name[N][20];
12: int i;
13: int num[N],kokugo[N],sansuu[N];
14: double hyouka[N];
15:
16: fp=fopen("tmp.dat","r");
17: if(fp==NULL){
18: printf("ファイルがありませんでした");
19: exit(1);
20: }
21: for(i=0;i<N;i++)
22: fscanf(fp,"%d %s %d %d %lf",
23: &num[i],name[i],&kokugo[i],&sansuu[i],&hyouka[i]);
24: fclose(fp);
25:
26: for(i=0;i<N;i++)
27: printf("%2d %s %4d %4d %5.2f\n",
28: num[i],name[i],kokugo[i],sansuu[i],hyouka[i]);
29: return 0;
30: }
31:
1: /* ex0502.c データを読み込ませ,
2: 計算結果をファイルに書き込ませるプログラム */
3: /* 作成者 xxxxxx */
4: /* 作成日 2004/07/07 */
5: #include <stdio.h>
6: #include <stdlib.h>
7: #define N 5
8:
9: int main()
10: {
11: FILE *fin,*fout;
12: char name[N][20];
13: int i;
14: int num[N],kokugo[N],sansuu[N],total;
15: double hyouka[N];
16:
17: fin=fopen("tmp.dat","r");
18: if(fin==NULL){
19: printf("ファイルがありませんでした");
20: exit(1);
21: }
22: for(i=0;i<N;i++)
23: fscanf(fin,"%d %s %d %d %lf",
24: &num[i],name[i],&kokugo[i],&sansuu[i],&hyouka[i]);
25: fclose(fin);
26:
27: fout=fopen("kekka.dat","a");
28: for(i=0;i<N;i++) {
29: total=kokugo[i]+sansuu[i];
30: printf("%2d %s %4d\n",num[i],name[i],total);
31: fprintf(fout,"%2d %s %4d\n",num[i],name[i],total);
32: }
33: fclose(fout);
34: return 0;
35: }
36:
| planet.dat | ||
| 惑星 | 公転周期 | 軌道半径 |
| 水星 | 0.24085 | 0.37100 |
| 金星 | 0.61521 | 0.72400 |
| 地球 | 1.00004 | 1.00000 |
| 火星 | 1.88089 | 1.50800 |
| 木星 | 11.86223 | 5.19300 |
| 土星 | 29.45772 | 9.51600 |
| 天王星 | 84.01300 | 19.14000 |
| 海王星 | 164.79000 | 30.08000 |
| 冥王星 | 248.40000 | 36.78000 |
1: /* ex0601.c 関数を使ったプログラム */
2: /* 作成者 xxxxx */
3: /* 作成日 2004/07/14 */
4: #include <stdio.h>
5: double MaX(double a,double b); /* 関数のプロトタイプの宣言を定義する */
6: int main() /* main関数 */
7: {
8: double aa,bb,cc;
9:
10: printf("数値を入力してください a-->");
11: scanf("%lf",&aa);
12: printf("もう1つ数値を代入してください b-->");
13: scanf("%lf",&bb);
14:
15: cc=MaX(aa,bb); /* 関数 MaXをaa,bbを使って呼び出している。ccに結果が戻される */
16: printf("%fと%fでは%fのほうが大きい\n",aa,bb,cc);
17: return 0;
18: }
19: double MaX(double a,double b)
20: {
21: double c;
22:
23: if(a>=b) c=a;
24: else c=b;
25: return c;
26: }
1: /* ex0603.c void関数の例 */
2: /* 作成者 xxxx */
3: /* 作成日 2004/07/14 */
4: #include <stdio.h>
5: void star(int n);
6:
7: int main()
8: {
9: int i,j;
10: for(i=0;i<10;i++) star(i);
11:
12: for(i=9;i>=0;i--) star(i);
13: return 0;
14: }
15:
16: void star(int n)
17: {
18: int i;
19: for(i=0;i<n;i++)printf("*");
20: printf("\n");
21: }
1: /* ex0604.c 数値の配列を関数に渡すプログラム N次元の内積 */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/07/14 */
4: #include <stdio.h>
5: double ScalarProduct(double a[],double b[], int n);
6:
7: int main()
8: {
9: double a[10],b[10],sprd;
10: int N,i;
11:
12: printf("ベクトルの次元はいくつ?-->");
13: scanf("%d",&N);
14:
15: for(i=0;i<N;i++){
16: printf("ベクトルaの%2d番目の成分の値を入力してください。-->",i+1);
17: scanf("%lf",&a[i]);
18: }
19:
20: for(i=0;i<N;i++){
21: printf("ベクトルbの%2d番目の成分の値を入力してください。-->",i+1);
22: scanf("%lf",&b[i]);
23: }
24:
25: sprd=ScalarProduct(a,b,N); /* aとbの内積 */
26: printf("aとbの内積は%5.2fです。\n",sprd);
27:
28: return 0;
29: }
30:
31: double ScalarProduct(double x[],double y[], int n) /* 内積の定義 */
32: { /* nでデータが入っている配列の数を指定する。*/
33: int i;
34: double sp=0.0;
35:
36: for(i=0;i<n;i++) sp+=x[i]*y[i];
37: return sp;
38: }
1: /* ex0605.c 複数のデータを返す関数の例 */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/07/14 */
4: #include <stdio.h>
5: void MaXMiN(int a,int b,int *m, int *n);
6: /* void型関数としてプロトタイプ宣言*/
7:
8: int main()
9: {
10: int a,b,mx,mn;
11:
12: printf("2つ整数を入力してください。");
13: scanf("%d %d",&a,&b);
14: MaXMiN(a,b,&mx,&mn); /* 関数の呼び出し */
15: printf("大きいのは %dで,小さいのは %dです。\n",mx,mn);
16: return 0;
17: }
18:
19: void MaXMiN(int a,int b,int *m, int *n) /* 関数の定義 */
20: { /* m,n はポインタと呼ばれるアドレスを値とする変数 */
21: if(a>=b){
22: *m=a; /* "*m"はmで指定されたアドレスの値。*/
23: *n=b; /* aの値をmで指定したアドレスに記憶させる。*/
24: }else{
25: *m=b;
26: *n=a; /* "*n"はnで指定されたアドレスの値。 */
27: } /* bの値をnで指定したアドレスに記憶させる。*/
28: }
1: /* trape.c 台形公式を使った数値積分 */
2: /* 作成者 xxxxxx */
3: /* 作成日 2004/07/14 */
4: #include <stdio.h>
5: #include <math.h>
6:
7: double func(double x);
8: double Sekibun(double a,double b,double h);
9:
10: int main()
11: {
12: double h,a,b,S;
13: char fname[40];
14: FILE *fout;
15: int i=0,N=1;
16:
17: printf("ファイル名を入力してください-->");
18: scanf("%s",fname);
19: fout=fopen(fname,"w");
20:
21: a=0.0;
22: b=1.0;
23:
24:
25: h=b-a;
26: while(i<20){
27: i++;
28: h*=0.5;
29: N*=2;
30: S=Sekibun(a,b,h);
31: printf("%2d %7d %10.5e %20.16f %15.10e\n",i,N,h,S,1.-S/M_PI);
32: fprintf(fout,"%2d %7d %10.5e %20.16f %15.10e\n",i,N,h,S,1.-S/M_PI);
33: }
34: fclose(fout);
35: return 0;
36: }
37:
38: double Sekibun(double a,double b,double h)
39: {
40: double x,sum;
41:
42: x=a;
43: sum=0.5*(func(a)+func(b));
44: while((x+=h)<b) sum+=func(x);
45: sum*=h;
46: return sum;
47: }
48:
49: double func(double x)
50: {
51: return 4.0/(1.0+x*x);
52: }
自分のパソコンにCコンパイラを導入するには, Borland社のCコンパイラ(bcc32)がFreeソフトとして 以下のURLで公開されているので,これを使うとよいでしょう。