实验三

试验任务一

#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=%d\n",p);
p = p * n;
return p;
}

 代码2结果:8,17。因为static使得m和i的值一直在变。

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

 总结:1.结果预期与我的一致。

            2.局部static的作用:修饰的改变量的值不会因为函数终止而丢失。

试验任务2

#include <stdio.h>
void printSymbol(int n, char symbol); // 函数声明
int main()
{
  int n;
  char symbol;
  while( scanf("%d %c", &n, &symbol) != EOF )
 {
    printSymbol(n, symbol); // 函数调用
    printf("\n");
 }

 return 0;
}
 
 void printSymbol(int n,char symbol){
     int a;
     for(a=0;a<n;a++)
     printf("%c",symbol);
     
 }

 

#include <stdio.h>
void printSymbol(int n, char symbol); // 函数声明
int main()
{
  int n;
  char symbol;
  while( scanf("%d %c", &n, &symbol) != EOF )
 {
    printSymbol(n, symbol); // 函数调用
    printf("\n");
 }

 return 0;
}
 
 void printSymbol(int n,char symbol){
     if(n==1)
     printf("%c",symbol);
     else{
     
     printSymbol(n-1,symbol);
     printf("%c",symbol);
        }
 }

 

我觉得第一种好,因为通俗易懂。

第二种就是另一种思维了。

试验任务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){
    
    long long ans;
    if(n==1)
    {
    ans=1;
    }
    else
    ans=2*fun(n-1)+1;
    return ans;
 }   
    

 

 试验任务4

#include<stdio.h>
int isPrime(int);
int main()
{
  int ans,x,i=0;
 for(x=101;x<201;x++)
 {
    ans=isPrime(x);
    if(ans==0)
    {
    printf("%4d",x); 
     i++;
    }  
 }
 
printf("\n");
printf("101~200之间一共有%d个非素数!",i);

return 0;
} 

int isPrime(int x){
    int b,z;
    z=0;
    for(b=2;b<x;b++)
    {
       if(x%b==0)
      { 
        return 0; break;
      }
       else
        z++;
    }
    if(z!=0)
    return 1;
}

 

试验任务5

#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 a,b,mum,num;
    mum=0;
    num=0;
    while(s!=0)
    {
       a=s%10;
       s=(s-a)/10;    
       if(a%2==1)    
       mum=mum*10+a;
    }

    while(mum!=0)
    {
      b=mum%10;    
      num=num*10+b;    
      mum=(mum-b)/10;    
    }
    
    return num;
   }

 实验任务六

#include <stdio.h>
double fun(int n); 
double funx(int x);// 函数声明
int main()
{
int n;
double s;
printf("Enter n(1~10): ");
while (scanf("%d", &n) != EOF)
{
s = fun(n); // 函数调用
printf("n = %d, s= %f\n\n", n, s);
printf("Enter n(1~10): ");
}
return 0;
}

double funx(int x){
    int t,a;
    a=-1;
    if(x==1)
    t=1;
    else
    t=a*x*funx(x-1);
    return t;
    

}
double fun(int n){
    int x;
    double a;
    a=0;
    for(x=1;x<=n;x++)
    {
    a+=1/funx(x);
        
    }
    
    
    return a;
    
}

 实验总结:

递归是个好东西,要熟练使用。

把不同的变量,如全局变量,局部变量,加了static又有了什么变化,搞清楚。

代码一定要打整齐(虽然我还在努力的把代码搞整洁)

posted @ 2021-11-29 13:00  zwygyyds  阅读(14)  评论(3编辑  收藏  举报