实验3

实验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';break;	
	}
	return ans;
}
//函数score_to_grade的功能是进行对成绩的判断,形参类型为int整数型,返回值类型是char字符
//输入的score如果是负的或者超过100会输出E 

  

实验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,ans);}        
    return 0;    
    }
int sum_digits(int n)
    {int ans=0;
    while(n!=0){
        ans+=n%10;
        n/=10;
    }
        return ans;

    }
    
//函数sum_digits的功能是什么? Q:功能是对于整数n除以10得到整除数,再取余,再除,得到数字每一位的和
//问题2:如果保持main代码和函数sum_digits声明不变,把函数sum_digits定义成如下实现方式,能实现同等的效果吗?如果不能实现同等效果,分析原因。如果能实现同等效果,说明两种实现方式背后的算法思维区别。
//可以实现,但是是用迭代思维 

实验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");}
}
    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;
    }
 }

实验4

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

实验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 ans=0;
int main(){

    unsigned int n;
    while(scanf("%u",&n)!=EOF){

    hanoi(n,'A','B','C');

    printf("一共移动了%d次\n",ans);
    system("pause");

}
    return 0;

}
void hanoi(unsigned int n,char from,char temp,char to)
{

    if(n==1){
    ans+=1;
    moveplate(n,from,to);

}
    else
    {

        hanoi(n-1,from,to,temp);
        ans+=1;
        moveplate(n,from,to);

        hanoi(n-1,temp,from,to);


    }

}
void moveplate(unsigned int n,char from,char to)
{int ans=0;
    printf("%u:%c-->%c\n",n,from,to);
    ans+=1;
}

实验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)
{

    if(m==0||n==m)
    return 1;
    if(m>n)
    return 0;
        return func(n-1,m)+func(n-1,m-1);
    
}

迭代

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

递归结果

迭代结果

实验7

#include <stdio.h>
#include <stdlib.h>
void print_charman(int n);
int i;
int main() {
    int n,m;

    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用
       
    return 0;
}


    
void print_charman(int n) {
    int i,j;
 
     for (j=0;j<n;j++){
    
for(i=1;i<=j;i++)
    printf("   \t");
for (i=1;i<=2*(n-j)-1;i++)
    printf(" O \t");
printf("\n");
for(i=1;i<=j;i++)
    printf("   \t");
for (i=1;i<=2*(n-j)-1;i++)
    printf("<H>\t");
printf("\n");    
for(i=1;i<=j;i++)
    printf("   \t");
    for (i=1;i<=2*(n-j)-1;i++)
    printf("I I\t");
printf("\n");
}
}

 

posted @ 2024-10-29 21:46  nightmare777  阅读(16)  评论(0)    收藏  举报