首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初识C语言(下)

初识C语言(下)

原创
作者头像
四念处茫茫
修改2025-01-25 11:50:22
修改2025-01-25 11:50:22
17400
代码可运行
举报
文章被收录于专栏:C语言C语言
运行总次数:0
代码可运行

前言

本章内容为初始C语言下半部分,将一些C语言的常见概念进行阐述并不会深层次的探究,后续会深入讲解C语言的,适合初学者能够初步认识到C语言及其常见的概念。高校教育较为注重素质教育和现在的公司需求还是有一定的差距,这篇文章可以为初学C语言的初学者们提供参考,如果你对C语言的整体知识不太了解,可以读一读笔者的文章,带你零基础学透C语言。

一、数据类型的介绍

C语言中把数据结构分为内置类型自定义类型

内置类型:本身自带,可以直接使用。

** 自定义类型**:程序员自己创建,可自己创造想要的类型。

具体数据类型分类如下图:

①字符型

char

②整型

int — 整型

short int — 短整型

long int — 长整型

long long int — 长长整型(更长整型)

③浮点型

float — 单精度浮点型

double — 双精度浮点型

long double —精度更高的浮点型

④布尔类型(表示真假,0-假 非零-真)

_Bool 现可用 _Bool或bool

注:使用布尔类型要包含头文件<stdbool.h>

使用方法如下:

代码语言:c
代码运行次数:0
运行
复制
#include <stdbool.h>
#include <stdio.h>
int main()
{						//false:0	turn:1或者非零
    _Bool flag = true;//或者false
    if(flag)
        printf("hehe\n");//执行并输出
    else
        printf("haha\n");
return 0;
}

二、讨论各种数据类型的长度和计算机中的常见单位

1.讨论各种数据类型的长度

计算各种数据类型的长度使用sizeof操作符(专门是用来计算sizeof的操作符数的类型长度的,单位是字节) ,(size_t是sizeof的别名)。

形式 sizeof (类型)

sizeof 表达式

sizeof的返回值是无符号整型被命名为size_t, 例:

size_t n = sizeof(int)。

代码如下:

代码语言:c
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{	//这里说明:%zd是VS中规定的打印整型,C语言规定的是%d打印整型
    printf("%zd\n",sizeof(char));//1
    printf("%zd\n",sizeof(short));//2
    printf("%zd\n",sizeof(int));//4
    printf("%zd\n",sizeof(long));//4
    printf("%zd\n",sizeof(long long));//8
    printf("%zd\n",sizeof(float));//4
    printf("%zd\n",sizeof(double));//8
    printf("%zd\n",sizeof(long double));//8
    printf("%zd\n",sizeof(_Bool));//1
return 0;
}

结果如下图:

为什么整型和长整型的长度是一样的?

C语言规定:sizeof(long) >= sizeof(int)

所以在一些编译器中long大于int,但是有的编译器int是大于long的。

注:放在sizeof内部的表达式不会真实参与运算的

代码语言:c
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%zd\n",sizeof(s = b + 1));//2
printf("s = %d\n",s);//s = 2
return 0;
}

2.计算机中的常见单位

2^10 = 1024

bit —— 比特位

Byte —— 1Byte = 8bit

KB —— 1KB = 1024Byte

MB —— 1MB = 1024KB

GB —— 1GB = 1024MB

TB —— 1TB = 1024GB

PB —— 1TB = 1024TB

三、signed和unsigned

signed包含负值,表示一个类型带有正负号。

unsigned表示该类型不带有正负号,只能表示零和正整数。

例: int—>有符号的int == signed int

unsigned int —> 无符号的int(unsigned int里面的int可省略如:unsigned a;)

注:char != signed char, char是有符号的char还是无符号的char,取决于编译器。

unsigned的好处是:同样长度的内存能够表示的最大整数值,增大了一倍。

VS2022: limits.h中有整型类型的取值范围,float.h这个头文件中说明浮点型类型的取值范围。

四、变量

①变量的创建

语法形式:data_type name;

data_type:指的是数据类型,name:变量名。

变量在创建时给赋予一个值叫做初始化。

补充:1.变量名尽量要有意义。

2.变量名的组成只能是字母、数字、下划线并且不能是数字开头。

3.变量的名字不能是关键字!

②变量的的分类

全局变量:在大括号外部定义的变量就是全局变量。

全局变量的使用范围更广,整个过程中想使用,都是有办法使用的。

局部变量:在大括号内部定义的变量就是局部变量。

注:局部变量和全局变量名字冲突的时候,局部变量优先。

电脑上有内存,内存是用来存放数据的,我们创建变量的本质就是在内存中申请一块空间。

C/C++语言的时候,注意三个区域:栈区、堆区、静态区

如图:

