第7.2关 自定义函数

第1关:任务07-02-01 自定义无参函数

100

  • 任务要求
  • 评论

任务描述:

请补充以下代码中的函数定义部分,并理解函数的意义。

 
  1. #include<stdio.h>
  2. //补充定义两个无参函数的代码
  3. int main(){
  4. print_line();
  5. print_line();
  6. print_message();
  7. print_line();
  8. print_line();
  9. return 0;
  10. }

输入样例:

输出样例:

 
  1. ===========================
  2. ===========================
  3. This is a C program.
  4. ===========================
  5. ===========================

任务代码

 
  1. #include<stdio.h>
  2. void print_line(void){ //定义无参函数
  3. printf("===========================\n");
  4. return;
  5. }
  6. void print_message(){ //定义无参函数
  7. printf("This is a C program.\n");
  8. return;
  9. }
  10. int main(){
  11. print_line(); //调用无参函数
  12. print_line();
  13. print_message(); //调用无参函数
  14. print_line();
  15. print_line();
  16. return 0;
  17. }

相关知识 自定义函数

C程序的基本单位是函数,一个C语言程序至少应该包含一个主函数。在C语言程序中也允许用户自己定义函数,而且可以有多个用户自定义函数,但主函数只能有一个。各个函数在定义时彼此是独立的,在执行时可以互相调用,但其它函数不能调用主函数。 C语言中几乎所有的函数在使用之前必须先在主函数之前进行定义,在主函数之后定义的函数也必须在主函数中先说明才能使用。

自定义函数的一般形式是:

 
  1. 函数类型说明符 函数名(形式参数表列){
  2. 函数体;
  3. return [表达式];
  4. }

功能说明: (1)函数类型是函数返回值的数据类型,可以是前面学习过的整型、字符型、浮点型等,如果函数无返回值,应定义成void类型(空类型)。如果省略函数类型的话,系统默认函数的返回值为int型。 (2)函数名是用户自已定义的一个标识符,应该符合标识符的命名规则。 (3)定义无参函数时,函数名后的括号内应该为空或者加上void。 (4)定义有参函数时,函数名后的括号内应该依次列出函数的形式参数,参数之间以逗号分隔,每个参数的说明都应该指定其类型。 (5)return语句的功能是结束函数的运行,返回到调用处。对于有返回值的函数将返回表达式的值做为函数的值。

代码分析

结合自定义函数的说明,我们来理解任务1的任务代码。该程序由三个函数组成,一个是不可缺少的主函数,另两个是用户自定义函数,它们都是无参数函数,也没有返回值。 主函数中5次调用用户自定义函数,输出5行文本。

 
  1. void print_line(void){ //定义无参函数
  2. printf("===========================\n");
  3. return;
  4. }

函数print_line无返回值,也无参数,它的功能就是输出一行等号文本和回车。另一个函数printf_message也同样是无返回值无参数的函数,功能为输出一行英文文本加回车。 在主函数中,通过print_line();语句来调用print_line函数,从而转去执行这个函数,输出一行等号加回车后,由return语句结束函数的执行返回到主函数中,继续执行后面的语句。


开始你的任务吧,祝你成功!

#include<stdio.h>
//在此处补充两个函数的代码
/**********begin*****************/
void print_line(void){                          //定义无参函数
    printf("===========================\n");
    return;
}
void print_message(){                           //定义无参函数
    printf("This is a C program.\n");
    return;
}


/**********end*****************/
//在此处补充两个函数的代码
int main(){
    print_line();
    print_line();
    print_message();
    print_line();
    print_line();
    return 0;
}

第2关:任务07-02-02 好好学习,天天向上!

100

  • 任务要求
  • 评论

任务描述

编写无参函数print()输出一行文字“好好学习,天天向上!”,然后在主函数中输入整数N,调用函数输出N个“好好学习,天天向上!”。

 
  1. #include<stdio.h>
  2. //在此补充函数定义
  3. int main(){
  4. int n;
  5. scanf("%d",&n);
  6. while(n--){
  7. fun();
  8. }
  9. return 0;
  10. }

输入样例:

 
  1. 3

输出样例:

 
  1. 好好学习,天天向上!
  2. 好好学习,天天向上!
  3. 好好学习,天天向上!

输入样例:

 
  1. 5

输出样例:

 
  1. 好好学习,天天向上!
  2. 好好学习,天天向上!
  3. 好好学习,天天向上!
  4. 好好学习,天天向上!
  5. 好好学习,天天向上!

开始你的任务吧,祝你成功!

//请在此输入你的代码,复杂程序可先在Dev C++中运行调试后再提交
#include<stdio.h>
//在此补充函数定义
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("好好学习,天天向上!\n");
    }
    return 0;
}

第3关:任务07-02-03 有参函数

100

  • 任务要求
  • 评论

任务描述:

请设计有参函数输:void print_star(int n),功能为输出n个星号。 在主函数中输入正整数N,输出N行如样例所示的字符图形。

输入样例:

