C Primer Plus 第6章 C控制語句 6.16 編程練習及答案

一、編寫一個程序,建立一個具備26個元素的數組,並在其中存儲26個小寫字母。並讓該程序顯示該數組的內容。api

#include 
int main (void)
{
    int i;
    int max=26;
    char CH[max];

    for(i=0;i

二、使用嵌套循環產生下列圖案:數組

$函數

$$spa

$$$code

$$$$索引

$$$$$input

#include int main (void) { int i,j; for(i=0;i<5;i++) { for (j=0;j<=i;j++) printf("$"); printf("\n"); } return 0; } #include int main (void) { int i,j; for(i=0;i<5;i++) { for (j=0;j<=i;j++) printf("$"); printf("\n"); } return 0; }

三、使用嵌套循環產生下列圖案:it

Fio

FEfor循環

FED

FEDC

FEDCB

FEDCBA

#include int main (void) { int i,j; char ch='F'; for(i=0;i<6;i++) { for (j=0;j<=i;j++) printf("%C",ch-j); printf("\n"); } return 0; } #include int main (void) { int i,j; char ch='F'; for(i=0;i<6;i++) { for (j=0;j<=i;j++) printf("%C",ch-j); printf("\n"); } return 0; }

四、讓程序要求用戶輸入一個大寫字母,使用嵌套循環產生像下面這們的金字塔圖案:

    A

   ABA

  ABCBA

 ABCDCDA

ABCDEDCBA

這種圖案要擴展到用戶輸入的字符。例如前面的圖案是在輸入E時須要產生的。提示:使用一個外部循環來處理行,在每一行中使用三個內部循環,一個處理空格,一個以升序打印字母,一個以降序打印字母。

#include 
int main (void)
{
    int i,j,k;
    char letter;
 
    printf("Please input a capital:");
    scanf("%c",&letter);
    k=letter-'A'+1;                    //計算字符的個數;
    for(i=0;i=0;j--)            //第三個循環,降序打印字母(比升序時少1個字母)
        printf("%c",'A'+j);
        printf("\n");
    }    
return 0;
}

 五、編寫一個程序打印一個表,表的每一行都給出一個整數、它的平方以及它的立方。要求用戶輸入表的上限和下限。使用一個for循環。

#include
int main (void)
{
    int i,min,max;
    printf("Please input the min and the max :");
    scanf("%d %d",&min,&max);
    printf("%10s%10s%10s\n","num","square","cube");
    for(i=min;i<=max;i++)
    {
        printf("%10d%10d%10d\n",i,i*i,i*i*i);
    }
    return 0;
}

六、編寫一個程序把一個單詞讀入一個字符數組,而後反向打印這個詞。提示:使用strlen()計算數組中最後一個字符的索引。

#include 
#include   //使用strlen()
int main (void)
{
    char word[20];
    int i;
    printf("Please input a word:");
    scanf("%s",&word);
    for(i=strlen(word)-1;i>=0;i--)  //最後一個字符的下標strlen(word)-1,word是數組名稱
        printf("%c",word[i]);
    printf("\n");
    return 0;
}

七、編寫一個程序要求輸入兩個浮點數,而後打印用二者的差值除以二者的乘積所得的結果。在用戶鍵入非數字的輸入以前程序循環處理每對輸入值。

#include 
int main (void)
{
    float f1,f2;
    printf("Please input tow floats:");
    while(scanf("%f%f",&f1,&f2)==2)
    {
        printf("The result is %.2f\n",(f1-f2)/(f1*f2));
        printf("Please input tow floats:");
    }
    printf("end\n");
    return 0;
}

八、對練習7進行修改,讓它使用一個函數來返回計算值。

#include 
float fac(float a,float b);
int main (void)
{
    float f1,f2;
    printf("Please input tow floats:");
    while(scanf("%f%f",&f1,&f2)==2)
    {
        printf("The result is %.2f\n",fac(f1,f2));
        printf("Please input tow floats:");
    }
    printf("end\n");
    return 0;
}
float fac(float a,float b)
{
    float c;
    c=(a-b)/(a*b);
    return c ;
}

九、編寫一個程序,要求用戶輸入下限整數和一個上限整數,而後,依次計算從下限到上限的每個整數的平方的加和,最後顯示結果。程序將不斷提示用戶輸入下限整數和上限整數並顯示出方法,直到用戶輸入的上限整數等於或小於下限整數爲止。程序運行結果示例應該以下所示

Enter lower and upper integer limits:5 9

The sums of the squares from 25 to 81 is 255

Enter next set of limits :3 25

The sums of the squares from 9 to 625 is 5520

Enter next set of limits :5 5 

Done

#include 
int fac(int a,int b);
int main (void)
{
    int n1,n2;
    printf("Enter lower and upper integer limits:");
    scanf("%d %d",&n1,&n2);
    while(n1

十、編寫一個程序,把8個整數讀入一個數組中,而後以相反的順序打印它們;

#include int main (void) { int abc[8]; int i; printf("Please input 8 numbers:"); for(i=0;i<8;i++) //循環讀取輸入 { scanf("%d",&abc[i]); } for(i=7;i>=0;i--) { printf("The %d is %d\n",i+1,abc[i]); } return 0; } #include int main (void) { int abc[8]; int i; printf("Please input 8 numbers:"); for(i=0;i<8;i++) //循環讀取輸入 { scanf("%d",&abc[i]); } for(i=7;i>=0;i--) { printf("The %d is %d\n",i+1,abc[i]); } return 0; }

十一、考慮這兩個無限序列:

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+......

編寫一個程序來計算這兩個序列不斷變化的總和,直到達到 某個次數。讓用戶交互的輸入這個次數。看看在20次、100次和500次以後 的總和。是否每一個序列都看上去要收斂於某個值?提示:奇數個-1的乘積爲-1,而偶數個-1的乘積爲1。

#include

int main(void)
{
 double i,sum1,sum2;
 int sign,count;
 printf("Enter the count:");
 scanf("%d",&count);
 for(i=1.0,sign=1,sum1=0,sum2=0;i<=count;i++,sign *= -1)
 {
  sum1 += 1.0 / i;
  sum2 += sign * 1.0 / i;      //利用sign的變化規律,使運算符在正負間交替變化
 }
 printf("1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 ...(%d terms) = %lf\n",count,sum1);
 printf("1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 ...(%d terms) = %lf\n",count,sum2);
 printf("%d\n",sign);
 return(0);
}

 十二、編寫一個程序,建立一個8個元素的int數組,而且把元素分別設置爲2的前8次冪,而後打印出它們的值。使用for循環來設置值;爲了變化,使用do while來顯示這些值。

#include
#include
int main(void)
{
    int num[8];
    int i;
    for (i=0;i<8;i++)
    {
        num[i]=pow(2,i);  //POW乘冪函數,利用math.h頭文件
    }
    i=0;     //使用do while時需將i初始爲0;
    do
        printf("%d\t",num[i]);
    while(++i<8);  //退出條件爲++i<8
    return 0;
}
/*do while 至少爲執行一次,檢測退出條件是否知足,知足時返回再次執行,直到while的值爲flase*/

1三、編寫一個程序,建立兩個8元素的double數組,使用一個循環來讓用戶鍵入第一個數組的8個元素的值。程序把第二個數組的元素設置爲第一個數組的元素的累積和。例如,第二個數組的第4個元素應該等於第一個數組 的前4個元素的和,第二個數組的第5個元素應該等於第一個數組的前5個元素的和(使用嵌套循環能夠作到這一點。不過利用第二個數組的第5個元素等於第二個數組的第4個元素加上第一個數組的第5個元素這個事實,能夠避免嵌套,而使用單個循環來完成這個任務)。最後,使用一個循環來顯示這兩個數組的內容,第一個數組在一行中顯示 ,而第二個數組的每一個元素在第一個數組的對應元素之下進行顯示。

#include
int main(void)
{
    double num[8],sum[8];
    int i,j;
    printf("Please enter 8 numbers:");
    for(i=0;i<8;i++)    //在一個循環中爲兩個數組賦值
    {
         scanf("%lf",&num[i]);
         for(j=0,sum[i]=0;j<=i;j++)  //從數組元素等於主數組元素的累加和;
            sum[i] += num[j];  /*注意此處的公式,sum數組的第n個元素等於第n-1個元素加num數組的第n元素的值*/
    }
    for(i=0;i<8;i++)
        printf("%8.3lf",num[i]);
    printf("\n");
    for(i=0;i<8;i++)
        printf("%8.3lf",sum[i]);
    printf("\n");
    return 0;
}

1四、編寫一個程序讀入一行輸入,而後反向打印該行。您能夠把輸入存儲在一個char數組中;假定該行不超過255個字符。回憶一下,您可使用具備%c說明符的scanf()從輸入中一次讀入一個字符 ,並且當您按下回車鍵時會產生換行符(\n).

#include<stdio.h>
#define LENGTH 20
int main(void)
{
    char a[255];
    int i;
    for(i=0;i<LENGTH;i++)
        scanf("%c",&a[i]);
    for(i=LENGTH-1;i>=0;i--)  //注意:i=LENGTH-1,而不等於LENGTH
        printf("%c",a[i]);
    printf("\n");
    return 0;
}

1五、Daphne以10%的單利息投資了100美圓(也就是說,每一年投資贏得的利息等於原始投資的10%)。Deirde則以每一年5%的複合利息投資了100美圓(也就是說,利息是當前結餘的5%,其中包括之前的利息)。編寫一個程序,計算須要多少年Deirdre 的投資纔會超過Daphne,而且顯示出到那裏兩我的的投資額。

#include<stdio.h>
int main(void)
{
    double Daphne=100,Deirdre=100;
    int i=0;                         //不要忘記變量的初始化
    while(Daphne>=Deirdre)
        {
            Daphne+=100*0.1;
            Deirdre+=Deirdre*0.5;
            i++;
        }
    printf("After %d years,Deirdre's investment is %f ,Daphne's investment is %f \n",
           i,Deirdre,Daphne);
    return 0;

}

1六、Chuckie Luchy贏了100萬美圓,他把它存入每一年贏得8%的賬戶。在每一年的最後一天,Chuckie取出10萬美圓。編寫一個程序,計算須要多少年Chuckie就會清空他的賬戶。

#include<stdio.h>

int main(void)
{
 double investment = 100;
 int i=0;
 while(investment > 0)
 {
  investment += investment * 0.08;
  investment -= 10;
  i++;
 }
 printf("After %d years,Chuckie Lucky's investment is out\n",i);
 return(0);
}
相關文章
相關標籤/搜索