[程設習題] C Primer Plus Ch5 #7

7.     寫一個程式讓它要求使用者打入一個浮點數,然後印出這數字的立方,用一個你自己設計的函數來做立方然後印出來。main()函數應該要把使用者所打的數字傳進去。



#include <stdio.h>                                              //引入stdio.h


#include <stdlib.h>                                             //引入stdlib.h


void cube(float k);                                             //宣稱一個cube函數的雛形


int main (void)


{


    float f1;                                                   //宣告浮點數f1


    printf(“Please enter a float number to be cubed:”);


    scanf(“%f”, &f1);                                           //讓使用者輸入,assignf1


    cube(f1);                                                   //呼叫cube函數,傳入f1變數


   


    system(“PAUSE”);                                            //「按任意鍵繼續」的程式,讓程式暫停


    return 0;                                                   //函數結束,傳回整數並跳回原本呼叫的地方


}


void cube(float k)                                              //宣稱一個cube函數,回傳值設為沒有回傳值,參數為浮點數的k變數


{


    printf(“The cube of number %.3f is %.3f\n”, k, kkk);      //印出傳入值kk的次方


}


 



 

[程設習題] C Primer Plus Ch5 #6

6.     現在你修改第五題的程式,讓它計算數字的平方和 (如果你喜歡,你也可以算第一天存$1元、第二天存$4元、第三天存$9元,以此類推,有多少錢?這樣會比較真實些)C語言沒有平方函數,你可以用nn取代之。


#include “stdafx.h”


#include <stdio.h>                         //引入stdio.h


#include <stdlib.h>                        //引入stdlib.h


int main(int argc, char argv[])


{


    int count=0,sum=0,times=0;             //宣告3個變數countsumtimes,個別初始為


    printf(“How many times that you want to calculate?\n”);


    scanf(“%d”, &times);                   //使用者輸入要執行的次數


    while(count++ < times)                 //迴圈判斷,count累加前是否小於times


       sum = sum+ count*count;             //sum加上count的平方


    printf(“sum = %d\n”, sum);


    system(“PAUSE”);                       //「按任意鍵繼續」的程式,讓程式暫停


    return 0;                              //函數結束,傳回整數並跳回原本呼叫的地方


}


 

[程設習題] C Primer Plus Ch5 #3

3.     請寫一個程式,它會問使用者要打入一個天數,然後它會轉換成幾星期又幾天。譬如,如果你要轉換18天能為2週又4天,顯示的樣子如下:


18 days are 2 weeks, 4 days.


使用while迴圈讓他能夠不斷的讓使用者要打入數字,當打入一個不是正數的值時(例如0-20)結束迴圈。


#include “stdafx.h”


#include <stdio.h>                                                         //引入stdio.h


#include <stdlib.h>                                                        //引入stdlib.h


int main(int argc, char* argv[])


{


    int day, state;                                                        //宣告2個變數daystate


    do{                                                                    //讓程式先執行,之後做while迴圈


       printf(“Please enter the number of days ( <=0 to quit):\n”);


       state=scanf(“%d”, &day);                                            //讓使用者打入天數,讓scanf()傳回有幾個資料輸入成功


       if (day > 0 && state == 1)                                          //判斷day是否大於0scanf()是否有資料


          printf(“%d days are %d weeks, %d days.\n”, day , day/7, day%7);  //印出運算結果


    }while(day > 0 && state == 1);


    printf(“\n”);                                                         


    system(“PAUSE”);                                                       //「按任意鍵繼續」的程式,讓程式暫停


    return 0;                                                              //函數結束,傳回整數並跳回原本呼叫的地方


}


 

[程設習題] C Primer Plus Ch4 #5

5.     寫一個程式,它會要求你打入你的名字,然後要求打入你的姓氏,要印出姓氏和名字在一行,還要在下一行印出姓氏和名字各有幾個字元。字元計數要靠貼齊姓氏(或名字)的尾端,像以下這樣:


 


Melissa Honeybee


7        8


 


