实验3

任务1:

#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);//在第line行、col列输出text中字符串
}

 

每隔1s输出一个Hi April~ 共输出10个。

任务2:

#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!=%11d\n",i,fac(i));
    
    return 0;
}

long long fac(int n){
    static long long p = 1;
    printf("p = %11d\n",p);
    p = p*n;
    
    return p;
}

 

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

总结:static变量只在第一次被定义,下一次使用该变量会获得上一次运算后的值。是静态储存的特点,只分配固定的储存空间。

任务3:

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

 

 

任务4:

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

任务5:

 

#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;
}
double mypow(int x,int y){
    double t;
    double s;
    if(y>=0){
        if(y == 0)
           s=1; 
        else
           s=x*mypow(x,y-1);
    }
    else{
        t = x*mypow(x,-y-1);
        s = 1/t; 
    }
    
    return s;
    
}

5.2:

#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;
}
double mypow(int x,int y){
    int i;
    double s=1;
    if(y == 0){
       s = 1;
    }else if(y>0){ 
        for(i=1;i<=y;i++){
          s = s*x;}
    }else{
        for(i=1;i<=(-y);i++){
          s = s/x;}
    }
    
    return s; 
}

任务6:

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

任务7:

#include<stdio.h>
int is_prime(int x);

int main() {
    int i, n;
    while (scanf("%d", &n) != EOF) {
        for (i = 2; i <= n; i++) {
            if (!is_prime(i) || !is_prime(n - i))continue;
            printf("%d = %d + %d\n", n, i, n - i);
            break;
        }
    }
    return 0;
}

int is_prime(int x) {
    int i;
    for (i = 2; i *i<= x; i++) {
        if (x % i == 0) {
            return 0;}
        else { 
            return 1; }
    }
}

任务8:

#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 ans,z=0,q=0,j;
    for(;s!=0;)
    {
        ans = s % 10;
        s = s / 10;
        if(ans%2 != 0)
          z = z*10 +ans;    
    }
    for(;z!=0;)
    {
        j = z % 10;
        z = z/10;
        q = q*10 + j;
        
    }
    return q;
}

 

posted @ 2023-04-01 15:40  都行吧  阅读(20)  评论(0编辑  收藏  举报