第7天:7天学会C语言,每天5分钟,不需要基础
我们已经学了C语言的输入输出函数,讲了选择语句和循环语句,基本就等于入门了。
今天讲一讲函数和数组。
今天的课程有点难,要学会可能不止5分钟。如果实在觉得难的,可以先把前6天的课程学会,自己编写一些程序来运行,等熟练了再学习今天的内容。
C程序是由函数组成的,我们之前的例子只用了一个函数,就是main( )函数,其实还用到了两个函数,就是输入函数scanf( )和输出函数printf( )。
今天的内容第一部分函数,第二部分数组。如果第一部分函数看不懂就略过,直接看第二部分数组。
- 函数
函数分为系统函数和用户自定义函数。
1、系统函数
scanf( )和printf( )都是系统函数,它们有特定的功能,scanf( )是输入函数,printf( )是输出函数,我们可以直接调用。
系统函数还有很多,有兴趣的朋友如果深入学习以后会用到的。
以下我们说的都是用户自定义函数。
2、用户自定义的函数
用户自定义函数就是我们自己定义的函数,函数的功能由我们自己编程实现。
先看下面一个程序,想想它的运行结果是什么?
例1:以下程序的运行结果是什么?
运行结果就是第1行输出三个*号,第2行输出三个#号,第3行输出三个*号。
我们来分析一下上述程序。
程序由3个函数组成:f1( )、f2( )和main( ),main( )函数是主函数。
C语言程序可以由多个函数组成,但只能有一个主函数,就是main( )函数,而且不管有多少个函数,程序都是从main( )函数开始执行。
3、 函数的定义和调用
函数的定义语法格式:
数据类型 函数名( )
{
函数体;
}
或者:
数据类型 函数名( 形式参数表 )
{
函数体;
}
如:
以及:
上面f2函数的圆括号里面的 int m,m就是形式参数。
函数的调用语法格式:
函数名( );
或者:
函数名( 实际参数表 );
我们再来看例1。
程序中由三个函数构成f1( ), f2( )和主函数main( )。
主函数里的语句就3个。
main( )函数的第1行:
f1( );
调用函数f1( ),其实就是转到f1( )函数里执行f1( )函数里的语句。
我们来看f1( )函数的语句:
就是输出三个*号。
main( )函数的第2行:
f2( );
调用函数f2( ),我们来看f2( )函数的语句:
就是输出三个#号。
main( )函数的第3行:
f1( );
再次调用函数f1( ),输出三个*号。
所以程序的运行结果就是:
再次强调:不管有多少个函数,程序都要从main函数开始执行。
我们再来看一个程序:
例2:以下程序的运行结果是什么?
程序由两个函数组成:f2( )和main( )。
f2( )函数和前面说的不一样,它括号里面有个int m,这个m叫函数的形式参数。
我们看主函数main( )里的语句:
main( )函数的第1行:
f2( 3 );
调用函数f2( 3 ), 括号里面的3是什么呢?叫实际参数。
调用函数时,实际参数的值传给形式参数,运行时用的就是实际参数。
我们再来看f2( )函数的语句:
形式参数是m, 实际参数是3, 就是说,这次调用m就当作是3来用了。
就是:
得到的结果是什么?
就是循环3次,每次输出###后换行。
不知道有没有朋友提出疑问?我们以前写for循环时都要有一个大括号的,比如:
这次怎么不要大括号了?这是因为,循环体只有一条语句的时候,循环体前后的大括号是可以去掉的。
就是说:
和:
是一样的。
但是,还是建议大家要保留这个大括号。
所以建议将例2的程序省略掉的大括号都加上。再看一下程序例2,运行结果是什么?
运行结果:
看明白了吗?
主函数三行语句:
main( )函数的第1行:
f2( 3 );
循环执行3次printf(“###\n”); 就是输出3行###。
main( )函数的第2行:
printf("*****\n");
输出一行:*****
main( )函数的第3行:
f2( 5 );
循环执行5次printf(“###\n”); 就是输出5行###。
所以运行结果就是先输出3行###,然后输出1行*****,然后再输出5行###。
我们再来看一个更复杂的程序:
例3:以下程序的运行结果是什么?
f3( )和前面程序的自定义函数不同,应为函数名f3前面不是void而是int,这里void和int 叫函数的类型。
函数类型是void的,没有返回值。
函数类型是int的,表示这个函数有一个返回值,而且返回值是int型(就是返回一个整数)。
例3的运行结果为:
例4:以下程序的运行结果是什么?
程序由3个自定义函数组成:f1( )、f2( )、f3( )和主函数main( )
运行结果:
注意:主函数里有个变量int a,函数f3(int a, int b)里有一个形式参数也叫a,这两个a没有关系,不同的函数里定义的变量,即使变量名相同,但它们是没有关系的。
就相当于两个同名的人,名字虽然相同,但不是同一个人。
再次强调:不管有多少个函数,程序都要从main函数开始执行。
上面程序这里不细讲了,你可以根据运行结果对照程序,应该可以弄得明白。
如果实在不明白,那么你先不用函数,就把所有语句放在main函数里就行了。
二、数组
先看一个程序。
例1:编程输入10个学生的成绩,求平均分。
输入10个学生成绩,循环次数确定,就循环10次,可以用for循环。
当然用while循环和do-while循环也可以,看个人习惯。
运行时输入10个整数(分数),最后求出平均分并输出结果。
如果题目要求先求出平均分,然后输出所有高于平均分的成绩,怎么办?
这个时候,由于上面的程序只买了一个房间存放分数,所以没法保留10个成绩,因为每次输入新的成绩,都会把原来的成绩给覆盖掉了。
因为,如果要输出所有高于平均分的成绩,必须要买10间房,保留10个学生的成绩才行。
这里是需要定义10个变量吗?不需要,只需要定义一个变量,但是变量的类型是数组类型,就可以购买10间房了。
这里定义了一个数组变量a,有10个元素,每个元素都是整数int型。
数组下标默认从0开始,就是说,第1个元素是a[0],第10个元素是a[9]。
运行结果:
运行结果中,第1行是用户输入的10个分数,第2行是求出的平均分,第3行是提示信息,第4行是所有高于平均分的成绩。
注意上面程序中的for循环里,
i=0;i<10;i++,这里i从0开始,然后i<10(或者i<=9)都行,不能写成i<=10,因为最大下标是9不是10。
数组变量的语法格式:
例如:
例2:编程输入10个整数,按输入顺序的倒序输出。
运行结果:
注意这句:
这里就是先输出a[9], 再输出a[8], …, 最后输出a[0]。
数组的用途更多是用于查找。
例3:编程输入10个整数,再输入一个整数n,查找n是否在前面输入的整数中,是第几个。
运行结果:
注意因为下标从0开始算,所以第8个数显示是第7个数,如果第1个数则会显示是第0个数。
可以将程序改一下,把显示第几个数那里加1就可以与现实匹配了。
运行结果:
如果要查找的数字不在这10个数字中间,则没有输出结果。
只有输入的数字,没有任何输出结果。
如果要显示“找不到“,可以加一个标记变量,变量名可以起名为ok(或者你也可以起别的名),先让ok赋值为0,找到则赋值为1。
循环结束后看看ok的值是不是还是0,如果还是0,表示找不到,可以显示找不到信息。
修改程序如下:
运行结果:
程序所作的修改如下:
加了一个变量ok,用来记录是否找到。
今天的课就讲到这里。7天的课程,前面6天我们学到了输入输出,选择结构,循环结构,学到这些相当于入门了。
今天讲的是函数和数组,今天的课比较难,可以先把前面6天的课先弄清楚,编写几个程序运行,熟练后再仔细琢磨今天的课程。
C语言还有几个比较重要的内容,比如结构体,以及指针,如果有感兴趣的朋友还想继续学习的,可以在评论区留言给我,只要还有朋友想听,我就继续讲。