实验四

一、实验任务1:

不可以。因为每个函数只有一个返回值,而一元二次方程的根有两个,函数不能有两个返回值,所以不能设计成以函数返回值的形式返回给主调函数。

 

二、实验任务2:

1.ex2_1.cpp源代码:

 

//利用局部static变量计算阶乘

#include<stdio.h>
long long fac(int n);  //函数声明

int main()
{
    int i,n;
    
    printf("Enter n:\n");
    scanf("%d",&n);
    
    for(i=1;i<=n;++i)
       printf("%d! = %11d\n",i,fac(i));
       return 0; 
 } 
 
 //函数定义
 long long fac(int n)
 {
     static long long p=1; 
     p=p*n;
    return p; 
  } 

 

 

2.加入一行源代码之后运行结果截图:

 

 

3.ex2_2.cpp源代码:

//练习局部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",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)理论分析结果与实验运行结果一致,均为p1=8,p2=17.

(2)总结局部static变量的特性:

   i.赋初始值只进行一次,当再次进入该函数时,将保留上次的结果

   ii.函数退出时,变量始终存在,但不能被其他函数使用

 

三、试验任务3:

1.完整程序源代码:

#include<stdio.h>

#define N 1000
int fun(int n,int m,int bb[N])  //函数定义 
{
    int i,j,k=0,flag;
    
    for(j=n;j<=m;j++)
       {
           flag=1;
        for(i=2;i<j;i++)
          if(j%i==0)
            {
                flag=0;
                break;
             } 
          if(flag==1)
            bb[k++]=j;
       }
    return k;
 } 
 
 int main()
 {
     int n=0,m=0,i,k,bb[N];
     
     scanf("%d",&n);
     scanf("%d",&m);
     
     for(i=0;i<m-n;i++)
        bb[i]=0;
        
     k=fun(n,m,bb);
     
     for(i=0;i<k;i++)
        printf("%4d",bb[i]);
        
     return 0;
 }

 

2.运行结果截图:

 

 

四、试验任务4

1.源代码:

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

 

 

2.运行结果截图:

 

五、实验任务5:

1.源代码:

 

#include <stdio.h>

void draw(int n, char symbol);  // 函数声明 

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


// 函数定义
void draw(int n, char symbol)
{
     int line,col;
    for(line=1;line<=n;line++)
     {
       for(col=1;col<=n-line;col++)
          printf("%c",' ');
       for(int j=1;j<=line*2-1;j++)
          printf("%c",symbol);
          printf("\n");
     }
}

 

 

2.运行结果截图:

 

 

六、实验总结

1.对static变量有了更加深刻的了解,熟悉掌握了它的用法

2.对函数的递归调用还不是非常的熟悉,没有很好的掌握,还需要多加复习与练习

3.了解到数组在作为参数时只取数组名,不需要加中括号和数字

4.认识到函数只能有一个返回值,不能有多个返回值

 

posted @ 2020-12-06 12:28  张慧春  阅读(103)  评论(2编辑  收藏  举报