接下來,印出同樣的內容,但字元計數要對齊每個名字的前面。


 


Melissa Honeybee


7         8


 


程式碼如下






#include “stdafx.h”


#include <stdio.h>                              //引入stdio.h


#include <stdlib.h>                             //引入stdlib.h


#include <string.h>                             //引入string.h檔,這樣才可以使用strlen函數


 


 


int main(int argc, char* argv[])


{


     char Fname[20],Lname[20];                  //宣告FnameLname變數,資料型態皆是元素的字元陣列


     int len_Fname,len_Lname;                   //宣告len_Fnamelen_Lname變數


 


     printf(“Please enter your first name:\n”); //印出字串


     scanf(“%s”, Fname);                        //等待輸入字串,assignFname字元陣列


     printf(“Please enter your last name:\n”); 


     scanf(“%s”, Lname);                        //等待輸入字串,assignLname字元陣列


     len_Fname = strlen(Fname);                 //計算Fname有多少字數,assignlen_Fname


     len_Lname = strlen(Lname);                 //計算Lname有多少字數,assignlen_Lname


     printf(“\n%s %s\n”, Fname, Lname);         //印出名字和姓氏


     printf(“%d %d\n”, len_Fname, len_Fname


               , len_Lname, len_Lname);         //印出計算結果,欄位的大小各由len_Fnamelen_Lname變數決定


     printf(“\n%s %s\n”, Fname, Lname);


     printf(“%-d %-d\n”, len_Fname, len_Fname


               , len_Lname, len_Lname);         //印出計算結果,欄位的大小各由len_Fnamelen_Lname變數決定,但數字靠左


     system(“PAUSE”);                           //「按任意鍵繼續」的程式,讓程式暫停


     return 0;


}

[程設習題] C Primer Plus Ch4 #2

2.     請試著寫一個程式,它會要求你打入你的名字,然後用以下方式顯示之。


        a.     印出名字在二個很緊黏的雙引號裡。


        b.     印出名字在一個20字元寬,包在雙引號裡的區域。


        c.     印出名字在一個20字元寬,包在雙引號裡的區域,名字需靠左顯示。


        d.     印出名字在一個比名字多3個字元的區域裡。


 


程式碼如下






#include “stdafx.h”


#include <stdio.h>                              //引入stdio.h


#include <stdlib.h>                             //引入stdlib.h


#include <string.h>                             //引入string.h檔,這樣才可以使用strlen函數


 


int main(int argc, char* argv[])


{


     char name[20];                             //宣告變數name,型態為個字元陣列


     int len_name;                              //宣告變數len_name


     printf(“Please enter your first name:\n”); //印出字串


     scanf(“%s”, name);                         //程式等待使用者輸入姓名,assignname字元陣列


     len_name = strlen(name);                   //算出name有多少有效字元,assignlen_name變數裡


     printf(“Print type (a):\n”);               //印出字串


     printf(“\”%s\”\n\n”, name);                //印出在二個很緊黏的雙引號裡


     printf(“Print type (b):\n”);              


     printf(“\”%20s\”\n\n”, name);              //在一個字元寬,包在雙引號裡的區域


     printf(“Print type (c):\n”);              


     printf(“\”%-20s\”\n\n”, name);             //印出在一個字元寬,包在雙引號裡的區域,名字需靠左顯示


     printf(“Print type (d):\n”);              


     printf(“\”%s\”\n\n”, len_name+3, name);   //印出在一個比名字多個字元的區域裡,用號決定區域的大小


 


     system(“PAUSE”);                           //「按任意鍵繼續」的程式,讓程式暫停


     return 0;                                  //函數結束,傳回整數並跳回原本呼叫的地方


}

[程設習題] C Primer Plus Ch3 #3

3.  請寫出一個程式,他會先嗶一聲,然後打出以下文字


Startled by the sudden sound, Sally shouted, “By the Great Pumpkin, what was that!”


 


程式碼如下






#include “stdafx.h”


#include <stdio.h>                                              //引入stdio.h


#include <stdlib.h>                                             //引入stdlib.h


 


 


