实验三

test 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中字符串
}

功能:每隔随机的n个空格和n个空白行之后打印hi,April~

 

test 2_1

// 利用局部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;
    printf("p = %ld\n",p); 
    p = p * n;

    return p;
}

 

test 2_2

// 练习:局部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;
}

一致

特性:在调用函数结束时,变量的值任然保存,在之后的调用中以保存的值参与运算

 

#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)
{
    int i;
    long long sum = 0;
    if(n == 0)
        sum = 0;
    if(n > 0)
        sum = 2*func(n-1)+1;
    
    return sum;
}

 

test 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 i, sum = 0;
    if(n == 0 || m == 0)
        sum = 0;
    if(n != 0 && m == 1)
        sum = sum + n;
    if(n < m)
        sum = sum;
    if(n != 0 && m != 0 && m != 1)
        sum = func(n-1, m) + func(n-1, m-1);

    return sum;
}

 

test 5_1

#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 sum = 1.0;
    if(y > 0)
    {
        for(i = 1; i <= y; i++)
        {
            sum = sum * x;
        }
    }
    if(y < 0)
    {
        for(i = 1; i <= -y; i++)
        {
            sum = sum / x;
        }    
    }

    
    return sum;
}

 

test 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 sum = 1.0;
    if(y == 0)
        sum = 1;
    if(y > 0)
        sum = x * mypow(x, y-1);
    if(y < 0)
        sum = mypow(x, y+1) / x;
    
    return sum;
}

 

test 6

#include<stdio.h>
int hannoi_step(int n);
void hannoi_move(int n, char A, char B, char C);

int main()
{
    int n = 0, ans;
    
    while(scanf("%d", &n) != EOF)
    {
        ans = hannoi_step(n);
        
        printf("一共移动了%d步\n", ans);
        hannoi_move(n, 'A', 'B', 'C');
        printf("\n");
        
    }
    
    return 0;
} 

int hannoi_step(int n)
{
    if(n <= 1)
        return 1;
    else
        return 2*hannoi_step(n - 1) + 1;
}

void hannoi_move(int n, char A, char B, char C)
{
    if(n <= 1)
    {
        printf("%c -> %c\n", A, C);
    }
    else
    {
        hannoi_move(n - 1, 'A', 'C', 'B');
        printf("%c -> %c\n", A, C);
        hannoi_move(n - 1, 'B', 'A', 'C');
    }
}

 

test 7

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

int is_prime(int n);   //  判断一个数是不是素数 


int main()
{
    int i, j;
    int ans;
    for(ans = 2; ans <= 20; ans += 2)
    {
        for(i = 1; i <= ans; i++)
        {
            if(is_prime(i))
            {
                for(j = 1; j <= i; j++)
                {
                    if(is_prime(j))
                    {
                        if(ans == i + j)
                        printf("%d = %d + %d\n", ans, j, i);
                    }
                }
            }
        }
    }
    
    return 0;
}
    

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

 

test 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)
{
    int ans = 0, i = 0, m;
    while(s != 0)
    {
        m = (s % 10);
        s = s / 10;
        if(m % 2 == 1)
        {
            m =  m * pow(10,i);
            ans += m;
            i++;
        }
    }
    
    return ans;
}

 

posted @ 2023-04-03 20:58  睡猛龙  阅读(44)  评论(0)    收藏  举报