一、Linux下的C语言搭建(2021/8/10 -- 小结)
首先说明使用的是Linux操作系统(Ubuntu):
- 在Ubuntu下安装Vim:sudo apt-get install vim
- vim是用来实现代码的编写(代码编辑器)
- 安装C语言编译器:sudo apt-get install build-essential
- 确定是否安装成功:gcc -V或者which gcc
计算机的组成
- 主要有六大部分:1)CPU(控制器和运算器)、2)内存条、3)内存、4)输入设备、5)输出设备、6)主板。
- 程序在没有运行,程序时保存在硬盘上;
- 程序运行时,程序是在内存条上;
- CPU会按照一定的规则进行分时调用程序;
二、C语言的概述
1、程序:为了实现某些功能所组织起来的代码的集合
2、编程语言:为了实现计算机控制所指定的语法规则,不同的编程语言具有不同的语法规则和不同的词汇。
常见的编程语言:C,C++,Python,Java,SQL,JS(JavaScrip),Shell,C#,Go
编程语言:编译型语言和解释性语言
3、软件:软件=程序+数据+文档
软件的特点:软件必须依赖硬件存在,软件没有磨损,可以无限复制
4、编程语言的发展:机器语言(01)>>汇编语言>>高级编程语言(c,c++)。高级程序语言编写的程序,机器是不认识的,需要通过编译器或者解释器转换为机器语言才可以被目标机器识别和执行。
5、C语言特点
语法结构简单,程序执行效率比较高,C语言的可移植性比较好,C语言贴近硬件,可以实现对引荐进行较好的控制(指针);
6、开发C程序的步骤
编辑程序--》编译程序--》执行程序
vim test.c --->gcc test.c -o mytest--->./mytest
如果在运行代码时,提示没有权限,执行文件修改权限命令chmod 777 mytest
如果编译的时候不指定输出文件名,默认会生成a.out执行文件
7、编译程序的四个过程:
(1)预处理(.i gcc -E test.c -o xx.i)
(2)编译(.s gcc -S test.i -o test.o)
(3)汇编(.o gcc -c test.s -o xx.o)
(4)链接(gcc test.c)
8、变量定义的语法格式: 数据类型名称 变量名列表;
1)变量名的命名要符合标识符的规则
2)变量名一般推荐用小写表示
3)变量名在命名的时候,要做到见名知意
4) 变量先定义后使用(get_value getCountValue )
7、程序=算法+数据结构
三、数据类型名称
int 整型
float 浮点型(单精度)
double 浮点型(双精度)
char 字符型
short int短整型变量
int 基本整形变量
long int长整形变量
整形:有符号整数(signed )和无符号的整数(unsigned)---- 有无符号代表+ -
标识符:在计算机中可以用做名字的有效字符的集合,变量名就是标识符的一种。
1)标识符只能有子母,数组和下划线组成;
2)标识符不能以数字开头: 1a ==错的 a1==对的;
3)标识符不能使用C语言中的保留字:例如:if、for、while、break等。
sizeof() 运算符
功能:可以查看对应数据类型或变量的占用内存的字节数;
printf("int=%ld,float=%ld,double=%ld,char=%ld",sizeof(int),sizeof(float),sizeof(double),sizeof(char));
====================================================2021/8/10=======================================================
=======================================================续=========================================================
四、C语言的语法规则
1、c语言的每条语句结尾必须有一个分号 (分号必须是英文状态下的分号)
2、C语言的代码都是由函数构成,但是在众多的函数中有且只有一个main函数
3、c语言的注释格式:
单行注释://
多行注释: /*注释内容*/
4、C语言的每一个语句块都需要{ }进行包括
5、以#开头的语句一般是预处理语句
五、标准的输入与输出函数
printf() 功能:打印指定的内容到标准输出
语法格式:printf("控制输出格式",输出值列表);
1)格式化字符的个数要和输出值的个数要一致
2)指定的格式化字符要和输出值的类型也要一致
3) 格式化字符串中如果要输出%,需要指定2个
4).位数f : %.2f %.3f
5) 常用的格式化字符:
%d 插入十进制整数
%c 插入一个字符
%s 插入一个字符串
%f 插入小数(float,double) 3.2
6) 参数输出值可以是常量,变量或表达式常量和变量
1)常量:在程序的运行过程中,其值不可以被改变的量 称为常量(constant)
常量分类:整形常量:1,2 -100
浮点型常量:2.3,2.3f
字符常量:"a",'\n','\t'
符号常量: #define 符号常量名 常量值 (目的增加程序的可读性和可维护性,在程序编译预处理的时候替换符号常量为他的值)
类型转换:
1)隐式转换不同的类型在进行混合运算(整数类型,浮点类型,字符类型)
规则:低优先级向高优先级的转换
int a ; float b;
a+b
2.3+3
2)强制转换
(目标类型)变量名或常量或表达式
float a;
(int)a = a+;
六、运算符
1)sizeof(类型名或常量或变量) 查看占用的字节数
2)强制转换()
3)算术运算符:+,- ,*,/,%
4)关系运算符: > < >= <= == !=
5) 逻辑运算符: ! || &&
常变量与符号变量的理解:
#define Pi 3.1415926 //定义符号常量
const float pi = 3.1415926 //定义常变量
定义符号常量用#define指令,它是预编译指令它只是用符号代表一个字符串,在预编译时仅是进行字符的替换,在预编译后,符号常量就不存在,对符号常量的名字是不分配存储单元的。常变量要占用存储单元,有变量值,只是该值不改变而已。从使用角度来看,常变量具有符号变量的优点,而且使用方便。
七、程序结构
程序三大结构:顺序结构,选择结构,循环结构
顺序结构:程序语句从上往下依次执行
int a = 10;
int b = 3;
a = a+b;
选择结构:根据条件是否满足来确定某个语句块是否被执行
int a = x;
if(a == red)
printf("not pass");
else
printf("pass");
选择结构分为:单分支结构,双分支结构,多分支结构
单分支结构:
if(条件表达式)
{
语句块;
}
1#条件表达式:可以有1个也可以有多个条件表达式;
2#当有小括号中有多个表达式的时候,一般用逻辑运算符(&&,||,!)进行连接;
3#根据表达式计算结构,如果是一个0表示不成立,不过不是一个0就表示是成立的;
例如:
printf("%d\n",3>2); //成立返回结果为1
printf("%d\n",1>2); //成立返回结果为0
4#即使语句块只有1条语句,大括号最好加上;
if(3>2)
a = a+1; //这条语句是if语句执行的
b = b+1;//这条语句在if语句中是不执行的
双分支结构:
if(条件表达式)
{
语句块; //可以在这里再嵌套if结构
}
else
{
语句块;//可以在这里再嵌套if结构
}
多分支结构:
if(条件表达式)
{
语句块;//可以在这里再嵌套if结构
}
else if(条件表达式)
{
语句块;//可以在这里再嵌套if结构
}
...
else
{
语句块;//可以在这里再嵌套if结构
}
switch语句:
switch(表达式)
{
case 常量表达式:语句块; //是否结束 break;
case 常量表达式:语句块; //是否结束 break;
case 常量表达式:语句块; //是否结束 break;
case 常量表达式:语句块; //是否结束 break;
...
default:语句块; //是否结束 break;
}
1# 先对表达式求值,然后依次比较case后的常量,如果相等,则执行相对应的语句块;
2# 执行语句块后没有break,则会将剩余的语句块全部执行完;
3# case后边必须是一个常量值或一个常量表达式,不能是变量
4# defualt --- case后的常量都没有匹配上,才会执行defualt后的语句块;
5# defualt可以省略;
6* switch后的表达式计算结构只能是一个整数或者字符型(char),不可以是浮点型。
循环结构:根据循环条件是否成立来重复执行某一个语句块;for,while,goto
for循环:
for(初始表达式;条件表达式;更新表达式)
{
循环体;
}
1#初始表达式只会被执行一次,初始表达式可以有一个也可以有多个也可以一个都没有;
int i=1;
for(;i<=120;i++)
{
printf("学习%d天",i);
}
//和上面一样
for(int i=1;i<=120;i++) //for(inti,i=1;i<=120;i++)
{
printf("学习%d天",i);
}
2#条件表达式可以有多个也可以一个都没有,条件表达式成立则执行循环体,不成立就会跳出for循环;
for(int i=0ny=3;i<=120&&y==30;i++)
3#for循环的指向流程
初始化表达式》》执行条件语句》》循环体》》更新表达式》》执行条件》》循环体......3》》条件语句不成立》》跳出循环;
例如:
for(printf("初始语句条件");printf("条件语句块"),i<=4;printf("更新表达式\n"),i++)
{
printf("循环体");
}
4#用for构建死循环:for(;;)如果条件表达式被省略,则默认为成立死循环。
while循环(while,do...while)
while(条件表达式)
{
循环体;
}
1#执行流程:先检测条件表达式是否成立,然后再确定是否来执行循环体
int i = 1;
while(i<=120)
{
printf("学习%d天",i);
i++;
}
2# 循环结构的选择:如果循环次数比较确定的情况下,推荐使用for循环,如果不确定循环结构次数,推荐使用while循环;
3#do...while(条件表达式)
do
{
循环体
}while(条件表达式);
##特点:循环体至少被执行一次
goto关键字构建循环
goto是一个无条件转移语句;
语法格式:goto语句标号;
//常规写法
int sum = 0;
for(int i=0;i<100;i++)
{
sum =shm+i
}
printf("%d",sum);
//goto语句
int i = 0,sum = 0;
ss:if(i<5)
{
sum=sum+i;
i++;
goto ss;
}
printf("%d\n",sum);
1#goto语句可以向前跳也可以向后跳;
2#goto只能在一个函数内部跳转,不能跨函数跳转;
3#goto会破坏程序的层次性,所以在程序中尽量少用。
小结:
通过上面的复习,如果我们要结束一个循环:
1)等待条件语句不成立的时候;
2)在循环语句中使用break这个关键字;
3)goto这个关键字可以帮助我们跳出循环;
4)return可以结束一个循环;
contine关键字:结束本次循环,但是不会跳出;