1. 程式人生 > >第六章答案 c primer plus

第六章答案 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;
}