C语言学习系列-->第二弹【数据类型和变量】(下)

简介: C语言学习系列-->第二弹【数据类型和变量】

四、变量

4.1 变量的创建

语法形式:

data_type name;
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量
//初始化
int age = 18;
char ch = 'w';
double weight = 48.0;
unsigned int height = 100;

4.2 变量的分类

全局变量在⼤括号外部定义的变量就是全局变量,全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
局部变量在⼤括号内部定义的变量就是局部变量,局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。

#include <stdio.h>
int global = 2023;//全局变量
int main()
{
 int local = 2018;//局部变量
 printf("%d\n", local);
 printf("%d\n", global);
 return 0;
}

如果局部和全局变量,名字相同,那么计算机该如何选择呢??

#include <stdio.h>
int n = 1000;
int main()
{
 int n = 10;
 printf("%d\n" n);//打印的结果10
 return 0;
}

局部变量和全局变量同名的时候,局部变量优先使⽤。可以理解为就近原则吧

这里咱们加一个小插曲,在操作系统里面会有详细讲解

全局变量和局部变量在内存中存储在哪⾥呢?

  1. 局部变量是放在内存的栈区
  2. 全局变量是放在内存的静态区
  3. 堆区是⽤来动态内存管理的

五、算数操作符:+、-、*、/、%

+ - * \ % ,都是双⽬操作符
注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的。

5.1 + - * /

#include <stdio.h>
int main()
{
 //加法and减法
 int x = 4 + 22;
 int y = 61 - 23;
 //乘法
 int num = 5;
//除法:除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
 float a = 6 / 4;
 int b = 6 / 4;
 printf("%d\n", x);
 printf("%d\n", y);
 printf("%d\n", num * num); // 输出 25
 printf("%f\n", a); // 输出 1.000000
 printf("%d\n", b); // 输出 1
 return 0;
}

对除法稍微再讲解一下:

如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。

#include <stdio.h>
int main()
{
 float x = 6.0 / 4; // 或者写成 6 / 4.0
 printf("%f\n", x); // 输出 1.500000
 return 0;
}
// 6.0 / 4 表⽰进⾏浮点数除法,得到的结果就是 1.5

再举个例子:

#include <stdio.h>
int main()
{
 int score = 5;
 score = (score / 20) * 100;
 return 0;
}

你可能觉得经过运算, score 会等于 25 ,但是实际上 score 等于 0 。这是因为score / 20 是整除,会得到⼀个整数值 0 ,所以乘以 100 后得到的也是 0

为了达到预想结果,我们可以改成这样:

#include <stdio.h>
int main()
{
 int score = 5;
 score = (score / 20.0) * 100;
 return 0;
}

5.2 %

运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。

#include <stdio.h>
int main()
{
 printf("%d\n", 11 % -5); // 1
 printf("%d\n",-11 % -5); // -1
 printf("%d\n",-11 % 5); // -1
 return 0;
}
//负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定

六、赋值操作符:=和复合赋值

int a = 100;//初始化 
 a = 200;//赋值,这⾥使⽤的就是赋值操作符

6.1 连续赋值

int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的。

6.2 复合赋值

#include<stdio.h>
int main()
{
  int a = 3;
  a = a + 10;
  a += 10;//复合赋值
  a = a - 4;
  a -= 4;//复合赋值
  printf("%d\n", a);
  return 0;
}

七、++、- -

++是⼀种⾃增的操作符,⼜分为前置++和后置++,–是⼀种⾃减的操作符,也分为前置- -和后置- -.

前置++

//计算口诀:先++,后使用
#incldue<stdio.h>
int main()
{
  int a = 5;
  int b = ++a;
    //a=a+1;b=a;
  printf("a=%d\n", a);//6
  printf("b=%d\n", b);//6
  return 0;
}

后置++

```c
//计算口诀:先使用,再++
#include<stdio.h>
int main()
{
  int a = 5;
  int b = a++;
  //b=a;a=a+1;
  printf("a=%d\n", a);//6
  printf("b=%d\n", b);//5
  return 0;
}

前置- -

//计算口诀:先--,后使用
#include<stdio.h>
int main()
{
  int a = 5;
  int b = --a;
  //a=a-1;b=a;
  printf("a=%d\n", a);//4
  printf("b=%d\n", b);//4
  return 0;
}

后置–

//计算口诀:先使用,再--
#include<stdio.h>
int main()
{
  int a = 5;
  int b = a--;
  //b=a, a=a-1
  printf("a=%d\n", a);//4
  printf("b=%d\n", b);//5
  return 0;
}

八、强制类型转化

int a = 3.14;//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告

为了消除这个警告,我们可以使⽤强制类型转换:

int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分

强扭的瓜不甜,不是迫不得已的情况下,最好不要强制类型转化,understand??

总结

本篇内容主要涉及了C语言的基础语法,不需要死记硬背,只需要经常敲代码,熟能生巧

目录
相关文章
|
3天前
|
存储 程序员 编译器
C语言的数据类型
C语言的数据类型
13 0
|
3天前
|
存储 编译器 C语言
C语言中的变量与常量
C语言中的变量与常量
11 0
|
3天前
|
存储 C语言
深入解析C语言的动态数据类型单项链表技术
深入解析C语言的动态数据类型单项链表技术
11 0
|
3天前
|
存储 程序员 C语言
C语言指针变量的深入解析与应用
C语言指针变量的深入解析与应用
|
3天前
|
安全 程序员 编译器
C语言中的枚举数据类型深入解析
C语言中的枚举数据类型深入解析
21 2
|
3天前
|
存储 C语言
C语言中处理动态数据类型链表节点冲突的技术探讨
C语言中处理动态数据类型链表节点冲突的技术探讨
11 0
|
3天前
|
存储 编译器 C语言
C语言指针变量的定义与初始化技术详解
C语言指针变量的定义与初始化技术详解
13 0
|
4天前
|
存储 缓存 编译器
C语言(2)----数据类型、变量以及操作符
C语言(2)----数据类型、变量以及操作符
10 0
|
4天前
|
C语言
C语言常量与变量、字符串与转义字符
C语言常量与变量、字符串与转义字符
|
4天前
|
存储 程序员 数据处理
C语言数据类型的深入探索
C语言数据类型的深入探索