本次授课内容如下输入函数(scanf/getchar/gets)、循环语句(for、do while、while、break)、switch、数组、字符串初探
有时间则讲解qsort、字符串相关函数
辅助教材为《C语言程序设计现代方法》
scanf/printf在上次课程中已经进行了详尽的讲解,本次课程只着重于scanf/getchar与空白字符间的爱恨情仇
输入输出原理简介
程序的输入建有一个缓冲区,即输入缓冲区。当一次键盘输入结束时会将输入的数据存入输入缓冲区,函数从缓冲区中取出数据,此时数据在缓冲区中消失,读取时遇到‘\n’结束,’\n’会进入输入流缓冲区,接受输入时取走字符后会留下‘\n’,第二次的读入函数从缓冲区中把’\n’取走
实例代码1
#include
#include
int main()
{
char a,b;
//scanf("%c",&a);
//scanf("%c",&b);
scanf("%c%c",&a,&b);
return 0;
}
进行debug跟踪后会发现,b并未录入预期的第二个字符,而是录入了空格
实例代码2
#include
#include
int main()
{
char b;
int a;
scanf("%d",&a);
b=getchar();
return 0;
}
进行debug跟踪后会发现,b录入了’\n’,a录入数值,如果一开始一直输入空白字符,则a不会录入(思考一下为什么)
实例代码3
#include
#include
int main()
{
char b;
char a;
scanf(" %c",&a);
scanf(" %c",&b);
return 0;
}
进行debug跟踪后会发现,一直输入空白字符,a与b均无法扫入
关于gets
以下为API中对gets的讲解
总结
在使用scanf/getchar函数时要注意缓冲区的存在,时常思考’\n’是否在缓冲区中,如果’\n’在缓冲区中,需要进行相应的处理,例如再加上一个getchar将’\n’从缓冲区读出或者使用fflush函数清空缓冲区
不要养成用gets的习惯,最好不要使用它
for
以下为API中对for的讲解
逗号运算符
教材P76(左上)
while
以下为API中对while讲解
do-while
以下为API中对do-while讲解
break
以下为API中对break讲解
重点
do-while和while的区别
实例代码4
#include
#include
int main()
{
int i=0;
do
{
i--;
}while(i>0);
printf("%d\n",i);
i=0;
while(i>0)
{
i--;
}
printf("%d\n",i);
return 0;
}
通过输出可以看出do-while与while在逻辑上的主要区别:
do-while为先执行,再判断,while为先判断,后执行
当然,还有do-while比while多了条尾巴
以下为API中对switch讲解
基本定义:含有多个相同类型数据值的数据结构,且逻辑地址与物理地址都为顺序。
实例代码5
#include
#include
int main()
{
int A[5],i=0;
for(i=0; i<5; i++)
{
scanf("%d",&A[i]);
}
for(i=0; i<5; i++)
{
printf("%d ",A[i]);
}
return 0;
}
教材P113(右上)
下标、初始化、sizeof
切记:数组下标是从0开始计数的
字符串,现阶段可以认为即字符数组,在各种语言当中,对字符串的处理都有着各自匹配的方法,C语言亦是如此。字符串是C语言处理的常用数据
实例代码6
#include
#include
int main()
{
char A[5];
int i=0;
for(i=0; i<5; i++)
{
scanf("%c",&A[i]);
}
for(i=0; i<5; i++)
{
printf("%c ",A[i]);
}
return 0;
}
初始化、’\0’、输入输出函数
以下为API中对switch讲解
快速排序算法请自行了解
strcpy、strcat、strcmp
本次课程对scanf/getchar/gets三个常用函数与空白字符间的关系进行了解释,初步介绍了数组、字符串的概念与使用,对字符串函数以及qsort进行了拓展。