https://blog.csdn.net/BinHeon
研三了,作为一枚菜鸡硕,为了找工作,只好重刷C语言。以下笔记是我在“黑马程序员:http://yun.itheima.com/”中根据课程所记下来的学习笔记。课程链接:http://yun.itheima.com/course/369.html
需要准备的软件:
1.Visual Studio(VS):(个人初学者,直接使用Community版本即可,这是免费版)
https://visualstudio.microsoft.com/zh-hans/downloads/
2.Qt:(个人初学者,下载一个免费版即可)
https://www.qt.io/download
3.Gcc:
https://sourceforge.net/projects/mingw/files/
安装教程:https://www.jianshu.com/p/dc0fc5d8c900
4.Linux环境(可能需要VMware虚拟机)
C语言来源:
百度百科:https://baike.baidu.com/item/c%E8%AF%AD%E8%A8%80/105958?fr=aladdin
维基百科:https://zh.wikipedia.org/wiki/C%E8%AF%AD%E8%A8%80
语言是用来交流沟通,具有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。一方说,一方听;说的一方传递信息,听的一方接收信息;说的一方下达命令,听的一方遵循命令做事情。
语言是人和人之间的交流;C语言则是人与机器之间的交流。
优点 | 缺点 |
---|---|
代码量小 | 写代码实现周期长 |
执行速递快 | 可移植性差 |
功能强大 | 过于自由,经验不足易出错 |
编程自由 | 对平台库依赖较多 |
考试、z做黑客、大学课程、企业面试、工程项目、各种高级程序语言的实现…
关键字 | 意义与作用 | 关键字 | 意义与作用 | |
---|---|---|---|---|
定义类型相关 | ||||
int | 整型,4字节(32/64位机) | char | 符号型,1字节 | |
short | 短整型,2字节 | long | 长整型,4字节(16/32位机) | |
float | 单精度浮点型,小数,4字节 | double | 双精度浮点型,小数,8字节 | |
signed | 符号型 | unsigned | 无符号型 | |
static | 静态存储,修饰数据,表示该数据为静态变量 | extern | 外部存储,修饰数据/函数,表示该数据/函数在其他位置已被定义 | |
auto | 自动存储,修饰数据,表示该数据为自动存储的临时变量 | register | 寄存器存储,修饰数据,表示该数据尽量存储在寄存器中 | |
const | 只读,修饰数据,表示该数据只读 | volatile | 易变,修饰数据,表示该变量可能被意想不到地改变,每次使用都必须且小心读取,防止编译器优化该变量 | |
struct | 结构体,由具有相关性的若干成员数据组成,成员数据类型可不同,各自拥有各自的存储空间 | union | 联合体/共用体,由具有相关性的若干成员数据组成,成员数据类型可不同,成员数据公用一段存储空间 | |
enum | 枚举型,用于限定取值范围,其值为常量值 | void | 无类型/空,声明函数无返回值或无参数 | |
typedef | 用以取别名 | char* | 地址指针,用于对具体地址的访问,2字节(16位机)/4字节(32位机)/8字节(64位机) | |
控制语句相关 | ||||
if | 如果,条件语句 | else | 否则,条件语句 | |
for | 循环语句 | while | 循环语句 | |
switch | 选择/条件分支语句 | case | 条件分支 | |
do | 执行,通常与循环语句搭配使用 | goto | 无条件跳转语句,可作为循环语句使用 | |
break | 无条件跳出当前循环/条件分支 | continue | 跳过当前循环,继续下次循环 | |
default | 否则,选择语句中的默认分支 | return | 返回,用于终止子程序或需要子程序返回值时使用 | |
sizeof | 所占字节数,用于计算数据类型或变量长度 |
1)运算符
①算数运算符
②关系运算符
③逻辑运算符
④赋值运算符
⑤位运算符
⑥其他运算符
1)新建工程:
①新建项目;②新建C++控制台应用;③项目命名“mhelloword”,并选择项目保存位置;④创建;⑤在项目树中,“源文件”下添加“新建项”,并选择“C++文件”,名称命名为“helloworld.c”以添加helloworld.c源文件;⑥可将原项目中自动生成的C++源文件“mhelloworld.cpp”从项目中移出;⑦在helloworld.c源文件中 编写C源码。
** 2)编写C源码:**
/* ----------------------------------------------------------------------------------
C code for:
anuthor:BinHeon https://blog.csdn.net/BinHeon
date: 2020/09/14
tips:
---------------------------------------------------------------------------------- */
#include // 导入标准输入库文件,里面有printf等函数
// 如果是自定义库,可用 #include "xxx.h"
// ----------------------------------- 全局参数 ---------------------------------
// ----------------------------------- 函数 ---------------------------------
//------------------ 1. 函数1
// ----------------------------------- main ---------------------------------
int main() //一个程序有且只有一个主函数(main)
{
printf("Hello World!,This is a printf() function test code... \n"); // “//”行注释,注释内容不参赛编译;一句语句的结束需要用“;”;“\n”为结束换行字符,“\”在此处为转义字符。
return 0; //
}
// ----------------------------------- end ---------------------------------
所在库:stdlib.h 系统
功能:1.可以调用系统命令(如,cmd中运行的命令);2.通过路径可以调用相应的应用程序(如,QQ:安装->在D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe)
函数参数:command -- 外部执行程序名
函数返回值:成功- 0;失败- 任意数字
int system(const char *command);
/* ----------------------------------------------------------------------------------
C code for:
anuthor:BinHeon https://blog.csdn.net/BinHeon
date: 2020/09/14
tips:
---------------------------------------------------------------------------------- */
#include // 导入系统库文件,里面有system等函数
// ----------------------------------- main ---------------------------------
int main() //一个程序有且只有一个主函数(main)
{
//1.调用系统命令,打开电脑自带的计算器
注:详细的命令参考https://www.cnblogs.com/walkwaters/p/12153364.html
system("calc");
//2.通过路径,打开安装的QQ等软件
//路径:D:\Program Files(x86)\Tencent\QQ\Bin\QQScLauncher.exe
注:由于该路劲存在空格字符,所以需要对“Program Files(x86)”进行处理
处理为:不包括空格,“前6字符”+“~2”替换“Program Files(x86)”
其中2是因为D盘符下同时存在“Program Files”和“Program Files(x86)”
且“Program Files(x86)”从上往下排第2
system("D:\\Progra~2\\Tencent\\QQ\\Bin\\QQScLauncher.exe");// 一般用“/”代替“\\”
return 0; //
}
C程序编译成可执行程序4步:
1.预处理 "gcc -E hello.c -o hello.i"
宏定义处理、头文件处理、条件编译、注释删除等操作。
2.编译 "gcc -S hello.i -o hello.s"
检查语法,将预处理后的文件生成汇编文件。
3.汇编 "gcc -c hello.s -o hello.o"
将汇编文件生成目标文件(二进制文件)。
4.链接 "gcc hello.o hello"
将各种依赖库链接到最终的可执行程序中。
C程序编译成可执行程序4步:
gcc -E hello.c -o hello.i --> 预编译
gcc -S hello.i -o hello.s --> 预编译、编译
gcc -c hello.s -o hello.o --> 预编译、编译、汇编
gcc hello.o -o hello --> 预编译、编译、汇编、链接
编译1步完成:
gcc -o hello hello.c hello1.c --> 一次性编译成可执行文件
1)、寄存器是CPU内部最基本的存储单元。
2)、CPU对外是通过总线(地址、控制、数据)来和外部设备进行数据交互,总线的宽度是8位,CPU内部的寄存器也是8位,那么这个CPU就是8位CPU;如果总线是32位,寄存器也是32位,那么这个CPU就是32位;如果CPU内部寄存器是32位,但是总线只有16位,那么CPU为准32位。
3)、高位的CPU兼容低位CPU,但是低位不能兼容高位CPU;
4)64位CPU架构运行64位软件操作系统,那么这个系统为64位;64位CPU架构运行32位软件操作系统,那么这个系统为32位。
/* ----------------------------------------------------------------------------------
C code for:
anuthor:BinHeon https://blog.csdn.net/BinHeon
date: 2020/09/14
tips:
---------------------------------------------------------------------------------- */
#include // 导入标准输入库文件,里面有printf等函数
// 如果是自定义库,可用 #include "xxx.h"
// ----------------------------------- main ---------------------------------
int main() //一个程序有且只有一个主函数(main)
{
// 采用C语言计算a+b的和并幅值给c
int a = 10;
int b = 20;
int c;
c = a + b;
printf("C --> %d\n", c);
// 采用汇编语言计算a+b的和并幅值给c,eax表示32位的寄存器
__asm -->使用汇编
{
mov a, 30 -->将30移动(赋值)到a
mov b, 40
mov eax, a -->将a移动(赋值)到32位寄存器eax
add eax, b -->加上eax和b
mov c, eax
}
printf("_asm --> %d\n", c);
return 0;
}
// ----------------------------------- end ---------------------------------
关键字 | 意义与作用 | 关键字 | 意义与作用 |
---|---|---|---|
int | 整型,4字节(32/64位机) | char | 符号型,1字节 |
short | 短整型,2字节 | long | 长整型,4字节(16/32位机) |
float | 单精度浮点型,小数,4字节 | double | 双精度浮点型,小数,8字节 |
signed | 符号型 | unsigned | 无符号型 |
struct | 结构体,由具有相关性的若干成员数据组成,成员数据类型可不同,各自拥有各自的存储空间 | union | 联合体/共用体,由具有相关性的若干成员数据组成,成员数据类型可不同,成员数据公用一段存储空间 |
enum | 枚举型,用于限定取值范围,其值为常量值 | void | 无类型/空,声明函数无返回值[void fun()]或无参数[fun(void)]或万能指针[fun(void*)可传递任何keixing] |
关键字 | 意义与作用 | 关键字 | 意义与作用 |
---|---|---|---|
static | 静态存储,修饰数据,表示该数据为静态变量 | extern | 外部存储,修饰数据/函数,表示该数据/函数在其他位置已被定义 |
auto | 自动存储,修饰数据,表示该数据为自动存储的临时变量 | register | 寄存器存储,修饰数据,表示该数据尽量存储在寄存器中 |
const | 只读,修饰数据,表示该数据只读 | volatile | 易变,修饰数据,表示该变量可能被意想不到地改变,每次使用都必须且小心读取,防止编译器优化该变量 |
size project3_para.exe
常量/变量名的格式:只能,“_”下划线,数字,字母,且不以数字开头,不能和关键字冲突;字母区分大小写。
1.通过宏定义:
#define Pi 3.1415926
2.通过只读关键字定义
const double pi = 3.1415926;
int a; --> 申明整数变量a ,后续可如a=-10去使用
unsigned int b; --> 申明正整数变量b ,后续可如b=10去使用
float c; --> 申明单精度小数变量c ,后续可如c=10.126464去使用
double d; --> 申明双精度小数变量d
float x = 0.2f; //f表明小数
一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
1) 整型数据类型包括:
整型 | 占用空间 | 取值范围 |
---|---|---|
short | 2字节 | 有符号: -32768 ~ 32768 [-2^15 ~ 2^15] ;无符号:0~65535 [0 ~ (2^15)-1] |
int | 4字节(与操作系统有关) | 有符号:-2147483648 ~ 2147483647 [-2^31 ~ (2^31)-1];无符号:0 ~ 4294967295 [0 ~ (2^32)-1] |
long | 4字节 | 有符号:-2147483648 ~ 2147483647 [-2^31 ~ (2^31)-1];无符号:0 ~ 4294967295 [0 ~ (2^32)-1] |
long long | 8字节 | 有符号:-2^63 ~ (2^63)-1;无符号: 0 ~ (2^64)-1 |
2) 整型数据表现的形式有:
整型常量 | 意义 |
---|---|
10 | 代表 int 类型的十进制数 10 |
10l / 10L | 代表 long 类型的十进制数 10 |
10ll / 10LL | 代表 long long 类型的十进制数 10 |
10u / 10U | 代表 unsigned int 类型(无符号整型)的十进制数 10 |
10ul / 10UL | 代表 unsigned long 类型(无符号长整型)的十进制数 10 |
10ull / 10ULL | 代表 unsigned long long 类型(无符号长长整型)的十进制数 10 |
代码编写过程中,只有十进制/八进制/十六进制的体现
int a = 10; // 十进制的10
int b = 082; // 八进制的10
int c = 0xa; // 十六进制的10
long d = 100l;
printf("%d",a);
printf("%d",b);
printf("%d",c);
printf("%ld",d)
3) 打印输出整型数据:
占位符 | 含义 |
---|---|
%d | 输出一个有符号的十进制整型类型数据 |
%hd | 输出一个有符号的十进制 short int 短整型类型数据 |
%ld | 输出一个有符号的十进制 long int 短整型类型数据 |
… | … |
%o | 输出一个有符号的八进制整型类型数据 |
%x | 输出一个有符号的十六进制整型类型数据,字母以小写形式 |
%X | 输出一个有符号的十六进制整型类型数据,字母以大写形式 |
%u | 输出一个无符号的十进制整型类型数据 |
printf("%d",a); --> 打印整数a
printf("%f",b); --> 打印单精度小数b
printf("%.2f",c); --> 保留2位小数,打印c
printf("%lf",d); --> 打印双精度小数
字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(’ ')把字符括起来。
字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型。
char a = 'x';
printf("a sizeof -> %d\r\n",sizeof(a)); 打印查看a长度
printf("a print char -> %c\r\n",a); 打印查看a中字符
printf("a print ascii -> %d\r\n",a); 打印查看a中字符所对应的ascii码
char b;
scanf("%c",&b); 键盘输入一个字符赋值给b
实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。
实型(浮点型) | 占用空间 | 取值范围 |
---|---|---|
float | 4字节 | 7位有效数字(注意:不是指的小数后面几位,而是指的算上整数部分,有效数字一共7位) |
double | 8字节 | 15~16位有效数字(不是指的小数后面几位,而是指的算上整数部分,有效数字一共16位) |
由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。
典型赋值:
float a = 3.141592;
double b = 3.1415926;
科学法赋值:
a = 3.2e3f; f表示单精度浮点数
a = 2.2e-3f;
a = 3.1415926f;
printf("a = %f\r\n",a); 结果为3.141593 (7位有效数字)
字符串是内存中一段连续的char空间,以’\0’(数字0)结尾;字符串常量是由双引号括起来的字符序列,如“china”、“C program”,“$12.5”等都是合法的字符串常量。
!字符串常量与字符常量的不同:
每个字符串的结尾,编译器会自动的添加一个结束标志位’\0’,即 “a” 包含两个字符’a’和’\0’
char a = 'a'; 定义字符变量
char b[20] = "abcdefg"; 定义一个字符数组变量,存储字符串
printf("string b -> %s\r\n",b);
/* ----------------------------------------------------------------------------------
C for:
anuthor:BinHeon https://blog.csdn.net/BinHeon
date: 2020/09/14
tips:
---------------------------------------------------------------------------------- */
// #pragma warning(disable:4996) // 屏蔽提示,从而正常使用scanf函数
#define _CRT_SECURE_NO_WARNINGS // 屏蔽提示,从而正常使用scanf函数
#include // 标准输入输出,其中有scanf和printf
#include // 标准系统库,如system
// ----------------------------------- 全局参数 ---------------------------------
// ----------------------------------- 函数 ---------------------------------
// ----------------------------------- main ---------------------------------
int main()
{
int weight;
int price;
scanf("%d %d", &weight, &price);
printf("The weight is %d, the price is %d, the moneny is %d\r\n",weight,price,(weight*price));
//-----------------------------------------
printf("%d", a); --> 占位符%d 打印整数
printf("%hd", a); --> 打印短整型
printf("%ld", a); --> 打印长整形
printf("%lld", a); --> 打印长长整形
printf("%f", a); --> 打印单精度浮点型
printf("%.2f", a); --> 保留2位小数打印单精度浮点小数
printf("%lf", a); --> 打印双精度浮点小数
printf("%c",a); --> 打印字符
printf("%s",a); --> 打印字符串
printf("%p",&a); --> 查看a的地址
return 0;
}
// ----------------------------------- end ---------------------------------
进制 | 表示 |
---|---|
十进制 d | 以正常数字1-9表示;如 123 |
八进制 o | 以数字0开始,然后后面为数;如 0123 |
十六进制 hex | 以0x开始,然后后面为数;如0x123 |
二进制 | C语言中不能直接书写二进制数 |
/* ----------------------------------------------------------------------------------
C for:
anuthor:BinHeon https://blog.csdn.net/BinHeon
date: 2020/09/14
tips:
---------------------------------------------------------------------------------- */
// #pragma warning(disable:4996) // 屏蔽提示,从而正常使用scanf函数
#define _CRT_SECURE_NO_WARNINGS // 屏蔽提示,从而正常使用scanf函数
#include // 标准输入输出,其中有scanf和printf
#include // 标准系统库,如system
// ----------------------------------- 全局参数 ---------------------------------
// ----------------------------------- 函数 ---------------------------------
// ----------------------------------- main ---------------------------------
int main()
{
int a = 123;
printf("十进制数:%d\r\n",a);
int b = 0123;
printf("八进制数:%o\r\n",b);
int c = 0x123;
printf("十六进制数:%x\r\n",c);
}
1、十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2、十进制小数转换为二进制采用"乘2取整,顺序排列"法。
①用2乘十进制小数,可以得到积,将积的整数部分取出
② 再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出
③重复操作,直到积中的小数部分为零,此时0或1为二进制的最后一位,或者达到所要求的精度为止
一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。
八进制的数和二进制数可以按位对应(八进制一位对应二进制三位)
十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。
十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位)
一个数的原码(原始的二进制码)有如下特点:
①最高位做为符号位,0表示正,为1表示负;
②其它数值部分就是数值本身绝对值的二进制数;
③负数的原码是在其绝对值的基础上,最高位变为1;
④原码不便于加减运算。
十进制数 | 原码 |
---|---|
+15 | 0000 1111 |
-15 | 1000 1111 |
对于正数,反码与原码相同;对于负数,符号位不变,其它部分取反(1变0,0变1);反码也不便于加减运算。
十进制数 | 反码 |
---|---|
+15 | 0000 1111 |
-15 | (1000 1111)原码 -> (1111 0000)反码 |
补码特点:
①对于正数,原码、反码、补码相同;
②对于负数,其补码为它的反码加1;补码符号位不动,其他位求反,最后整个数加1,得到原码。
十进制数 | 反码 |
---|---|
+15 | 0000 1111 |
-15 | (1000 1111)原码 -> (1111 0000)反码 ->(1111 0001)补码 |
在计算机系统中,数值一律用补码来存储,主要原因是:①统一了零的编码;②符号位可和其它位统一处理;③将减法运算转变为加法运算;且两个补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
如:通过加法实现计算 9-6
原码:9-6=-15,结果不正确
补码:舍弃高位进位,9-6=3,结果正确
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。