我的C++第一课

1、C语言的编译链接过程


(1) 只有“.exe”,”.dbt”的文件才可以被执行,“.h” ,".i" ,".obj"都不可以运行
(2)进程:程序的一次执行(具有生命期);
程序:源代码

2、C语言的基本数据类型,以及其所占字节数

以下字符类型基于VS2019编译软件
char : 1
short : 2
int :4
long int:4
long:8
long long::8
float:4
double:8
long double:8
boolean:1
void(无类型)
在这里插入图片描述

3、注意:C语言是强类型语言,数据一旦被定义,在数据的运行过程种类数据的类型不可变,但是可以通过强制类转换改变数值。

4、 C语言的基本编程结构:

#include <stdio.h>

Int main()
{
函数体;
Return 0;//返回值必须与定义的int一致
}
在这里插入图片描述

5、一个工程含有多个源文件是只能有一个含有主函数 int main(),当一个源文件中含有多个int main()时,程序会报错。因为C语言的程序是从int开始执行的,当有多个int main()时,程序不知道从哪里开始执行才好所以会报错。

练习 利用海伦公式计算三角形的面积(海伦公式:在这里插入图片描述

#include <stdio.h>
#include <math.h>   //调用数学库,后面要用到数学函数
float FindTheArea(int a,int b,int c){
   int p;
   float area;//定义一个area变量接收三角形面积
   p=(a+b+c)/2;
   area=sqrt(p*(p-a)*(p-b)*(p-c));//利用海伦公式求解
   return area;//返回三角形的面积
}
int main(){
int a,b,c;
printf("请输入三角形的三边长:\n");
scanf_s("%d %d %d\n",&a,&b,&c);//外部获取三角形的边长
//判断三角形的边长是否合法
if(a<0&&b<0&&c<0&&a+b<c&&a+c<b&&b+c<a&&|a-b|>c&&|b-c|>a&&|c-a|>b){
printf("您所输入的数据不能构成一个三角形!")}else
{
printf("三角形的面积是:%5.2f\n",FindTheArea(a,b,c));//直接调用求三角形面积的公式然后输出
}
return 0}

数据溢出:

当变量的值大于或者小于其数据类型所能储存的值时,就将发出溢出问题。

for循环和while循环的使用规则

while循环

语法结构:
while (布尔表达式) {
循环体;
}

在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次。
语句中应有使循环趋向于结束的语句,否则会出现无限循环–––"死"循环。

在这里插入图片描述

for循环

语法结构:
for (初始表达式; 布尔表达式; 迭代因子) {
循环体;
}

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子。
初始化部分设置循环变量的初值
条件判断部分为任意布尔表达式
迭代因子控制循环变量的增减
for循环在执行条件判定后,先执行的循环体部分,再执行步进。
在这里插入图片描述
注意1:
一定要明白for循环的语法结构
for( 循环变量初始化; 循环条件 ; 改变循环变量的值){
循环体
}
注意2:
三种循环结构到底使用哪一个
循环次数固定,建议使用for
循环次数不固定
先执行再判断,建议使用do-while
先判断再执行,使用while
实际开发,for使用频率高,然后是while,最后是do-while
注意3:
循环内部定义变量
可以在for循环的表达式1中定义变量,变量的作用范围仅限于该for循环,可以减少变量在内存中存在的时间
注意4:
for是三种循环中最灵活的
表达式1,表达式2,表达式3可以省略部分或者全部,但是;不可少,如果省略,也需要写到其他位置,这是结构的变化,语句没有减少。

结构体

结构体是自己设计的一种数据类型,它可以用来储存不同类型的数据

1、注意:结构体是一种数据类型,是创建变量的模板,不占用实际的储存空间,结构体变量才是实实在在的数据需要占用储存空间。

2、结构体白能量的初始化必须按照设计时的顺序初始化,不能打乱顺序(类似于数据库中表的初始化)

3、在C语言中不存在对结构体类型的强制转换

4、如何计算结构体的大小
由于储存变量地址对齐的问题,计算结构体的大小有三条规则:

  1. 结构体变量的首地址,必须是结构体变量成员中“最大基本类型成员所占字节数”的整数倍
  2. 结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节数的整数倍。
  3. 结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍。

例如:
struct node { char ida; int idb; char idc; }
此时该结构体的大小为应该为12

为什么要理解字节对齐问题:
1)内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问变量,但是实际上,cpu并非逐字节读写内存,而是以2,4,或8的倍数的字节块来读写内存,因此就会对基本数据类型的地址作出一些限制,即它的地址必须是2,4或8的倍数。那么就要求各种数据类型按照一定的规则在空间上排列,这就是对齐。
2)有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。显然在读取效率上下降很多。
3)由于不同平台对齐方式可能不同,如此一来,同样的结构在不同的平台其大小可能不同,在无意识的情况下,互相发送的数据可能出现错乱,甚至引发严重的问题。

总结:

1)结构体变量的首地址,必须是MIN{“结构体最大基本数据类型成员所占字节数”, 指定对齐方式}大小的整数倍。
2)结构体每个成员相对于结构体首地址的偏移量,都是MIN{基本数据类型成员, 指定对齐方式}大小的整数倍。
3)结构体的总大小,为MIN{结构体“最最大基本数据类型成员所占字节数”(将嵌套结构体里的基本类型也算上,得出最大基本数据类型成员所占字节数),
指定对齐方式}大小的整数倍。

哑元:只有结构体关键字,没有结构体名的结构体

struct //这样的结构体被称作哑元
{
char a;
char b;
int c;
}

联合体

联合体是指多个数据类型共享一个储存空间,这里的共享不是把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。
联合体的大小等于联合体内部最大的成员类型的大小,当给联合体内部的一个成员赋值的时候,其他没有被赋值的成员会被覆盖掉。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值