3

输出样例:

 
  1. *
  2. ***
  3. *****

输入样例:

7

输出样例:

 
  1. *
  2. ***
  3. *****
  4. *******
  5. *********
  6. ***********
  7. *************

任务分析

题目要求我们设计一个无返回值但有参数的函数,功能为输出n个星号:

 
  1. void print_star(int n){
  2. 函数体
  3. }

此函数有一个参数(int n),在函数里输出n个星号,我们可以轻松地设计出以下代码实现:

 
  1. void print_star(int n){
  2. int i;
  3. for(i=1;i<=n;i++) //输出n个星号
  4. printf("*");
  5. return; //结束函数返回调用处
  6. }

函数print_star的代码设计完成,在主函数中,可以通过print_star函数实现输出a若干星号。

任务代码 主函数代码

 
  1. #include<stdio.h>
  2. void print_star(int n){
  3. int i;
  4. for(i=1;i<=n;i++) //输出n个星号
  5. printf("*");
  6. return; //结束函数返回调用处
  7. }
  8. int main(){
  9. int n,k;
  10. scanf("%d",&n); //读入数据n
  11. for(k=1;k<=n;k++){ //穷举k从1到n行
  12. print_star(2*k-1); //调用函数输出2*k-1个星号
  13. printf("\n"); //输出回车
  14. }
  15. return 0;
  16. }

代码分析

函数print_star有一个int型的参数n,函数功能为:输出n个星号,函数没有返回值; 主函数中通过for(k=1;k<=n;k++){ }结构让k从1穷举到n输出n行文本,第k次循环调用print_star(2*k-1)输出2*k-1个星号,再输出回车。


开始你的任务吧,祝你成功!

第4关:任务07-02-04 金字塔

100

  • 任务要求
  • 评论

任务描述

 
  1. 请设计print_star(int n)函数,函数功能为输出n个星号。
  2. 设计print_space(int n)函数,函数功能为输出n个空格。
  3. 然后在主函数中输入整数N,输出N行如下形状的图形。例
  4. 如输入7,输出如下。
  5. *
  6. ***
  7. *****
  8. *******
  9. *********
  10. ***********
  11. *************

输入样例:

 
  1. 15

输出样例:

在这里给出相应的输出。例如:

 
  1. *
  2. ***
  3. *****
  4. *******
  5. *********
  6. ***********
  7. *************
  8. ***************
  9. *****************
  10. *******************
  11. *********************
  12. ***********************
  13. *************************
  14. ***************************
  15. *****************************

开始你的任务吧,祝你成功!

//请在此输入你的代码,复杂程序可先在Dev C++中运行调试后再提交
#include<stdio.h>
#include<math.h>
int print_star(int n)
{
	int s=0,g,a,j,k,i,l;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
		{
			printf(" ");
		}
		for(k=1;k<=(2*i-1);k++)
		{
			printf("*");
		}
		if(i!=n){
			printf("\n");
		}
	}	
}
int main(void)
{
	int n;
	scanf("%d",&n);
	print_star(n);
	return 0;
}

第5关:任务07-02-05 函数返回两个整数的和

100

  • 任务要求
  • 评论

任务描述:

设计函数返回两个整数的和。在主函数中输入两个整数,输出它们的和。

输入样例:

18 -299

输出样例:

-281

任务分析

题目要求设计函数返回两个整数的和,我们设计函数名为add2,两个整型的形式参数int a,int b,函数要求有返回值也是int型。所以,我们设计的函数如下:

 
  1. //函数功能:返回两个整型参数的和
  2. int add2(int a,int b){ //形式参数是a,b
  3. int sum;
  4. sum=a+b;
  5. return sum; //返回sum做为函数值
  6. }

任务代码

 
  1. #include<stdio.h>
  2. //函数功能:返回两个整型参数的和
  3. int add2(int a,int b){ //形式参数是a,b
  4. int sum;
  5. sum=a+b;
  6. return sum; //返回sum做为函数值
  7. }
  8. int main(){
  9. int m,n;
  10. scanf("%d%d",&m,&n); //读入两个整数
  11. printf("%d",add2(m,n)); //调用函数,实在参数是m和n
  12. return 0;
  13. }

代码测试与分析

输入:5 8 输出:13 输入:123 456 输出:579

主函数中,首先输入变量m和n的值(例如输入5和8),然后输出add2(m,n)的值。 add2(m,n)就是自定义函数的调用,括号内的m和n被称为实在参数。求解此表达式就是要调用函数add2的代码执行,将实在参数m和n的值单向传递给形式参数a和b,也就是说a得到m的值5,b得到n的值8。 执行函数add2的过程是,将a+b的值13,赋值给变量sum,然后通过 return sum;语句将sum的值13返回到主函数的调用处,函数结束。也就是说主函数中表达式add2(m,n)的值就是函数返回的13,主函数中输出的也就是13。 函数add2也可以简写成以下形式:

 
  1. //函数功能:返回两个整型参数的和
  2. int add2(int a,int b){ //形式参数是a,b
  3. return a+b; //返回sum做为函数值
  4. }

