zrcnb

导航

实验三

task_1

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define N 80
void printText(int line, int col, char text[]); // 函数声明
void printSpaces(int n); // 函数声明
void printBlankLines(int n); // 函数声明
int main()
{
int line, col, i;
char text[N] = "hi, May~";
srand(time(0)); // 以当前系统时间作为随机种子
for(i=1; i<=10; ++i)
{
line = rand()%25;
col = rand()%80;
printText(line, col, text);
Sleep(1000); // 暂停1000ms
}
return 0;
}
// 打印n个空格
void printSpaces(int n)
{
int i;
for(i=1; i<=n; ++i)
printf(" ");
}
// 打印n行空白行
void printBlankLines(int n)
{
int i;
for(i=1; i<=n; ++i)
printf("\n");
}
// 在第line行第col列打印一段文本
void printText(int line, int col, char text[])
{
printBlankLines(line-1); // 打印n-1行空行
printSpaces(col-1); // 打印n-1列空格
printf("%s", text);
}

功能:动态输出hi~may

 

task_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;

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

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

运行结果与分析结果一致

首次初始化后再调用函数时就不再进行初始化,作用域仅在定义它的函数区域内

task_3:

#include <stdio.h>
long long fun(int n); // 函数声明
int main()
{
int n;
long long f;
while (scanf("%d", &n) != EOF)
{
f = fun(n); // 函数调用
printf("n = %d, f = %lld\n", n, f);
}
return 0;
}

long long fun(int n)
{
    static int s=1;
    int k;
    if(n>1)
    {
        s=s*2;
        fun(n-1);
    }
    if(n==1)
        {
            k=s;
            s=1;
            return 2*k-1;
        }
    
}

 

task_4:

#include <stdio.h>

int m = 0;

void move(char a, int n, char c)
{
       m++;
    printf("第%d个盘:%c-->%c.\n", n, a, c);
}

void hanoi(int n, char a, char b, char c)
{
    if (n == 1)
        move(a, 1, c);
    else
    {
        hanoi(n - 1, a, c, b);
        move(a, n, c);
        hanoi(n - 1, b, a, c);
    }
}

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

task_5

#include<stdio.h>
#include<math.h>
int is_prime(int n);
int main()
{
    int n,s1,s2,f1,f2;
    while(scanf("%d",&n)!=EOF)
    {
    for(s1=2;s1<=(n/2);s1++)
    {
        f1=is_prime(s1);
        if(f1==1)
        {
            s2=n-s1;
            f2=is_prime(s2);
            if(f2==1)
            {
                printf("%d = %d + %d\n",n,s1,s2);
            }
        }
    }
    }
    return 0;
}

int is_prime(int s)
{
    int i,t;
    for(i=2;i<s;++i)
    {
        if(s%i==0) 
        {
            break;
        }
    }
    if(i==s) return 1;
    else return 0;
}

task_6

#include <stdio.h>
long fun(long s); // 函数声明
int main()
{
long s, t;
printf("Enter a number: ");
while (scanf("%ld", &s) != EOF)
{
t = fun(s); // 函数调用
printf("new number is: %ld\n\n", t);
printf("Enter a number: ");
}
return 0;
}
long fun(long s)
{
    int i,m=0,k=0;
    while(s!=0)
    {
        i=s%10;
        s/=10;
        m=m*10+i;
    }
    while(m!=0)
    {
        i=m%10;
        m/=10;
        if(i%2==1)
        {
            k=k*10+i;
        }
    }
    return k;
}

 

posted on 2022-04-19 16:06  小张张1  阅读(22)  评论(3编辑  收藏  举报