C语言基础
算法基础
算法的定义
广义上,为解决一个具体问题而设计的有限、可行的操作步骤集合,称为“算法”。算法的五大核心特征
有穷性、可行性、确定性、输入、输出
流程图
直观描述算法的工具
程序的三种基本结构
顺序结构
分支结构(条件结构/选择结构)
循环结构(重复结构)
当型循环:先判断,后执行
直到型循环:先执行,后判断
C语句
定义
C程序以函数为基本执行单元
函数的执行部分由若干条C语句构成,每条语句完成特定的操作
所有的C语句必须依赖函数存在
C程序结构
C语句分类
①控制语句:
作用:控制程序的执行流程
常用控制语句:if-else、switch-case、for、do-while、continue、break、return、goto(不推荐)
②函数调用语句:
构成:函数调用+;
包括标准库函数调用语句和自定义函数调用语句
③表达式语句:
构成:表达式+; 构成的语句。运算符+操作数/运算数 构成的式子叫做表达式。表达式自身也可以是操作数。
④空语句:
构成:仅一个分号(;),无实际操作
用途:作为循环体占位符、分支结构默认操作等
⑤复合语句:
构成:用大括号{}括起来的若干条语句(可包含变量声明,执行语句)
特点:在语法上视为一条语句;常用于循环体、分支体等需要多条语句的场景。
数据的输入与输出
输出(output):计算机向外部设备输送数据。
输入(input):外部设备向计算机输送数据。
与硬件交互的操作称为外设IO
用printf函数输出数据
printf基础语法
printf("格式化控制字符串",输出列表)引入头文件
#include<stdio.h>注意:格式控制字符串格式化符(%d)需要与输出列表的变量/常量/表达式类型、数量一一对应。
格式控制字符串构成:
①格式说明符:由% + 特定字符组成,指定输出数据的类型和格式。(printf中的%f兼容float和double,scanf中%f必须对应float,%lf必须对应double)
②普通字符:直接原样输出的说明性文字、符号
输出列表要求:
可包含常量、变量、表达式。
输出列表的个数必须与格式化说明符的个数一致。
输出数据的格式化精细化控制
整型数据的格式控制
核心格式:%[标志] [宽度] 类型,标志可选,宽度为非负整数m
常用标志:
-:左对齐(默认右对齐)
0:不足宽度时用0填充(默认用空格填充)
+:强制显示正负号(正数显示+,负数显示-)
宽度m的规则:
若实际数据位数<m:按对齐方式填充(空格或0)
若实际数据位数> =m:忽略宽度,按实际位数输出
字符型与字符串型的格式控制
①字符型(%mc, %-mc)
格式规则与整型一致,m为输出宽度。
②字符串型(%ms, %-ms, %m.ns, %-m.ns)
核心格式%[标志] [宽度]. [截取长度]s
关键参数:
m:输出总宽度
n:截取字符串的前n个字符(n>字符串长度,则全部输出)
标志规则:
-:左对齐(默认右对齐)
无标志:不足宽度时使用空格填充
浮点型数据的格式控制
核心是总宽度m和小数/尾数位n
三种形式:
| 格式控制 | 语法 | 说明 |
|---|---|---|
| 十进制形式 | %[标志] m.nf/%[标志] -m.nf | m:总宽度n:保留的小数位数(四舍五入) |
| 指数形式 | %[标志] m.ne/%[标志] -m.ne | m:总宽度n:保留的尾数位数 |
| 自动适配形式 | %g/%G | 自动选择较短格式,同时去除无意义的末尾0和多余小数点 |
用scanf函数输入数据
scanf基础语法
scanf("格式化控制字符串",地址列表);引入头文件
#include<stdio.h>变量除了拥有变量名外,还拥有其在内存的编号,这个编号称为内存地址。(两种访问方式:通过变量名/通过地址)
核心注意事项
1.地址列表必须是内存地址,不能直接传变量、常量、表达式
普通变量:通过&变量名获取地址
字符串数组:数组名本身就是首地址,无需加&
2.格式控制字符串的规则:
格式说明符需要与输入数据类型、地址列表顺序一一对应。
若格式控制字符串 中包含普通字符(如逗号、短横线、文字),输入时必须在对应位置输入相同字符。
输入分隔规则:多个数据可以通过空格、Tab、回车键任意一个进行分隔。
1.带普通字符的格式控制
scanf("%d,%d",&a,&b);//输入格式:3,4scanf("%d-%d-%d");//输入格式:2026-8-3scanf("%d年%d月%d日");//输入格式:2026年8月3日%c会读取输入缓冲区中的所有字符(包括空格、Tab、\n),视为有效输入。
2.数值型数据的输入与结束条件:
输入整型(%d/%u等),浮点型(%f/%lf),遇到非法字符(字母、符号等)视为输入结束。
3.无符号类型的输入:
推荐用%u,匹配unsigned int,避免符号位错误;若用%d可能因为符号位解析错误导致溢出。
%*3d跳过三列
补充格式说明符
%n:统计已读取的字符个数;
输入输出缓冲区
概念:是内存中专门用于暂存输入/输出数据的区域,本质是“数据中转站”
输入数据流向:外部设备(键盘)→输入缓冲区→程序(变量/数组)
输出数据流向:程序→输出缓冲区→外部设备(显示屏)
寄存器->内存->磁盘
清理缓冲区代码:
while(getchar()!='\n');