第6关:任务07-02-06 函数返回三个整数的和

100

  • 任务要求
  • 评论

任务描述:

请编写自定义函数,功能为返回三个整数的和。主函数的功能为输入三个整数,调用你的自定义函数输出它们的和。(请至少用2种方法完成)

输入样例:

18 -299 81

输出样例:

-200


相关知识 函数的调用

1.函数调用的一般形式是:

函数名(实在参数列表) 功能说明: (1)如果调用的是无参函数,实在参数列表可以为空,但是括号不能省略。例如: print_star(); // 这是对无参函数的调用 print_message(); // 这是对无参函数的调用 (2)如果调用的是有参函数,则应该加上实在参数。实在参数与被调用函数的形式参数要一一对应,参数个数要相同,类型也要一致或相容。例如: print_star(2*k-1); // 这是对有参函数的调用 add2(m,n) // 这是对有参函数的调用 fx=pow(x,5)-4*pow(x,4)+x*x-3*sin(x); // 这是对有参函数的调用 (3)函数只有在被调用时,其形式参数才被定义及被分配内存单元。形式参数被分配的内存单元是单独在空闲内存中分配的。即使形式参数变量名称与其它函数中的变量重名,其内存也不是一个地址。甚至对于同一个函数的两次不同调用,系统为形式参数所分配的地址也可能是不同的。所以形式参数变量名可以和其它函数中的变量重名,系统不会出错。形式参数所占用的内存单元,在函数结束时会被自动释放。 (4)函数调用的过程是这样的:首先为函数的所有形式参数在内存中的空闲区域(栈区)分配内存,再将所有实在参数的值,依次赋值给对应的形式参数。然后进入函数体开始执行函数,如果执行完成或遇到return语句时,函数结束。如果有返回值的,将返回值带回到调用处。

2.return语句与返回值

return语句的一般形式有以下两种情况: (1) return 表达式; (2) return ; 功能说明: (1)带表达式的return语句,功能为结束函数的执行并把表达式的值返回。此时要求函数在定义时必须有一个指定的函数类型,不能为空类型(void)。 (2)省略表达式的return语句,功能为结束函数的执行,返回到调用处。该语句没有返回值,函数通常定义为void型。 (3)函数体中如果没有return语句,或者虽然有return语句但无法执行到,那么执行完函数体的最后一条语句后就默认返回。

3.实在参数向形式参数单向传值

调用函数时实在参数的值依次赋值给对应的形式参数,这一过程也称为参数的值传递。这是函数参数传递的一种方式,这种方式下实在参数与形式参数之间只是一个普通的赋值关系,值传递完成以后,实在参数与形式参数之间将不存在任何关系,函数中形式参数值的改变,不影响实在参数。


开始你的任务吧,祝你成功!

//请在此输入你的代码,复杂程序可先在Dev C++中运行调试后再提交
#include<stdio.h>
int  sum(int i, int j, int k);
int main(void)
{
	int i, j, k;	
	scanf("%d %d %d", &i, &j, &k);
	sum(i, j, k);
 

}
  int sum(int i, int j, int k){
      
    printf("%d",i+j+k);
}

第7关:任务07-02-07 函数返回两个整数中比较大的值

100

  • 任务要求
  • 评论

任务描述

编写函数返回两个整数中比较大的值。主函数中输入两个整数,输出较大的值。

输入样例:

 
  1. 5 8

输出样例:

 
  1. The max is:8.

开始你的任务吧,祝你成功!

//请在此输入你的代码,复杂程序可先在Dev C++中运行调试后再提交
#include<stdio.h>
int GetMax(int a,int b);
int main ()
{
   int x,y,max;
   scanf("%d%d",&x,&y);
   max=GetMax(x,y);
   printf("The max is:%d.\n",max);
   return 0;
}
int GetMax(int m,int n)
{
   if(m>=n)
      return m;
   else
      return n;
}

第8关:任务07-02-08 函数返回三个整数中比较大的值

100

  • 任务要求
  • 评论

任务描述

请编写自定义函数,功能为返回三个整数中的最大者。主函数的功能为输入三个整数,调用你的自定义函数输出最大值。(请至少用2种方法完成)

输入样例:

 
  1. 18 -299 25

输出样例:

 
  1. 25

开始你的任务吧,祝你成功!

//请在此输入你的代码,复杂程序可先在Dev C++中运行调试后再提交
#include<stdio.h>
int funtion(int a,int b);
int main(void)
{
	int a,b,c;  //定义三个int类型的变量
	int max;  //定义一个int类型的变量来存放最大值
	//从键盘中输入3个整数
	scanf("%d",&a);
	scanf("%d",&b);
	scanf("%d",&c);
	max =funtion(a,b);
	max =funtion(max,c);
	printf("%d",max);
}

int funtion(int a,int b)
{
if(a>b)
return a;
else
return b;
}

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值