数据类型和和变量

目录

1.数据类型

1.1数据类型

1.2各种数据长度

1.2.1sizeof 操作符

1.2.2数据类型长度

​编辑

1.2.3sizeof中表达式不计算

2.变量

2.1创建变量

2.2变量的分类 

 2.3变量的存储位置

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

3.1.+和-

3.2.*

3.3./

3.4%

 4.赋值操作符:=和复合赋值

4.1.连续赋值

4.2.复合赋值符

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

5.1.++和--

5.1.1.前置++

5.1.2.后置++

5.1.3.前置--

5.1.4.后置--

5.2.+和-

6.scanf和printf

6.1.printf

6.1.1.用法

6.1.2.占位符

6.1.3.举例

6.1.4.显示正负号 

6.1.5.限定小数位数

6.1.5.输出部分字符串

6.2.scanf 

6.2.1.基本用法 

6.2.2.scanf的返回值 

6.2.3.占位符

6.2.4.赋值忽略符 


1.数据类型

C语言中的数据类型描述生活中的数据,用整型描述整数,用字符型描述字符,浮点型描述小数。写代码是为了解决生活中的问题,写出的代码可以描述出现实。将生活的问题转化为数据,不同的数据特征编写不同数据类型的代码。数据类型分为内置类型金和自定义类型两种,如下:

 本章节主要讨论内置类型。

1.1数据类型

  1. 字符型:char、signed char(有符号的)、unsigned char(无符号的),大部分编译器char就是signed char, char 不等同于signed char, 可能是signed char 也可能是 unsigned char,与int 不同
  2. 短整型:short int、  signed  short int、  unsigned short int
  3. 整型:  int、 signed int、(正数+负数) unsigned int (0+正数), signed int 等同于 int
  4. 长整型:long int、signed long int、unsigned long int、
  5. 更长的整型:long long int、signed long long int、 unsigned long long int、
  6. 浮点型:float、 double、long double
  7. 布尔类型:-Bool ,C语言原来没有单独设置一个类型,使用整数0表示假,非零值表示真在C99中引入了布尔类型,专门表示真假。布尔类型的使用需要包含头文件<stdbool.h>,布尔类型变量的取值是:true 或者 false.
    #define bool _Bool
    
    #define false 0
    #define true 1
    
    
    //代码演示
    _Bool flag = true;
    if (flag)
        
      printf("i like C\n")

1.2各种数据长度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围也不同。

1.2.1sizeof 操作符

sizeof 是一个关键字,也是操作符,专门用来计算sizeof 的操作符的类型长度的,单位是字节sizeof 操作符的操作数可以是类型,也可以是变量或者表达式。sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。 sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。 sizeof 的计算结果是 size_t 类型的。

sizef(类型)
sizef 表达式
sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是 unsigned int ,也有可能是 unsigned long ,或者是 unsigned long long , 对应的 printf() 占位符分别是 %u 、 %lu %llu 。这样不利于程序的可移植性。
C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,专门表⽰ sizeof 的返 回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是 unsigned long long 。

1.2.2数据类型长度

#include <stdio.h>
int main()
 {

 printf("%zd\n", sizeof(char));
 printf("%zd\n", sizeof(_Bool));
 printf("%zd\n", sizeof(short));
 printf("%zd\n", sizeof(int));
 printf("%zd\n", sizeof(long));
 printf("%zd\n", sizeof(long long));
 printf("%zd\n", sizeof(float));
 printf("%zd\n", sizeof(double));
 printf("%zd\n", sizeof(long double));
 return 0;
}

运行结果:

1.2.3sizeof中表达式不计算

2.变量

2.1创建变量

我们使⽤类型做什么呢?类型是⽤来创建变量的。C语⾔中把经常变化的值称为变量不变的值称为常量 变量创建的本质是在内存中申请一块空间。
data_type   name;  其中data_type 是数据类型,name 是变量名
int age;  //整型变量

char ch;  //字符变量

double weight; // 浮点型变量

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

int age = 18;     //初始化
char ch ='w';
double weight = 48.0;
unsigned int height = 100;

2.2变量的分类 

  • 全局变量:在⼤括号外部定义的变量就是全局变量全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
  • 局部变量:在⼤括号内部定义的变量就是局部变量,局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。
    #include <stdio.h>
    
    int global = 2023;//全局变量
    
     int main()
     {
     int local = 2018;//局部变量
     printf("%d\n", local);
     printf("%d\n", global);
     return 0;
     }
    当局部变量和全局变量同名的时候,局部变量优先使⽤。

 2.3变量的存储位置

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

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

为运算方便,C语言中有一系列的算术操作符

3.1.+和-

用来完成加减法,位于操作符两端的就是他们的操作数

3.2.*

来完成乘法

3.3./

来完成除法,除号两端是整数,执行整除除法,只返回整数部分,丢弃小数部分。如果想要得到带小数点的结果,两个运算数必须有一个是浮点数,这是会进行浮点数除法。7.0/5得到1.2。

3.4%

%表示求模或求余运算,返回两个整数相除的余值。此运算符只能用于整数,不能用于浮点数。负数求模的规则是,结果的正负号由第一个运算数的正负号决定

 4.赋值操作符:=和复合赋值

创建变量是给一个初始值叫初始化,变量创建好后,在给一个值,叫赋值。

4.1.连续赋值

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

4.2.复合赋值符

写代码时,经常对一个数进行自增或者自减的操作

