> ###### tags: `程式設計` # 大一上期末考題(函式定義) -2022/1/10- 底下是我位期末做的一些筆記,我的方法並不是快速或最好的,可以參考看看>< (裡面的變數是我自己設的,也可以改成自己喜歡的變數來理解) ((有錯誤的地方務必跟我反映QAQ,以改進,像是縮排或其他打錯之類的)) ## 第一題: 求兩整數m與n之較大值 ```c= #include <stdio.h> int big(int m,int n){ //訂一個函式 int ans; //設一個最大值的結果 if (m>=n){ //如果m<=n,就回傳m ans=m; //把值放進ans } else{ ans=n; //如果n比較大,把值放進ans } return ans; //回傳ans給函式 } int main(){ int m=5; //設一個m=5 int n=1; //設一個n=1 int sum=0; //設一個sum 存最大值 sum=big(m,n); //把函式的最大值給sum } ``` ## 第二題: 求m屬於NU{0}所有位數之和 ```c= #include <stdio.h> int total(int m){ //定一個函式 int sum=0; //定一個總和 while (true){ //當m>0成立時 if (m>0){ //當m/10>0成立時 sum=m%10+sum; //sum就會把m%10的值加起來 m=m/10; //m要變/10之後的整數 } } return sum; //當迴圈條件不成立就會回傳sum值 } int main(){ int m=1234; //設一個變數m int sum=0; //設一個變數sum sum=total(m); //回傳sum的值 } ``` ## 第三題: 判斷m屬於N是否為質數 ```c= #include <stdio.h> int odd(int m){ //設一個函式 int n=2; //設一個除數 while (n<m){ //當除數<被除數時 if (m%n==0){ //如果m%n的餘數==0,return 0(false) return 0; } n=n+1; //每次都要除數+1 } return 1; //如果m%n的餘數都!=0,return 1(true) } int main(){ int m=13; //設一個被除數(變數m) int ans; //設一個接受函式的值 ans=odd(m); //將函式中的值存入ans } ``` ## 第四題: 將整數m的個位數與十位數字交換 ```c= #include <stdio.h> int change(int m){ //設一個函式 int m1; //此變數接m的個位數 int m2; //此變數接m的十位數 m1=m%10; //m1接m的個位數 m2=(m-m1)%100/10; //m2接m的十位數 m=m/100*100+m1*10+m2; //m變成無條件捨去到百位然後再加上m1十位 m2個位 return m; //將m的值回傳 } int main(){ int m=259; //給變數m一個值 int ans; //設一個接函式答案的ans ans=change(m); //將函式的答案存入ans } ``` ## 第五題: 將整數變數之符號位元反向 ```c= #include <stdio.h> int ch(int m){ //設一個函式 if (m>0){ //如果m>0 return -m; //將m變成負的 } return m-2m; //將m變成正的 } int main(){ int m=-5; //給m變數一個值 int ans; //設一個接函式答案的ans ans=ch(m); //將函式的答案存入ans } ``` ## 第六題: 將兩相異變數具較大值者清為0 ```c= #include <stdio.h> int big_zero(int m,int n){ //設一個函式 if(m>n){ //如果m>n m=0; //將m清成0並回傳 return m ; } else{ //否則就將n清為0並回傳 n=0; return n; } } int main(){ int m=5,n=10; //設變數m,n的值 int ans; //設一個接函式答案的ans ans=big_zero(m,n); //將函式的中清為0的答案存入ans } ``` ## 第七題: 將兩整數變數m與n的內容交換 ```c= #include <stdio.h> int ch(int m, int n){ return m=n; } int main() { int m=3,n=1; int i=m; //多一個變數i存m m=ch(m,n); //m會拿到函式裡的n的值 n=i; //n還是拿到m的值(因為i就是m的值 }  ``` ## 第八題: 計算[m,n]之間所有質數之和,m,n屬於N ```c= ``` ## 第九題: 判斷m屬於N是否為完全數 (就是他的因數相加會不會是他自己) ```c= #include <stdio.h> int beauty(int m){ //設一個函式 int sum=0; //設一個完全數的綜合是0 int n=1; //設除數=1 while (m>=n){ //當x>=除數時 if (m%n==0){ //如果m%n的條件成立 sum+=n; //sum就+n } n+=1; //n每次做完都要+1 } sum=sum-m; //sum的最後結果都要再剪掉自己 if (sum==m){ //如果sum等於m return 1; //sum是完全數 } return 0; //不是就不是完全數 } int main(){ int m=12; //給m一個值 int ans; //設一個變數儲存函式的值 ans=beauty(m); //將函式的值帶入ans return ans; //將ans的值回傳 }  ``` ## 第十題: 求兩自然數m與n的最小公倍數 ```c= #include <stdio.h> int cm(int m, int n){ //設一個函式 int i=2; //設除數i int ans; //ans接最後答案 for (i; i<=m && i<=n; i++){ //如果i<=m跟i就做底下動作 if (m%i==0 && n%i==0){ //當m跟n %i都=0時 if (m>=n){ //如果m>=n 回傳m*i return m*i; } return n*i; //如果n>m 回傳n*i } else{ return m*n; } } } int main(){ int m=2, n=7; //給m跟n個一個值 int ans; //ans裝函式的回傳 ans=cm(2, 7); //ans=函式 return ans; //回傳ans }  ``` ## 第十一題: 求自然數m與n是否互質 ```c= int mu(int m, int n){ //設一個函式 int i=2; for(i; m>=i && n>=i; i++){ //當i<=m,n時 if (m%i==0 && n%i==0){ //如果m%i跟n%i都==0 return 0; //回傳0(false) } } return 1; //如果!=0,回傳1(true) } int main(){ int m=2, n=3; //設變數m,n int ans; //ans放最後的答案 ans=mu(m, n); //ans被放入函式的值 return ans; //回傳ans }  ``` ## 第十二題: 將一正整數m四捨五入到十位數 ```c= #include <stdio.h> int fofi(int m){ if (m%10>=5){ //如果m%的餘數>=5,回傳五入的值到m return m/10*10+10; } return m/10*10; //沒有就四捨 } int main(){ int m=327; int ans; ans=fofi(m); //將函式的值存入ans return ans; //回傳ans }   ``` ## 第十三題: 將一浮點數m四捨五入到個位數 ```c= int fofi(float m){ int n; //設一個整數n n=m*10; //將浮點數m*10後放進整數n(小數點一位後的就不用了) if (n%10>=5){ //如果n%的餘數>=,就回傳五入的值(判斷m小數點第一位是否>=5) return n/10+1; } return n/10; //沒有就四捨 } int main(){ float m=13.5; int ans; ans=fofi(m); //將函式的值存入ans return ans; //回傳ans }  ``` ## 第十四題: 求n屬於NU{0}的有效位數共有幾個 ```c= ``` ## 第十五題: 求兩整數m與n是否皆為偶數 ```c= int inte(int m, int n){ if (m%2==0 && n%2==0){ //m跟n都%取餘數如果都==0 return 1; //則回傳1(true) } return 0; //否則回傳0(false) } int main(){ int m=4,n=3; int ans; ans=inte(m,n); //將函式值存入ans return ans; //回傳ans }  ``` ## 第十六題: 求m屬於NU{0}有幾個位數是奇數 ```c= #include <stdio.h> int odd(int m){ //設一個函式 int add=0; //add裝最後有幾個奇數 while (m>0){ //當m>0座以下 if (m%10%2!=0){ //如果m%10%2的餘數!=0(奇數的意思) add+=1; //add就+1 } m=m/10; //每次m都要/10取整數 } return add; //回傳add } int main(){ int m=13579; int ans; ans=odd(m); //將函式的值傳到ans return ans; //回傳ans } ``` ## 第十七題: 計算1+3+5+…+(2n+1), n屬於NU{0} ```c= //for迴圈解法// #include <stdio.h> int mix(int n){ int num; //num存2i+1的答案 int add=0; for(int i=0; i<=n; i++){ //只要i<=num就做add+num(eg:1+3+…) num=i+i+1; add+=num; } return add; //將add回傳 } int main(){ int n=2; int ans; ans=mix(n); //將函式的值存入ans return ans; //回傳ans } ``` ```c= //這是用while的方式解// #include <stdio.h> int mix(int n){ int i=0; int num=0; int add=0; while(i<=n){ num=i+i+1; add+=num; i++; } return add; } int main(){ int n=2; int ans; ans=mix(n); return ans; }  ``` ## 第十八題: 計算n階乘,n屬於NU{0} ```c= #include <stdio.h> int add(int n){ int ans=1; for (int i=1; i<=n; i++){ //當i<=n時ans就會*i(就跟階乘一樣只是式從1開始乘 ans=ans*i; } return ans; //回傳ans } int main(){ int n=5; int ans; ans=add(n); //將函式的值放入ans return ans; //回傳ans } ``` ## 第十九題: 如果c語言不提供乘法,請在此限制下,求m*n的積,m,n屬於N{0} ```c= #include <stdio.h> int acc(int m, int n){ //設一個函式 int i=1; //i=加幾次 int ans=0; //ans存入答案 while (i<=n){ //當i<=n時 ans+=m; //ans就要+m i+=1; //每次i都要+1 } return ans; //回傳ans } int main(){ int m=5, n=2; //設變數m,n的值 int ans; ans=acc(m,n); //ans存放函式的值 return ans; //回傳ans }   ``` ## 第二十題: 如果c語言不提供除法,請在此限制下,求m/n2的商,m,n屬於N{0} ```c= #include <stdio.h> int quo(int m, int n){ //設一個函式 int ans=0; for (int i=1; i<=n; i++){ //設一個迴圈做,當i<=n時,ans就要+m ans+=m; } return ans; //回傳ans } int main(){ int m=5,n=2; int ans; ans=quo(m,n); //將quo的值存入ans return ans; //回傳ans } ```