日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大一c语言期末考试编程题

發(fā)布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大一c语言期末考试编程题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.判斷素數(shù)
第一題:判斷是否為素數(shù),若是,則返回1,否則返回0,若輸入1或比1小的數(shù)字返回0。

int is_Prime(int a)//素數(shù)判斷,是則返回1,不是返回0,-1表示輸入的值有問題 {int i = 0;if (a <= 1)return -1;for (i = 2; i <= sqrt(a); i++) {if (a % i == 0)return 0;}return 1; }

這里有同學(xué)可能不明白為什么for (i = 2; i <= sqrt(a); i++)簡單解釋一下:因數(shù)都是成對出現(xiàn)的,比如100,其可以分為1和100,2和50,4和25,由此可見其中一個必然小于等于100的開方,另一個則大于等于100的開方。這種判斷素數(shù)的方法,應(yīng)付考試足以,但想要更上一層樓這卻遠遠不夠,大家可以去了解一下篩法。
2.數(shù)組排序
期末考試的排序方法常常有兩種:選擇排序、冒泡排序。

void sortarry2(int* a, int n) //冒泡排序 {int i, j;for (i = 0; i < n - 1; i++)//此處只需比n-1次for (j = 1; j < n - i; j++)//每次比好后,只需比n-1-i次{if (a[j] < a[j - 1]){int temp;temp = a[j - 1];a[j - 1] = a[j];a[j] = temp;}}return; }

這是冒泡排序(從小到大),顧名思義就是每次讓較大的數(shù)想氣泡一樣浮上去,對于為什么第一個for語句只需比n-1次,大家想想,現(xiàn)在排5個數(shù),四個較大數(shù)浮上去了,最后一個還用比嗎?同樣第二語句為什么只需比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 ; }

了解了冒泡排序后,選擇排序就十分好理解了,這里就不多說了。對于大多數(shù)學(xué)校,會這兩種算法應(yīng)付期末考試足以,但其實排序的方法還有很多,基礎(chǔ)的插入排序,高級一點的快速排序。
3.二分查找
二分查找,分治法里面的一種,有叫折中查找。但二分查找必須有個前提,就是對于查找對象,必須是已經(jīng)排好序的。一般期末考試常考的是對數(shù)組的排序。

int search(int* a, int key, int n)// 二分法查找,返回值為當(dāng)前數(shù)組的下標 {int first = 0;int last = n - 1;int mid = 0;while (first <last){mid = (first + last) / 2;if (a[mid] >= key){last = mid;}else{first = mid + 1;}}if(a[last]==key)return mid;return -1;//表示沒找到 }

我查了一下,網(wǎng)站上大多數(shù)的二分查找,都是找到了就返回,可我們常常遇到的題目確實,要返回第一數(shù)的位置。所以if (a[mid] >= key)這個語句起了關(guān)鍵作用。
4.最大公約數(shù)
對于最大公約數(shù),大致思路有兩種,直接循環(huán)、采用輾轉(zhuǎn)相除法。這里直接講第二種,這方法好像高中學(xué)過,又名歐幾里得算法。內(nèi)容就是:兩個整數(shù)的最大公約數(shù)等于,大的除以小的余數(shù),循環(huán)或遞歸,直至整除余0后的整數(shù)。至于為什么,百度吧。

int GCD(int a, int b) // 最大公約數(shù) {if (b == 0)return 0;elsereturn GCD(b, a % b); }

當(dāng)然循環(huán)也可實現(xiàn),

int gcd(int a, int b) {int temp;while ((a % b) != 0){temp = a % b;a = b;b = temp;}return b; }

大多數(shù)疑問的是為什么不用確保是大數(shù)除小數(shù)
當(dāng)a<b時,a%b==a;此時第一個循環(huán)就會把位置換過來。
5.最小公倍數(shù)
如果會求最大公約數(shù),那么最小公倍數(shù)就太簡單了。
最大公倍數(shù) * 最大公倍數(shù) = a*b
至于證明,去問百度吧。接下來差不多都是水題。

6.下述程序段是要實現(xiàn)在數(shù)組中查找最大元素和最小元素的下標,請補充。
如果上述題目都會,那么這題目就太簡單了,直接上代碼。

void find(int* a,int n,int* max,int* min) {int i;*max = *min = 0;for (i = 1; i < n; i++){if (a[i] > a[*max])*max = i;else if (a[i] < a[*min])*min = i;}return; }

7.猴子吃桃題
猴子吃桃問題,猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第 10 天早上想再吃時,見只剩下一個桃子。求第一天共摘多少桃子?

int main() {int i, count = 1;for (i = 1; i < 10; i++){count = (count + 1) * 2;}printf("%d\n", count);return 0; }

逆過程思考問題。
8.回文問題
回文數(shù)是指正讀和反讀都一樣的正整數(shù)。例如 3773 是回文數(shù)。求出 [1000 , 9999] 之間的回文數(shù)是偶數(shù)的最大回文數(shù)。

int main() {int a1, b1, a2, b2, i, hws;for (i = 1000; i <= 9999; i++){a1 = i / 1000; //千位b1 = i / 100 - a1 * 10; //百位b2 = i / 10 - a1 * 100 - b1 * 10; //十位a2 = i % 10; //個位if((a1 == a2) && (b1 == b2) && (i % 2 == 0))hws = i;}printf("所求的最大回文數(shù)為:%d", hws);return 0; }

當(dāng)然這里是題目簡單只有四位數(shù),萬一位數(shù)不確定呢?大家可以思考思考,在評論區(qū)中討論。
9.二維數(shù)組
一個 14*14 方陣 A(i,j) ,其每個元素的值為該元素下標的平方和,求出該矩陣所有對角線元素的累加和 ( 注: i ,j 從 1 到 14) 。
簡單模擬即可。

int main() {long a[15][15];long i, j, sum = 0;for (i = 1; i < 15; i++)for (j = 1; j < 15; j++)a[i][j] = i * i + j * j;for (i = 1; i < 15; i++)sum = sum + a[i][i];printf("%ld", sum);return 0; }

10.結(jié)構(gòu)體問題
有 5 個學(xué)生,每個學(xué)生的數(shù)據(jù)包括學(xué)號、姓名、 2 門課程的成績,從鍵盤輸入 5 個學(xué)生數(shù)據(jù),要求輸出 5 個學(xué)生2 門課程總平均成績。

struct student {char no[5];char name[8];int score[2]; }; int main() {student record[5];int i,sum = 0,j,ave;printf("Please input 5 students score : ");for (i = 0; i < 5; i++){printf("Please input % d number : ", i + 1);printf("enter number : "); scanf("%s", record[i].no);printf("enter name : "); scanf("%s", record[i].name);for (j = 0; j < 2; j++){scanf("%d", &record[i].score[j]);sum = sum + record[i].score[j];}}ave = sum / 10;printf("total average score is : % d",ave);return 0; }

對于結(jié)構(gòu)體來說,一定要細心,要記得定義結(jié)構(gòu)體類型時 后面的 ;。

大致內(nèi)容就這么多,如有錯誤,還望大佬指出。

總結(jié)

以上是生活随笔為你收集整理的大一c语言期末考试编程题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。