『C Primer Plus(第五版)中国語版』第6章第1から16題
7933 ワード
1、プログラムを作成し、26要素の配列を作成し、26文字の小文字を保存し、その配列の内容を表示させる.
2.ネストされたループを使用して、次のパターンを作成します.
3.ネストされたループを使用して、次のパターンを作成します.
F FE FED FEDC FEDCB FEDCBA
4、プログラムにユーザーに大文字を入力させ、ネストループを使って次のようなピラミッドパターンを生成させる.
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
このパターンは、例えば、前のパターンがEを入力する際に生成されるように、ユーザ入力文字に拡張される.
5、プログラムを作成して表を印刷し、表の各行に整数、その二乗、およびそのキューブを与える.ユーザーにテーブルの上限と下限を入力し、forループを使用するように要求します.
6、プログラムを作成して単語を配列に読み込み、その単語を逆方向に印刷します.ヒント:strlen()を使用して、配列の最後の文字のインデックスを計算します.
7、プログラムを作成し、2つの浮動小数点数を入力し、両者の差を両者の積で割った結果を印刷し、ユーザーが数字以外の入力を入力する前にプログラムを終了する.
8、練習7を修正して、1つの関数を使って計算値を返すようにする.
9、ユーザーに下限整数と上限整数を入力ように要求するプログラムを作成し、次いで、下限から上限までの各整数の二乗の加算を順次計算し、最後に結果を表示し、ユーザーに下限と上限を入力するように指示し、回答を表示し、ユーザーが入力上限が下限以下になるまで、上限が下限以下になるまで続ける.
10、プログラムを作成して8つの整数を1つの配列に読み込み、反対の順序で印刷します.
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回後の総和を見てみましょう.
12、プログラムを作成し、8つの要素のint配列を作成し、要素をそれぞれ2の最初の8乗に設定し、それらの値を印刷し、forループを使用して値を設定し、変化するためにdo whileループを使用してこれらの値を表示します.
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番目の配列の対応する要素の下に表示されます.
14、プログラムを作成して1行の入力を読み込み、その行を逆印刷し、255文字を超えないと仮定してchar配列に入力を格納できます.
15、Daphneは10%の単利で100ドルを投資した.(つまり、毎年投資で得られる利息は元の投資の10%に等しい).Derdreは毎年5%の複合金利で100ドルを投資している.つまり、利息の現在残高の5%で、以前の利息が含まれている.Deirdreの投資額がDaphneを超えるまでに何年かかるかを計算するプログラムを作成し、その時までの2人の投資額を示している.
16、Chuckie Luckyは100万ドルに勝って、彼はそれを毎年8%の口座に預けて、毎年の最終日にChuckieは10万ドルを取り出して、プログラムを編纂して、何年Chuckieが彼の口座を空にする必要があるかを計算します.
#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;
}