[signed] char // 有符号字符型,大多编译器默认为char,即signed可省略
unsigned char // //无符号字符型
char c = 'a';
printf("%c\n", c); // 输出:a(显示字符)
printf("%d\n", c); // 输出:97(显示ASCII码)
//整型
int
[signed] int
unsigned int
//短整型
short [int]
[signed] short [int]
unsigned short [int]
//长整形
long [int]
[signed] long [int]
unsigned long [int]
//更长的整型
/C99 标准新增
long long [int]
[signed] long long [int]
unsigned long long [int]
| 表示形式 | 规则 | 示例 |
|---|---|---|
| 十进制 | 默认(无前缀) | 123、-456 |
| 八进制 | 以 0 开头 | 012(对应十进制 10) |
| 十六进制 | 以 0x 或 0X 开头 | 0x1a(对应十进制 26) |
float //单精度浮点数
double //双精度浮点数
long double //扩展精度浮点型
_Bool flag = true;
if (flag)
printf("i like C\n");
注:自定义类型后面文章会介绍
sizeof(类型)
sizeof 表达式
sizeof 操作数是表达式的时候,可以省略括号,并且表达式是不会真实参与运算,只会得出表达式的类型大小。
例如(sizeof 中表达式不计算)
short = 0;
printf("%zd\n", sizeof(int)); //4
printf("%zd\n", sizeof(3 + 3.5)); //8
printf("%d\n", sizeof(s=1+1)); //2
printf("s = %d\n", s); //0
sizeof 的计算结果是 size_t 类型,这是因为 sizeof 操作符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,而是由系统去决定。不同的系统中有的返回值类型是 unsigned int,也有的 unsigned long 等等。
因此 C 语言提供了一个解决方法,创造了类型为 size_t,用于统一 sizeof 的返回值类型。
printf("%zd\n", sizeof(char)); //1
printf("%zd\n", sizeof(int)); //4
printf("%zd\n", sizeof(short int)); //2
printf("%zd\n", sizeof(long int)); //4
printf("%zd\n", sizeof(long long int)); //8
printf("%zd\n", sizeof(float)); //4
printf("%zd\n", sizeof(double)); //8
printf("%zd\n", sizeof(long double)); //8
printf("%zd\n", sizeof(_Bool)); //1
int a = 10;
int b = 20;
printf("%d\n", sizeof(a + b)); //4
data_type name;
| |
| |
数据类型 变量名
int a; //整形变量
char b; //字符型变量
double c; //浮点型变量
int a = 0;
char b = 'b'
double c = 3.14;
#include <stdio.h>
int a = 200;
int main()
{
int a = 100;
printf("%d ", a); //100
return 0;
//局部变量和全局变量同名的时候,局部变量优先
}
5.1 +
用于完成加法运算
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = a + 5;
int d = b + 3;
printf("%d %d\n", c, d); //6 7
return 0;
}
5.2 -
用于完成减法运算
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = a - 5;
int d = b - 3;
printf("%d %d\n", c, d); //-4 -1
return 0;
}
5.3 *
用于完成乘法运算
#include <stdio.h>
int main()
{
int a = 5;
printf("%d\n", a * a); //25
return 0;
}
5.4 /
用来执行除法运算
如果除号两边是整数,进行的是整数除法,结果也是整数
#include <stdio.h>
int main()
{
float x = 6 / 4;
int y = 12 / 4;
printf("%d\n", y); //3
printf("%f\n", x); // 变量x的类型是float,但6/4得到结果应该是1.5,而不是1.0
//这是因为两个运算数必须至少有一个是浮点数,这样C语言才会进行浮点数的除法运算
float e = 6.0 / 4; //1.500000
printf("%f\n", e);
}5.5 %
运算符%表示求模运算,即返回两数相除的余数。仅适用于整数,不适用于浮点数。
负数求模的结果符号由第一个操作数决定。
#include <stdio.h>
int main()
{
printf("%d\n", 9 % 2); //1
printf("%d\n", -9 % 2); //-1
printf("%d\n", 9 % -2); //1
printf("%d\n", -9 % -2); //1
//模运算的正负号是由第一个运算数的正负号决定的
return 0;
}
6.赋值操作符 =
在变量创建时给予一个初始值称为初始化,在变量创建后再次赋值则称为赋值。
int a=0; //初始化
int a=100; //赋值
6.1 连续赋值
int a = 1;
int b = 2;
int c = 3;
int d = 0;
d = c = b = a + 1 //连续赋值,从右向左依次赋值的。int a = 1;
int b = 2;
int c = 3;
int d = 0;
b = a+1;
c = b;
d = c;
6.2 复合赋值符
编程时可能需要对一个数值进行增或减的操作,例如:
int a = 1;
a = a+3;
a = a-2;+= -=
*= /= %=?
>>= <<=
&= |= ^=int a = 1;
a += 3;
a -= 2;
7.单目操作符:++ -- + -
7.1 ++和--
++是一种自增的操作符,分为前置++和后置++。
--是一种自减的操作符,分为前置--和后置--。
7.1.1 前置++ 和前置--
int a = 10;
int b = 10;
++a; //11
--b; //97.1.2 后置++和后置--
int a = 10;
int b = 10;
int c = a++
int d = b--
printf("%d %d ",a,c); //11 10
printf("%d %d ",b,d); //9 107.1.3 逗号表达式
逗号表达式仅运算最后一个子表达式,整个表达式的值为最后一个子表达式的结果。
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int x = 0;
x = (a++, b--, x = c + 10,--d); // -1
7.2 + 和 -
这里的+表示正号,-表示负号,均为单目操作符。
运算符+对数值的正负无影响,是一个可省略的操作符,但使用时不会报错。
运算符-用于改变一个值的正负号,负数前加上-会变为正数,正数前加上-则变为负数。
int a = -10;
int b = -a;
printf("b=%d\n", b); //这?的b是10
8. scanf和printf介绍
8.1 printf()
printf的功能是将参数文本输出到屏幕,f代表格式化,意味着可以定制输出文本的格式。
printf() 在标准库头文件 stdio.h 中定义。使用此函数前,需在源码文件头部包含该头文件。
8.1.1 占位符
占位符用于在此处插入其他值。printf的占位符类型丰富,与C语言的数据类型相对应。
以下按字母顺序列出常用的占位符:
%a :?六进制浮点数,字?输出为?写。
%A :?六进制浮点数,字?输出为?写。
%c :字符。
%d :?进制整数。
%e :使?科学计数法的浮点数,指数部分的 e 为?写。
%E :使?科学计数法的浮点数,指数部分的 E 为?写。
%i :整数,基本等同于 %d 。
%f :?数(包含float类型和double类型)。
%g :6个有效数字的浮点数。整数部分?旦超过6位,就会?动转为科学计数法,指数部分的e为?写。
%G :等同于%g ,唯?的区别是指数部分的E为?写。
%hd :?进制 short int 类型。
%ho :?进制 short int 类型。
%hx :?六进制 short int 类型。
%hu :unsigned short int 类型。
%ld :?进制 long int 类型。
%lo :?进制 long int 类型。
%lx :?六进制 long int 类型。
%lu :unsigned long int 类型。
%lld :?进制 long long int 类型。
%llo :?进制 long long int 类型。
%llx :?六进制 long long int 类型。
%llu :unsigned long long int 类型。
%Le :科学计数法表?的 long double 类型浮点数。
%Lf :long double 类型浮点数。
%n :已输出的字符串数量。该占位符本?不输出,只将值存储在指定变量之中
%o :?进制整数。
%p :指针。
%s :字符串。
%u :?符号整数(unsigned int)。
%x :?六进制整数。
%zd :size_t 类型。
%% :输出?个百分号。
8.1.2 printf()输出格式
printf() 可以定制占位符的输出格式。
8.1.3 限定宽度
printf() 允许设定占位符的最大宽度。
#include <stdio.h>
int main()
{
printf("%5d\n", 123); // 输出为" 123"
return 0;
}#include <stdio.h>
int main()
{
printf("%-5d\n", 123); // 输出为"123 "
return 0;
}
对于数字,限定符会限制所有数值的最小显示宽度。
printf("%12f\n",123.45); // 123.450000
printf("%.1f\n",123.45); //123.5
printf("%6.2f\n", 0.5); // 0.50printf("%*.*f\n",6,2,0.5); // 0.50
%s 占位符用于输出字符串,默认全部输出。如果只想显示部分内容,可以使用%.[m]s指定输出长度,其中[m]代表一个数字,表示所需输出的长度。
printf("%.5s\n", "hello world"); //hello
8.2 scanf
scanf() 函数用于读取用户的键盘输入。当用户完成数据输入并按回车键后,scanf() 将处理这些输入,并将其存储到变量中。
scanf("%d", &i);其规则是,从当前第?个非空格字符开始读取,直到遇到空白符(即空格、换行符、制表符等)为止。由于%s不会包含空格符,因此无法用来读取多个词汇,除非多个%s连用。这也意味着,scanf()不适用于读取可能含有空格的文本,例如书名或歌曲名称。此外,当遇到
scanf()
中的
%s
占位符时,会在字符串变量末尾存储一个终止字符 \0。
用于处理用户输入可能不符合预设格式的情况
scanf("%d-%d-%d", &year, &month, &day);
printf("%d %d %d\n", year, month, day);
如果用户输入2025-11-11,则会正确解析出年月日。但如果用户以其他格式如2025/11/11输入,这种情况下,scanf就会解析失败。
为了避免这种情况,scanf() 提供了一个赋值忽略符 *,将其添加在任何占位符的百分号后,该占位符就不会返回值,解析后的数据将被丢弃。这样无论用户输入2025-11-11、2025/11/11或2025~11~11都能正确解析。
#include <stdio.h>
int main()
{
int y = 0;
int m = 0;
int d = 0;
scanf("%d%*c%d%*c%d", &y, &m, &d);
//输入2025/11/7就会输出2025 0 0 造成解析数据失败。
//把 * 加在任何占位符的百分号后?,该占位符就不会返回值,解析后将被丢弃
//表?这个占位符没有对应的变量,解读后不必返回。
printf("%d %d %d\n", y, m, d);
}
扫码加好友,拉您进群



收藏