int main(int argc, char* argv[])


{


     printf(“\aStartled by the sudden sound, Sally shouted,”    //印出字串,用二個雙引號斷成二行


                “\”By the Great Pumpkin, what was that!\”\n”);


     system(“PAUSE”);                                           //「按任意鍵繼續」的程式,讓程式暫停


     return 0;                                                  //函數結束,傳回整數並跳回原本呼叫的地方


}

[程設習題] C Primer Plus Ch3 #2

2.  請寫出一個程式,他能讓你打入ASCII(例如66),然後他能印出ASCII碼對應出的字元。


 


程式碼如下






#include “stdafx.h”


#include <stdio.h>                                                       //引入stdio.h


#include <stdlib.h>                                                      //引入stdlib.h


 


int main(int argc, char* argv[])


{


     char txt1;                                                          //宣告一個變數txt1,型態是字元


     printf(“Please Enter the ASCII code of the character:\n”);          //印出字串


     scanf(“%d”, &txt1);                                                 //程式等待使用者打入字元的ASCII


     printf(“The ASCII code is %d and the character is %c”,txt1,txt1);   //印出字元ASCII碼代表的字元


     printf(“\n\n”);                                                     //印出字串


     system(“PAUSE”);                                                    //「按任意鍵繼續」的程式,讓程式暫停


     return 0;                                                           //函數結束,傳回整數並跳回原本呼叫的地方


}

[程設習題] C Primer Plus Ch3 #1

1.  請試著找出整數與浮點數過大溢位(overflow) 和浮點數過小溢位(underflow),請使用嘗試接近的方式來達成。


 


程式碼如下






#include “stdafx.h”


#include <stdio.h>                                   //引入stdio.h


#include <stdlib.h>                                  //引入stdlib.h


 


int main(int argc, char* argv[])


