实验三

task1

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define N 80

void print_text(int line, int col, char text[]);//函数声明
void print_spaces(int n);//函数声明
void print_blank_lines(int n);//函数声明

int main(){
    int line, col, i;
    char text[N] = "hi , April~";
    
    srand(time(0));//以当前系统时间作为随机种子
    
    for(i = 1; i <= 10; ++i){
        line = rand() % 25;
        col = rand() % 80;
        print_text(line, col, text);
        Sleep(1000);//暂停1000ms 
    }
    return 0;
} 

//打印n行空格
void print_spaces(int n){
    int i;
    
    for(i = 1;i <= n; ++i )
        printf(" ");
}

//打印n行空白行
void print_blank_lines(int n){
    int i;
    
    for(i = 1;i<= n; ++i )
        printf("\n");
    
}
 

//在第line行第col列打印一段文本
void print_text(int line, int col, char text[]){
    print_blank_lines(line - 1);//打印(line - 1)行空行 
    print_spaces(col - 1);//打印(col - 1)行空格 
    printf("%s", text);//z在第line行,col列输出text中字符串 
}

作用:在屏幕上间隔1s生成10个“hi,April~”

 

task2

//利用局部static变量的特性,计算阶乘

#include<stdio.h>
long long fac(int n);//函数声明

int main(){
    int i,n;
    
    printf("Enter n: ");
    scanf("%d",&n);
    for(i = 1;i <= n; ++i)
        printf("%d! = %lld\n", i, fac(i));
        
    return 0;
} 

//函数定义
long long fac(int n){
    static long long p = 1;//用static会变 
    printf("p = %lld\n", p);
    p = p*n;
    
    return p;
} 

//练习:局部static变量特性

#include <stdio.h>
int func(int,int);//函数声明 

int main(){
    int k = 4, m = 1, p1, p2;
    
    p1 = func(k,m);//函数调用
    p2 = func(k,m);//函数调用
    printf("%d, %d\n", p1, p2);
    
    return 0; 
} 

//函数定义
int func(int a, int b){
    static int m = 0, i = 2;
    
    i += m + 1;
    m = i + a + b;
    
    return m;
} 

 

task3

#include<stdio.h>
long long func(int n);//函数声明

int main(){
    int n;
    long long f;
    
    while(scanf("%d", &n) != EOF){
        f = func(n);//函数调用
        printf("n = %d,f = %lld\n", n, f); 
    }
    
    return 0;
} 

long long func(int n){
    long long f;
    
    if(n == 0)
       f = 0;
    else
       f = 2*func(n-1) + 1;
    return f;
}

task4

//递归算组合数 
#include<stdio.h>
int func(int n, int m);//函数声明 

int main(){
    int n, m;
    
    while(scanf("%d%d", &n, &m) != EOF)
         printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m));//函数调用 
         
    return 0;
}

int func(int n, int m){
    int ans;
    
    if(n == m || m == 0)
        ans = 1;
    else if(n < m)
        ans = 0;
    else
        ans = func((n - 1),(m)) + func((n - 1),(m-1));
        
    return ans;
}

task5

#include <stdio.h>
#include <math.h>

double mypow(int x, int y);

int main() {
    int x, y;
    double ans;
    
    while(scanf("%d %d", &x, &y) != EOF) {
        ans = mypow(x, y);        
        printf("%d的%d次方: %g\n\n", x,y,ans);   
    }
    
    return 0;
}

double mypow(int x, int y) {
    double ans;
    int i,y1;
    ans=1;
    i=1;
    if(y>0) {
        while(i<=y) {
        ans=ans*x;
        i++;
        }
    }
    else if(y<0) {
        y1=-y;
        while(i<=y1) {
        ans=ans/x;
        i++;
        }
    }
    else ans=1;
    
    return ans;
}

//计算x的y次方 mypow
#include<stdio.h>
double mypow(int x, int y);//函数声明

int main(){
    int x, y;
    double ans;
    
    while(scanf("%d%d", &x,&y) != EOF){
        ans = mypow( x, y);//函数调用
        printf("%d的%d次方:%g\n\n", x, y, ans); 
    }
    return 0;
    system("pause");
} 

double mypow(int x,int y){
    double ans;
    
    if(y == 0)
        ans = 1;
    else if(y > 0)
        ans = x * mypow(x, y - 1);
    else if(y < 0)
        ans = 1/(mypow( x, -y));
    
    return ans;
}

task6

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
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;
    int i;
    while(scanf("%u",&n)!=EOF){
        hanoi(n,'A','B','C');
        i=pow(2,n)-1;
        printf("\n一共移动了:%d次\n",i);
        }
    
    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);
}

task 7

#include <stdio.h>
#include <math.h>

int is_prime(int n);

int main() {
    int i,j,k;
    
    for(i=2;i<=10;i++) {            
        for(j=2;j<=i;j++) {                        
            if(is_prime(2*i-j) == 1 && is_prime(j) == 1) {
                printf("%d = %d + %d\n",2*i,j,2*i-j);
                break;
            }                
        }
    }
    
    return 0;
}

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

task8

#include<stdio.h>
#include<math.h>
long func(long s);//函数声明

int main(){
    long s, t;
    
    printf("Enter a number:");
while (scanf("%ld", &s) != EOF)    {
        t = func(s);//函数调用
        printf("new number is:%ld\n\n", t);
        printf("Enter a number: "); 
    }
    
    return 0;
} 

long func(long s){
    long i,j=0;
    
    while(s!=0) {
        i=s%10;
        s=s/10;
        
        if(i%2==1) {
            j=j*10+i;
        }
    }
    
    while(j!=0) {
        i=j%10;
        j=j/10;
        s =s*10+i;
    }
    
    return s;

}

 

posted @ 2023-04-03 16:46  扎瀮  阅读(16)  评论(0编辑  收藏  举报