C语言实验十一环节(从零到入门)

实验11  函数嵌套和递归调用

目录

实验11  函数嵌套和递归调用

一:学习目的

二:实验内容提要

1:函数的递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身

2:局部变量和全局变量

3:变量的存储方式

4:变量的存储类别

三:实验题目

题目1.c:输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。

题目2.c:有5个学生坐在一起

题目3.c:用递归方法求n!。

提高题:一只刚出生的奶牛,4年生1只奶牛,以后每一年生1只。现在给你一只刚出生的奶牛,求20年后有多少奶牛。(腾讯面试题)

题目4.c:编程实现findmax函数,返回一维数组中的最大元素及其下标值和地址值。

题目5.c:调用函数输入一行数据并计算它的长度;输入空行结束程序。

 题目5.c: 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。

题目6.c:编写一个函数,把一个char组成的字符串循环右移n位。例如,原来是“abcdefghi”,如果 n=2,移位后应该是“hiabcdefg”。

题目6.c:若外部变量与局部变量同名,分析结果。

题目7.c:给定b的值,在主函数中输入a和m,计算a*b,调用power函数计算am。要求main函数和power函数放在不同的文件中。

题目8:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

ex题目9:学习static定义静态变量的用法

ex题目10:比较auto变量和static变量。


一:学习目的

1:正确理解函数在C语言程序设计中的作用和地位。

2:理解函数、形参、实参、作用域、生存期的概念。

3:掌握各种函数的定义、原型声明和调用的方法。

二:实验内容提要

1:函数的递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身

注意:递归结束条件

 

2:局部变量和全局变量

  • 局部变量
  1. 在函数内的开头位置定义:只在函数内有效
  2. 在函数内的复合语句内定义:只在复合语句内有效
  3. 不同的函数中可以使用同名的变量,它们代表不同的对象,互不干扰
  • 全局变量
  1. 在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)
  2. 全局变量可以为本文件中其他函数所共用,通常是为了参数传递或计算结果的返回
  3. 若局部变量与全局变量同名,则优先使用局部变量

 

3:变量的存储方式

  • 静态存储方式:程序运行期间都存在的固定存储空间
  1. 全局变量
  2. 函数中定义的static局部变量
  • 动态存储方式:程序运行期间根据需要动态分配存储空间
  1. 函数形式参数
  2. 函数中定义的自动变量(普通变量)

 

4:变量的存储类别

  • 局部变量
  1. auto:默认类别,可省略,自动分配和释放
  2. static:只分配并赋初值一次,不释放,但不能被其他函数使用
  3. register:在CPU中的寄存器,存取速度快
  • 全局变量

       外部变量:extern

 

三:实验题目

题目1.c:输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。

 

题目2.c:有5个学生坐在一起

  1. 问第5个学生多少岁?他说比第4个学生大2岁
  2. 问第4个学生岁数,他说比第3个学生大2岁
  3. 问第3个学生,又说比第2个学生大2岁
  4. 问第2个学生,说比第1个学生大2岁
  5. 最后问第1个学生,他说是10岁
  6. 请问第5个学生多大

 

题目3.c用递归方法求n!。

 

提高题:一只刚出生的奶牛,4年生1只奶牛,以后每一年生1只。现在给你一只刚出生的奶牛,求20年后有多少奶牛。(腾讯面试题)

参考程序: C语言奶牛生子的问题(腾讯面试题)_C语言中文网

 

题目4.c编程实现findmax函数,返回一维数组中的最大元素及其下标值和地址值。

 

题目5.c:调用函数输入一行数据并计算它的长度;输入空行结束程序。

 

 

 题目5.c: 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。

 

题目6.c编写一个函数,把一个char组成的字符串循环右移n位。例如,原来是“abcdefghi”,如果 n=2,移位后应该是“hiabcdefg”。

#include <stdio.h>
#include <string.h>

#define MAX_LEN 100

void LoopMove(char *pStr, int steps){
    int n = strlen(pStr) - steps;
    char tmp[MAX_LEN];
    strcpy(tmp, pStr+n);  //拷贝字符串
    strcpy(tmp+steps, pStr);
    *(tmp + strlen(pStr)) = '\0';
    strcpy(pStr, tmp);  //合并得到结果
}

int main(){
    char str[] = "www.coderbbs.com";
    LoopMove(str, 3);
    printf("%s\n", str);

    return 0;
}

 

题目6.c若外部变量与局部变量同名,分析结果。

 

 

题目7.c给定b的值,在主函数中输入a和m,计算a*b,调用power函数计算am。要求main函数和power函数放在不同的文件中。

//a1.c
#include<stdio.h>
int A;
int main()
{	int power(int);
	int b=3,c,d,m;
	printf("enter a and m:\n");
	scanf("%d,%d",&A,&m);
	c=A*b;
	printf("%d*%d=%d\n",A,b,c);
	d=power(m);
	printf("%d**%d=%d\n",A,m,d);
}

//a2.c
extern A;
int power(int n)
{	int i,y=1;
	for(i=1;i<=n;i++)
		y*=A;
	return y;
}

 

 

题目8:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

#include "stdio.h"
main()
{	 
    int i=5;
    void palin(int n);
    printf("Please enter 5 characters:");
    palin(i);
    printf("\n");}

void palin(int n)
{	 
    char next;
    if(n<=1)
    {   
        next=getchar();
        printf("the result is:");
        putchar(next);
    }else
    {   
        next=getchar();
        palin(n-1);
        putchar(next);}
    }
}

 

ex题目9:学习static定义静态变量的用法

#include "stdio.h"
varfunc()
{  
    int var=0;
    static int static_var=0;
    printf("\40:var equal %d \n",var);
    printf("\40:static var equal %d \n",static_var);
    printf("\n");
    var++;
    static_var++;
}

void main()
{	
    int i;
 	for(i=0;i<3;i++)
  	varfunc();
}

 

 

ex题目10:比较auto变量和static变量。

#include "stdio.h"
main()
{	 
    int i,num;
    num=2;
    for (i=0;i<3;i++)
 	{ 	
        printf("\40: The num equal %d \n",num);
  	num++;
  	{ 	
            auto int num=1;  //auto改为static
  		printf("\40: The internal block num equal %d \n",num);
  		num++;
  	}
   }
}

 

 

附注:实验为博主刚学C语言时候老师布置的作业,发表出来,仅供做题与参考。   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值