C语言数据类型、变量和运算符以及printf相关问题

简介: C语言数据类型、变量和运算符以及printf相关问题

一、常见数据类型

1.整数类型

int i = 0;

初始C语言时,int类型可以满足大部分程序的整数类型需求。int是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。

short int i = 0;
  short i = 0;

short int类型(或简写为short)是有符号整型,占用的存储空间可能比int类型少,常用于较小数值的场合以便节省空间。

long int i = 0;
  long i = 0;

long int类型(或简写为long)是有符号整型,占用的存储空间可能比int类型大,常用于比较大数值的场合。

long long int i = 0;
  long long i = 0;//C99新加

long long int类型(或简写为long long)是有符号整型,占用的存储空间可能比long类型大,常用于非常大数值的场合,该类型至少占64位。

2.浮点数类型

float i = 0;

float类型是单精度浮点数类型,可以至少表示6位有效数字。

double j = 0;

doule类型是双精度浮点数类型,可以至少表示10位有效数字。

long double k = 0;

C语言中规定,long double用于比double更高精度的要求,但只要求至少和double精度相同。

3.布尔类型

#include<stdbool.h>//需要包含头文件<stdbool.h>
int main(void)
{
  _Bool flag = true;
  if(flag)
  printf("ok!");
}

C99标准中新增的_Bool类型,用于表示布尔值,即逻辑值true和false。

4.字符类型

char = 'a';

char类型用于存储字符,但是从技术层面来讲,char是整数类型,由于ASCII值可知,char类型实际上储存的是整数而非字符。

二、变量

1.变量的创建

在C语言中,将经常变化的值称为变量,不变的值称为常量。而类型的存在就是为了创建不同的变量。

data_type name;
    |      |
//数据类型 变量

在定义变量时,可以给予变量一个初始值,叫初始化。

int num = 10;
  float ret = 1.2;

2.变量的分类

(1)全局变量

全局变量是在大括号外部定义的一个变量。

#include<stdio.h>
  int num = 10;
  int main(void)
  {
  printf("%d ", num);//打印值为10
  }

全局变量的使用范围比较广,在整个工程中都是可以使用到。

(2)局部变量

局部变量在大括号内部定义的一个变量,可以在循环中、函数中等等。

#include<stdio.h>
int mian(void)
{
  int i = 1;
  while(i<2)
  {
    float n = 10/i;
    printf("%d ",  num);
    i = i + 1; 
  }
}

局部变量只能在自己所在的局部范围内使用。

如果全局变量和局部变量的名字相同会优先打印局部变量。

三、运算符

C语言中使用运算符表达算数运算。C语言中的运算符的使用范围非常广,在表达式,语言,函数中都可以使用。

1.加分运算符

a+b;
  c=a+3;
  3+3;
  printf("%d ", c+d, 2+2, 3+f);

加法运算符“+”运用于加法运算,使运算符俩侧的值相加。 加法运算符俩侧可以是变量或者是常量。

2.减法运算符

a-b;
  c=a-3;
  3-3;
  printf("%d ", c*d, 2-2, 3-f);

减法运算符“-”运用于减法运算,使运算符俩侧的值相减。 减法运算符俩侧同样可以是变量或者是常量。

3.乘法运算符

ret = 8*3;
  cam = 1*ret;
  hil = ret*cam;
  printf("%d ", 1*1, ret*hil);

乘法运算符“*”运用于乘法运算,使运算符俩侧的值相减。

4.除法运算符

除法运算符“/”运用于除法运算,/左侧是被除数,/右侧是除数。在进行除法运算时,整数除法和浮点数除法不同

//整数除法
  metre = 8/4;//值为2
  ret = 8/3;//值为2

由于整数除法的结果只能为整数,所以在C语言中,整数除法得到的小数部分被丢弃,这一过程被称为截断。

//浮点数除法
  num = 3.0/1.0;//值为0.3333334

浮点数除法的结果只能是浮点数。

5.求模运算符

