文章目录
1 绪论
Hello, world!
#include<stdio.h>
int main()
{
printf("Hello, world!\n");
}
C 程序的组成
宏定义, 定义常量, 定义宏函数
文件引用, 引用系统文件, 引用用户文件
外部变量
函数向前引用声明
主函数 (带命令行参数)
{
函数向前引用说明
局部变量
调用函数
分配动态内存
调用宏定义函数
文件操作
输入输出
}
2 基本数据类型
常量
int
long
long long
float
double
char
void
(空类型)
变量名
以字母或下划线开头, 后面可以跟若干个字母、数字和下划线, 区分大小写
整型
十六进制:0x
开头
八进制:0
开头
长整型: 后面加 l
超长整型: 后面加 ll
转义字符
\n
\t
\'
\"
\\
\0
\ddd
1~3 位八进制数所代表的 ASCII 码字符
\xhh
1~2 位十六进制数所代表的 ASCII 码字符
计算机存储单位
GB
TB
PB
3 数据的输入和输出
数据输入输出
输入输出函数中, 键盘是标准输入设备 stdin
, 显示器是标准输出设备 stdout
头文件 #include<stdio.h>
基本的格式输出语句
printf("格式控制", 输出列表);
返回值为本次调用输出字符的个数, 包括回车等控制符
格式说明符
十进制: %d
%ld
八进制: %o
%lo
十六进制: %x
%lx
小数: %f
(普通) %e
(指数) %g
(自动选择)
字符:%c
字符串: %s
变量的内存地址:%p
%:%%
在 %
和说明符之间加入整数以限制宽度, 加入小数以限制精度, 加入 -
左对齐, 加入 0
补零而不是空格, 加入 +
显示正号
变场宽输出 printf("%*.*f", m, n, f)
强制转换
(类型名)(表达式)
在数据前加 (int/float 等数据类型)
格式输入函数
scanf("格式控制", 内存地址表);
返回值为本次 scanf() 调用正确输入的数据项的个数
格式控制
整型、字符、字符串与输出控制相同
float: %f
double: %lf
跳过读入:scanf("%d%*d%d%d", &x, &y, &z);
取地址符
&
字符输出函数
putchar(c);
字符输入函数
getchar();
头文件 #include <stdio.h>
_getch();
头文件 #include <conio.h>
在按下相应键的同时接收从键盘输入的 一个字符。
_getche();
由键盘输入的字符不在屏幕上显示
_ungetch(c);
将字符放回输入流
4 表达式与宏定义
复合算术赋值运算符
+=
-=
*=
/=
%=
整型相除
7/6==1
(1/2+1/2)==0
关系运算符
<
<=
>
>=
==
!=
逻辑运算符
&&
||
!
1<x<2
⟺ \iff ⟺1<x && x<2
书写时需要注意运算符优先级, 不确定带括号; 最好直接带括号
若已经能够判断则逻辑运算符后面的语句不执行
其他运算符
自增自减运算符 ++i
i++
--i
i--
sizeof()
逗号运算符: 从左到右计算表达式的值, 最右边表达式的值就是整个逗号表达式的值
常用头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
宏定义
#define 符号常量名 字符串
不过这样的宏定义只是做简单的字符串替换
一行写不下可以在杭为加 \
在下一行继续写
** 带参数的宏定义 **
#define 宏名 (参数表) 字符串
如 #define P(x) printf ("%d\n", x)
一般需要将参数用括号括起来
在宏定义中使用 #
- 将变量转换为字符串 如
#define PR(x) printf("%s=%d\n", #x, x)
- 连接两个字符串 如
#define MP(x) printf("%d",a##x)
5 选择结构
if
if(值为真或假的表达式){
语句}
else if(){
...}
else {
...}
else
只与同层最近的 if
配对
注意小数确定是否相等时用差值小于一个精度而不是直接用 ==
条件运算符
表达式 1 ? 表达式 2 : 表达式 3
switch
switch(int/char)
{
case 1: ...; break;
case</