Post

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的问题

Img

实型数据

类型字节数有效数字
float46
double815
long double (visual C++)815
long double (Turbo C)1619

注意: 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赋值给jj=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
    }
}
This post is licensed under CC BY 4.0 by the author.