第三次实验
任务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,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~

任务2
//利用局部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;
}

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

static特性:使用static时,调用完函数后,函数用用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-1);
}
return 0;
}
long long func(int n)
{
long long m;
if(n==0)
m=1;
else
m = 2*func(n-1);
return m;
}

任务4.1
#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 a=1,b=1,c=1;
int k;
int i;
for(i=1;i<=n;i++)
a*=i;
for(i=1;i<=m;i++)
b*=i;
for(i=1;i<=n-m;i++)
c*=i;
int sum;
sum = a/(b*c);
return sum;
}

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

任务5
#include<stdio.h>
void hanoi(unsigned int n,char from,char temp,char to);
void moveplate(unsigned int n,char from,char to);
int a;
int main()
{
unsigned int n;
while(scanf("%u",&n)!=EOF)
{
a=0;
hanoi(n,'A','B','C');
printf("一共移动了%d次\n",a);
}
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);
a+=1;
}

任务6
#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 m=0;
int k;
k = s;
while(k!=0)
{
if((k%10)%2==1)
{
m = m*10+k%10;
k/=10;
}
else
{
k/=10;
}
}
int n;
while(m!=0)
{
n = n*10+m%10;
m/=10;
}
return n;
}

任务7
#include<stdio.h>
int main(){
int n;
int x;
int y;
int arr1[10];
int arr2[6];
int i,j,k;
int t;
for(n=45;n<100;++n){
x=n*n;
y=n*n*n;
for(i=0;i<4;++i)
{
arr1[i]=x%10;
x/=10;
}
for(j=0;j<6;++j)
{
arr2[j]=y%10;
y/=10;
}
for(i=4;i<10;++i)
arr1[i]=arr2[i-4];
for(j=0;j<9;++j)
{
for(i=0;i<9-j;++i)
{
if(arr1[i]>arr1[i+1])
{
t=arr1[i];
arr1[i]=arr1[i+1];
arr1[i+1]=t;
}
}
}
k=0;
for(i=0;i<10;i++){
if(arr1[i]!=i) break;
k++;
}
if(k==10)
printf("%d\n",n);
}
return 0;
}

浙公网安备 33010602011771号