『C Primer Plus(第五版)中国語版』第6章第1から16題

7933 ワード

1、プログラムを作成し、26要素の配列を作成し、26文字の小文字を保存し、その配列の内容を表示させる.
#include 

int main(void){
	char c[26];
	int i;
	char j = 'a';
	for(i=0;i<26;i++,j++)
	{
		c[i] = j;
		printf("%c ",c[i]);
	}
	return 0;
}

2.ネストされたループを使用して、次のパターンを作成します.
$
$ $
$ $ $
$ $ $ $
$ $ $ $ $
#include 
const char C = '$';
int main(void){
	int i,j;
	for(i=0;i<5;i++){
		for(j=0;j<=i;j++){
			printf("%c",C);
		}
		printf("
"); } return 0; }

3.ネストされたループを使用して、次のパターンを作成します.
F FE FED FEDC FEDCB FEDCBA
#include 
int main(void){
	char a = 'F';
	int i,j;
	for(i=0;i<6;i++){
		for(j=0,a='F';j<=i;j++,a--){
			printf("%c",a);
		}
		printf("
"); } return 0; }

4、プログラムにユーザーに大文字を入力させ、ネストループを使って次のようなピラミッドパターンを生成させる.
         A
       ABA
    ABCBA
  ABCDCBA
ABCDEDCBA
このパターンは、例えば、前のパターンがEを入力する際に生成されるように、ユーザ入力文字に拡張される.
#include 
int main(void){
	char c = 'E';
	char t1,t2;
	printf("         :
"); fflush(stdout); scanf("%c",&c); for(int i = 0;i<=c - 'A';i++){ for(int k = c-'A'-i;k>0;k--) printf(" "); for(int j = 1,t1 = 'A';j<= i*2+1;j++) { if(j<=(i*2+1)/2+1){ printf("%c",t1++); } } for(int s = 1,t2 = i-1+'A';s<= i*2+1;s++) { if(s >(i*2+1)/2+1){ printf("%c",t2--); } } printf("
"); } printf("end
"); return 0; }

5、プログラムを作成して表を印刷し、表の各行に整数、その二乗、およびそのキューブを与える.ユーザーにテーブルの上限と下限を入力し、forループを使用するように要求します.
#include 
int main(void){
	int a,b;
	printf("       ,       :
"); fflush(stdout); scanf("%d,%d",&a,&b); for(;a<=b;a++){ printf(" :%d :%d, :%d
",a,a*a,a*a*a); } printf("end
"); return 0; }

6、プログラムを作成して単語を配列に読み込み、その単語を逆方向に印刷します.ヒント:strlen()を使用して、配列の最後の文字のインデックスを計算します.
#include 
#include 
int main(void){
	char c[30];
	char w[30];
	scanf("%s",w);
	for(int i = 0; i< strlen(w);i++){
		c[i]= w[i];
	}
	for(int i = strlen(c);i>=0;i--)
		printf("%c",c[i]);
	return 0;

7、プログラムを作成し、2つの浮動小数点数を入力し、両者の差を両者の積で割った結果を印刷し、ユーザーが数字以外の入力を入力する前にプログラムを終了する.
#include 

int main(void){
	float a,b;
	printf("        ,       ,  Q    
"); fflush(stdout); while(scanf("%f%f",&a,&b) != 0){ printf("(%.2f - %-.2f)/ (%.2f * %-.2f)= %.2f
",a,b,a,b,(a-b)/(a*b)); printf(" , , , Q
"); fflush(stdout); } printf("end"); return 0; }

8、練習7を修正して、1つの関数を使って計算値を返すようにする.
#include 
float fduc(float a,float b);
int main(void){
	float a,b;
	printf("        ,       ,  Q    
"); fflush(stdout); while(scanf("%f%f",&a,&b) != 0){ printf("(%.2f - %-.2f)/ (%.2f * %-.2f)= %.2f
",a,b,a,b,fduc(a,b)); printf(" , , , Q
"); fflush(stdout); } printf("end"); return 0; } float fduc(float a,float b){ return (a-b)/(a*b); }

9、ユーザーに下限整数と上限整数を入力ように要求するプログラムを作成し、次いで、下限から上限までの各整数の二乗の加算を順次計算し、最後に結果を表示し、ユーザーに下限と上限を入力するように指示し、回答を表示し、ユーザーが入力上限が下限以下になるまで、上限が下限以下になるまで続ける.
#include 

int main(void){
	int a,b;
	int s = 0;
	printf("       ,      :");
	fflush(stdout);
	while(scanf("%d%d",&a,&b) != 0 && a < b){
		for(int i = a;i<=b;i++){
			s=s+a*a;
		}
		printf("%d,%d    :%d
",a*a,b*b,s); printf(" , :"); fflush(stdout); } printf("end
"); return 0; }

10、プログラムを作成して8つの整数を1つの配列に読み込み、反対の順序で印刷します.
#include 

int main(void){
	int a[8];
	for(int i=0;i<8;i++){
		printf("    %d   :", i);
		fflush(stdout);
		scanf("%d", &a[i]);
	}
	for(int i= 7;i>=0;i--){
		printf("%d\t",a[i]);
	}
	printf("
end
"); return 0; }

11、この二つの無限シーケンスを考慮する:
式1:1.0+1.0/2.0+1.0/3.0+1.0/4.0+1.0/4.0+1.0/5.0......
式2:1.0-1.0/2.0+1.0/3.0-1.0/4.0+1.0/5.0+1.0/5.0.....
この2つのシーケンスが絶えず変化する総和を計算するプログラムを作成し、ある回数に達するまで、ユーザーにこの回数をインタラクティブに入力させ、20回、100回、500回後の総和を見てみましょう.
#include 

int main(void){
	double a = 1.0;
	int n;
	double sum1,sum2;
	double tx=0;
	int i,cx;
	printf("       :");
	fflush(stdout);
	while(scanf("%d",&n) != 0){
		for(i = 1,tx=1.0,cx=1,sum1=0,sum2=0;i<=n;i++,tx=tx+1.0,cx++){
			sum1+=1.0/tx;
			if(cx%2 == 0){
				sum2-=1.0/tx;
			}
			else{
				sum2+=1.0/tx;
			}
		}
		printf("%d                 :%f\t%f
",n,sum1,sum2); printf(" :"); fflush(stdout); } printf("
end
"); return 0; }

12、プログラムを作成し、8つの要素のint配列を作成し、要素をそれぞれ2の最初の8乗に設定し、それらの値を印刷し、forループを使用して値を設定し、変化するためにdo whileループを使用してこれらの値を表示します.
#include 

int main(void){
	int n[8];
	int s,i;
	for(i = 0,s=1;i<8;i++){
		s=s*2;
		n[i]=s;
	}
	i=0;
	do{
		printf("%d  ",n[i]);
		i++;
	}while(i<8);
	printf("
end
"); return 0; }

13、プログラムを作成して2つの8要素のdouble配列を作成し、1つのループを使用してユーザーに最初の配列の8要素の値を入力させ、プログラムは2番目の配列の要素を1番目の配列の累積和に設定し、例えば2番目の配列の4番目の要素は1番目の配列の4番目の要素の和を待つべきである.2番目の配列の5番目の要素は、1番目の配列の最初の5つの要素の和に等しいはずです.(ネストループを使用してこれを行うことができますが、2番目の配列の5番目の要素が2番目の配列の4番目の要素に1番目の配列の5番目の要素を加えた事実を利用して、ネストを回避して単一のループだけを使用してこのタスクを完了することができます)、最後に1つのループを使用して2つの配列の内容を表示し、1番目の配列は1行に表示されます.2番目の配列の各要素は、1番目の配列の対応する要素の下に表示されます.
#include 

int main(void){
	double a[8],b[8];
	double sum = 0;
	for(int i = 0;i < 8;i++){
		printf("    %d  :",i);
		fflush(stdout);
		scanf("%lf",&a[i]);
		sum += a[i];
		b[i] = sum;
	}

	printf("
:
"); for(int i = 0;i<8;i++){ printf("%10.2lf ",a[i]); } printf("
"); for(int i = 0;i<8;i++){ printf("%10.2lf ",b[i]); } printf("
end
"); return 0; }

14、プログラムを作成して1行の入力を読み込み、その行を逆印刷し、255文字を超えないと仮定してchar配列に入力を格納できます.
#include 
#include 
int main(void){
	char s[255];
	char c;
	int i = 0;
	printf("        :
"); fflush(stdout); do{ scanf("%c",&c); s[i]=c; i++; }while(c !='
'); while(i >= 0){ i--; printf("%c",s[i]); } printf("
end
"); return 0; }

15、Daphneは10%の単利で100ドルを投資した.(つまり、毎年投資で得られる利息は元の投資の10%に等しい).Derdreは毎年5%の複合金利で100ドルを投資している.つまり、利息の現在残高の5%で、以前の利息が含まれている.Deirdreの投資額がDaphneを超えるまでに何年かかるかを計算するプログラムを作成し、その時までの2人の投資額を示している.
#include 
#include 
int main(void){
	float sum1,sum2;
	int i = 1;
	sum1=100;
	sum2=100;
	do{

		sum1 = sum1 + 100 * 0.10;
		sum2 = sum2 + sum2*0.05;
		printf(" %d  Daphne:%10.2f Deirdre:%10.2f:
",i++,sum1,sum2); }while(sum2 <= sum1); printf("Deirdre %d Daphne.
",--i); printf("
end
"); return 0; }

16、Chuckie Luckyは100万ドルに勝って、彼はそれを毎年8%の口座に預けて、毎年の最終日にChuckieは10万ドルを取り出して、プログラムを編纂して、何年Chuckieが彼の口座を空にする必要があるかを計算します.
#include 
#include 
int main(void){
	float sum;
	int i = 1;
	sum=1000000;
	do{
		sum = sum - 100000 + sum*0.08;
		printf(" %d  Chuckie Lucky     :%.2f
",i++,sum); }while(sum > 0); printf("Chukie Lucky %d .
",--i); printf("
end
"); return 0; }