实验三

test 1:

代码

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

截图
image

问题一:将分数转化为等级制;
问题二:没有break语句终止,ans的赋值始终为E;
字符类型常量用' ' 来界定,题中使用的是双引号;

test 2

代码

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

截图
image

问题一:该数每个数位上的数字之和;
问题二:能;第一种就是普通循环运算;
第二种就是递归迭代,最后得到一个能够摆脱迭代的值;

test 3

代码

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

截图
image

问题一:计算x的n次幂;
问题二:是;

n = 0时,power(x,n)=1;

n%2=0时,power(x,n)=power(x,n/2)*power(x,n/2);

n%2≠0时,power(x,n)=x*power(x,n-1);

test 4

代码

#include<stdio.h>
#include<stdlib.h>
int is_prime(int i);
 int main(){
  int sum=0,i;
 printf("100以内的孪生素数:\n");
  for(i =2;i<100;++i){
   if(is_prime(i)&&is_prime(i+2)){
		   printf("%d %d\n",is_prime(i),is_prime(i+2));
		   ++sum;
	   }
  }
  printf("100以内的孪生素数共有%d个",sum);
  system("pause");
  return 0;
}


 int is_prime(int i){
  int f;
  for(f = 2;f <=i/2;++f){
   if(i%f == 0)
	   break;}

   if(f>i/2)
     return i;
  return 0;
 }

截图
image
小结:

  1. 把i打成1了,而且一开始的考虑很复杂,多先思考!

test 5

代码:

#include<stdio.h>
#include<stdlib.h>
void hanoi(unsigned int n,char from,char temp,char to);
void moveplate(unsigned int n,char from,char to);
int i=0;

int main(){
	unsigned n;
	while(scanf("%u",&n)!=EOF)
	{        
		i=0;
		hanoi(n,'A','B','C');
		printf("\n一共移动了%d次\n",i);
	}
	system("pause");
		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);
	i++;
}

截图:
image

test 6

代码:

#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){
	double up=1,down=1;
	int i;
	if(m==0)
		return 1;
	for(i=n;i>=(n-m+1);--i)
		up*=i;
	for(i=m;i>=1;--i)
		down*=i;
	return up/down;
}

截图:
image
代码二:

#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){
     if(m==0||m==n)
		return 1;
	 else if(m>n)
		 return 0;
	 else
	return  func(n-1,m)+ func(n-1, m-1);
}

截图:
image

test 7

代码:

#include <stdio.h>
int gcd(int a,int b,int c);
// 函数声明
// 待补足....


int main() {
    int a, b, c;
    int ans;

    while(scanf("%d%d%d", &a, &b, &c) != EOF) {
        ans = gcd(a, b, c);     // 函数调用
        printf("最大公约数: %d\n\n", ans);
    }

    return 0;
}

int gcd(int a,int b,int c){
	int i,min=a;
	if(min>b)
		min=b;
	if(min>c)
		min=c;
	

	for(i=min;i>=1;--i){
		if(a%i==0&&b%i==0&&c%i==0){ break; }
}
	return i;
}
// 函数定义
// 待补足...

截图:
image

posted @ 2025-04-06 08:17  邹馨伦  阅读(32)  评论(0)    收藏  举报