初识C语言(下):基本了解C语言的基础知识,对C语言有一个大概的认识。

简介: 初识C语言(下):基本了解C语言的基础知识,对C语言有一个大概的认识。

主要内容


       10、操作符

               ①算数操作符

                       附带练习题(先看完算数操作符----仅提供小白练习)

               ②移位操作符

               ③位操作符

               ④赋值操作符

               ⑤单目操作符

               ⑥关系操作符

               ⑦逻辑操作符

               ⑧条件操作符(三目操作符)

               ⑨下标引用,函数调用,结构成员

       11、常见关键字

       12、#define 定义常量和宏

       13、 指针

       14、结构体(关键字struct)

       结束语


10、操作符


指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令

①算数操作符

附带练习题(先看完算数操作符----仅提供小白练习)


有兴趣的可以把答案发在评论区


1.png

+    -    *    /    %


加减乘除就不用多说了,下面讲一下%的用法,%就是用来取余用的,就比如说:5/2,在数学里我们通常把得到的结果写成2.5,但是在C语言中,得到的结果应该是:得2余1,%就是用来取余所用。话不多说,上代码实例:


2.png


那么这里得到的结果就是1,也就是输出余数。

这里要注意一点!

就是我们计算8/2的值,毫无疑问,得到的结果肯定是4,但如果计算5/2的值呢?得到的结果应该是多少?

看这里:


3.png


得到的结果怎么是2呢?那是因为%d是打印整形,只是打印出了5/2得到的整数部分,也就是2.

那该如何打印出完整答案2.5,而不仅仅只是一个整数或者余数呢?,很简单,用%lf即可,如果答案保存一位小数,就用%.1lf;同理,打印两位小数,就用%.2lf;以此类推…,但是要注意一点!!!

就是printf打印时用%lf打印出来的是浮点型参数,所以5/2要写成5/2.0的格式,或者5.0/2或者5.0/2.0的·格式,

各种案例+运行结果如下:


4.png


总结一点,就是如果计算除数时,想要小数结果,除数与被除数之间至少有一种是小数的形式!!!

另外,如果a%b==0,这说明什么呢?说明a是b的整数倍,话不多说,上例题:


5.png


答案如下:

#include<stdio.h>
int main()
{
  int M;//定义变量
  scanf("%d", &M);
  if (M % 5 == 0)
  {
  printf("YES");
  }
  else
  printf("NO");
  return 0;
}


关于%的用法还有很多,大家要学会灵活运用。


②移位操作符


<< 与>>

( 由于我也没有学到,所以大家了解一下就行)

③位操作符


同理,先了解


6.png


④赋值操作符


7.png


+=:很简单,举个例子:a+=50就表示a=a+50;同理a-=50、a*=50、a/=50,都是一样的。

后面的博主知识有限,还没学到…

⑤单目操作符


8.png


所谓单目操作符,就是只接受一个操作数的操作符,它旁边只能有一个变量,看了下面的介绍就知道啦:

!:所谓逻辑反操作,就是把真变为假,把假变为真

在C语言里,0就代表假,非零就代表真,通常都是这么规定的,由真到假也就是由非零到0,由假到真即由0到1。

话不多说,上图:


9.png


正负值就不用多说了,&与*放在后面的指针部分讲解。

sizeof

它是用来求 操作数的类型长度(以字节为单位),注意,sizeof不是函数

具体实例:


10.png


++:分为前置++与后置++,后置++就是先使用变量的值再增加变量的值,前置++表示先增加变量的值,再使用变量的值。

具体用法,举个例子:



#include<stdio.h>
int main()
{
  int a = 20;
  int b = 30;
  b = a++, a = ++a;
  printf("%d %d", a, b);//打印结果a=22,b=20
  //首先,b=a++就表示先使用a的值,然后a再加1,而a本来等于20,使用它,所以b就等于a的值20
  //使用完后,还要再往上加,所以这时的a=原来的a+1也就是21,
  //后面a=++a,就表示先增加a,再使用a,a再次增加后就变成21+1也就是22,然后再使用a,也就是这时的a就等于22了
  //所以,打印结果为 22  20
  return 0;
}


同理,- -的使用方式如上。

⑥关系操作符


11.png


⑦逻辑操作符


&&:逻辑与

||:逻辑或

举个例子就很好明白,比如:a>20&&a<80,这表示a既大于20,同时又满足a<80。必须同时满足两个条件。

a>60||a<18就表示a>60或者a<18,这两个条件只要满足一个即可。

⑧条件操作符(三目操作符)


exp1?exp2:exp3

如果表达式1为真,那么表达式2为真,表达式2的结果为整个表达式的结果,表达式3不算。

如果表达式1为假,那么表达式2不算,表达式3算,他的结果为整个表达式的结果‘

举个例子:

像这种用来比较大小的,就可以用三目操作符运算


12.png


⑨下标引用,函数调用,结构成员


[]:数组下标引用

():函数调用

.与->放到后面讲解

上面两个大家也见过了,就不多描述了’


11、常见关键字


13.png


static

在C语言中:

static是用来修饰变量和函数的


   修饰局部变量-称为静态局部变量

   修饰全局变量-称为静态全局变量

   修饰函数-称为静态函数

   static修饰局部变量

   我们知道,局部变量的生命周期很短,就只是在它的作用域,出了作用域,就会销毁。而用static修饰局部变量的时候,静态局部变量在整个程序结束后才会销毁。

   举个例子:


