吉林大学超星MOOC学习通高级语言程序设计 C++ 实验03 模块化程序设计(2021级)
一. 單選題(共1題,16.6分)?
1.?(單選題)
有函數定義:int f(int x,int y);則下列函數調用正確的為(??? )
- A.int n; n=f();
- B.?int n,a=0,b=1;n=int f(x,y);
- C.?int n,a=0,b=1;n=f(a,b);
- D.int n,a=0,b=1;?n=f(int a,int b);
我的答案:?C
?二. 程序題(共5題,83.4分)
2.?自守數
題目編號:Exp03-Extend01,GJBook3-12-04
題目名稱:自守數
題目描述:若一個正整數a滿足條件 a^2 的尾數等于a,則稱a為自守數,例如:
25^2=625 、76^2=5776 、9376^2=87909376 都是自守數。
編寫程序,求小于等于n的所有自守數。
輸入:從鍵盤隨機輸入一個正整數n(<10000000)。
輸出:輸出小于n的所有自守數,每個數之間以一個西文空格間隔。
?
樣例1:
輸入:10 輸出:1?5?6樣例2:
輸入:100 輸出:1?5?6?25?76 #include <iostream>using namespace std;int main() {int n = 0;cin >> n;long long x = 0;cout << "1 ";for (int i = 2;i < n;i++){ int j = 10000000;x = i * i;while (j / i >= 10){j /= 10;}x %= j;if (x == i)cout << i << " ";}return 0; }談一談對這個題的想法:x=a*a
1.首先,厘清題目對 “自首數”的定義
2.其次,題目的關鍵在于如何尋找x的尾數
下面重點來講第二點:仔細思考后會發現,對 x 取逆序用處不大,用數組也不是很方便;
所以我們可以將其轉化為求a的位數再加1,最后 取模即可。
那么問題又來了,如何求a的位數呢?
就把這個任務交給while循環吧,
int j = 10000000; while (j / i >= 10) {j /= 10; }最后得出的j值恰好為a的位數再加1,
x%j恰好為x的尾數 ,再與a比較即可
?3.?組合問題
題目編號:Exp03-Basic01,GJBook3-05-02
題目名稱:組合問題
題目描述:編寫程序,輸入m,n的值,計算并輸出函數f的值。
輸入:一個整數m和一個整數n(m,n≤20)。
輸出:函數f的值。
?
樣例1:
輸入:-1??2 輸出:-1樣例2:
輸入:2??2 輸出:1如果對階乘還不熟悉的同學建議看吉林大學超星MOOC學習通高級語言程序設計 C++ 實驗02 分支與循環程序設計(2021級)(1)_S_CuRrY666的博客-CSDN博客?還是閑話少敘,直接上代碼
#include <iostream>using namespace std;long long jiec(int n) {long long sum = 1;for (int i = 1;i <= n;i++){sum *= i;}return sum; } int main() {int m, n;cin >> m >> n;if ((m < n) && (m > 0) && (n > 0))cout << "0" << endl;else if ((m == n) && (m > 0) && (n > 0))cout << "1" << endl;else if ((m > n) && (m > 0) && (n > 0)){long long sum;sum = jiec(m) / jiec(m - n) / jiec(n);cout << sum << endl;}else cout << "-1" << endl;return 0; }這道題寫了一個jiec的函數,旨在求階乘,因為涉及到的階乘有三個,所以把階乘放在主函數里會十分不方便?
4.?逆序數
題目編號:Exp03-Basic02,GJBook3-05-06
題目名稱:逆序數
題目描述:編寫函數,求任意位自然數的逆序數,例如5432就是2345的逆序數。
輸入:任意一個整數(<10^18) 。
輸出:如果輸入的不是自然數,則輸出NULL;否則輸出對應的逆序數。
樣例1:
樣例2:
輸入:999999999999999999 輸出:999999999999999999樣例3:
輸入:-1357 輸出:NULL #include <iostream>using namespace std;int main() {long long m;int n = 0;cin >> m;if (m <= 0)cout << "NULL" << endl;else if (m > 0){ while (m > 0) { n++;int a = 0;a = m % 10;if (a != 0 || n != 1)printf("%d", a);m /= 10;}}return 0; }這個程序最重要的一點就是中間的while循環 ,觀察輸出樣例,若輸入的數尾數為0,則將其略去,所以對最后一個數要判斷一下,先定義n=0,進入while循環后n=1,若a=0,不輸出,隨后直接逆序輸出即可。
5.?多邊形周長
題目編號 :Exp03-Basic03
題目名稱:多邊形周長
題目描述:編寫程序,求由鍵盤按順時針方向輸入n(0<n<=10)個頂點坐標的多邊形周長(測試數據已保證當n>2時,各點按輸入方向依次連接可構成封閉的n邊形)。
輸入:第一行輸入一個整數,作為n值;以后每行兩個浮點數(double),為多邊形各頂點的坐標。
輸出:多邊形的周長,精確到小數點后2位。
?
樣例1:
輸入: 4 0??0 0??1 1??1 1??0 輸出:4.00樣例2:
輸入: 1 2?3 輸出: 0.00樣例3:
輸入: 2 2?3 2?4 輸出: 1.00 #include <iostream> #include <iomanip> #include <cmath>using namespace std;double dist(double x1, double y1, double x2, double y2) {double d = 0;d = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));return d;} int main() {int n = 0;cin >> n;double sum = 0, arr[10][2];for (int i = 0;i < n;i++){for (int j = 0;j < 2;j++){cin>>arr[i][j];}}if (n == 1)cout << "0.00" << endl;if (n == 2){sum = dist(arr[0][0], arr[0][1], arr[1][0], arr[1][1]);//printf("%.2lf", sum);cout << fixed << setprecision(2) << sum << endl;}if (n > 2){for (int i = 0;i < n - 1;i++){for (int j = 0;j < 1;j++){sum += dist(arr[i][j], arr[i][j + 1], arr[i + 1][j], arr[i + 1][j + 1]);}}sum += dist(arr[0][0], arr[0][1], arr[n - 1][0], arr[n - 1][1]);//printf("%.2lf", sum);cout << fixed << setprecision(2) << sum << endl;}return 0; }將n分三種情況討論比較好,別忘了當n>2時,圖形是首尾閉合的。?
6.素數判斷
【計2014級期中試題】素數判斷。
問題描述:一個大于1的自然數,只能被1和它本身整除,不能被其它除0以外的自然數整除,則該數稱之為素數。編寫函數,判斷一個整數是否為素數。
注:判斷素數部分必須編寫成一個獨立于main()函數的其它函數。
輸入:一個大于1的自然數
輸出:根據是否是素數輸出Y/N
樣例1:
輸入:3
輸出:Y
樣例2:
輸入:51
輸出:N
#include <iostream>using namespace std;char su(int x) {char ch = 'Y';for (int i = 2;i < x;i++){if (x % i == 0){ch = 'N';break;}else continue;}return ch; } int main() {int m;cin >> m;cout << su(m) << endl;return 0; }判斷素數的時候,for循環中的i一定要從2開始,因為任何數模1都為0,不能達到我們判斷素數的要求
總結
以上是生活随笔為你收集整理的吉林大学超星MOOC学习通高级语言程序设计 C++ 实验03 模块化程序设计(2021级)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RDLC报表---自定义数据集
- 下一篇: Win32汇编--加载菜单资源