高質(zhì)量c語言編程》的讀后感
讀完《高質(zhì)量c語言編程》這本書,對(duì)其有了大概的了解:這本書共有十一章,分別講述了文件的結(jié)構(gòu) 程序的版式 命名的規(guī)則 表達(dá)式和基本語句 常量 函數(shù)設(shè)計(jì) 內(nèi)存管理 C++函數(shù)的高級(jí)特性 類的構(gòu)造函數(shù) 析構(gòu)函數(shù)與賦值函數(shù) 類的繼承與組合 其他編程經(jīng)驗(yàn)。
從本書的前言,可以看出作者是一個(gè)c編輯的老手,而且當(dāng)之無愧,書中介紹了好多有關(guān)c語言編輯的細(xì)節(jié)問題,本人認(rèn)為這些值得那些以后搞編程的同學(xué)看看,對(duì)其以后更快更高質(zhì)量的編寫c語言會(huì)有很大幫助!
本書主要分為兩個(gè)部分:
1-6章為一個(gè)部分:1到6章主要講述了c++c的編程風(fēng)格,難度不高,但細(xì)節(jié)比較多。細(xì)節(jié)決定成敗,只有抓住點(diǎn)點(diǎn)滴滴,才能寫出高質(zhì)量的c語言程序。每一章都有其側(cè)重點(diǎn),作者精心安排。首先寫了文件結(jié)構(gòu),作者從頭文件的結(jié)構(gòu),定義文件結(jié)構(gòu),目錄結(jié)構(gòu)等方面介紹了文件結(jié)構(gòu)的功能和使用方法,接下來講了程序的版式和命名規(guī)則,比以前學(xué)的更注重細(xì)節(jié),也對(duì)空行,注釋,代碼行等以前不關(guān)注的內(nèi)容有了進(jìn)一步的了解。第四章講了表達(dá)式和基本語句,作者精益求精,抓住我們易錯(cuò)的點(diǎn),將這些編程中的關(guān)鍵點(diǎn),直白明了的展現(xiàn)出來,是我對(duì)這些內(nèi)容有了更深的了解,也促進(jìn)了對(duì)這些知識(shí)的記憶。第五章講了常量,講了c語言定義常量的規(guī)則并指出c可以用define定義常量,而c++又?jǐn)U展了const定義常量的方法,雖然不太
懂,但有了大概了解。第6章講了函數(shù)設(shè)計(jì)。
7-11章為一個(gè)部分:第七章講內(nèi)存管理,第八章講C++的高級(jí)特性,第九章講構(gòu)造函數(shù)等內(nèi)容,第十章講的繼承和組合,第十一章講了其他的編程經(jīng)驗(yàn)。這幾個(gè)部分是個(gè)難點(diǎn),好多部分都看不懂,但書中的思想可以領(lǐng)會(huì)一些,希望在以后的學(xué)習(xí)中能夠循序漸進(jìn),獲得進(jìn)一步的理解和掌握.記得老師說,指針的學(xué)習(xí)是c語言的重點(diǎn),學(xué)習(xí)指針,不管是看教材,還是看課外書,對(duì)我來說都是一大難題,也許照老師說的自己動(dòng)手寫程序會(huì)加深記憶在精讀課本會(huì)有所改善,作者也說道學(xué)習(xí)指針要養(yǎng)成“使用調(diào)試器逐步跟蹤程序”的習(xí)慣。像平常老師說的只有動(dòng)手寫,動(dòng)手做才會(huì)有所收獲,作者捉住重點(diǎn),拋磚引玉,很多地方都給我們作了詳細(xì)介紹,并指出c語言編程過程中的注意事項(xiàng),也提高了我在編程過程中的警惕性。
讀完這本書之后,我對(duì)于C語言這門課成有了更進(jìn)一步的了解和認(rèn)識(shí),所謂的語言就是要不斷地練習(xí)不斷地去嘗試,只有經(jīng)過不斷的改正不斷的重寫才能學(xué)好這門課程,C語言不能只是一味的模仿課本上的例題,模仿是不會(huì)有進(jìn)步的,要永遠(yuǎn)記住模仿的東西不是自己的。只有不斷地創(chuàng)新才能有突破,想要學(xué)好C語言必須學(xué)會(huì)自己嘗試寫程序。質(zhì)變總是由量變轉(zhuǎn)換而來的,沒有大量的練習(xí)是不能夠促成質(zhì)變的,程序的編寫不僅僅要求數(shù)量還要有高質(zhì)量,一個(gè)程序的編寫有好多種方法,但是我們需要一個(gè)既簡單又高效的程序。
#include(stdio.h)
main()
{ int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0};
char again='y';
while(again=='y'){ srand((int)time(0));
while(i4){ k=(int)rand()%10;
for(j=0;ji;j++)if(k==question[j]){ k=-1;break;}
if(k==-1)continue;question[i]=k;i++;}/*while i*/
for(i=8;i0;i--)/*還有8次機(jī)會(huì)*/
{ A=0;B=0;printf(“n你還剩下%d次機(jī)會(huì)?!?i);
printf(“n請(qǐng)輸入四個(gè)0-9之間的數(shù)字,中間用空格隔開n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]);
for(j=0;j4;j++)
for(k=0;k4;k++)
{ if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/
if(A==4){ again='0';
printf(“n你贏了,還繼續(xù)猜嗎?(y/n)”);
while(again!='y'&&again!='n')
scanf(“...%c”,&again);break;}/*if*/
printf(“n%dA%dB”,A,B);if(i==1){ again='0';
printf(“n你輸了,正確答案是”);
for(j=0;j4;j++)
printf(“%dt”,question[j]);
printf(“n還繼續(xù)嗎?(y/n)”);
while(again!='y'&&again!='n')scanf(“%c”,&again);
printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感謝您玩這個(gè)游戲。”);}
本實(shí)驗(yàn)所有題目均要求使用指針。
1.寫一函數(shù),將一個(gè)3*3的整型矩陣轉(zhuǎn)置。
2.將兩個(gè)按升序排列的數(shù)組合并成一個(gè)數(shù)組,并使合并后的數(shù)組也按升序排列。要求:(1)輸入兩個(gè)數(shù)組(按升序);
(2)將兩個(gè)數(shù)組合并成第三個(gè)數(shù)組;(有能力的同學(xué)可以將第二個(gè)數(shù)組合并到第一個(gè)數(shù)組中)
三、編程題
1.輸入一個(gè)半徑值,分別計(jì)算圓周長、圓面積和球的體積。要求使用符號(hào)常量定義圓周率。#include int main(){ printf(“計(jì)算圓周長面積求面積n”);floatr,c,s,v;scanf(“%f”,&r);# define PI 3.14159265 c=2*PI*r;s=4*PI*r*r;v=4/3*PI*r*r*r;printf(“周長是%.2fn”,c);printf(“表面積是%.2fn”,s);printf(“體積是%.2fn”,v);return 0;} 2.假設(shè)今天是星期三,編程求20天之后是星期幾? #include int main(){ printf(“今天是星期三,20天后是星期幾?n”);int i;i=23%7;printf(“20天后是星期%dn”,i);return 0;} 3.從鍵盤輸入一個(gè)字符,然后將其按字符和整數(shù)這兩種形式輸出。#include int main(){ printf(“輸入一個(gè)字符n”);char i;scanf(“%c”,&i);printf(“整數(shù)形式是%dn”,i);printf(“字母形式是%cn”,i);return 0;} 4.輸入一個(gè)大寫英文字母,將它轉(zhuǎn)化為小寫輸出。#include int main(){ printf(“請(qǐng)輸入一個(gè)大寫英文字母n”);charch;scanf(“%c”,&ch);printf(“%cn”,ch+32);return 0;} 5.求一元二次方程ax^2+bx+c=0方程的兩個(gè)實(shí)根。a、b、c由鍵盤輸入。(默認(rèn)b*b-4*a*c>=0)#include #include int main(){ printf(“求兩個(gè)實(shí)數(shù)根n”);float x1,x2,a,b,c;scanf(“%f%f%f”,&a,&b,&c);x1=((-b)+sqrt(b*b-4*a*c))/2;x2=((-b)-sqrt(b*b-4*a*c))/2;printf(“%.2fn”,x1);printf(“%.2fn”,x2);return 0;} 6.輸入長方形的長和寬,編程求該長方形的周長和面積 #include int main(){ printf(“輸入長和寬n”);inta,b,c,s;scanf(“%d%d”,&a,&b);c=2*(a+b);s=a*b;printf(“周長是%dn”,c);printf(“面積是%dn”,s);return 0;} 7.要將“China”譯成密碼,譯碼規(guī)律是:用原來字母后面的第5個(gè)字母代替原來的字母。例如,字母“A”后面第5個(gè)字母是“F”,用“F”代替“A”。因此,“China”應(yīng)譯為“Hmnsf”。請(qǐng)編寫程序,用賦初值的方法使c1、c2、c3、c4、c5 5個(gè)變量的值分別為‘C’、‘h’、‘i’、‘n’、‘a(chǎn)’,經(jīng)過運(yùn)算,使c1、c2、c3、c4、c5分別變?yōu)椤瓾’、‘m’、‘n’、‘s’、‘f’并輸出。
#include int main(){ printf(“China到Hmnstn”);char a[5]={'C','h','i','n','a'};for(int i=0;i<=5;i++)a[i]=a[i]+5;for(int j=0;j<=5;j++)printf(“%c”,a[j]);printf(“n”);return 0;} 8.有人用溫度計(jì)測量出用華氏法表示的溫度,現(xiàn)輸入華氏溫度f,要求把它轉(zhuǎn)換為以攝氏法表示的溫度c并輸出。(c=5/9(f-32))#include int main(){ printf(“把華氏溫度轉(zhuǎn)換為攝氏溫度n”);printf(“請(qǐng)輸入華氏溫度:n”);floati,j;scanf(“%f”,&i);j=5*(i-32)/9;printf(“%.1fn”,j);return 0;} 9.編寫程序,輸入兩個(gè)實(shí)數(shù),按代數(shù)值由大到小的順序輸出這兩個(gè)實(shí)數(shù)。#include int main(){ printf(“將兩個(gè)實(shí)數(shù)從大到小排列n”);floati,j;scanf(“%f%f”,&i,&j);if(i>j)printf(“輸出%f %fn”,i,j);else printf(“輸出%f %fn”,j,i);return 0;} 10.編寫程序,從鍵盤輸入兩個(gè)整數(shù),輸出其中較小的數(shù)。#include int main(){ printf(“輸出較小的數(shù)n”);inti,j;scanf(“%d%d”,&i,&j);if(i int main(){ printf(“輸入一個(gè)不多于5位數(shù)的正整數(shù)n”);int i;scanf(“%d”,&i);if(i>0&&i<10)printf(“%d是一位數(shù)n”,i);if(i>=10&&i<100)printf(“%d是二位數(shù)n”,i);if(i>=100&&i<1000)printf(“%d是三位數(shù)n”,i);if(i>=1000&&i<10000)printf(“%d是四位數(shù)n”,i);return 0;} 12.編寫程序,不使用系統(tǒng)提供的數(shù)學(xué)函數(shù),編寫程序求一個(gè)實(shí)數(shù)的絕對(duì)值。#include int main(){ printf(“求一個(gè)實(shí)數(shù)的絕對(duì)值n”);int i;scanf(“%d”,&i);if(i>=0)printf(“絕對(duì)值是%dn”,i);if(i<0)printf(“絕對(duì)值是%dn”,-i);return 0;} 13.編寫程序,編寫程序?qū)崿F(xiàn)如下分段函數(shù)。當(dāng)x<-5時(shí),f(x)=|x|+5;當(dāng)-5≤x≤5時(shí),f(x)=x*x;當(dāng)x>5時(shí),f(x)=6x-10。(x定義成實(shí)型數(shù)據(jù))#include int main(){ int i;scanf(“%d”,&i);if(i<-5)printf(“%dn”,-i+5);if(-5<=i&&i<=5)printf(“%dn”,i*i);else printf(“%dn”,6*i-10);return 0;} 14.編寫程序,輸入2015年的一個(gè)月份,輸出該月有多少天。(使用switch語句實(shí)現(xiàn))#include int main(){ printf(“輸入月份n”);intmonth,day;scanf(“%d”,&month);switch(month){ case 2: day=28;printf(“%dn”,day);break;case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31;printf(“%dn”,day);break;case 4: case 6: case 9: case 11: day=30;printf(“%dn”,day);break;} return 0;} 15.編寫程序,判斷某一年是否是閏年。#include int main(){ printf(“判斷某一年是否為閏年n”);int i;scanf(“%d”,&i);if(i%4==0)printf(“%d是閏年n”,i);if(i%4!=0)printf(“%d是平年n”,i);return 0;} 16.編寫程序,編寫程序,根據(jù)輸入的學(xué)生成績輸出相應(yīng)的等級(jí)。90分以上(包括90分)為A等,80~89分為B等,70~79分為C等,60~69分為D等,60分以下為E等。#include int main(){ printf(“求學(xué)生成績相應(yīng)的等級(jí)n”);int i;scanf(“%d”,&i);if(i>=90)printf(“%d是An”,i);else if(i<90&&i>=80)printf(“%d是Bn”,i);else if(i<80&&i>=70)printf(“%d是Cn”,i);else if(i<70&&i>=60)printf(“%d是Dn”,i);else printf(“%d是En”,i);return 0;} 17編寫程序,輸入一個(gè)百分制成績,若大于等于60,則輸出“恭喜!您的成績通過了!”,若小于60,則輸出“抱歉!您的成績未通過!”(要求成績只能是整數(shù))#include int main(){ printf(“請(qǐng)輸入您的成績n”);int i;scanf(“%d”,&i);if(i>=60)printf(“您通過了n”);else printf(“您沒通過n”);return 0;} 18.編寫程序,輸入3個(gè)整數(shù)x、y、z,輸出其中最小值。#include int main(){ printf(“輸出最小值n”);int x,y,z,min1,min;scanf(“%d%d%d”,&x,&y,&z);min1=x(s=(a+b+c)/2,三角形面積area=sqrt(s(s-a)(s-b)(s-c)))#include #include int main(){ printf(“判斷能否構(gòu)成三角形若能求面積n”);floata,b,c,d,s;scanf(“%f%f%f”,&a,&b,&c);d=(a+b+c)/2;if(a>=c+b||b>=a+c||c>=a+b)printf(“不能構(gòu)成三角形n”);else { s=sqrt(d*(d-a)*(d-b)*(d-c));printf(“面積是%.2fn”,s);} return 0;} 20.編寫程序,試編程判斷輸入的正整數(shù)是否既是5又是7的整倍數(shù)。若是,則輸出yes,否則輸出no。
#include int main(){ printf(“判斷一個(gè)正整數(shù)是否既是5又是7的倍數(shù)n”);int i;scanf(“%d”,&i);if(i%35==0)
printf(“yesn”);else
printf(“non”);return 0;} 21.編寫程序,編程實(shí)現(xiàn)以下功能:讀入兩個(gè)運(yùn)算數(shù)(data1和data2)及一個(gè)運(yùn)算符(op),計(jì)算表達(dá)式data1 op data2的值,其中op可為+,?,*,(/執(zhí)行除法運(yùn)算時(shí)假設(shè)data2不為0,用switch語句實(shí)現(xiàn))。#include int main(){ char op;float data1,data2;printf(“請(qǐng)輸入兩個(gè)數(shù)字n”);scanf(“%f%c%f”,&data1,&op,&data2);switch(op){ case'+':printf(“%f+%f=%.2fn”,data1,data2,data1+data2);break;case'-':printf(“%f-%f=%.2fn”,data1,data2,data1-data2);break;case'*':printf(“%f*%f=%.2fn”,data1,data2,data1*data2);break;case'/':printf(“%f/%f=%.2fn”,data1,data2,data1/data2);break;} return 0;} 22.編寫程序,編寫程序,輸入任意一個(gè)1~7之間的整數(shù),將他們轉(zhuǎn)換成對(duì)應(yīng)的表示星期幾的英文單詞。例如:1轉(zhuǎn)換成Monday,7轉(zhuǎn)換成Sunday。(使用switch語句實(shí)現(xiàn))#include int main(){ printf(“請(qǐng)輸入1至7之間任意整數(shù)n”);int i;scanf(“%d”,&i);switch(i){ case 1:printf(“Mondayn”);break;case 2:printf(“Tuesdayn”);break;case 3:printf(“Wednesdayn”);break;case 4:printf(“Thursdayn”);break;case 5:printf(“Fridayn”);break;case 6:printf(“Saturdayn”);break;case 7:printf(“Sundayn”);break;} return 0;} 23.輸出小寫字母的ascii碼對(duì)照表。#include int main(){ printf(“輸出小寫字母的ascii碼n”);charch;ch='a';for(int i=0;i<=25;i++)printf(“%c:%dt”,ch+i,ch+i);printf(“n”);return 0;} 24.輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。#include main(){ int a=0,b=0,c=0,d=0,i=0;char s[10];printf(“請(qǐng)輸入一行不超過十個(gè)字的字符串:n”);gets(s);while(i<10){ if(s[i]>='0'&&s[i]<='9'){ a++;} else if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){ b++;}
else if(s[i]==' '){ c++;}
else { d++;} i++;} printf(“數(shù)字的個(gè)數(shù)是%dn”,a);printf(“字母的個(gè)數(shù)是%dn”,b);printf(“空格的個(gè)數(shù)是%dn”,c);printf(“其他符號(hào)的個(gè)數(shù)是%dn”,d);return 0;} 25.輸出圖形
$
$$$
$$$$$
$$$$$$$ #include #include int main(){ for(int i=0;i<=3;i++){ for(int j=1;j<=7;j++){ if(j>=fabs(4-i)&&j<=fabs(4+i))printf(“$”);else printf(“ ”);} printf(“n”);} return 0;} 26.求s=1+(1+2)+(1+2+3)+? +(1+2+3+?+n),要求n從鍵盤輸入。#include main(){
int sum=0,n,i,a=1;printf(“計(jì)算1+(1+2)+(1+2+3)+??(1+2+3+n)=?n”);scanf(“%d”,&n);while(a<=n){ i=(1+a)*a/2;sum=sum+i;a++;} printf(“輸出sum=%dn”,sum);return 0;}
27.計(jì)算10!#include int main(){ int i=1,a=1;for(i=1;i<=10;i++)a=a*i;printf(“%dn”,a);return 0;} 28.輸出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一個(gè)水仙花數(shù),因?yàn)?53=1^3+5^3+3^3。#include int main(){ printf(“輸出所有的水下花數(shù)n”);for(int i=1;i<=9;i++){ for(int j=0;j<=9;j++){ for(int k=0;k<=9;k++){ if(100*i+10*j+k==i*i*i+j*j*j+k*k*k)printf(“%d%d%d ”,i,j,k);} } } printf(“n”);return 0;} 29.雞兔同籠,上數(shù)共有35個(gè)頭,下有94只腳,雞、兔各有幾只? #include int main(){ for(int x=0;x<=35;x++){ for(int y=0;y<=35;y++){ if((x+y==35)&&(2*x+4*y==94))printf(“雞有%d只,兔子有%d只n”,x,y);} } return 0;} 30.編程找10個(gè)數(shù)中的最大數(shù)以及該數(shù)在數(shù)組中的位置。#include int main(){ printf(“找10個(gè)數(shù)中最大數(shù)極其所在位置n”);int a[10],max;for(int i=0;i<=9;i++)scanf(“%d”,&a[i]);max=a[0];for(int j=1,int k=0;j<=9;j++){ if(max int main(){ printf(“找10個(gè)數(shù)中最小數(shù)極其所在位置n”);int a[10],min;for(int i=0;i<=9;i++)scanf(“%d”,&a[i]);min=a[0];for(int j=1,int k=0;j<=9;j++){ if(min>a[j]){ min=a[j];k=j+1;} } printf(“第%d位n”,k);printf(“最小是%dn”,min);return 0;} 32.編程將一個(gè)數(shù)組中的元素按逆序存放。#include int main(){ printf(“一個(gè)數(shù)組按照逆序存放n”);int a[10],b[10];for(int i=0;i<=9;i++)scanf(“%d”,&a[i]);for(int j=0;j<=9;j++){ b[j]=a[9-j];printf(“%d ”,b[j]);} printf(“n”);return 0;} 33.編程計(jì)算Fibonacci數(shù)列的前50項(xiàng),并把結(jié)果存放在一個(gè)數(shù)組中。(Fibonacci數(shù)列前兩項(xiàng)的值是1。從第3項(xiàng)開始,其值為前兩項(xiàng)之和。)#include intmain(){ int a[50]={0,1};for(int i=2;i<50;i++){ a[i]=a[i-1]+a[i-2];} for(i=0;i<50;i++){ printf(“%ft”,a[i]);} printf(“n”);return 0;} 34.編寫程序,將兩個(gè)字符串連接起來(不使用strcat函數(shù))。#include int main(){ int i=0,j=0;printf(“將兩個(gè)字符串連接起來n”);char ch1[100],ch2[100];printf(“輸入第一個(gè)字符串:”);gets(ch1);printf(“輸入第二個(gè)字符串:”);gets(ch2);while(ch1[i]!='