欢迎光临
我们一直在努力

C进阶文章:C的引入、数据类型及变量、分支与循环(基础知识较少入门者勿入!)

C临界知识知识知识

目录

C临界知识知识知识

第一讲:C常见概念

项目与程序:

关键字与函数对比:

转义字符:

第二讲:数据类型与变量

占位符大汇总(AI) (A~Z方便查找)   (此章节过长 建议点击目录跳过)

占位符的灵活使用

输出格式

一、限定宽度

1.整型

2.浮点型

3.字符串

输入

输出

二、限定符号

三、const与static 对变量的限制:

第三讲:分支与循环

else究竟与哪个if匹配?

switch内各语句的规范

随机数的生成


第一讲:C常见概念

项目与程序:

项目如

project13
、通讯录项目

程序如:
test.c Push.c Contact.c Contact.h

文件  : 把
.c
为后缀的⽂件称为源⽂件,把
.h
为后缀的⽂件称为头⽂件

关键字与函数对比:

对比项关键字函数
来源 语言内置 标准库/自定义
数量 固定(32个C关键字) 无数
修改 不可修改 可自定义
调用 语法结构 函数调用()
重名 禁止 允许(可能冲突)
作用 定义语法结构 封装功能

转义字符:

\\ddd  ddd表示1~3个
八进制数字

\\xdd  dd表示2个
十六进制数字

第二讲:数据类型与变量

占位符大汇总(AI) (A~Z方便查找)   (此章节过长 建议点击目录跳过)

占位符适用场景核心说明简单示例(printf)输出结果(示例)
浮点型
%a 十六进制浮点数(小写) 按 IEEE 754 标准输出,格式:0x尾数p指数,仅支持 float/double printf("%a", 3.14f); 0x1.91eb86p+1
%A 十六进制浮点数(大写) 与%a一致,仅字母(X/P)大写 printf("%A", 3.14f); 0X1.91EB86P+1
%e 科学计数法(小写 e) 格式:尾数e±指数,默认保留 6 位小数 printf("%e", 1234.56); 1.234560e+03
%E 科学计数法(大写 E) 与%e一致,仅指数部分 E 大写 printf("%E", 1234.56); 1.234560E+03
%f 十进制小数 支持 float/double,默认保留 6 位小数,整数部分完整显示 printf("%f", 3.14); 3.140000
%g 自适应浮点数(小写 e) 最多 6 位有效数字,整数部分超 6 位自动转科学计数法,省略末尾无意义的 0 printf("%g", 1234567.89); 1.23457e+06
%G 自适应浮点数(大写 E) 与%g一致,仅指数部分 E 大写 printf("%G", 1234567.89); 1.23457E+06
%Lf long double 型小数 专门适配长双精度浮点型,需变量为 long double long double ld = 3.14L; printf("%Lf", ld); 3.140000
%Le long double 型科学计数法 专门适配 long double,指数部分小写 e long double ld = 1234.56L; printf("%Le", ld); 1.234560e+03
整型(基础)
%c 单个字符 输出 ASCII 码对应的字符 printf("%c", 65); A
%d 十进制有符号整数 适配 int,输出负数会带-号 printf("%d", -123); -123
%i 十进制有符号整数 与%d功能完全一致,scanf 中%i可识别八进制(0 开头)/ 十六进制(0x 开头) printf("%i", 0123); 83(0123 是八进制,转十进制为 83)
%u 十进制无符号整数 适配 unsigned int,负数会按无符号规则转换(如 – 1→4294967295) printf("%u", -1); 4294967295(32 位系统)
%o 八进制无符号整数 无前缀 0,仅输出数字 printf("%o", 10); 12
%x 十六进制无符号整数(小写) 无前缀 0x,字母 a-f 小写 printf("%x", 255); ff
%X 十六进制无符号整数(大写) 无前缀 0X,字母 A-F 大写 printf("%X", 255); FF
整型(长度限定)
%hd 十进制 short int 限定输出短整型,避免 int 截断错误 short s = 123; printf("%hd", s); 123
%ho 八进制 short int 适配 short int 的八进制输出 short s = 10; printf("%ho", s); 12
%hx 十六进制 short int(小写) 适配 short int 的十六进制输出 short s = 255; printf("%hx", s); ff
%hu 无符号 short int 适配 unsigned short int unsigned short us = 255; printf("%hu", us); 255
%ld 十进制 long int 限定输出长整型,适配 long 类型 long l = 123456789; printf("%ld", l); 123456789
%lo 八进制 long int 适配 long int 的八进制输出 long l = 10; printf("%lo", l); 12
%lx 十六进制 long int(小写) 适配 long int 的十六进制输出 long l = 255; printf("%lx", l); ff
%lu 无符号 long int 适配 unsigned long int unsigned long ul = 255; printf("%lu", ul); 255
%lld 十进制 long long int 适配长长整型,32/64 位系统通用 long long ll = 123456789012; printf("%lld", ll); 123456789012
%llo 八进制 long long int 适配 long long int 的八进制输出 long long ll = 10; printf("%llo", ll); 12
%llx 十六进制 long long int(小写) 适配 long long int 的十六进制输出 long long ll = 255; printf("%llx", ll); ff
%llu 无符号 long long int 适配 unsigned long long int unsigned long long ull = 255; printf("%llu", ull); 255
%zd size_t 类型 适配 sizeof 返回值(无符号),避免类型不匹配 int arr[5]; printf("%zd", sizeof(arr)); 20(int 占 4 字节,5×4=20)
其他类型
%s 字符串 输出以\\0结尾的字符数组,遇\\0停止 printf("%s", "hello"); hello
%p 指针地址 输出指针的十六进制地址(带 0x 前缀),32 位输出 8 位,64 位输出 16 位 int a=10; printf("%p", &a); 0x0012FF40(32 位示例)
%n 统计已输出字符数 不输出内容,将已输出字符数存入指定 int 变量(需传地址) int cnt; printf("abc%n", &cnt); printf("%d", cnt); 3(先输出 abc,cnt=3)
%% 输出百分号 转义符,避免 % 被识别为格式符 printf("%%"); %

