>
###### 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
}
```