第二天,数据类型和变量!

发布时间:2024年01月22日

(以下为昨天内容的补充,是个人学完之后觉得有所遗漏的,会有分割线!)

语句和语句的分类

C语言的代码是由一条一条的语句构成的,可分为以下五类

1.空语句

2.表达式语句

3.函数调用语句

4.复合语句

5.控制语句

空语句最为简单,一个分号就是一条语句,是空语句。

#include <stdio.h>
int main()
{
    ;//空语句
    return 0;
}

然后是表达式语句,也就是在表达式的后面加上分号;

#include <stdio.h>
int main()
{
    int a = 20;
    int b = 0;
    b = a + 5;//表达式语句
    return 0;
}

接着是函数调用语句;

#include <stdio.h>

int main()
{
    printf("hehe\n");//这就是最简单的函数调用语句

    return 0;
}

然后是复合语句(里面的代码其实也是一知半解,只是懂了复合语句的概念)

#include <stdio.h>

void print(int arr[], int sz)//函数的大括号中的代码也构成复合语句
{
     int i = 0;
     for(i=0; i<sz; i++)
     {
         printf("%d ", arr[i]);
     }
}
int main()
{
    int i = 0;
    int arr[10]={0};
    for(i=0; i<10;i++)//for循环=的循环体的大括号中的也是复合语句
    {
       arr[i] = 10-i;
       printf("%d\n",arr[i]);
    }
     return 0;
}

最后是控制语句,用来控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构: 顺序结构、选择结构、 循环结构),他们有特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

1.条件判断语句也叫分支语句:if语句、switch语句;

2.循环执行语句:do while语句、 while语句、for语句:

3.转向语句: break语句、goto语句、continue语句、return语句。

1.注释是什么?以及注释的两种形式

注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。
注释是给程序员??,或者其他程序员看的。
好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。
当然不写注释可能会让后期阅读代码的?抓狂。

注释的两种形式

第一种是/**/的形式

将注释放在/*? ? */之间,内部可以分行。

/*
这是一行注释

*/

可以插在行内

int fopen(char* s /* file name */, int mode);

上面的示例中,/* file name */用来对函数的参数进行说明;在语言的运行当中会被视为一个空格

/**/的这个注释不支持嵌套注释,/*开始后,只要遇到第一个*/,就认为结束注释了

第二种是// 的形式

将注释放在//的后面

-------------------------------------------------------------------------------------------------------

以下为今天新学的内容

------------------

1.1字符

char
[signed] char
[unsigned] char

1.2整型

//短整型
short [int]
[signed] short [int]
unsigned short [int]

//整型
int
[signed] int
unsigned int

//长整型
long int 
[signed] long [int]
unsigned long [int]

//更长的整型
long long [int]
[signed] long long [int]
unsigned long long [int]


1.3浮点型

float
double
long louble

1.4布尔类型

用整数0表示假,非零数表示真。

布尔类型使用得调用头文件<stdbool.h>

布尔类型变量的取值是:true或者false

#include <stdbool.h>


_Bool flag = true;
if(flag)
   printf("i like c\n");

2.signed和unsigned

C语言使用signed和unsigned关键字修饰字符型和整数类型的。

signed关键字,表示一个类型带有正负号,包含负值;

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

对于int类型,默认是带有正负号的,所以int等同于signed int

由于这是默认情况,所以signed一般都省略不写

整数变量声明为 unsigned 的好处是,同样?度的内存能够表?的最?整数值,增?了?倍。
?如,16位的 signed short int 的取值范围是:-32768~32767,最?是32767;?
unsigned short int 的取值范围是:0~65535,最?值增?到了65,535。32位的 signed
int 的取值范围可以参看 limits.h 中给出的定义。
下?的定义是VS2022环境中,limits.h中相关定义
#define SHRT_MIN (-32768) //有符号16位整型的最?值
#define SHRT_MAX 32767 //有符号16位整型的最?值
#define USHRT_MAX 0xffff //?符号16位整型的最?值
#define INT_MIN (-2147483647 - 1) //有符号整型的最?值
#define INT_MAX 2147483647 //有符号整型的最?值