求模运算符“%”,也称求余运算符,可以求得俩个整数的余数,且只能运用于整数运算。

num = 9%3;//值为0
  ret = 7%3;//值为1

加法、减法、乘法、除法、求模运算符都是双目运算符,即运算符俩侧都需要有运算对象。

6.符号运算符

“+”和“-”被用来表示正负。

int i = 1;
  int j = +1;//等价于i=1;
  int k = -1;

符号运算符为单目运算符,即单侧需要有运算对象。

7.自加运算符

自加运算符“++”,也称递加运算符,可以是作用对象值递加1。使用自加运算符时会有俩种情况,++出现在变量前面,称为前缀递加;++出现在变量后面,称为后缀递加。

++i;//前缀递加
  j++;//后缀递加
  //i和j的值都加1

俩者在实际使用中也有异同。

//前缀递加
  int k = 0;
  int i = 5;
  k = ++i;//k=6;i=6;
  //口诀:先自加,后使用

前缀递加在使用时,++在前面,需要先自加,然后赋值。

//后缀递加
  int m = 0;
  int n = 5;
  m = n++;//m=5;n=6;
  //先使用,后递加

后缀递加在使用时,++在后面,需要先赋值,然后自加。

8.自减运算符

自减运算符在使用时和自加运算符相同。

自减运算符“–”,也称递减运算符,可以是作用对象值递减1。使用自减运算符时也会有俩种情况,–出现在变量前面,称为前缀递减;–出现在变量后面,称为后缀递减法。

//前缀递减
  int k = 0;
  int i = 5;
  k = --;//k=4;i=4;
  //口诀:先自减,后使用

前缀递减在使用时,–在前面,需要先自减,然后赋值。

//后缀递减
  int m = 0;
  int n = 5;
  m = n--;//m=5;n=4;
  //先使用,后递加

后缀递减在使用时,–在后面,需要先赋值,然后自减。

自加、自减运算符也是单目运算符,需要单侧有运算对象。

9.赋值运算符及赋值表达式

(1)赋值运算符

赋值运算符“=”可以将一个表达式的值赋给变量。

int i = 0;
  i = 5 * 4;
  i = i + 1;

1.被赋值的变量必须是单个变量,且必须在赋值运算符的左边。

2.赋值运算符“=”与数学中的“=”不一样。

3.当表达式的值类型与被赋值变量的类型不同,但都是数值或者字符类型时,系统会自动将表达的值类型改变为被赋值变量的类型。

(2)复合赋值运算符

复合赋值运算符,即在赋值运算符之前加上双目运算符。C语言中有十种复合赋值运算符:+=、-=、/=、*=、%=、>>=、<<=、&=、|=、^=.

int i = 0;
  i = i + 9;
  i += 9;//等价于 i=i+9;

复合赋值预算符可以简化过程,提高编译效率。

10.逗号运算符

逗号运算符“,”,也称顺序求值运算符,可以将多个表达式连接起来以此求值。

int i = 0;
  i = 4 + 5,i * 4//没有;
  //先计算i=4+5;得到i=9;再计算i*4=36;
  //整个逗号表达式的值为36.

逗号表达式的值一般为:表达式1,表达式2,……表达式n

需要依次计算每个表达式的值,最后一个表达式计算的是这个逗号表达式的值。

四、printf相关问题

以提问的方式简答printf函数相关问题,以便检测大家

1.何为printf函数?

使用头文件#include格式输出函数printf是按照指定的格式,向显示器输出不同类型的数据·(int,float,char等),printf函数的格式一般为printf(格式控制,输出列表)。

printf("a=%d\n", a);

2.格式控制是什么?

格式控制是用在“”中,其包含三种信息:a=是普通字符,%d是格式说明(占位符),\n是转义字符。

3.输出列表是什么?

输出列表是为了输出数据,可以是变量、常量、字符、字符串或者表达式。

4.格式说明(占位符)是个啥?

格式说明占位符}的一般形式为:%[标志][宽度][精度][长度][类型]组成。

