实验3_C语言函数应用编程

发布时间 2023-11-05 21:41:57作者: liritty

task1.c

#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, November~";

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

 功能:

随机在屏幕中的一个位置上生成  hi, November~,并重复执行十次

 

 task2_1.c

//利用局部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;
    
    p = p * n;

    return p;
} 

 

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

    return p;
} 

 task2_2.c

// 练习:局部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.c

#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 fn, a, i;
    for(a = 2, i = 1 ;i<n; i++){
        a = a*2;
    } 
    fn = a - 1;
    return fn;
}

 

task4_1.c

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

 

 task4_2.c

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

for(;m < n; ){
return func( --n, m) + func( n, --m);

}
}

 task 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 int n;
    while (scanf("%u",&n) != EOF ){
    hanoi(n, 'A', 'B', 'C');
    printf("一共移动了%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 form, char to){
    printf("%u:%c-->%c\n", n, form, to);
    i ++;
}

 

 task 6

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

long func(long s);
int j;

int main(){
    
    long s, t, i = 0;
    int d = 0, m = 0, j = 0;
    
    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 i = 0, t = 0, d = 0;
    long m = s ; 
    int x[100] = {0, 0};
    do{ 
        d = m % 10;
        if(d != d/2 + d/2){
            x[i++] = d;
        } 
        else{ 
        }  
        m = m / 10;                               
    }    
    while(m > 0);
    
    for(j = 0 ;j <= i;){
        int a, b; 
        for(a = 0, b = 1 ;a < j;){
            b = b * 10;
            a++;
        }
        t += x[j] * b;
        j++;
    }
    return t;
}