C语言基础

转义字符:

  • ‘\a’ : vision、sound alert
  • ‘\b’ : backspace
  • ‘\f’ : change cursor to the top of next page
  • ‘\n’ : change line
  • ‘\r’ : carriage return
  • ‘\t’ : vertical form
  • ‘\v’ : horizontal form
  • ‘\101’ octal of ACSII
  • ‘\x41’ hex of ACSII

常变量、符号常量:

1
2
3
4
5
6
7
8
//符号常量
//#define是预编译指令,在预编译后所有的PI都会被替换成3.14
//对于PI来说,系统不会分配内存给它
#define PI 3.14

//常变量
//系统会给pi分配内存,他只是一个不能改变值的变量,使用更加方便
const float pi = 3.14

标识符:

  • 只能 字母、数字、下划线 组成
  • 开头只能 字母、下划线

字符型数据:

ACSII字符集

  • 7位二进制
  • 用一个字节存储(共128个)
  • 000:表示NULL
  • 字母: (大小写 52个)
  • 数字: (0~9 10个)
  • 专门符号: (29个)
  • 空格符: \space、\t、\v、\n、\f (5个)
  • 不能显示的字符: null(\0)、 alert(\a) 、bcakspace(\b)、 carriage return(\r)…

字符型数据的存储空间

类型 字节数 取值范围 tips
singed char 1 -2^7 ~ (2^7-1) 这里的-0,转换为补码为1000 0000[表示-128];+0,转换为补码:0000 0000[表示0]
unsinged char 1 0 ~ (2^8-1) *

关于-0+0的问题

实型数据

类型 字节数 有效数字
float 4 6
double 8 15
long double (visual C++) 8 15
long double (Turbo C) 16 19

注意: C程序中的实型常量都作为双精度浮点数常量。

1
2
float a  = 3.1415926
//这里系统会把a按照双精度浮点数处理
1
2
3
4
float a = 3.1415926f 
//加上f或者F,表示强制指定常量的类型位float,此时系统按照单精度浮点数处理
long double a = 1.23L
//同理,强制指定类型

c语言中的除法

`

  • 1.两个实数相除 -> 双精度实数
  • 2.两个整数相除 -> 整数
    `
  • 注意: 在多数C的编译系统中,整数除法采用 "向零取整" 的方法,
  • 1如:5/3 = 1, -5/3=-1
  • 注意: % (取余)运算符 要求运算对象必须位整数)

c语言中的自增、自减运算符

1
2
3
4
5
6
int j;
int i = 3;

j = ++i; (i的值先变成4,再赋值给j)

j = i++; (先将i的值3赋值给j,j=3,然后i再变成4

格式字符c的注意点:

  • 一个整数如果在0~127范围中,也可以用%c,使其按照ASCII码中对应的字符输出

  • 注意:如果一个整数过大,则会把该数的最后的一个字节信息以字符形式输出

  • (相当于截断了最后的8个bit,然后以字符形式%c输出)

printf函数中的格式字符:

格式字符 说明
d,i 带符号的十进制整数(正数不输出符号)
o 八进制五符号形式输出整数(不输出前导符 o)
x,X 十六进制输出整数 (不输出前导符 0x) x:小写字母输出;X:大写字母输出
u 无符号十进制整数
c 一个字符
s 字符串
f 小数形式(单、双精度,隐含6为小数)
e,E 指数形式 e:(1.2e+02) E: (1.2E+02)
g,G %f 或 %e输出宽度较短的一种格式,不输出无意义的0

printf函数中的附加字符:

字符 说明
l 长整形,可以加在d、o、x、u前
m(代表一个正整数) 数据最小的宽度
n(代表一个正整数) 对于实数,表示输出n位小数;对于字符串,表示截取的字符个数
- 输出的数字或字符在域内靠左

scanf函数中用到的格式字符(用法与printf类似)

格式字符 说明
x,X 输入无符号的十六进制(大小写作用相同)
s 输入时(以非空白符开始) 结束时(以标志\0 结束)
f 输入实数, 可以用小数or 指数 输入
e、E、g、G 与f单作用相同,e与f、g可以相互替换

scanf函数中用到的格式附加字符:

附加字符 说明
l 输入长整形 (%ld, %lo, %lx, %lu) 以及 double类型(%lf or %le )
h 输入短整形(%hd, %ho, %hx)
域宽 制定输入数据的宽度(列数) 域宽(正整数)
* 输入项读入后,不赋给相应的变量

注意1:如果在格式控制字符串中除了格式声明以外还有其它字符,则在输入数据时,应该在对应单位置上输入相同单字符

1
2
scanf("a=%d,b=%f,c=%f",&a,&b,&c);
//即要输入: a=1

注意2:在连续输入字符时,两个字符间不要插入空格和其它字符(除非在scanf函数中的格式字符串中有*普通字符*),让系统能够区分两个字符

字符输入输出函数:

1.putchar函数:

向显示器输出一个字符
虽然字符类型也属于整数类型,但是putchar函数输出的是字符形式,所以不能输出整数
要求其值需要在ACSII码的范围之内

2.getchar函数:

getchar函数没有参数,其作用是输入一个字符
getchar只能输入一个字符,如果要输入多个字符,就要多次调用
getchar 的注意事项,在键入一个字符后,不要马上按回车,这样会把回车也作为一个字符输入

if语句的注意事项:

if语句中 非0代表真 0代表假

例题:判断某一年是否为闰年

1
2
3
if((year%4 == 0 && year%100 != 0) || year % 400 ) ==0)
//1、能被4整除,但不能被100整除
//2、能被400整除

switch语句注意事项:

各个case单标号出现次序不影响执行结果,例如:可以先出现default标号,再出现case ...
每个case常量必须互不相同,否则会出现互相矛盾
最后一个case可以不必要➕break语句
一旦进入一个case/default,只要没有break,就会一直执行下面的每一个case!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

int main()
{
int n = 'e';
switch (--n) { //注意这里是--n 还是 n--
case 'd':
printf("warn");
case 'a':
case 'b':
printf("good");
break;
case 'c':
printf("pass");
default:
printf("error"); //一旦进入一个case/default,只要没有break,就会一直执行下面的每一个case
}
}

C语言基础
https://clint456.github.io/2023/07/24/C语言-2023-07-25-C语言基础/
作者
clint
发布于
2023年7月25日
许可协议