{


     int i,m1=2147483646;                            //宣告變數i和變數m1,且m1給初始值為


     float k1=1e+36,k2;                              //宣告k1k2變數,k1的初始值為的次方


float n1=(float)1e-35,n2;                       //宣告n1n2變數,n1的初始值為的-35次方


 


/——————————————————————–/


 


     printf(“Let’s find the integer overflow\n”);


     printf(“m1     = %d\n”,m1);                         


     for (i=0;i<=3;i++)                              //使用for迴圈,給i給初始值為,當i小於或等於時停止迴圈,每次迴圈執行完i就加


     {


           printf(“m1 + %d = %d\n”,i,(m1+i));         //印出num1i的值,觀察情況


     }


/——————————————————————–/


 


     printf(“\nLet’s find the float overflow\n”);    //印出字串,找出浮點數的過大溢位


    


     printf(“k1\t      = %e\n”, k1);                 //印出k1的初始值


     k2=(float)1e+36(float)1.0e+1;                  //讓的次方乘上的次方(輸入為Float)assignk2


     printf(“k1 * (1.0e+1) = %e\n”, k2);             //印出結果


     k2=(float)1e+36(float)1.0e+2;                  //10的次方乘上的次方,assignk2


     printf(“k1 * (1.0e+2) = %e”


  “\t//overflow前最大\n”, k2);                       //印出結果


     k2=(float)1e+36(float)1.0e+3;                  //讓的次方乘上的次方,assignk2


     printf(“k1 * (1.0e+3) = %e\n”, k2);             //印出結果


     k2=(float)1e+36(float)1.0e+4;                  //10的次方乘上的次方,assignk2


     printf(“k1 * (1.0e+4) = %e\n”, k2);            //印出結果


/——————————————————————–/


 


     printf(“\nLet’s find the float underflow\n”);   //印出字串,找出浮點數的過小溢位


     printf(“n1\t    = %e\n”, n1);                  //印出n1的初始值


     n2=(float)1e-35(float)1e-1;                    //10-35次方乘上的次方(輸入為Float)assignn2


     printf(“n1 * (1e-1) = %e\n”, n2);               //印出結果


     n2=(float)1e-35(float)1e-2;                    //10-35次方乘上的次方,assignn2


 


     printf(“n1 * (1e-2) = %e”


              “\t//underflow前最小\n”, n2);           //印出結果


     n2=(float)1e-35(float)1e-3;                    //10-35次方乘上的次方,assignn2


     printf(“n1 * (1e-3) = %e\n”, n2);               //印出結果


     n2=(float)1e-35(float)1e-4;                    //10-35次方乘上的次方,assignn2


     printf(“n1 * (1e-4) = %e\n”, n2);               //印出結果


 


/——————————————————————–/


     system(“PAUSE”);                               //「按任意鍵繼續」的程式,讓程式暫停


     return 0;                                       //函數結束,傳回整數並跳回原本呼叫的地方


}

[程設習題] C Primer Plus Ch2 #6

6.  寫一個程式,它在螢幕上要印成這樣子


Smile! Smile! Smile!


Smile! Smile!


Smile!


這程式只能宣稱一個印出Smile!的函數,其他部分需由這函數來完成


 


程式碼如下






// ch2_wr6.cpp : Defines the entry point for the console application.


//


 


#include “stdafx.h”


#include <stdio.h>                   //引入stdio.h


void prt_smile_txt(void);       //宣稱一個prt_jolly_txt函數


int main(int argc, char* argv[]) {


     int i,j;                        //宣告變數my_year和變數cal_value


 


     for(i=1;i<=3;i++){              //使用迴圈,把assigni變數當作起始值,當i小於或等於時停止迴圈,每次迴圈執行完畢i就加


           for(j=i;j<=3;j++){         //使用迴圈,把i變數值assignj變數當作起始值,當j小於或等於時停止迴圈,每次迴圈執行完畢j就加


                prt_smile_txt();     //呼叫prt_smile_txt函數


           }


           printf(“\n”);              //印出換行字串


     }


 


     return 0;                       //函數結束,傳回整數並跳回原本呼叫的地方


}


 


void prt_smile_txt(void){       //prt_smile_txtFunction head,回傳值設為沒有回傳值,參數設為沒有參數


 


     printf(“Smile!”);               //印出字串


}

[程設習題] C Primer Plus Ch2 #4

4.  寫一個程式,它在螢幕上要印成這樣子


For he’s a jolly good fellow!


For he’s a jolly good fellow!


For he’s a jolly good fellow!


Which nobody can deny!


這程式裡面(除了main函數以外) 須宣稱二個函數 (function)


一個函數是只能印出For he’s a jolly good fellow! 這一句


另一個函數是只能印出Which nobody can deny! 這一句



程式碼如下






// ch2_wr4.cpp : Defines the entry point for the console application.


//


 


#include “stdafx.h”


#include <stdio.h>                                       //引入stdio.h


#include <stdlib.h>                                        //引入stdlib.h


 


void prt_jolly_txt (void);                                 //宣稱一個prt_jolly_txt函數,回傳值設為沒有回傳值,參數設為沒有參數


void prt_deny_txt (void);


int main(int argc, char* argv[]) {


     int i;                                                //宣告一個變數i


     for(i=1;i<=3;i++){                                   //使用for迴圈,把1 assigni變數當作起始值,當i小於或等於3時停止迴圈,每次迴圈執行完畢i就加


           prt_jolly_txt();                                //呼叫prt_jolly_txt函數


     }


     prt_deny_txt();                                       //呼叫prt_deny_txt函數


     system(“PAUSE”);                                      //「按任意鍵繼續」的程式


     return 0;                                             //函數結束,傳回整數0並跳回原本呼叫的地方


}


 


void prt_jolly_txt (void){                                 //prt_jolly_txtFunction head,回傳值設為沒有回傳值,參數設為沒有參數


 


     printf(“For he’s a jolly good fellow!\n”);            //印出字串


}


void prt_deny_txt (void){                                  //prt_deny_txtFunction head,回傳值設為沒有回傳值,參數設為沒有參數


 


     printf(“Which nobody can deny!\n”);                   //印出字串


 


}