第7天:7天学会C语言,每天5分钟,不需要基础

我们已经学了C语言的输入输出函数,讲了选择语句和循环语句,基本就等于入门了。

今天讲一讲函数数组

今天的课程有点难,要学会可能不止5分钟。如果实在觉得难的,可以先把前6天的课程学会,自己编写一些程序来运行,等熟练了再学习今天的内容。

C程序是由函数组成的,我们之前的例子只用了一个函数,就是main( )函数,其实还用到了两个函数,就是输入函数scanf( )和输出函数printf( )。

今天的内容第一部分函数,第二部分数组。如果第一部分函数看不懂就略过,直接看第二部分数组。

  1. 函数

函数分为系统函数用户自定义函数

1、系统函数

scanf( )和printf( )都是系统函数,它们有特定的功能,scanf( )是输入函数,printf( )是输出函数,我们可以直接调用。

系统函数还有很多,有兴趣的朋友如果深入学习以后会用到的。

以下我们说的都是用户自定义函数。

2、用户自定义的函数

用户自定义函数就是我们自己定义的函数,函数的功能由我们自己编程实现。

先看下面一个程序,想想它的运行结果是什么?

例1:以下程序的运行结果是什么?

运行结果就是第1行输出三个*号,第2行输出三个#号,第3行输出三个*号。

我们来分析一下上述程序。

程序由3个函数组成:f1( )、f2( )和main( ),main( )函数是主函数。

C语言程序可以由多个函数组成,但只能有一个主函数,就是main( )函数,而且不管有多少个函数,程序都是从main( )函数开始执行

3、 函数的定义和调用

函数的定义语法格式:

数据类型 函数名( )

{

函数体;

}

或者:

数据类型 函数名( 形式参数表 )

{

函数体;

}

如:

以及:

上面f2函数的圆括号里面的 int mm就是形式参数。

函数的调用语法格式:

函数名( );

或者:

函数名( 实际参数表 );

我们再来看例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语言还有几个比较重要的内容,比如结构体,以及指针,如果有感兴趣的朋友还想继续学习的,可以在评论区留言给我,只要还有朋友想听,我就继续讲。

相关文章

你真的了解scanf吗(scanf-s)

scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("<格式化字符串&g...

结合缓冲区谈谈C语言scanf()函数的那些奇奇怪怪行为

scanf() 是从标准输入设备(键盘)读取数据,带有行缓冲区的,这让 scanf() 具有了一些独特的特点,例如可以连续输入、可以输入多余的数据等。反过来,scanf() 也出现了一些奇怪的行为,例...

C语言学习笔记系列—第三章(c语言第二章)

继续第二章之后的学习,上一章学习认识了一些最简单的C程序。第三章将基于C的数据类型进行笔记学习,和之前一样本文还是已一个重新学习角度去认识C语言,所以文中只会引用到需要数据类型介绍。不会像其他C语言教...

第3天:7天学会C语言,每天5分钟,不需要基础

昨天讲了系统安装,今天可以继续讲编写程序了。先把昨天的作业给做了,昨天的作业是编写C语言程序输出以下图形:程序如下:怎么样?很简单吧?复习一下,每一行第2个双引号前面的 \n 是什么?对了,是换行。上...

7.C语言-选择结构设计(c语言选择结构设计实验报告)

1.IF单分支结构if(表达式) 语句表达式可以是任意表达式,语句可以是一条语句,也可以是复合语句,执行过程,先判断表达式是否为真,如果为真,那么执行语句,如果为假,那么跳过语句执行后面的程序。flo...

C语言程序编写输入任意三个数求它们的平均值?

题目:输入任意三个数求它们的平均值?程序:#include<stdio.h> int main() { int a,b,c,sum; float avg; scanf("%d %...