14.png


15.png


static修饰全局变量

我们知道,在不同的源文件中,全局变量是可以从一个源文件调用到另一个源文件中使用的,在全局变量前面加上static,就能使该变量只在这个源文件中可用。

static修饰函数

同上,想了解更多的可以点击此处静态函数


12、#define 定义常量和宏


#define定义标识符常量
#define ADD 5000
一个ADD就定义好了,它就代表着5000,假如在后面使用ADD时,编译器就会把ADD替换成5000.
#define定义宏
宏和函数很像,它也有参数,话不多说,举个例子就理解了:
加入求两个数的和,我们以往调用函数一般会写成这种形式:
#include<stdio.h>
int add(int x, int y)
{
  return x + y;
}
int main()
{
  int a = 50;
  int b = 60;
  int c=add(a, b);
  printf("%d", c);
  return 0;
}

 

那么,现在也可以用#define来定义宏的方式解决:


#include<stdio.h>
#define add(x,y)((x)+(y))//与函数很相似,这就是#define定义宏的用法
int main()
{
  int a = 50;
  int b = 60;
  int c=add(a, b);
  printf("%d", c);
  return 0;
}


运行结果都一样,诸君好好感悟一下


16.png


13、 指针

(本次也只是简单的了解一下,方便小白有一个大概的认识,后续再作深入研究)

要了解指针,就要先知道内存,内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地

址。

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

而&就是取地址符,每一个字节都有地址,&取出的是第一个地址。

问题来了,那取出来的地址都储存在哪里呢?就需要定义指针变量,我们平常说的指针,就是指指针变量。


int a=20;//定义类型为int的a变量
int* pa=&a;//*说明pa为指针变量,int代表指向的对象为ing类型,&代表取出a的第一个地址。


指针的本质其实就是地址,但我们平常说的指针是指指针变量,用来存放地址。

这里来讲一下前面提到的*解引用操作。

*的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中对应的对象。


17.png

18.png


这里的*pa=20;就是解引用操作。

指针变量的大小

指针变量的大小取决于地址的大小,也就是说,地址存储多大空间,指针变量就多大。

在32位机器中,1个地址是32的二进制位,存储需要32个比特位空间,也就是4个字节,

同样,在64为机器中,存储需要8个字节。


14、结构体(关键字struct)


结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义 。

在生活中,对于一个复杂生物的描述就比如:人,我们很难用一两句话就概括一个人的全部,我们通常会用很多信息用来描述一个人,就比如:身高,年龄,家庭住址,姓名等等等,而这一整段信息结合在一块,才能用来描述一个人。

同样,在c语言里也是如此,对于复杂对象的描述,C语言提供了结构体。

举个例子,用姓名,年龄,性别,学号来描述一个人:在c语言里是这样实现的:


#include<stdio.h>
struct stu
{
  char name[10];//名称
  char age[5];//年龄
  char xb[5];//性别
  char id[10];//学号
};//注意这里的;
//该怎么打印出来呢?
int main()
{
  struct stu s = { "zhangsan","18","nan","12345678\n" };//s为结构体变量
  struct stu* ps = &s;//定义ps为结构体指针变量,取地址s
  //.为结构成员访问操作符
  printf("%s %s %s %s", s.name, s.age, s.xb, s.id);
  //结构体变量.结构体成员
  //操作符->
  printf("%s %s %s %s", ps->name, ps->age, ps->xb, ps->id);
  //结构体指针变量->结构成员
  //注意区分.和->的区别
  return 0;
}


运行结果如下:


19.png


同样,用scanf输入的时候也是一样的用法。但要注意一点,就是我们在定义结构体成员的时候,都是char类型的数组形式,因为数组名本身就表示地址,所以用scanf时不用加&。

结束语


以上内容可以帮助新手小白对c语言有个基本的了解,方便后续进行更为深入的学习。


一起努力加油吧!!!


相关文章
|
6月前
|
存储 机器学习/深度学习 算法
c语言基础知识帮助理解(函数递归详解)
c语言基础知识帮助理解(函数递归详解)
61 0
|
6月前
|
C语言
c语言基础知识整理与帮助理解——二.数据的输出与输入
c语言基础知识整理与帮助理解——二.数据的输出与输入
91 0
|
6月前
|
Java C语言
c语言基础知识整理与帮助理解(第一篇)
c语言基础知识整理与帮助理解(第一篇)
106 0
|
6月前
|
C语言
C语言中指针的基础知识
C语言中指针的基础知识
65 0
|
5月前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
4月前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
6月前
|
存储 编译器 C语言
C语言基础知识:数据在内存中的存储解析(整数,浮点数)
C语言基础知识:数据在内存中的存储解析(整数,浮点数)
|
6月前
|
存储 缓存 编译器
C语言:基础知识
C语言:基础知识
124 0
|
6月前
|
存储 编译器 C语言
c语言基础知识帮助理解(详解数组)
c语言基础知识帮助理解(详解数组)
79 0
|
6月前
|
程序员 编译器 C语言
c语言基础知识帮助理解(详解函数)
c语言基础知识帮助理解(详解函数)
74 0