第一篇:中國石油大學(xué)(華東)-C語言學(xué)習(xí)心得
C語言學(xué)習(xí)心得
開課之前信息的收集:在高中的時候就聽過程序員這個職業(yè),當(dāng)時也只知道這些人是寫程序的,然而程序是什么具體我也不知道。終于上大學(xué)了,我看到自己的課表上有C程序設(shè)計,感到很興奮,自己終于要開始學(xué)程序。于是我問大二的學(xué)長學(xué)姐C語言學(xué)習(xí)經(jīng)驗,他們只對我說,有點難學(xué)(可能是他們沒認(rèn)真學(xué)的原因)要好好學(xué),在老鄉(xiāng)會上剛剛找到工作的大四學(xué)長對我講述他求職百度的時候的經(jīng)歷,百度面試官問他說你會什么編程語言,他說會C,C#,java。面試官接著問你最擅長哪個,他說C語言,緊著接面試官問了一系列關(guān)于C語言的問題,一個比一個深入,他答不出來,最后的結(jié)果就是直接被拒絕。臨走的時候百度面試官對他說,只要你能掌握一門編程語言就能要你。學(xué)長告誡我,信管會學(xué)很多課但都是只知道一點,因此要學(xué)既然要學(xué)一門編程就要把它學(xué)精,哪怕其它的編程語言不擅長也沒關(guān)系,我現(xiàn)在就后悔當(dāng)時沒好好學(xué)。知道這些情況后我決心學(xué)好C語言。
開課后學(xué)習(xí)的經(jīng)歷:第一節(jié)課上,老師說由于課程的安排,前四章的知識會講的很快,對編程有用的就說,還有些理論課下自己看看,介紹了C語言的發(fā)展和編程格式輸入和輸出。緊接著的上機(jī)課我寫了人生的第一個程序,覺得很有意思,從此就喜歡上了編程,喜歡這種邏輯的推理與設(shè)計,課前我會將書上的知識點掌握,然后上課認(rèn)真聽老師講課,看看自己有沒有漏掉什么知識點,書上沒說的和老師給的程序要記下來,回來后自己來體驗下這個程序。就這樣到了期中考試,結(jié)果并不好,讓我認(rèn)識到自己不能只停留在programe上,要多做acm上的題目,并且課下要多讀別人的代碼來學(xué)習(xí)方法,就這樣白天在圖書館里看書,晚上回來編程,兩個月后發(fā)現(xiàn)有了很大進(jìn)步,也發(fā)現(xiàn)C語言更有趣了。我也很積極報了來年三月份的計算機(jī)二級等級考試,雖然只學(xué)了一半,但是我想通過自己的學(xué)習(xí)和請教老師,拿到那個證書應(yīng)該不是問題,就這樣我開始了自學(xué)后半部分,發(fā)現(xiàn)真的很暈,果然后面不簡單。但是我想到每件事開始的時候都是困難的,就這樣我堅持了下來,在老師的幫助下我也成功的過了,并且還是優(yōu)秀,而且由于自己事先學(xué)過了,所以下學(xué)期的學(xué)習(xí)并沒有特別困難。
通過學(xué)習(xí)Funcode讓我真正的看到了C語言的應(yīng)用,課上學(xué)的只是C語言的理論,而最重要的是應(yīng)用。經(jīng)過實驗每個函數(shù)的功能,掌握每種函數(shù)的接口,再根據(jù)自己的設(shè)計將這些函數(shù)通過一定的組合和排列,制作出一個屬于自己的動畫,這種感覺真的很棒。我都迫不及待地想給我愛看動畫的小表弟展示我制作的動畫和體驗我設(shè)計的游戲,雖然這些動畫和游戲還比較低級,但我想他看到后一定會很開心。
一年的學(xué)習(xí)經(jīng)歷不僅讓我C語言入門,更教會了我許多許多。教會了我如何自主學(xué)習(xí);教會了我只要你肯努力,就能學(xué)有所成;教會了我堅持自己所喜歡的,并為之汗水,結(jié)果也一定讓人滿意。感謝老師一年來一直以來對我的指導(dǎo)和教誨,課下犧牲自己休息的時間來為我解答問題,為我提前開放作業(yè)題。
結(jié)課之后的打算:希望能通過自己的努力進(jìn)入學(xué)校的ACM團(tuán)隊,繼續(xù)深入的學(xué)習(xí)C語言,畢竟自己也才入門而已,離精通還很遠(yuǎn)。同時大二的時候去蹭課學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)來進(jìn)一步提升自己的編程能力。
第二篇:中國石油大學(xué)(華東)C語言習(xí)題答案
付子文
C語言習(xí)題集
C語言復(fù)習(xí)題
【設(shè)計型】5.1 輸出一行星號
編寫程序在一行中輸出 N 個星號。輸入: N值
輸出: 一行中N個星號 #include
輸入圖形的高 n,輸出如下例(n=5)所示的圖形.***** ***** ***** ***** ***** 輸入:
付子文
C語言習(xí)題集
整數(shù)n例如 5 輸出:
由*組成的高為5的平行四邊形 #include 編寫程序,輸入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n(保留四位小數(shù))#include 付子文 C語言習(xí)題集 i=1,sum=0;while(i<=n){ sum=sum+k/i;i++;k=-k;(用這個式子實現(xiàn)正負(fù)交替)} printf(“sum=%.4lfn”,sum);return 0;} 【設(shè)計型】5.4 分?jǐn)?shù)序列 有一個分?jǐn)?shù)序列:求出其前n項的和。 ...............,輸入整數(shù)n,輸出語句格式為:printf(“sum=%16.10fn”,s);#include 付子文 C語言習(xí)題集 { sum=sum+a*1.0/b;temp=a;a=a+b;b=temp;(幾個式子實現(xiàn)數(shù)值的變換) i++;} printf(“sum=%16.10fn”,sum);return 0;} 【設(shè)計型】5.5 求e的值 編寫程序,從鍵盤輸入整數(shù) n , 求 e 的值.e=1+1/1!+1/2!+1/3!+..+1/n!注意:用 double 型數(shù)據(jù)計算輸出語句:printf(“sum=%16.10fn”,sum);#include 付子文 C語言習(xí)題集 輸入兩個正整數(shù)m和n,求它們的最大公約數(shù)和最小公倍數(shù) 比如,輸入m和n的值分別為14和21,則最大公約數(shù)為7,最小公倍數(shù)為42。#include bei=ji/n;(最小公倍數(shù)求法) printf(“the greatest common divisor is %dn”,n);printf(“the least common multiple is %dn”,bei);return 0;} 【設(shè)計型】5.7 水仙花數(shù) 付子文 C語言習(xí)題集 輸出所有的水仙花數(shù)。所謂的水仙花數(shù)是指一個3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如153是一水仙花數(shù),因為153=13+53+33 輸出語句:printf(“%dn”,n); #include 一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為完數(shù)。例如,6的因子為1,2,3,且6=1+2+3,因此6是完數(shù),從鍵盤上輸入一個正整數(shù),判斷其是否為完數(shù)。如果是,則按照如下格式輸出。比如,輸入6,則輸出Yes,its factors are 1 2 3;如果輸入8,則輸出No #include 付子文 C語言習(xí)題集 { int yinzi,num,i,sum=0;scanf(“%d”,&num);for(yinzi=1;yinzi 輸入兩個正整數(shù)m和n,求出[m,n]區(qū)間的所有素數(shù) 付子文 C語言習(xí)題集 #include if(i%j==0){ tag=0;break;} else tag=1;} if(tag)printf(“ %d”,i);} printf(“n”);return 0; 付子文 C語言習(xí)題集 } 【設(shè)計型】5.10 回文數(shù) 輸入一個數(shù),判斷是否為回文數(shù),如果是,輸出Yes,否則輸出No #include if(num==min)printf(“Yesn”);else printf(“Non”);return 0;} 【設(shè)計型】5.11 貪吃的猴子 有一只猴子,第一天摘了若干個桃子,當(dāng)即吃了一半,但還覺得不過癮,就又多吃了一個。第2天早上又將剩下的桃子吃掉一半,還是覺得不過癮,就又多吃 付子文 C語言習(xí)題集 了兩個。以后每天早上都吃了前一天剩下的一半加天數(shù)個(例如,第5天吃了前一天剩下的一半加5個)。到第n天早上再想吃的時候,就只剩下一個桃子了。輸入: 天數(shù)n 輸出: 第一天的桃子個數(shù),輸出語句為printf(“The monkey got %d peachs in first day.n”,sum);Smaple: Input: 5 Output The monkey got 114 peachs in first day.提示: 問題分析: 總共 t0 日 吃掉 剩余 t0/2+1 t0-(t0/2+1)=t0/2-1 t1=t0/2-1 =>t0=(t1+1)*2 2 t1/2+2 t1-(t1/2+2)=t1/2-2 t2=t1/2-2 =>t1=(t2+2)*2....n-1 tn-2/2+(n-1)tn-2-(tn-2/2+(n-1))=tn-2/2-(n-1)tn-1=tn-2/2-(n-1)=> tn-2=(tn-1+n-1)*2 n 1 0 tn-1=1 #include 付子文 C語言習(xí)題集 int i,t,sum;scanf(“%d”,&t);sum=1;for(i=t;i>1;i--){ sum=(sum+i-1)*2;? } printf(“The monkey got %d peachs in first day.n”,sum);return 0;} 【創(chuàng)新型】5.12 馬戲團(tuán)觀眾人數(shù) 一個馬戲團(tuán)表演,n 個座位全滿,全部門票收入是 120 元,現(xiàn)在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。編程,輸入總?cè)藬?shù) n,輸出滿足要求的男人、女人和小孩人數(shù)的全部方案。若 n 人無法滿足條件,則輸出“No outputn”。輸入: 人數(shù) n 輸出: 男人、女人和小孩人數(shù) #include 付子文 C語言習(xí)題集 for(woman=0;woman<=(total-man);woman++){ child=total-man-woman;sum=50*man+20*woman+1*child;if(sum==1200){ tag=1;printf(“%d %d %dn”,man,woman,child);} } } if(tag==0)printf(“No outputn”);return 0;} 【設(shè)計型】5.13 迭代法 用迭代法求 .求平方根的迭代公式為: 要求前后兩次求出的x的差的絕對值小于10-5。 #include 付子文 C語言習(xí)題集 int main(){ double x,a,b;double i;scanf(“%lf”,&x);b=x;for(i=1;;){ a=i;i=(i+x/i)/2;if(fabs(i-a)<=0.00001){ printf(“The square root of %.2lf is %.5lfn”,b,i);break;} } return 0;} 【設(shè)計型】5.14 cos(x)-x=0 利用以下所示的簡單迭代方法求方程:cos(x)-x=0的一個實根。Xn+1=cos(Xn)迭代步驟如下: (1)取X1初值為0.0; (2)X0=X1,把X1的值賦給X0; (3)X1=cos(X0),求出一個新的X1; (4)若X0-X1的絕對值小于0.000001,執(zhí)行步驟(5),否則執(zhí)行步驟(2); 付子文 C語言習(xí)題集 (5)所求X1就是方程cos(X)-X=0的一個實根,輸出X1,輸出語句為printf(“x=%lf”,x)。 提示:本題x0和x1定義為double類型 #include 付子文 C語言習(xí)題集 編寫程序,求某三位數(shù),該數(shù)值的大小正好是組成這個數(shù)的三個位上的數(shù)字階乘之和。 輸出格式:printf(“%dn”,num);#include 付子文 C語言習(xí)題集 printf(“%dn”,i);break;} } } 【研究創(chuàng)新型】6.1 誰能出線 背景: 電視臺舉辦“超級學(xué)生”才藝大賽,由于報名人數(shù)狂多,所以要先進(jìn)行分組預(yù)賽。按規(guī)定,每10名學(xué)生為一個預(yù)賽小組,評委打出分?jǐn)?shù)(0~100分),各小組第一名可以進(jìn)入下一輪;如果有多名學(xué)生得分相同都是第一名,則可同時進(jìn)入下一輪。 輸入: 按順序給出一個小組10個人的最后得分(int)。 輸出: 能夠出線的學(xué)生序號(0~9)。#include int i,a[10],max;for(i=0;i<10;i++)scanf(“%d”,&a[i]);max=a[0];for(i=0;i<10;i++){ 付子文 C語言習(xí)題集 } } if(max<=a[i])max=a[i];for(i=0;i<10;i++)if(a[i]==max)printf(“%dn”,i);return 0;【設(shè)計型】6.2 統(tǒng)計素數(shù)的個數(shù) 求出 2 到 m 之間(含 m,m<=1000)所有素數(shù)并放在數(shù)組 a 中。輸入:正整數(shù)m 輸出:從小到大的所有素數(shù),及個數(shù)(素數(shù)輸出的時候用%4d來控制)如:輸入:10 輸出:2 3 5 7 4 #include 付子文 C語言習(xí)題集 for(j=2;j 冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直 付子文 C語言習(xí)題集 至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后。至此第一趟結(jié)束,將最大的數(shù)放到了最后。在第二趟:仍從第一對數(shù)開始比較(因為可能由于第2個數(shù)和第3個數(shù)的交換,使得第1個數(shù)不再小于第2個數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個數(shù)(倒數(shù)第一的位置上已經(jīng)是最大的),第二趟結(jié)束,在倒數(shù)第二的位置上得到一個新的最大數(shù)(其實在整個數(shù)列中是第二大的數(shù))。如此下去,重復(fù)以上過程,直至最終完成排序。 由于在排序過程中總是小數(shù)往前放,大數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。編寫程序,對輸入的十個數(shù)按照從小到大排序 #include 付子文 C語言習(xí)題集 } } for(j=0;j<10;j++){ printf(“ %d”,a[j]);} printf(“n”);return 0;} 【設(shè)計型】6.4 插入法排序 如果一個數(shù)組中保存的元素是有序的(由小到大),向這個數(shù)組中插入一個數(shù),使得插入后的數(shù)組元素依然保持有序。 定義一個數(shù)組,長度為11,初始元素為10個,按照從小到大的方式輸入,然后輸入一個要插入的元素,使得插入后仍然有序。#include 付子文 C語言習(xí)題集 { t=a[10];for(j=10;j>i;j--){ a[j]=a[j-1];} a[i]=t;break;} } for(i=0;i<11;i++)printf(“ %d”,a[i]);printf(“n”);return 0;} 【設(shè)計型】6.5 求各位數(shù)字組成的最大數(shù) 任意輸入一個自然數(shù),輸出該自然數(shù)的各位數(shù)字組成的最大數(shù)。例如,輸入 1593,則輸出為 9531。輸入: 自然數(shù) n 輸出: 各位數(shù)字組成的最大數(shù) #include 付子文 C語言習(xí)題集 { int a[12],num,i,j,k,m,t;scanf(“%d”,&num);for(i=0;;i++){ k=num%10;num=num/10;(分離各個位數(shù))a[i]=k;if(num==0)break;} for(m=0;ma[j+1]){ t=a[j+1];a[j+1]=a[j];a[j]=t;} } } for(j=i;j>=0;j--) 付子文 C語言習(xí)題集 printf(“%d”,a[j]);printf(“n”);return 0;} 【設(shè)計型】6.6 數(shù)組逆序輸出 問題描述 從鍵盤上輸入一個數(shù)組(10個元素),將原數(shù)組逆序重新排列后輸出。要求輸出每個元素時以一個空格隔開。提示: 用第一個與最后一個交換。 #include 付子文 C語言習(xí)題集 printf(“%d ”,a[i]);printf(“n”);return 0;} 【設(shè)計型】6.7 求最大值 問題描述 要求從鍵盤輸入10個整型數(shù)據(jù),找出其中的最大值并顯示出來。輸入范例 0 54-710 27 32767 10 1 500 2 輸出范例 32767 提示 先假定第一個元素時最大值,然后和其他的元素一個一個的進(jìn)行比較,直到找到最大值。 #include 付子文 C語言習(xí)題集 { if(a[i]>max)max=a[i];} printf(“%d”,max);printf(“n”);return 0;} 【設(shè)計型】6.8 二維數(shù)組 程序定義了 4× 4 的二維數(shù)組,請編寫程序,給二維數(shù)組賦值,并使數(shù)組下半三角元素中的值乘以n。例如: 數(shù)組中的值為 假設(shè)n為10,則輸出結(jié)果如下:(輸出的數(shù)按照4位寬度來輸出,即%4d) #include 付子文 C語言習(xí)題集 int a[4][4],i,j,n,count=0;for(i=0;i<=3;i++){ for(j=0;j<=3;j++)scanf(“%d”,&a[i][j]);} scanf(“%d”,&n);for(j=0;j<=3;j++){ for(i=j;i<=3;i++){ a[i][j]=n*a[i][j];} } for(i=0;i<=3;i++){ for(j=0;j<=3;j++){ count++;printf(“%4d”,a[i][j]);if(count%4==0)printf(“n”);} 付子文 C語言習(xí)題集 } return 0;} 【設(shè)計型】6.9 在屏幕上顯示楊輝三角形 楊輝三角形,又稱賈憲三角形,帕斯卡三角形,是二項式系數(shù)在三角形中的一種幾何排列。 其實,中國古代數(shù)學(xué)家在數(shù)學(xué)的許多重要領(lǐng)域中處于遙遙領(lǐng)先的地位。中國古代數(shù)學(xué)史曾經(jīng)有自己光輝燦爛的篇章,而賈憲三角的發(fā)現(xiàn)就是十分精彩的一頁。 楊輝三角有如下性質(zhì): 1、每行數(shù)字左右對稱,由1開始逐漸變大,然后變小,回到1。 2、第n行的數(shù)字個數(shù)為n個。 3、每個數(shù)字等于上一行的左右兩個數(shù)字之和。 編寫程序,輸入正數(shù)n,將所有數(shù)據(jù)存儲到二維數(shù)組中,并在屏幕上顯示對應(yīng)的楊輝三角形(注意數(shù)據(jù)之間的空格)。例如:n=5 圖形如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include 付子文 C語言習(xí)題集 int i,j,n;int a[10][10];scanf(“%d”,&n);n=n+1;for(i=0;i 付子文 C語言習(xí)題集 return 0;} 【設(shè)計型】6.10 求二維數(shù)組周邊元素之和 編寫一個程序,求出4×5的二維數(shù)組周邊元素之和。輸入:二維數(shù)組元素 輸出:周邊元素之和 如: 輸入: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 輸出:61 #include 付子文 C語言習(xí)題集 sum1=sum1+a[0][j]+a[3][j];for(i=0;i<4;i++)sum2=sum2+a[i][0]+a[i][4];sum=sum1+sum2-a[0][0]-a[0][4]-a[3][4]-a[3][0];printf(“%dn”,sum);return 0;} 【設(shè)計型】6.11 存儲并輸出一個矩陣 編程,輸入 n,存儲并輸出如下例(n=5)所示的 圖形。1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1 #include 付子文 C語言習(xí)題集 a[i][j]=1; } } for(i=0;i 付子文 C語言習(xí)題集 【設(shè)計型】6.12 給數(shù)組中的元素按順序編號 對數(shù)組 a[10] 中的十個整數(shù)從小到大進(jìn)行連續(xù)編號,輸出各個元素的編號。要求不能改變數(shù)組 a 中元素的順序,且相同的整數(shù)要具有相同的編號。例如數(shù)組是: A=(5,3,4,7,3,5,6,8,9,10)則輸出為:(4,1,3,7,1,4,6,8,9,10)#include 付子文 C語言習(xí)題集 for(i=1;i<11;i++)if(c[m]==a[i]){ printf(“%3d”,i);break;} printf(“n”);return 0;} 【設(shè)計型】8.1 字符轉(zhuǎn)換 描述 提取一個字符串中的所有數(shù)字字符(‘0’...‘9’)將其轉(zhuǎn)換為一個整數(shù)輸出。輸入 一個以回車符為結(jié)束標(biāo)志的字符串(少于80個字符)。輸出 把字符串中的所有數(shù)字字符(‘0’...‘9’)轉(zhuǎn)換為一個整數(shù)并輸出。 #include 付子文 C語言習(xí)題集 n=strlen(word);for(i=0;i<=n;i++){ if(word[i]>='0'&&word[i]<='9'){ printf(“%c”,word[i]);} } printf(“n”);return 0;} 【設(shè)計型】8.2 合并字符串 輸入兩個已經(jīng)按從小到大順序排列好的字符串,編寫一個合并兩個字符串的函數(shù),使合并后的字符串,仍然是從小到 大排列。 輸入: 兩個已經(jīng)排好順序(升序)的字符串 輸出: 一個合并在一起的有序(升序)的字符串 要求: 設(shè)計一個效率盡量高的算法,對每個字符串只掃描一遍就可以了。如果采用先進(jìn)行串連接,然后再進(jìn)行排序的算法,則效率太低了。 #include 付子文 C語言習(xí)題集 int main(){ char a[100],b[100];char n[200],t;int i,j,k,m;gets(a);gets(b);for(i=0;a[i]!=0;i++)n[i]=a[i];for(j=0;b[j]!=0;j++,i++)n[i]=b[j];n[i]='