int a = 10;
a = a+3;
a = a-2;

或者更加方便的写法

int a = 10;
a += 3:
a -= 4;

复合赋值操作符:+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=

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

前面的操作符都是双目操作符,由两个操作数。还有一些操作数只有一个操作数,称为单目操作符

5.1.++和--

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

5.1.1.前置++

int a = 9;
int b = ++a;
printf("a=%d b=%d\n",a,b);//a是9,先+1,a为10再赋值给b,则b为9

 先加1,后使用

5.1.2.后置++

先使用,后加1

5.1.3.前置--

先减1,后使用

5.1.4.后置--

先使用,后减1

5.2.+和-

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

int a = 10;
int b = -a;
int c = -10;
printf("b=%d c=%d\n",b,c);   //b和c都是-10

int a = -10;
int b = -a;
printf("b=%d\n",b)   //b是-10

6.scanf和printf

6.1.printf

6.1.1.用法

printf()将文本打印到屏幕上。f代表format(格式化),表示可以定制输出文本格式,printf()不会自动添加换行符,不会自动换行。通常再文本结尾添加一个换行符\n。

#include<stdio.h>

int main()
{
  printf("Hello World\n");
   return 0;
}

内部有换行,也是通过换行符

#include<stdio.h>

int main()
{
  printf("Hello World\n");


  printf("Hello\n");
  printf("World\n");

   return 0;
}

使用printf()时,要包含头文件stdio.h

6.1.2.占位符

占位符的第一个字符一律为%d,第二个字符表示占位符的类型,%d表示代入的值为一个整数。另外%s表示代入的字符串。                                                                                                                   输出文本时可以使用多个占位符

6.1.3.举例

  • %a: 16进制浮点数,字母输出为小写。
  • %A:16进制浮点数,字母输出为大写。
  • %c:字符。
  • %d:10进制整数。// int
  • %f: 小数(float类型和double类型)。// float %f     double  %lf

6.1.4.显示正负号 

通常情况下,pirntf()不对正数显示+号,只对负数显示-号,在占位符%后面加一个+,正数可以输出+号。

#include<stdio.h>
int main()

{
  printf("%+d\n",12);  //输出+12
  printf("%+d\n",-12);//输出-12
  return0;

}

6.1.5.限定小数位数

假如,希望小数点后面只保留两位,占位符可写成%.2f

#include<stdio.h>

int main()

{
printf("Number is %.2f\n",0.5); //输出Number is 0.50.
printf("%.5s","hello world")
return 0;
}

6.1.5.输出部分字符串

%s输出全部的字符串,可以用%.[m]s指定输出长度,m代表要输出的长度。在上例中,%.5s表示只输出hello

6.2.scanf 

需要给变量输入值时,使用scanf函数,若要将变量的值输出到屏幕上,使用printf函数。例子如下:

#include<stdio.h>

int main()

{
  int score = 0;
  printf("输入成绩:");
  scanf("%d",&score);
  printf("成绩是%d\n",score);  
  return 0;
}
//输入成绩:90
//  成绩是:90

6.2.1.基本用法 

 scanf()函数,用于读取用户的键盘输入,它的原型定义在头文件stdio.h

scanf("%d",&i)

 上述例子中,第一个参数%d,表示输入一个整数。第二个参数&i表示,从键盘输入的整数存入变量i。(scanf()函数传递的不是值,而是地址,变量i的地址指向用户输入的值,因此变量前面必须加上&运算符。)                                                                                                                                一次输入多个值:

scanf("%d  %d %f %f",&i,&j,&x,&y);

 四个数10 20 3.5  4.6,依次放入i  j  x  y四个变量中。scanf()处理占位符时,会自动过滤空白字符,包括空格、制符表、换行符等。

6.2.2.scanf的返回值 

scanf()的返回值是一个整数,表示成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回0。在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)。EOF-end of file文件结束标志。

6.2.3.占位符

  • %c: 字符。
  • %d: 整数。
  • %f: float类型浮点数。
  •  %lf: double类型浮点数。
  • %Lf: long double类型浮点数。
  • %s: 字符串。
  • %[]: 在括号中指定一组匹配的字符,可以写成
    scanf(" %c",&ch)
     占位符%s,从当前第一个非空白字符开始读起,直到遇到空白字符为止。scanf() 函数不适合读取可能包含空格的字符串,scanf()遇到%s占位符,会在字符串变量末尾存储一个空字符\0。

scanf() 函数将字符串读入字符组时,不会检测字符串是否超过了数组长度,所以使用%s占位符时,要指定字符串的最长长度,写成%[m]s, [m]表示读取字符串的最长长度,后面的全部丢弃,不会有溢出的风险。

#include<stdio.h>

int main()
{
   char name[11];
   scanf("%10s",name); //最多读取10个字符

   return 0;
}

6.2.4.赋值忽略符 

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

#include<stdio.h>

int main()

{
   int year = 0;
   int month = 0;
   int day = 0;
   scanf("%d-%d-%d",&year,&month,&day);
   printf("%d %d %d\n",year,month,day);
    
   return 0;
}

输入2024-6-28,就会正确显示出年、月、日。如果输入其他的格式,如2024/6/28,就会解析数据失败。为避免发生这种情况,scanf()提供了一个赋值忽略符 * 把它加在任何占位符的百分号后面,该占位符就不会返回值,解析后被丢弃。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值