3

鬼上身發表於2024-10-30

任務一:

#include <stdio.h>
char score_to_grade(int score); // 函式宣告
int main() {
  int score;
  char grade;
  while(scanf("%d", &score) != EOF) {
     grade = score_to_grade(score); // 函式呼叫
     printf("分數: %d, 等級: %c\n\n", score, grade);
}
   return 0;
}
// 函式定義
char score_to_grade(int score) {
  char ans;
  switch(score/10) {
  case 10:
  case 9:  ans = 'A'; break;
  case 8:  ans = 'B'; break;
  case 7:  ans = 'C'; break;
  case 6:  ans = 'D'; break;
  default:  ans = 'E';
}
  return ans;
}
//score_to_grade  的功能是將分數分到對應的等第然後輸出
//形參型別是 整型                                                                                                                                                                                                                                                      
//返回值型別是 字元型
// 有問題,缺少break來結束,用了雙引號,語法錯誤。

任務二:

#include <stdio.h>
int sum_digits(int n);  // 函式宣告
int main() {
  int n;
  int ans;
  while(printf("Enter n: "), scanf("%d", &n) != EOF) {
  ans = sum_digits(n);  // 函式呼叫
  printf("n = %d, ans = %d\n\n", n, ans);
}
  return 0;
}
// 函式定義
int sum_digits(int n) {
int ans = 0;
while(n != 0) {
    ans += n % 10;
    n /= 10;
 }
  return ans;
}
//功能是 使得輸入的資料各個位數的數字相加
 //能。 原邏輯是將各位數字相加後返回;改後,用if分支,只有個位的直接輸出,大於等於10的返回 sum_digits(n/10) + n%10
 //int sum_digits(int n) {
 //if(n < 10)
 // return n;
 //return sum_digits(n/10) + n%10;
//}

任務三:

#include <stdio.h>

int power(int x, int n); // 函式宣告
int main() {
  int x, n;
  int ans;
  while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
    ans = power(x, n); // 函式呼叫
    printf("n = %d, ans = %d\n\n", n, ans);
    }
  
  return 0;
}
// 函式定義
int power(int x, int n) {
  int t;
  if(n == 0)
    return 1;
  else if(n % 2)
    return x * power(x, n-1);
  else {
    t = power(x, n/2);
   return t*t;
 }
}
//power功能是求 x值的n次方 
//power是遞迴函式 ,分裝成兩個數的乘數,再依次相乘 

任務四:

#include<stdio.h>
int  is_prime(int n);
int main()
   {
       int i;
       int x=0;
       printf("100以內的孿生素數:\n");
       for(i=1;i<=98;i++)
       {
           if(is_prime(i)+is_prime(i+2)==2)
       {
       
       printf("%d %d\n",i,i+2);
       x++;
   }
       
   }
   printf("100以內的孿生素數有:\n",x);
   return 0;

}
   
   int is_prime(int n){
           int j;
       if(n==1)
        return 0;
        for(j=2;j<n;j++)
        {
            if(n%j==0)
            return 0;
                }        
        return 1;
   }

任務五:

#include<stdio.h>
  int cnt=0;
  void hanoi(unsigned int n,char from,char temp,char to);
  void moveplate(unsigned int n,char from,char to);
  
  int main()
  {
      unsigned int n;
     while(scanf("%d",&n) !=EOF)
     {
        cnt=0;
         hanoi(n,'A','B','C');
         printf("一共移動了%d次\n",cnt);
     }
     
     return 0;
 }
 
 void hanoi(unsigned int n,char from,char temp,char to)
 {     
     if(n==1)
        moveplate(n,from ,to);
     else
     {
     hanoi(n-1,from,to,temp);
     moveplate(n,from,to);
     hanoi(n-1,temp,from,to);
 }
 }
 
 void moveplate(unsigned int n,char from,char to)
 {
     printf("%u:%c--->%c\n",n,from,to);
cnt++;
}

任務六:

#include <stdio.h>
  int func(int n, int m);   // 函式宣告
  
  int main() {
      int n, m;
      int ans;
  
      while(scanf("%d%d", &n, &m) != EOF) {
          ans = func(n, m);   // 函式呼叫
         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
     }
         
     return 0;
 }
 
 int func(int n,int m)
 {
     int s,k,t;
     int i,j;
     for(i=n;i>=n-m+1;i--)
         k*=i;
     for(j=1;j<=m;j++)
         t*=j;
     s=k/t;
     return s;
 }

任務七:

#include <stdio.h>
#include <stdlib.h>
void print_charman(int n);
int main()
{
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n);
    return 0;
}
void print_charman(int n)
{
    int m = 0;
    for (int i = n; i >= 1; i--)
    {
        for (int j = 0; j < m; j++)
        {
            printf("\t");
        }
        for (int j = 0; j < 2 * i - 1; j++)
        {
            printf(" o\t");
        }
        printf("\n");
        for (int j = 0; j < m; j++)
        {
            printf("\t");
        }
        for (int j = 0; j < 2 * i - 1; j++)
        {
            printf("<H>\t");
        }
        printf("\n");
        for (int j = 0; j < m; j++)
        {
            printf("\t");
        }
        for (int j = 0; j < 2 * i - 1; j++)
        {
            printf("I I\t");
        }
        printf("\n");
        m++;
    }
}