大一c语言期末考试编程题
1.判斷素數
第一題:判斷是否為素數,若是,則返回1,否則返回0,若輸入1或比1小的數字返回0。
這里有同學可能不明白為什么for (i = 2; i <= sqrt(a); i++)簡單解釋一下:因數都是成對出現的,比如100,其可以分為1和100,2和50,4和25,由此可見其中一個必然小于等于100的開方,另一個則大于等于100的開方。這種判斷素數的方法,應付考試足以,但想要更上一層樓這卻遠遠不夠,大家可以去了解一下篩法。
2.數組排序
期末考試的排序方法常常有兩種:選擇排序、冒泡排序。
這是冒泡排序(從小到大),顧名思義就是每次讓較大的數想氣泡一樣浮上去,對于為什么第一個for語句只需比n-1次,大家想想,現在排5個數,四個較大數浮上去了,最后一個還用比嗎?同樣第二語句為什么只需比n-1-i次也是同樣的道理。
void sortarry1(int *a,int n)// 選擇排序 {int i, j;for(i=0;i<n-1;i++)for (j = i + 1; j < n; j++){if (a[i] > a[j]){int temp;temp = a[i];a[i] = a[j];a[j] = temp;}}return ; }了解了冒泡排序后,選擇排序就十分好理解了,這里就不多說了。對于大多數學校,會這兩種算法應付期末考試足以,但其實排序的方法還有很多,基礎的插入排序,高級一點的快速排序。
3.二分查找
二分查找,分治法里面的一種,有叫折中查找。但二分查找必須有個前提,就是對于查找對象,必須是已經排好序的。一般期末考試常考的是對數組的排序。
我查了一下,網站上大多數的二分查找,都是找到了就返回,可我們常常遇到的題目確實,要返回第一數的位置。所以if (a[mid] >= key)這個語句起了關鍵作用。
4.最大公約數
對于最大公約數,大致思路有兩種,直接循環、采用輾轉相除法。這里直接講第二種,這方法好像高中學過,又名歐幾里得算法。內容就是:兩個整數的最大公約數等于,大的除以小的余數,循環或遞歸,直至整除余0后的整數。至于為什么,百度吧。
當然循環也可實現,
int gcd(int a, int b) {int temp;while ((a % b) != 0){temp = a % b;a = b;b = temp;}return b; }大多數疑問的是為什么不用確保是大數除小數
當a<b時,a%b==a;此時第一個循環就會把位置換過來。
5.最小公倍數
如果會求最大公約數,那么最小公倍數就太簡單了。
最大公倍數 * 最大公倍數 = a*b
至于證明,去問百度吧。接下來差不多都是水題。
6.下述程序段是要實現在數組中查找最大元素和最小元素的下標,請補充。
如果上述題目都會,那么這題目就太簡單了,直接上代碼。
7.猴子吃桃題
猴子吃桃問題,猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第 10 天早上想再吃時,見只剩下一個桃子。求第一天共摘多少桃子?
逆過程思考問題。
8.回文問題
回文數是指正讀和反讀都一樣的正整數。例如 3773 是回文數。求出 [1000 , 9999] 之間的回文數是偶數的最大回文數。
當然這里是題目簡單只有四位數,萬一位數不確定呢?大家可以思考思考,在評論區中討論。
9.二維數組
一個 14*14 方陣 A(i,j) ,其每個元素的值為該元素下標的平方和,求出該矩陣所有對角線元素的累加和 ( 注: i ,j 從 1 到 14) 。
簡單模擬即可。
10.結構體問題
有 5 個學生,每個學生的數據包括學號、姓名、 2 門課程的成績,從鍵盤輸入 5 個學生數據,要求輸出 5 個學生2 門課程總平均成績。
對于結構體來說,一定要細心,要記得定義結構體類型時 后面的 ;。
大致內容就這么多,如有錯誤,還望大佬指出。
總結
以上是生活随笔為你收集整理的大一c语言期末考试编程题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo源码解析(一)
- 下一篇: vue 实现页面静态化