第六章答案 c primer plus
6.1 編寫一個程式,建立一個具有26個元素的陣列,並在其中儲存26個小寫字母,並讓該程式顯示該陣列的內容.
#include <stdio.h>
int main(void)
{
char a[26] = {'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
int i;
for(i = 0; i < 26; i++)
printf("%c", a[i]);
return 0;
}
==============================================================
6.2 使用巢狀迴圈產生下列圖案:
$
$$
$$$
$$$$
$$$$$
#include <stdio.h>
int main(void)
{
int i , j, k;
for(i = 0; i < 5; i++)
{
k = i + 1;
for(j = 0; j< k; j++)
printf("$");
printf("/n");
}
return 0;
}
==============================================================
6.3 使用巢狀迴圈產生下列圖案:
F
FE
FED
FEDC
FEDCB
FEDCBA
#include <stdio.h>
int main(void)
{
char fedcba[6] = {"FEDCBA"};
int i, j, k;
for(i = 0; i < 6; i++)
{
k = i + 1;
for(j = 0; j < k; j++)
printf("%c", fedcba[j]);
printf("/n");
}
return 0;
}
==============================================================
6.4 讓程式要求使用者輸入一個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
#include <stdio.h>
int main(void)
{
int len;
char flag;
int i,n,p,q;
printf("Please input trigger character:");
scanf("%c", &flag);
printf("Please input length:");
scanf("%d", &len);
for(i = 0; i < len; i++)
{
for(n=2*(len-i-1); n > 0; n--)
printf(" ");
for(p=0; p<=i;p++)
printf("%c", flag+p);
for(q=0;q<i;q++)
printf("%c", flag+i-q-1);
printf("/n");
}
return 0;
}
==============================================================
6-5 編寫一個程式列印一個表,表的每一行都給出一個整數,它的平方以及它的立方。要求使用者輸入表的上限與下限,使用一個for迴圈。
#include <stdio.h>
int main(void)
{
int min,max,len;
int i;
int square, cube;
printf("Please input a max integar:");
scanf("%d", &max);
printf("Please input a min integar:");
scanf("%d", &min);
if((len = max - min) < 0)
printf("input max min error. /n");
printf("integar square cube/n");
for(i=0; i < len; i++)
{
square = min * min;
cube = square * min;
printf("%d %d %d/n",min,square,cube);
min++;
}
return 0;
}
==============================================================
6-6 編寫一個 程式把一個單詞讀入一個字元陣列,然後反向打印出這個詞.
#include <stdio.h>
#include <string.h>
int main(void)
{
char word[256];
int len;
int i;
printf("Please input a word(length max is 256):");
scanf("%s",word);
if((len = strlen(word)) > 256)
{
printf("word is too long.../n");
return 0;
}
printf("The word is %s/n",word);
printf("End to start:");
for(i=len; i>=0;i--)
printf("%c",word[i]);
printf("/n");
return 0;
}
==============================================================
6-9 編寫一個程式把8個整數讀入一個數組中,然後以相反的順序列印它們.
#include <stdio.h>
#define DATA_NUM 8
int main(void)
{
int a[DATA_NUM];
int i=0;
printf("Please input %d integars:", DATA_NUM);
while(i<8)
{
scanf("%d", &a[i]);
i++;
}
for(i=DATA_NUM-1; i>=0;i--)
printf("%d ",a[i]);
return 0;
}
==============================================================
6-10 考慮這兩個無限數列:
1.0+1.0/2.0+1.0/3.0+1.0/4.0+....
1.0-1.0/2.0+1.0/3.0-1.0/4.0+....
編寫一個程式來計算這2個序列不斷變化的總和,直到達到某個次數。讓使用者互動地輸入這個次數。看看在20次,100次和500次之後的總和。是否每個序列看上去都收斂於某個值。
/*
A: 1.0+1.0/2.0+1.0/3.0+1.0/4.0+...
B: 1.0-1.0/2.0+1.0/3.0-1.0/4.0+...
*/
#include <stdio.h>
#define N 1.0
double count_a(int denom)
{
double sa=0;
int i;
for(i=1;i<denom+1;i++)
sa += (N/i);
return sa;
}
double count_b(int denom)
{
double sb=0;
int i,flag=1;
for(i=1;i<denom+1;i++)
{
sb += (N/i * flag);
flag *= -1;
}
return sb;
}
int main(void)
{
int m;
double sum_a,sum_b;
while(1)
{
printf("Please input times:");
scanf("%d", &m);
sum_a = count_a(m);
sum_b = count_b(m);
printf("Sum of Line A is %.4f, line B is %.4f/n", sum_a, sum_b);
}
return 0;
}
==============================================================
6-11 編寫一個程式,建立一個8個元素的int陣列,並且把元素分別設定為2的前8次冪,然後打印出他們的值。使用for迴圈來設定值;為了變化,使用do while迴圈來顯示這些值。
#include <stdio.h>
int main(void)
{
int a[8];
int i,temp;
temp = 2;
a[0] = 2;
for(i=1; i<8; i++)
{
a[i] = 2 * temp;
temp = a[i];
}
i = 1;
do
{
printf("the %d is %d/n", i, a[i-1]);
}while(i++ < 8);
return 0;
}
==============================================================
6-12 編寫一個程式,建立2個8元素的double陣列,使用一個迴圈來讓使用者鍵入第一個陣列的8個元素值。程式把第二個陣列的元素設定為第一個陣列元素的累計和。
#include <stdio.h>
double count(int num, double a[8])
{
double sum;
int m;
sum = a[0];
for(m=1; m<num; m++)
sum += a[m];
return sum;
}
int main(void)
{
int i;
double a[8];
printf("Please input 8 digits:");
for(i=0; i<8; i++)
scanf("%lf",&a[i]);
for(i=0; i<8; i++)
printf("a[%d] is %lf, the first %d sum is %lf./n", i, a[i], i+1, count(i+1, a));
return 0;
}
==============================================================
6-13 編寫一個程式讀入一行輸入,然後反向列印該行。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[255];
int i,len;
printf("Please input a string:");
scanf("%s", a);
len = strlen(a);
for(i=len-1; i>=0;i--)
printf("%c", a[i]);
return 0;
}
==============================================================
6-14 Daphne以10%的單利投資了100美元,Deirdre則以每年5%的複合利息投資了100美元,編寫一個程式,計算需要多少年Deirdre的投資才會超過Daphne,並且顯示出到那時兩個人的投資額。
#include <stdio.h>
int main(void)
{
float Daphne=100;
double Deirdre=100;
int n=0;
do
{
Daphne += 100 * 0.1;
Deirdre *= 1.05;
n++;
}while(Daphne >= Deirdre);
printf("%d years, Daphne is %f, Deirdre is %lf./n", n,Daphne,Deirdre);
return 0;
}
==============================================================
6-15 Chuckie Lucky贏了100萬美元,他把它存入一個每個贏得8%的賬戶,在每年的最後一天,Chuckie取出10萬美元,編寫一個程式,計算需要多少年Chuckie就會清空他的賬戶。
#include <stdio.h>
int main(void)
{
double total=100;
int y=0;
while(total>0)
{
total = total*1.08 -10;
y++;
}
printf("%d years./n", y);
return 0;
}