#include<stdio.h>int main (){printf("欢迎大家学习C语言!n"); //n为换行return 0;}
理论:理论知识 多思考
上机:上机练习
多敲程序,多犯错误,将来即便犯错也知道哪里出错
目标:能看懂程序,能调试程序,自学能力很重要
学C就是学Java,因为C语言至少80%的语法知识都被Java继承过来了
C是面向过程语言的代表,学好C有助于学习Java中面向对象的思想。
学好C中的指针是理解Java中引用的基础!如果不懂指针就不可能对Java中的引用有深刻的理解,而引用是Java中一个最基本但又十分重要的概念。
需要底层的专业知识
懂英语有助于学习,但不懂也不会影响
数学:数学函数和C语言的函数本质思想是一样的,但在表面上看没有任何关系
C语言研究高深算法才会用到数学
由系统定义,不能用做其他定义
auto(自动的) break(破坏,终止) case(案例)
char(C语言中char用于定义字符类型变量或字符指针变量)
const(常量:常数,恒定不变的值) continue(继续)
default(默认) do(做) double(双) else(否则)
enum(枚举数据类型) extern(额外的) float(浮点型)
for(为了) goto(去) if(如果) int(定义整数数据的标识符)
long(长) register(寄存器) return(返回) short(短)
signed(有符号的) sizeof(运算符) static(静态变量)
struct(结构体) unsigned(无符号的) union(联合;一个单元)
switch(专门用于处理分支结构的条件选择语句,Switch语句又名开关语句)
typedef(用来为复杂的声明定义简单的别名)
void(无类型) volatile(易变的) while(当)
C语言的简介(1讲)
第一讲、基本编程知识(1讲)
第二讲、数据类型(1讲)
第三讲、运算符和表达式(1讲)
第四讲、流程控制(4讲)(重要)
第五讲、函数(2讲)(重要)
第六讲、数组(1讲)
第七讲、指针(4讲)(核心)
第八讲、变量的作用域和存储方式(1讲)
第九讲、拓展数据类型(1讲)
第十讲、专题
字符串的处理(1讲)
进制转换(1讲)
补码(1讲)
动态内存分配(1讲)(重要)
综合应用:链表的使用(2讲)
ax^2+bx+c=0
写程序前先要建立思路
第一步:把一元二次方程的数据a,b,c三个系数保存在计算机里面
第二步:求出b^2-4ac的值(-b+-√b^2-4ac)/(2a)
大于零两个解,等于零一个解,小于零无解。
解题思路,将解题思路转化为计算机可以执行的语言
注:零基础看到代码会懵,这里省略代码步骤
个别序号可能会与原视频有所差异,内容基本无误
电影如何运行起来的:双击后,操作系统把电影在硬盘里的数据调用到内存条内,cpu去处理内存条内的数据,将一些数据发送给显卡,显卡将数据转化为图像通过显示器显示,将一些数据发送给声卡,声卡将数据转化为声音。
主板:主板上有很多插槽,其他的都插在主板上
通过编译和链接后生成一个后缀是.exe的可执行的文件,点击运行后,HolloWorld请求操作系统执行。操作系统调用cpu执行并通过显示器显示。
Win98、WinMe可以直接访问硬件(提供两个接口,可以通过操作系统访问硬件,也可以直接访问硬件)
其他的只提供一个接口,只能通过操作系统访问硬件
基本类型数据 分配多少字节由具体的C编译系统自行决定
整形: int 4字节
短整形: short int 2字节
长整形: long int 8字节
int i = 10,表示i变量是整形变量,i只能存放整数
int i = 10.6 //虽然10.6为小数,但因为数据类型为int型,所以仍为10
单精度浮点数 float 4字节
双精度浮点数 double 8字节
char 1字节 //并非任意一个字符就能识别,目前大多数系统采用ASCII字符集
结构体(用处不大,Java里已经没有了)
共用体(已淘汰)(作用:节省内存,但存在很多缺陷,相比能节省的内存,用处不大)
变量是一个字母,本质就是内存中一段存储空间。
把数据保存在计算机中是通过变量(容器)保存的。
#include <stdio.h>int main(){int i;i = 3;printf("i的值为:%d",i); //输出i的值return 0;}
3最终存放在内存中,程序终止之后3所占的空间被释放
写下int i后,会请求操作系统在内存(内存条)中找到一个空闲的单元,把单元与i产生关联。 i = 3是将3放在内存中与i有关联的单元中。
利用变量可以方便对数据的存储。
写完代码后,软件请求操作系统在内存条里分配一段空闲空间,然后把空间与字母i产生关联,以后使用i就是使用i对应的空间
初始化就是赋值的意思
#include <stdio.h>int main(){int i;printf("i = %dn",i);//n为换行return 0;}
i没有初始化,输出值:-858993468
i和内存条中的空闲单元相关联后就输出,只定义了变量但没有赋值,所以输出的是垃圾值。(在visual studio里无法输出,显示错误:使用了未初始化的内存i,使用了未初始化的局部变量i)
内存条(硬件设备)里面只有0和1
1是高电频
内存条中的空闲单元使用完后把空间释放(并不是删除掉内容,而是使用权限可以分配给其他程序使用),所以不初始化变量,空闲单元内就会有以前程序使用过的垃圾值。但输出的值是固定的值叫做填充值:vc++发现没有给变量赋值,变量里面是垃圾值,就回自动将一个很大的值放在里面。
变量不初始化就没有实际意义
软件运行与内存关系(垃圾数据)
内存是在操作系统的统一管理下使用的!
1.软件在运行前需要向操作系统申请存储空间,在内存空闲空间足够时,操作系统将分配一段内存空间并将外存中软件拷贝一份存入该内存空间中,并启动该软件的运行!
2.在软件运行期间,该软件所占内存空间不再分配给其他软件
3.当软件运行完毕后,操作系统将回收该内存空间(注意:操作系统并不清空该内存空间中遗留下来的数据),以便再次分配给其他软件使用。
综上所述:一个软件所分配(使用系统分配表进行分配)的空间中极可能存在着以前其他软件使用过后的残留数据,这些数据被称之为垃圾数据。所以通常情况下我们为一个变量,为一个数组分配好存储空间之后都要对该内存空间初始化。
数据类型 变量名 = 要赋的值
等价于:
数据类型 变量名;
变量名 = 要赋的值;
举例子:
int i = 3;等价于:int i; i = 3;
int i,j; 等价于: int i; int j;
int i,j = 3 ;等价于: int i; int j; j = 3;
int i=3,j=5;等价于:int i; int j; i=3,j=5;
int i,j; i=j=5;等价于:int i,j; i=5; j=5;
进制就是逢几进一
N进制就是逢N进一
计算机只识别2进制
人类习惯用10进制
为了实际需要创造了八进制和十六进制
C语言规定八进制前要加0(注意是数字0,不是字母o),十六进制前要加0x或0X,十进制前什么都不加。
在汇编语言中:在数字后加字母B表示二进制数,加字母O表示八进制数,加字母D表示十进制数,加字母H表示十六进制数。
举例子:
1011B为二进制数1011,也记为(1011)2
1357O为二进制数1357,也记为(1357)8
2049D为十进制数2049,也记为(2049)10
3FB9H为十六进制数3FB9,也记为(3FB9)16
十进制
十个基数,逢十进一
0,1,2,3,4,5,6,7,8,9
二进制
两个基数,逢二进一
0,1
例如:0,1,10,11,100,101,110,111
计算机为二进制
计算机之父:冯诺依曼
将十进制改为二进制(二进制比较容易在硬件上实现,事物都有两种不同状态,如果分为十个不同状态太复杂了,一个硬件表示两个状态很容易,表示十个状态不容易)
十进制的5和二进制的101表示的是同一个数字(这个一定要理解)无论什么进制,都是数值的不同计算方式,本质上都是一样的。
计算机分五大部件:运算器,控制器,输入设备,输出设备,存储设备
人工智能之父:图灵
八进制
8个基数,逢8进一
基数:0,1,2,3,4,5,6,7
0,1,2,3,4,5,6,7,10,11
十六进制(字母大小写均可,注意出现时大小写统一即可)
16个基数,逢16进一
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
或
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
单行注释://
多行注释:/**/
printf用法之输出控制符
%d表示以十进制输出
%c表示以字符型输出
% x或%X表示以十六进制输出
% o表示以八进制输出 字母o
#include<stdio.h> 注:原视频中是以0x32C为例,因为不明显换成 0x32Aint main(){int i = 0x32A; //0x表示十六进制printf("i = %xn",i);//%x 小写x输出结果为32aprintf("i = %Xn",i);//%X 大写X输出结果为32Areturn 0;}
十进制:传统的写法
十六进制:在前面加0x或0X(数字零和x)
八进制:在前面加0(注意是数字零,不是字母o)
传统的写法: float x = 3.2;
科学记数法(一般都不用,但是遇到要认识):
float x = 3.2e3; //x的值是3200 正值小数点向右移
float x = 123.45e-2; //x的值是1.2345 负值小数点向左移
单个字符用单引号括起来
'A'表示字符A
'AB'错误
"AB"正确
字符串用双引号括起来
"A"正确,因为"A"代表了'A'和'