sizeof(计算式)  //求的是类型大小计算式不计算 因为在编译期间已经将sizeof去掉

算术操作符/运算符 位操作符 赋值符
+ & =
| +=
* ~(按位取反) -=
/ ^ *=
% << /=
>> ……
……

占位符的灵活使用

输出格式

%lf  %f  的输出均默认为6位小数  

符号、小数点均计入长度

// 2位 7位
printf("%+*.7f", 12, 99.9114514); //"%+12.7f"
// 符号+1位

输出" +99.9114514"
1 3 1 7 == 12
(空格)

 

一、限定宽度

1.整型

printf
(
"%5d\\n"
,
123
);
//
输出为
"  123" 
 ' 5 '表示至少显示5位

printf
(
"%-5d\\n"
,
123
);
//
输出为
"123  "  //'' – '' 进行左对齐

2.浮点型

格式:%x.yf  //x同上 

printf("%3.2f",3.2342);  //输出"3.23"

3.字符串
输入

char name[m] = {0};

scanf("%[m]s",name);  //防越界

输出

格式%.[m]s  //表示输出m个字符

printf("%.5s",hello world); 输出"hello"

二、限定符号

printf("%+d\\n", 12) ;   // 输出 +12
printf("%+d\\n", -12);  // 输出 -12

三、const与static 对变量的限制:

const 限制只读与不可更改性  //决定是常量还是变量。 如:

//const决定常量还是变量
//1.常量
const int max = 99;
//2.变量
int max = 99;

static 限制生命周期与存储方式  决定数据是否为静态是否存储于静态区。 如:

//static决定是否是静态
//1.静态变量
static int min = 0;
//2.静态常量
static const int min = 0;

第三讲:分支与循环

else究竟与哪个if匹配?

else总是与在同一个 {}内的 未匹配else的 最近的 if结合。

switch内各语句的规范

1.case value1:

        statement;

        break;

2.default:

        statement;

        break;

//若default在case前 反汇编中其实是default在所有case之后 //有如下代码与反汇编指令:

int main()
{
int i = 0;
switch (i)
{
default:
printf("无");
break;
case 1:
printf("1");
break;
case 2:
printf("2");
break;
}
return 0;
}

部分反汇编如下:

00007FF6742918BC   cmp      dword ptr [rbp+00000000000000D4h],1

00007FF6742918C3    je         00007FF6742918DD

//case1的判断

00007FF6742918C5   cmp      dword ptr [rbp+00000000000000D4h],2

00007FF6742918CC   je         00007FF6742918EC

//case2的判断

随机数的生成

rand srand  //include<stdlib.h>

time  //<time.h>

a~b

a+rand()%(b-a+1)

赞(0)
未经允许不得转载:171主机测评 » C进阶文章:C的引入、数据类型及变量、分支与循环(基础知识较少入门者勿入!)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址