1、通过预处理声明常量
#include#define PRICE 100int main() { printf("价格:%dn",PRICE); return 0; }
2、通过 const 关键字声明常量
#includeconst int NUM=10;int main() { printf("数量:%dn",NUM); return 0; }
区别:#define 在运行时会替换为指定的值,const可以看到数据类型,更推荐使用 const
整型在C语言中分为有符号和无符号整型,无符号是整数,有符号包含负数
| 类型 | 说明 |
|---|---|
| short | 2字节 |
| int | 4字节 |
| long | 32位系统4字节,64位系统8字节 |
| long long | 8字节 |
int main() { int a=10; int b=-10; long long c=20; int d=0b111;//二进制
int e=0xb;//十六进制
int f=010;//八进制
unsigned int g=12;//无符号正数
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d); return 0;
}0b 为二进制方式赋值
0x 为十六进制数据
0 为八进制数据
进制相关知识参考其他教程
c11 标准 stdint.h 对数据的长度进行了统一
| 类型 | 说明 |
|---|---|
| int8_t | 统一8位1字节 |
| int16_t | 2字节 |
| int32_t | 4字节 |
| int64_t | 8字节 |
| uint8_t | 无字符1字节 |
| 类型 | 说明 |
|---|---|
| float | 单精度,4字节,32位 |
| double | 双精度,8字节,64位 |
| long double | 长双精度,16字节,128位 |
typedef uint8_t mychar;int main() {
mychar ch='a'; printf("%c",ch); return 0;
}二、goto 跳转自定义类型相当于对类型起了个别名
使用 goto 实现循环
int i=0;
aa:printf("%dn",i);
i=i+1;if(i<100){ goto aa;
}三、输入与输出标签名: 标记一个位置,goto 标签名; 跳转到指定标签位置,标签名可以自己定义。
相关函数文档参考:C语言stdio.h文档
1、字符输出putchar:写字符到标准输出,相当于调用 putc
遍历字符并打印
#includeint main() { char c; for (c='a';c<='z';c++) { putchar(c); putchar('n'); } return 0; }
说明:char 类型占用1字节,每个字符都映射对应一个整数。
查看字符对应整数
#includeint main() { char c; printf("=====小写====n"); for (c='a';c<='z';c++) { printf("%dn",c); } printf("=====大写====n"); for (c='A';c<='Z';c++) { printf("%dn",c); } return 0; }
2、字符串输出大写字符和小写字符刚好差距32, putchar('A'+32); 可转为小写。
puts:写字符串到标准输出
输出字符串示例
#include3、格式化输出int main() { char string [] = "Hello world!"; puts(string); return 0; }
printf:打印格式化数据到标准输出,如果包含格式说明符(以%开头的子串)将格式化,用附加参数替换说明符(说明符可以认为是占位符)。
格式化时用到的说明符
| 符号 | 解释 | 举例 |
|---|---|---|
| d 或者 i | 有符号十进制整数 | 392 |
| u | 无符号十进制整数 | 7235 |
| o | 无符号八进制 | 610 |
| x | 无符号十六进制整数 | 7fa |
| X | 无符号十六进制整数(大写) | 7FA |
| f | 十进制浮点,小写 | 392.65 |
| F | 十进制浮点,大写 | 392.65 |
| e | 科学记数法(尾数/指数),小写 | 3.9265e+2 |
| c | 字符 | a |
| s | 字符串 | hello |
| p | 指针地址(内存地址) | b8000000 |
| % | %%打印出一个% | % |
格式化输出示例
#includeint main() { printf("字符:%c %cn",'a',65); printf("整数:%d %ldn",600,6500000L);//%ld 长整 printf("浮点数:%fn",33.3); printf("十六进制:%xn",0xffa); printf("特殊打印:%%n"); return 0; }
结果
字符:a A整数:600 6500000 浮点数:33.300000十六进制:ffa特殊打印:%4、输入字符和字符串
getchar:从标准输入中获取字符
获取字符示例
#includeint main() { uint8_t c; puts("输入文本,在一个句子中包含.以结束:"); do{ c=getchar(); putchar(c); }while (c!='.'); return 0; }
uint8_t c; uint8_t 大小与char一样
gets:从标准输入中获取字符串
获取字符串示例
#include5、格式化输入int main() { char str[256]; puts("输入你的名字:"); gets(str); printf("你的名字:%sn",str); return 0; }
scanf:从标准输入中读取格式化数据,格式化说明符可参照 printf
格式化输入示例
#includeint main() { char ch; int num; char str[10]; puts("输入一个字符:"); scanf("%c",&ch); printf("用户的输入字符为:%cn",ch); puts("输入一个整数:"); scanf("%d",&num); printf("用户输入的整数为:%dn",num); puts("输入字符串:"); scanf("%s",str); puts(str); return 0; }
四、数组1、一维数组int、char 等类型需要用&符号取得变量内存地址,变量 str 是一个数组,本身存储的就是内存地址,所以不用加上&符号。(可以理解为值与引用)
创建数组方式1:
const int NUMS_LEN=10;int nums[NUMS_LEN];
数组中元素的内存地址没有做过任何处理,有可能被之前其他程序使用过,所以数组中的默认的值是不可预期的。
演示数组中元素默认值:
#includeint main() { const int NUMS_LEN=10; int nums[NUMS_LEN]; for (int i = 0; i < NUMS_LEN; ++i) { printf("索引:%d,值:%dn",i,nums[i]); } return 0; }
创建数组方式2:
int ages[]={19,20,30};2、二维数组创建方式1:
int nums[3][4];for (int i = 0; i < 3; ++i) { for (int j = 0; j < 4; ++j) { printf("%d,%d,value=%dn",i,j,nums[i][j]);
}
}创建方式2:
int nums[2][3]={
{1,2,3},
{4,5,6}
};二维数组直接初始化值需要指定长度!
3、字符数组(字符串)如果想对数组中的元素清0,可以在遍历中为元素赋值为0.
声明字符串并检查长度:
char str[10];printf("长度:%ldn",strlen(str));strlen 函数用于检测字符数组中字符的长度
存入字符串并检查长度:
char str[10]="hello";printf("长度:%ldn",strlen(str));

