第1关:任务07-02-01 自定义无参函数
100
- 任务要求
- 评论
任务描述:
请补充以下代码中的函数定义部分,并理解函数的意义。
#include<stdio.h>
//补充定义两个无参函数的代码
int main(){
print_line();
print_line();
print_message();
print_line();
print_line();
return 0;
}
输入样例:
输出样例:
===========================
===========================
This is a C program.
===========================
===========================
任务代码
#include<stdio.h>
void print_line(void){ //定义无参函数
printf("===========================\n");
return;
}
void print_message(){ //定义无参函数
printf("This is a C program.\n");
return;
}
int main(){
print_line(); //调用无参函数
print_line();
print_message(); //调用无参函数
print_line();
print_line();
return 0;
}
相关知识 自定义函数
C程序的基本单位是函数,一个C语言程序至少应该包含一个主函数。在C语言程序中也允许用户自己定义函数,而且可以有多个用户自定义函数,但主函数只能有一个。各个函数在定义时彼此是独立的,在执行时可以互相调用,但其它函数不能调用主函数。 C语言中几乎所有的函数在使用之前必须先在主函数之前进行定义,在主函数之后定义的函数也必须在主函数中先说明才能使用。
自定义函数的一般形式是:
函数类型说明符 函数名(形式参数表列){
函数体;
return [表达式];
}
功能说明: (1)函数类型是函数返回值的数据类型,可以是前面学习过的整型、字符型、浮点型等,如果函数无返回值,应定义成void类型(空类型)。如果省略函数类型的话,系统默认函数的返回值为int型。 (2)函数名是用户自已定义的一个标识符,应该符合标识符的命名规则。 (3)定义无参函数时,函数名后的括号内应该为空或者加上void。 (4)定义有参函数时,函数名后的括号内应该依次列出函数的形式参数,参数之间以逗号分隔,每个参数的说明都应该指定其类型。 (5)return语句的功能是结束函数的运行,返回到调用处。对于有返回值的函数将返回表达式的值做为函数的值。
代码分析
结合自定义函数的说明,我们来理解任务1的任务代码。该程序由三个函数组成,一个是不可缺少的主函数,另两个是用户自定义函数,它们都是无参数函数,也没有返回值。 主函数中5次调用用户自定义函数,输出5行文本。
void print_line(void){ //定义无参函数
printf("===========================\n");
return;
}
函数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个“好好学习,天天向上!”。
#include<stdio.h>
//在此补充函数定义
int main(){
int n;
scanf("%d",&n);
while(n--){
fun();
}
return 0;
}
输入样例:
3
输出样例:
好好学习,天天向上!
好好学习,天天向上!
好好学习,天天向上!
输入样例:
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
输出样例:
*
***
*****
输入样例:
7
输出样例:
*
***
*****
*******
*********
***********
*************
任务分析
题目要求我们设计一个无返回值但有参数的函数,功能为输出n个星号:
void print_star(int n){
函数体
}
此函数有一个参数(int n),在函数里输出n个星号,我们可以轻松地设计出以下代码实现:
void print_star(int n){
int i;
for(i=1;i<=n;i++) //输出n个星号
printf("*");
return; //结束函数返回调用处
}
函数print_star的代码设计完成,在主函数中,可以通过print_star函数实现输出a若干星号。
任务代码 主函数代码
#include<stdio.h>
void print_star(int n){
int i;
for(i=1;i<=n;i++) //输出n个星号
printf("*");
return; //结束函数返回调用处
}
int main(){
int n,k;
scanf("%d",&n); //读入数据n
for(k=1;k<=n;k++){ //穷举k从1到n行
print_star(2*k-1); //调用函数输出2*k-1个星号
printf("\n"); //输出回车
}
return 0;
}
代码分析
函数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
- 任务要求
- 评论
任务描述
请设计print_star(int n)函数,函数功能为输出n个星号。
设计print_space(int n)函数,函数功能为输出n个空格。
然后在主函数中输入整数N,输出N行如下形状的图形。例
如输入7,输出如下。
*
***
*****
*******
*********
***********
*************
输入样例:
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型。所以,我们设计的函数如下:
//函数功能:返回两个整型参数的和
int add2(int a,int b){ //形式参数是a,b
int sum;
sum=a+b;
return sum; //返回sum做为函数值
}
任务代码
#include<stdio.h>
//函数功能:返回两个整型参数的和
int add2(int a,int b){ //形式参数是a,b
int sum;
sum=a+b;
return sum; //返回sum做为函数值
}
int main(){
int m,n;
scanf("%d%d",&m,&n); //读入两个整数
printf("%d",add2(m,n)); //调用函数,实在参数是m和n
return 0;
}
代码测试与分析
输入: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也可以简写成以下形式:
//函数功能:返回两个整型参数的和
int add2(int a,int b){ //形式参数是a,b
return a+b; //返回sum做为函数值
}
第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
- 任务要求
- 评论
任务描述
编写函数返回两个整数中比较大的值。主函数中输入两个整数,输出较大的值。
输入样例:
5 8
输出样例:
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种方法完成)
输入样例:
18 -299 25
输出样例:
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;
}