栈区:储存局部变量函数参数。

堆区:动态内存管理。

静态区:全局变量、静态变量的存储。

五、操作符和强制类型转换的介绍

1.算术操作符:+、-、*、/、%

+、-、*、/、%叫算术操作符,这些操作符又叫双目操作符。(即有两个操作数)

例:

代码语言:c
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
printf("%d\n",34 + 55);//这里的35为左操作数,55为右操作数。
return 0;
}

3x5—>在C语言中,3*5,15÷3—>在C语言中,3/5。

float — %f, int — %d, double — %lf

/ —— 除法操作符

注:① 除号的两端如果都是整数,执行的是整数除法,例:3/2 — 1。

② 如果要计算出小数的效果,那么除号的两端至少有一个数是浮点数,例:3.0/2 — 1.5。

③ %f和%lf打印的时候小数点后默认打印6位小数。%.1f — 打印一位小数

运算符%表示求模(余)运算,即返回两个整数相除的余值。

注:这个运算符只能用于整数,不能用于浮点数。

负数求模的规则是,结果的正负号由第一个运算数(即左操作数)的正负号决定。

2.赋值操作符:=和符合操作值

int a = 10;//初始化

a = 20;//赋值

①连续赋值

注意下面两个代码为了方便讲解写的是一个伪代码,伪代码本身是无法执行的!!!在正式写代码时不要出现伪代码!!!

代码语言:c
代码运行次数:0
运行
复制
int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//这里代码是从右向左执行的,c的结果为6

连续赋值:语法上是支持的,但是并不推荐这样写代码。

②复合赋值操作符

代码语言:c
代码运行次数:0
运行
复制
int a = 10;
a = a+4;//这里用复合赋值操作符可写为:a += 4;
a = a-5;//这里用复合赋值操作符可写为:a -= 5;

3.单目操作符:++、- -、+、-

3+5 ,4*5 //双目操作符

单目操作符 — 只有一个操作数

①++和- -

++a或a++都是自增1

++是一种自增的操作符分为前置++和后置++

−−是一种自减的操作符分为前置- -和后置- -

不管是前置++还是后置++,都是+1。

前置++:先+1,后使用。

后置++:先使用,后+1。

下面两个代码为伪代码,为了方便讲解:

代码语言:c
代码运行次数:0
运行
复制
int a = 5;
int b = ++a;//a = 6,b = 6,先+1,后使用。
代码语言:c
代码运行次数:0
运行
复制
int a = 5;
int b = a++;//a = 6,b = 5,先使用,后+1

前置- -:先-1,再使用。

后置- -:先使用,后-1。

②+和-

+是正号,-是负号,都是单目操作符。

运算符+对正负值没有影响

下面为伪代码:

代码语言:c
代码运行次数:0
运行
复制
int a = +10;//等价于 int a = 10;
int b = -a;//b = -10;

4.赋值忽略符

有时候,用户的输入可能不符合预定的格式。

代码语言:c
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d-%d-%d",&year,&month,&day);//固定输入格式:2024-0-0,如果非这个格式输入就会报错。
printf("%d %d %d\n",year,month,day);
return 0;
}

为了避免这种情况,scanf()提供了一个赋值忽略符*。只是把*加在任何占位符的占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。

例:

代码语言:c
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d",&year,&month,&day);
printf("%d-%d-%d\n",year,month,day);
return 0;
}

上面示例中,%* c就是在占位符的百分号后,加入了赋值忽略符*,表示这个占位符没有对应的变量,解读后不必返回。

5.强制类型转换

形式:(类型)

直接写出的字面浮点数,会被编译器直接识别为double。

精度低用float

精度高用double

下面为伪代码,例:

代码语言:c
代码运行次数:0
运行
复制
int a = (int)3.14//把double类型的a强制类型转换为int类型的a,只会保留3。

六、总结

本章内容对一些C语言常见的知识进行了较浅的介绍,但在操作符模块也进行了一系列的较深介绍,后期我也会对操作符进行详解,这里可能没有对printf和scanf进行介绍,这部分内容我会在下篇文章进行讲解,希望这些文章对你有不小的作用,下章我也会对VS上常见的技巧和VS中scanf的报错不能使用的问题进行手把手解决。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、数据类型的介绍
  • 二、讨论各种数据类型的长度和计算机中的常见单位
  • 1.讨论各种数据类型的长度
  • 2.计算机中的常见单位
    • 三、signed和unsigned
    • 四、变量
    • 五、操作符和强制类型转换的介绍
  • 1.算术操作符:+、-、*、/、%
  • 2.赋值操作符:=和符合操作值
  • 3.单目操作符:++、- -、+、-
  • 4.赋值忽略符
  • 5.强制类型转换
    • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档