unsigned int 里面的int 可以省略,并且字符类型char也可以设置signed和unsigned形式

注意,C 语?规定 char 类型默认是否带有正负号,由当前系统决定。 这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是 unsigned char 。 这?点与 int 不同, int 就是等同于 signed int

3.数据类型的取值范围

上述的数据类型很多,尤其数整型类型就有short、int、long、long long 四种,为什么呢?
其实每?种数据类型有??的取值范围,也就是存储的数值的最?值和最?值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值:
limits.h ?件中说明了整型类型的取值范围。
float.h 这个头?件中说明浮点型类型的取值范围。
为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使?这些常量。
? SCHAR_MIN SCHAR_MAX :signed char 的最?值和最?值。
? SHRT_MIN SHRT_MAX :short 的最?值和最?值。
? INT_MIN INT_MAX :int 的最?值和最?值。
? LONG_MIN LONG_MAX :long 的最?值和最?值。
? LLONG_MIN LLONG_MAX :long long 的最?值和最?值。
? UCHAR_MAX :unsigned char 的最?值。
? USHRT_MAX :unsigned short 的最?值。
? UINT_MAX :unsigned int 的最?值。
? ULONG_MAX :unsigned long 的最?值。
? ULLONG_MAX :unsigned long long 的最?值。

4.变量

了解清楚了类型,我们使?类型做什么呢?类型是?来创建变量的。什么是变量呢?C语?中把经常变化的值称为变量,不变的值称为常量。 变量创建的语法形式是这样的:
data_type mame;
  |  |     |
  |  |     |
数据类型  变量名
int age;//整型变量
double weight;//浮点型变量
char ch; //字符变量

变量在创建时就给一个初始值,就叫初始化。

变量有全局变量和局部变量

在?括号外部定义的变量就是全局变量,全局变量的使?范围更?,整个?程中想使?,都是有办法使?的。

在?括号内部定义的变量就是局部变量,局部变量的使?范围是?较局限,只能在??所在的局部范围内使?的。
其实当局部变量和全局变量同名的时候,局部变量优先使?!
这是全局变量和局部变量在内存中的存储

算术操作符:+ - * / %

+、-、*这些过于简单,不写了直接讲? /? ?和? ? ?%

除法两端如果都是整数,执行的是整数除法,得到的结果也是整数。

#include <stdio.h>
int main ()
{
    float x = 6 / 4;
    int y = 6/4;
    printf("%f\n", x);//输出1.000000
    printf("%d\n", y);//输出1
    return0;
}

在上面示例中,尽管x的类型是浮点数,但是6/4 得到的结果是1.0而不是1.5.原因就是c的整数除法是整除,只会返回整数部分,丢失小数部分。

如果希望得到浮点是的结果,两个运算数就中至少有一个浮点数,这时才会进行浮点数整除法。

#include <stdio.h>
int main()
{
    float x = 6.0/ 4;//或者写成6 / 4.0
    printf("%f\n", x);//输出1.500000
    return 0;
}

%表示求余,即返回两个整数相除的余值,只适用于整数

结果的正负号只看第一个运算数,即被除数的正负号来决定

6.赋值符号=

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

前面的都是双目操作符,要有两个运算数

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

前置++

int a =10;
int b = ++a;//++的操作数是a,是放在a前面的,就是前置
printf("a=%d b=%d\n",a ,b)

计算口诀是 先+1, 后使用;

a原来是10.先+1,然后变成11赋值给b

相当于

int a = 10;
a = a+1;
b = a;
printf("a=%d b=%d\n",a , b);

后置++

计算口诀是先使用,后+1

a原来是10,先使用就是先赋值给b,然后a再+1

结果为b=10,a=11

相当于

int a = 10;
int b = a;
a = a+1;
printf("a=%d b=%d\n",a , b);

前置--和后置--原理相同,略

8.强制类型转换

int a =3.14;
//a的是整型而3.14是浮点型。两边类型不一样会报错

要消除警告就要强制类型转换:

int a =(int)3.14;

9.scanf和printf介绍

这个留给后续补充,有点多

---------------------------------------------------------

文章来源:https://blog.csdn.net/2301_81335889/article/details/135723542
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。