[程設習題] 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”);                   //印出字串


 


}

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

 


寫一個可以轉換你的年齡的程式,它可以把你的年齡轉換成你已經活的天數(只計算整數年)


 


程式碼如下







#include “stdafx.h”


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


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


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


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


     my_year = 18;                                                //我的年齡assignmy_year的變數


     cal_value = my_year * 365;                                   //年齡計算成天數assigncal_value變數


     printf (今年我%d \n”, my_year);                           //印出字串


     printf (已經活了%d 的日子,繼續把握每一天\n”, cal_value);


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


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


}