c语言之部分函数,控制语句
一 输入输出函数
均封装在stdio.h头文件里
1.1 getchar() putchar()
了解函数:所需头文件,原型, 功能,参数,返回值(后三个重点)
getchar功能:从终端读取一个字符,无参数,返回值是从终端读取的字符
putchar 头文件为标准输入输出,功能为向终端输出一个字符, 参数为要输出的字符或者它的ASCII码,
返回值 为
它要输出的字符
1.2 gets()/puts()
gets:(接收)从终端读取一个字符串
参数为保存读取的数据的内容,一般是一个数组
gets的返回值为保存的字符串
注: \n 的一个功能:
刷新缓冲区
puts 显示一个字符串在终端,
标准输入输出函数,参数为要输出的内容
相当于 int puts(const char *s);
参数为要输出的内容
puts返回值为输出的字符串的字节数
puts自带\n
自带换行功能
3.printf()/scanf()
printf为一个行缓冲函数,最大1024kb
先把内容写到缓冲区,满足一定条件后再将内容写入对应的文件中
功能:输出指定内容
刷新缓冲区函数:
scanf:要从缓冲区读取数据时也会刷新缓冲区内的数据
程序结束的时候也会去刷新缓冲区
printf功能:向终端按照一定格式输出字符串
正常情况下原样输出
参数为带格式要输出的内容
格式说明:
普通字符原样输出,
其他特殊:
%d :32位有符号十进制数
%u 32位无符号十进制
%o 八进制
%x 十六进制
%e 指数形式
%c 字符
%s 字符串
%% 正常输出%时应该多加一个%,防止被系统错误识别
%p 输出对应量指向的地址
附加格式字符:
# 输出八进制或者十六进制前导符,
l 输出long或者double型的数据
m 设置输出内容的宽度,默认右对齐,不够的地方补空格
- 可以将右对齐改成左对齐
.n 改变小数点后n位
arg 可变参,可有可无,也可有多个
补0可以右对齐,但是不能左对齐
返回值为输出的字节个数
scanf
按照格式从终端接收指定内容
int scanf(const char *format, ...);
返回值为成功保存内容的个数
scanf默认只能保存一个不带空格的字符串
或者可以设置为找到一个换行符才结束输入
或者找到设定值结束
、
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n=100;
float f=5.11299;
printf("正常输出:%d ,设置宽度输出:%5d, 右对齐:%05d,\n 左对齐:%-5d,0不可以用于左对齐\n 直接输出浮点型:%f",n,n,n,n,f);
printf("限制算上小数点一共可以输出几位,保留小数点可以几位:%6.2f\n",f);
return 0;
}
scanf附加字符:
设置输入宽度,超过则只保存设置宽度的内容
*抑制符 带有*的格式的字符输入的内容不会保存到与之对应的变量中,而是将对应的输入量屏蔽,跳过,直接存入下一个
抑制输入
%f 浮点型
%c 字符数据
%s 字符串数据
scanf返回值为成功保存的内容的个数
例: scanf("%d%*d%*d",&a,&b);
输入123,赋值给a,b的分别是1,3
scanf输入多个内容应该适当设置垃圾处理,防止程序出现错误
垃圾处理的常用方式为设置空格
二.控制语句
控制一些代码执行,一些代码不执行,或者相同的代码执行很多次
分类语句,分支语句
循环语句,直接执行,判断再执行
辅助控制关键词
if else语句(如果,,或者)
if语句的形式:
1.单独的if,if(表达式)
判断表达式是否成立,然后执行控制的语句
2 if(表达式)
语句块1
else
语句块2
判断表达式是否为真,为假执行语句块2
3 if(表达式)
语句块1
else if (表达式)
语句块2
else if
.......
else
语句块n
if的表达式非0即为真
if(0)
if(1)
if(0.00000000001) 真
if(a) 相当于if(a!=0)
if(a!) 相当于if(a==0)
if或者else语句后面只有一条代码的话,可以不加{ } 但一般为了便于阅读,不产生歧义,还是有必要加上
else后面不能跟表达式,if和else只能执行一条,
else无法单独使用
else if后面必须跟表达式
else默认和最近的if关联
if可以进行嵌套,
2.2.2大小写转换
在终端输入一个字符,如果是大写字母将其转化为小写,如果是小写字符,将其转化为答谢字符并输出
实现原理:通过ASCII码转换
2.2.3
swich ......case语句
也是分支语句,主要用于条件过多的情况下
switch(变量/变量表达式)
case 常量或常量表达式1:
语句块;break;
............
defalut:
语句块n;
break;
注:
switch后面的表达式为一个变量或者变量表达式
case后面只能跟常量或者常量表达式,且同一个判断中不能相同,否则容易出现错误
case下面控制的语句,就算是多条也可以不加{}
switch中只可以判断整型,字符型
default后面可以不加break,
break主要作用是结束switch语句,不加case就会一直找直到找到
循环语句:
功能 :往往会出现一些代码出现很多次,可以通过循环实现,便于书写,提高逻辑性,降低错误率
循环条件不能永远为真,不然就会陷入死循环,while(1)为常用的死循环
经典题目:程序员买房问题
break;
for循环
格式 for(表达式1,表达式2,表达式3)
三个表达式,
先执行表达式1,2 然后进行循环一次,然后再执行表达式3,然后判断表达式2 是否成立,成立则继续循环
表达式2常为判断语句,表达式3常为++ --
表达式1一般负责赋值,初值,在整个循环中只运行一次,也可以省略不写
for(i=0;i<=0\10;i++)
三个表达式均可省略,但是;必须有且必须有三个,三个表达式可在循环中,循环前变相实现
表达式2不写易造成死循环
表达式3为改变循环值从而影响循环次数,省略易造成死循环,也可在语句块里写
如果一个 表达式里有好几个语句,则这些表达式里所有语句均会运行,但是作为系统判断的是循环表达式最后一个语句
for(i=0;i<=10,printf("%d ",i;i++) 循环会将表达式二中的输出语句当做判断句
do......while语句:
会先执行一次, while判断在循环的最后面;
for和while循环通用
goto语句
主要用于在函数内进行跳转
不建议使用,会降低逻辑性
break:
用于结束指定的语句块,主要在循环语句使用
其他只能用于switch语句
一个函数遇到return(即接收到返回值)就会结束,后面的不会再执行,
continue:
跳过这次循环,下次循环如果满足条件依然会继续执行
return代表一个函数的终点
数组:
数组的概念:
便于存储相同类型的数据,
内存空间连续
数据类型为构造类型数据,类型可变
构造类型结构体:(数组,结构体,共用体)
一维数组的定义:
存储类型,数据类型,数组名 数组大小(数组下标)
存储类型:
auto,register,static,extern
数据类型: int,char,float,等
数组名:标识符,满足对应命名规则
数组下标:确定数组元素个数
例:int a[10]; 定义一个int型数组,最大存储10个元素,占用空间为4*10=40
数组存储顺序从0开始,所以最后一个下标应该是n-1(n为数组元素个数)
数组在定义和使用时,下标尽量不要使用变量,防止变量改变带来的影响数组操作,能写常量或者常量表达式就写
数组名相当于一个长指针,不能修改地址,
数组和指针的区别:
数组用于存储多个相同类型数据,是个集合
指针 :相当于变量,但与普通变量不同,存放其它变量的内存地址
数组相当于变相的指针
赋值: 指针变量类型相同可互相赋值,但数组赋值必须使用for循环,手动输入,拷贝等方法赋值
数组的存储是连续的,按照申请的空间依次存放,多维数组逻辑上多维,实际上的内存还是一维地址
数组要么存放在静态区,要么存放在栈上
指针:可以指向任何类型数据的地址,指针类型说明它指向的地址空间内存
sizeof的使用:
数组占用内存空间: sizeof(数组名)
数组大小: sizeof(数组名)/数组类型单元素占字节数
指针的内存固定,32位下内存名固定为4,64位下内存名固定为8
字符数组一般按字符初始化,例:
char a[]={“huanyinglaidaoangongda”};
char a[]={'n','h','r','g';
int c[]={1,2,3,4,2,4,8}
delete[] 数组名 对数组进行销毁(仅限一维数组)
二维数组的内存释放:
for(int i=0;i<row;i++)
{delete[] 数组名[i]
}
delete[] 数组名;
以上合起来才能销毁二维数组
指针数组:是数组,每个元素存放一个指针类型的元素
int* 数组名[9];
相当于[]优先级比较高,定义该为数组,
数组指针 定义为指针,指向数组的一个指针
int (*指针名)[8];
*先和指针名结合,定义其为指针
指向一个数组
数组进行传参则会变成指针
原因: c语言只会以拷贝的方式传参,参数传递是拷贝整个数组就会降低效率,且容易导致溢出,所以,数组在进行参数传递时,将数组定义为一个指针(常量指针),直接传首元素地址
指针的传参:
一级指针可以直接传参,二级指针可以接受的参数: 二级指针变量,一级指针变量地址,一维指针变量地址,一维指针数组的数组名