printf("%-5.3ld", i);

格式说明占位符}的作用是将输出的数据转化为指定的格式输出。

格式说明(占位符}由转换说明和转换说明修饰符组成,转换说明把储存在电脑里的二进制格式的值使用不同的类型输出,转换说明与打印的数据类型相匹配,例如:“%d打印整数类型,%f打印小数类型,%c打印字符类型,%s打印字符串类型……”

转换说明修饰符可以输出不同类型的值时对其格式进行修饰,例如“可以改变字段宽度的%*d,可以改变精确度的%.*f。”

通常来讲,占位符中还有标记,由于其也起修饰作用,可以归类在修饰符中对占位符进行修饰,例如“%-*d可以让输出值向左对齐”

5.转换说明有哪些?

转换说明为%[类型],不同的[类型]会输出不同的值。

6.如何多个占位符怎么一起使用?

格式控制中的一个占位符对应唯一的输出列表中的数据,是按照顺序一一对应的关系。

7.如何如何限定输出最小宽度?

%[宽度][类型]中宽度为正整数,可以输出结果的宽度。若结果长度大于指定宽度,输出结果长度;若结果长度小于指定宽度,输出长度为指定长度,输出的数据向右对其,左面空余部分为空格。

8.如何限制小数的使用精度?

%[精度][类型]中精度为.加正整数,可以限定小数的位数。

9.如何控制左对齐或者右对齐?

%[标志][宽度][类型]中标志可以为”-”,%-[宽度][类型]时数据向左对齐,%[宽度][类型]时数据向右对齐。

10.如何总是输出带有“+”“-”的值?

%[标志][类型]中标志可以为“+”,结果为正值会打印的数据会带有“+”,结果为负值会打印的数据会带有“-”。

11.如何改变转换说明的长度?

%[长度][类型]中确定确定类型后,更换不同的[长度]可以改变字节长度。

12.%*.*f 是什么意思?

在最初打印数据时不了解应该打印的结果宽度以及结果的小数精度,可以使用代替[宽度][精度],在后面的输出列表处也需要有对应的变量或常量。

13.如何输出部分字符串?

输出字符串使用的转换说明为%s,默认输出时为全部字符。若需要输出部分的字符,可以模仿[精度]使用,例如“%.3s”打印三个字符。

相关文章
|
6天前
|
C语言
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
14 4
|
27天前
|
存储 C语言
【c语言】数据类型和变量
本文介绍了C语言中的数据类型和变量。数据类型分为内置类型和自定义类型,内置类型包括字符型、整型、浮点型等,每种类型有不同的内存大小和取值范围。变量分为全局变量和局部变量,它们在内存中的存储位置也有所不同,分别位于静态区和栈区。通过示例代码和图解,详细阐述了这些概念及其应用。
36 1
|
30天前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
1月前
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
39 3
|
1月前
|
存储 C语言
C语言:设置地址为 0x67a9 的整型变量的值为 0xaa66
在C语言中,可以通过指针操作来实现对特定地址的访问和赋值。要将地址为 0x67a9 的整型变量值设为 0xaa66,可以先定义一个指向该地址的指针,并通过该指针对该内存位置进行赋值操作。需要注意的是,直接操作内存地址具有一定风险,必须确保地址合法且可写。代码示例应考虑字节序及内存对齐问题。
|
1月前
|
C语言
C语言条件运算符详解
C语言条件运算符,也称为三元运算符,是一种简化if-else语句的表达式,形式为:条件?表达式1:表达式2。当条件为真时,计算并返回表达式1的值;否则计算并返回表达式2的值。它可用于快速实现简单的条件分支逻辑。
|
1月前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
|
1月前
|
C语言
初识C语言:与计算机的交流之输入与输出(scanf和printf)
初识C语言:与计算机的交流之输入与输出(scanf和printf)
167 0
|
1月前
|
存储 C语言
初识C语言:常量与变量中寻找数据类型
初识C语言:常量与变量中寻找数据类型
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
19 0