高度プログラミング演習 (06) 演習問題 • 2次方程式 a*x*x + b*x + c =0 を解くプロ グラムを作成せよ。ただし、x が虚数となる 場合は、解がない旨表示するようにせよ。 #include <stdio.h> #include <math.h> main() { double a,b,c,d; printf("a * x^2 + b * x + c =0 の方程式を解きます。"); printf("係数 a, b, c をそれぞれ入力して下さい : "); scanf("%lf %lf %lf",&a,&b,&c); if(a==0){ if(b==0) printf("解はありません。\n"); else printf("x = %f\n",-c/b); } else { d = pow(b,2)-4*a*c; if(d<0) printf(" x は 虚数 です。\n"); else if(d==0){ printf("x= %8.3f\n",(-b+sqrt(d))/(2*a)); }else{ printf("x= %8.3f, %8.3f\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)); } } } 演習問題 • 入力した文字列に アルファベットの各文字 がそれぞれいくつあるか表示するプログラ ムを作成せよ。(if文、case文両方使ったも のをそれぞれ作成すること。) #include <stdio.h> void main() { char data[128]; int n=0,i=0,j=0; int cnt[52]; char ii; while(n<128){ data[n]=getchar(); if(data[n]=='.'){ if(n<127) n++; break; } n++; } for(i=0;i<52;i++) cnt[i]=0; for(i=0;i<n;i++){ for(ii='a';ii<='z';ii++){ if (data[i]==ii) cnt[ii-'a']++; } for(ii='A';ii<='Z';ii++){ if (data[i]==ii) cnt[26+ii-'A']++; } } for(ii='a';ii<='z';ii++) printf(" %c : %d\n",ii,cnt[ii-'a']); for(ii='A';ii<='Z';ii++) printf(" %c : %d\n",ii,cnt[26+ii-'A']); } ii for(i=0;i<n;i++){ for(ii='a';ii<='z';ii++){ if (data[i]==ii) cnt[ii-'a']++; } for(ii='A';ii<='Z';ii++){ if (data[i]==ii) cnt[26+ii-'A']++; } } cnt 0 ‘a’-’a’ cnt 1 ‘b’-’a’ cnt 2 ‘c’-’a’ cnt 26 26+‘A’-’A’ cnt 27 26+‘B’-’A’ cnt 28 26+‘C’-’A’ #include <stdio.h> void main() { char data[128]; int n=0,i=0,j=0; int cnt[52]; char ii; for(i=0;i<n;i++){ if(data[i]>='a'&& data[i]<='z') cnt[data[i]-'a']++; while(n<128){ data[n]=getchar(); if(data[n]=='.'){ if(n<127) n++; break; } n++; } for(i=0;i<52;i++) cnt[i]=0; if(data[i]>='A'&& data[i]<='Z') cnt[26+data[i]-'A']++; } for(ii='a';ii<='z';ii++) printf(" %c : %d\n",ii,cnt[ii-'a']); for(ii='A';ii<='Z';ii++) printf(" %c : %d\n",ii,cnt[26+ii-'A']); } data[i] for(i=0;i<n;i++){ if(data[i]>='a'&& data[i]<='z') cnt[data[i]-'a']++; if(data[i]>='A'&& data[i]<='Z') cnt[26+data[i]-'A']++; } cnt 0 ‘a’-’a’ cnt 1 ‘b’-’a’ cnt 2 ‘c’-’a’ cnt 26 26+‘A’-’A’ cnt 27 26+‘B’-’A’ cnt 28 26+‘C’-’A’ 関数 // 二つの行列を表示するプログラム #include <stdio.h> void main() { int matrxA[2][2],matrixB[2][2]; int i,j; for(i=0;i<2;i++){ for(i=0;j<2;j++) printf(“%3d “,matrixA[i][j]); printf(“\n”); } for(i=0;i<2;i++){ for(i=0;j<2;j++) printf(“%3d “,matrixB[i][j]); printf(“\n”); } } 関数 // 二つの行列を表示するプログラム #include <stdio.h> void main() { int matrxA[2][2],matrixB[2][2]; int i,j; for(i=0;i<2;i++){ for(i=0;j<2;j++) printf(“%3d “,matrixA[i][j]); printf(“\n”); } for(i=0;i<2;i++){ for(i=0;j<2;j++) printf(“%3d “,matrixB[i][j]); printf(“\n”); } } ほぼ共通 関数 // 二つの行列を表示するプログラム #include <stdio.h> void print_matrix(int matrix[2][2]) { int i,j; for(i=0;i<2;i++){ for(i=0;j<2;j++) printf(“%3d “,matrixA[i][j]); printf(“\n”); } } void main() { int matrxA[2][2],matrixB[2][2]; int i,j; print_matrix(matrixA); print_matrix(matrixB): } 関数 // 二つの行列を表示するプログラム #include <stdio.h> void print_matrix(int matrix[2][2]) { int i,j; for(i=0;i<2;i++){ for(i=0;j<2;j++) printf(“%3d “,matrixA[i][j]); printf(“\n”); } } void main() { int matrxA[2][2],matrixB[2][2]; int i,j; print_matrix(matrixA); print_matrix(matrixB): } 関数の基本 戻り値 foo (引数) { } int foo1() { int x; return x; } void foo2() { int foo3(int x, int y) { } void main() { int a; a=foo1(); foo2(); } } 例題問題 1. 0から15までの十進数を16進数表記するプ ログラムを作成せよ。 2. ある十進数を16進表記するプログラムを作 成せよ。 例題 • 0から15までの十進数を16進数表記するプロ グラムを作成せよ。 #include <stdio.h> void main() { int num; scanf("%d",&num); if(0<=num&&num<10) printf("%d",num); else if(9<num<16) printf("%c",'a'+(num-10)); else printf("X"); printf("\n"); } 例題問題 • ある十進数を16進表記するプログラムを作 成せよ。 #include <stdio.h> void d2h(int num) { if(0<=num&&num<10) printf("%d",num); else if(9<num<16) printf("%c",'a'+(num-10)); else printf("X"); } void main() { int num,i,c=0; int k[32]; scanf("%d",&num); while(num > 15){ k[c]=num % 16; num = num/16; c++; } k[c]=num; for(i=c;i>=0;i--) d2h(k[i]); printf("\n"); } 練習問題 1. 4 × 4 の行列の各要素を10進法と16進法 で、それぞれ表示するプログラムを作成せ よ。ただし、各要素は 65535 以下、0以上 の乱数で決めること。 例題問題 • 一桁の16進数を10進数で表示するプログラ ムを作成せよ。 • 8桁以下の16進数を10進数で表示するプロ グラムを作成せよ。 例題問題 • 一桁の16進数を10進数で表示するプログラ ムを作成せよ。 #include <stdio.h> if(num == -1) printf("X\n"); else printf("%d\n",num); void main() { char h; int num=0; } h=getchar(); if('0'<=h&&h<='9') num = 0 + (h-'0'); else if('a'<=h&&h<='f') num = 10 + (h-'a'); else num = -1; 例題問題 • 8桁以下の16進数を10進数で表示するプロ グラムを作成せよ。 #include <stdio.h> #include <math.h> int h2d(char h) { int num=0; if('0'<=h&&h<='9') num = 0 + (h-'0'); else if('a'<=h&&h<='f') num = 10 + (h-'a'); else num = -1; return num; } void main() { char h[8]; int i,n=0,d=0,k; for(i=0;i<n;i++){ k = h2d(h[i]); if(k == -1){ printf("Invalid \n"); return; } d = d + k * pow(16,n-1-i); } while(n<8){ h[n]=getchar(); if(h[n]=='\n') break; n++; } printf("%d\n",d); } 練習問題 • 2つの数字を16進法で入力して、その和を16 進法で表示するプログラムを作成せよ。 演習問題 • 月と日を入力して、それが1月1日から何一目 であるか表示するプログラムを作成せよ。(た だし閏年は考慮しないこととする。) • 入力された2つの月日を求めるプログラムを 作成せよ。(ただし、閏年は考慮しないことと する。)
© Copyright 2025 ExpyDoc