C语言笔记1

2022_2_23

1、概述

主函数main的作用:程序从main函数的第一行开始执行,也被称为程序的入口,因此在写C语言程序的时候不能没有main函数,一个程序中不能有多个main函数;

main函数在程序中有且只有一个。

main函数的写法一般有两种

//第一种main函数写法

int main() //main前面的int表示执行完main函数后返回一个整型值
{

  //这里用来执行任务
  return 0; //返回0,与int呼应
}

//第二种main函数写法

void main()
{


} //现在不常用了

(1)数据类型

char  //字符数据类型

short //短整型

int //整型

long //长整型

long lomg //更长的整型

float //单精度浮点数

double //双精度浮点数,精度更高,小数点后位数更多

#include<stdio.h>

int main()
{
  char ch = 'A';
  printf("%c\n",ch); //%c表示打印字符格式的数据
  return 0;
}

//第二段
#include<stdio.h>

int main()
{
  int age = 20;
  printf("%d\n",age); //%d表示打印整型十进制的数据
  return 0;
}

//第三段
#include<stdio.h>

int main()
{
  long num = 200;
  printf("%d\n",num); //%d表示打印整型的数据,长整型也是整型,它与整型是空间上的区别
  return 0;
}

//浮点型代印
#include<stdio.h>

int main()
{
  float t = 4.3;
  printf("%f\n",t);
  return 0;
}

PS:%d-打印整型;%c-打印字符数据;%f-打印浮点型数据,%x-打印十六进制数,%p-以地址的形式打印

为什么有这么多的数据类型,因为数值的范围不同,占用的内存不同,调用时占用的内存资源也不同。那么,也可以根据代码来了解每一种数据类型占用的内存,如下:

#include<stdio.h>

int main()
{
  printf("%d\n",sizeof(char));
  printf("%d\n",sizeof(int));
  printf("%d\n",sizeof(short));
  printf("%d\n",sizeof(long));
  printf("%d\n",sizeof(double));
  printf("%d\n",sizeof(float));
  return 0;
}


//这里的单位都是字节

PS:计算机中的单位,最小的单位是   bit(比特位) ,往上一级为  byte(字节)   ,再往上还有kb,mb,gb,tb,pb等单位,如何理解这些单位呢?

计算机作为一个硬件,在通电后,计算机识别到高电平就标志为1,识别到低电平就标识为0,其中,一个1或者0就是一个比特位(bit) 。而一个字节等于8个bit位,1kb=1024byte,1mb=1024kb以此类推就得到了其他单位的大小;

2、变量

(1)

C语言中如何定义变量?C中定义变量的方法很简单,通常是:变量类型+变量名=赋一个值

如:char name = A; int age = 20; float num = 12.3;

区分全局变量和局部变量,全局变量定义在代码块之外(大括号之外),局部变量定义在代码块内部(放在main函数内的都是局部变量,但不是所有局部变量都放在main函数内部,一般的表述是代码块,也就是大括号);

如:

#include<stdio.h>

int num1 = 10; //全局变量

int main()
{
  int num2 = 11; //局部变量

  return 0;

}

另外,在写代码时,全局变量和局部变量的名字建议不要相同,如果二者名字相同,代码执行的结果会以局部变量优先;如下所示:

 同时需要注意的是,在局部定义的局部变量,不能再划定的范围之外使用;

(2)

变量的使用

以一个简单的加法程序为例,这里需要用到 scanf函数和取地址符号&,另外在变量的使用中,C语言规定,变量必须要定义在代码块的最前面,不能像C++一样用到再定义,同时scanf函数的作用是输入数据,&的作用是将地址内数据取出,通常为:scanf("%d%d",&变量1,&变量2);

PS:在上图代码中,有时候编译器会提示使用函数scanf,但是这个函数只是VS编译器自带的,尽量不要使用,不然代码移植到其他的编译器上就会无法编译,也就是说会让自己的代码缺少可移植性。

 变量的作用域和生命周期,变量的作用域就是变量可用的范围,一个变量并不是在全部代码中都可以起作用的,多出现于局部变量。 那么全局变量的作用域自然就是整个工程。

而生命周期指的是,一个变量从创建到销毁之间的时间段;那么,局部变量的生命周期就是:进入作用域生命周期开始,出作用域生命周期结束;而全局变量的生命周期则是整个程序的生命周期;

3、常量

常量也就是不变的,固定的量,常量在C语言中的分类有:字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量;(至于为什么是常变量,后面会提到)

(1)

所谓字面常量,可以理解成是在代码里面直观写出来的常量,区别于定义的变量,如下所示:

 (2)

所谓const修饰的常变量,就是,原本定义了一个变量,假设为num,当我们调用num的数值的时候,有时希望num的数值不变,就可以用const进行修饰,将num变为带有常数属性的变量,换句话说,虽然经过了const的修饰,其本质还是一个变量。所以称为const修饰的常变量

首先,我们来看一下不使用const修饰的常量,

很明显,上图中,先是定义了变量num,赋值为3,接着重新赋值为4,那么打印之后就可以看见,num作为变量,能够被更改赋值。如果使用const修饰,如下

代码在执行的时候就会报错,这是因为const修饰的变量已经具备了常属性,无法被更改数值。也就是说,如果不想某个数被改变,就可以在这个数前面添加const修饰为常变量。

(3)

#define定义的标识符常量,通过#define可以定义任一名称的常量,如下所示:

 这段代码中的  arr[   ]  方括号中的只能填入常量,因此从侧面验证了TANG已经被定义为常量了。

(4)

枚举常量,理解枚举常量,需要联系实际应用,在日常生活中,有很多可以枚举的常量,比如性别:男、女、保密。等等......

使用枚举常量时,需要用到:枚举关键字-----> enum

enum 的使用格式为:enum 常量名称{常量1,常量2,....}; 对应到性别的枚举就是:

enum Sex {MALE,FEMALE,SECRET};

而对枚举常量的赋值格式则为 : enum  常量名称   赋值对象  =  常量1;对应到性别,假设赋值小明为男性,那么就是 : enum Sex XIAOMING =  MALE;

代码表示:

虽然上面这段代码没有提现出来,实际上,枚举常量所赋值的MALE、FAMLE、SECRET三个值都是有具体数值的,可以通过以下代码的打印体现出来,

不难看出,实际上系统会自动给枚举常量按顺序赋值,并且这些值不可被改变。(注意:所谓的不能更改,指的是大括号内部的枚举常量不能更改,而不是后面的赋值不能更改,根据下面的代码可以理解

编译后,代码没有报错,上面的代码,首先将color赋值为BLUE,后又将其改为YELLOW。

4、字符串(打印字符串是:%s

什么是字符串,字符串属于容器型的数据类型,主要是将   “  ”  作为表示容器的符号,“ ” 里面是多个符号,每一个符号都是字符串的一个元素,另外需要注意的是:字符串是有序的,不可改变。并且所有的符号都可以作为字符串的元素,也称为字符,字符分为普通字符和转义字符。

比如:“acfngn” 就是一个字符串,“  ”  双引号内什么都没有也是字符串,叫做空字符串。现在写一段代码,用来将字符串存储进数组并打印,

现在,我们对字符串中的字符做更进一步的研究,我们知道    “abc”  是一个字符串,其中的abc就是字符串中的字符,那么怎么表示单个字符呢?----->我们可以用单引号的方式来表示单个字符,也就是:'a' 'b' 'c'   我们知道,上图中的代码表示的先将整个字符串存储入数组,再将其整体打印出来,那么能不能将单个字符依次存入一个数组再进行打印呢,这会和整体存入有什么区别吗?如下所示:

如上图所示,打印的字符串出现了问题,这是因为实际上:"abc" 字符串中包含的元素是: 'a', 'b', 'c', '\0'  也就是“abc”----->‘a’ ‘b’ ‘c’ ‘\0’   只不过由于   ‘\0’  的值实际上就是0。

那么,我们现在给数组arr2的单个字符里面补上0,再打印,观察arr2 与arr1的区别,如下所示:

可以看出,补上0后,打印的数组1和数组2就没有任何区别了。那么\0是什么呢?   \0--->表示的是字符串的结束标志,因此在打印的时候打印完abc就不再继续打印了。另外,在计算字符串长度的时候,\0只算是结束标志,不算做字符串的内容,也就不计入长度。(PS:既然\0的值是0,那么其他的符号也有对应的值,他们对应的值可以通过ASCII码表查到)

对于\0的作用,我们可以用 C语言自带的函数 strlen来体现,这是一个计算字符串长度的函数,(strlen------>string length字符串长度)通过调用这个函数来体现:

 由于arr2 添加了停止标识符,所以两个字符串长度都为3,如果arr2 不添加停止标识符,那么就会一直计数,直到遇到了\0,就会停止计数,什么时候遇到什么时候停止,长度随机,如下:

之所以这样,根本原因还是以为\0,这样的我们称之为转义字符,类似的还有 \n ---->表示换行,同样的还有其他的转义字符,常用的转义字符如下:

(1)

另外还有一个不常见的转义字符  :\?(还是代表?)  这是防止被编译器解析为三字母词,如下:

可以发现,在上面的代码中,??)------>  ]  但这并不是我们所希望的,因此需要使用转义字符,将  ?  替换成  \?如下所示:

(2)

如果我们想要使用到    却又不想  变成其他转义字符的  那么就需要用到斜杠的转义字符:\\   他的作用就是: \\  ---->  \   如下所示:

编译器自动把 \t  解析成了水平制表符;

使用转义字符之后就能够正常打印了。

(3)

另一种转义字符:\ddd  ,也就是 \后加数字的转义字符,如: \32   \132  等等,这些的含义是什么呢,首先 :\ddd 表示的是八进制数,比如     \32(八进制数表示的32) ----十进制转换---->26(十进制数26),接着如果我们打印 \132  实际上的步骤是,先将 \32 转换为是十进制数 90 再打印ASCII码表上对应的符号:Z,如下所示:

\xdd  则表示两个十六进制数字。如: \X12  \X34  等等;

5、选择语句

简单的选择语句以及执行后的结果。

代码如下:

//利用C语言写一个选择语句
#include <stdio.h>
#include <string.h>
int main() 
{
 int input = 0;
 printf("成为研究生\n");
 printf("你要好好学习吗?(1/0)>:"); //选择1或者0
 scanf("%d", &input);
 if(input == 1)
    printf("顺利毕业\n");
 else
    printf("延期毕业\n");
 return 0; 
}

6、循环语句

这里先讲解while语句,C语言中一共有三种循环语句,分别是:while循环、for循环语句、do...while循环语句;

while语句的语法: while(判断条件){执行};

现在,我们通过while语句来实现一个功能:假设我们开始学习写代码,当我们敲了20000+行的代码,我们就可以去找工作了,实现这个语句。

7、函数的概念

函数的概念可以结合之前写的加法小程序来理解,我们可以把“两个数相加”定义为一个加法函数,并给他命名,之后再需要用到加法的时候,直接调用这个加法函数就可以了,而不需要每次都去定义三个变量,再将其中两个变量相加后赋值给第三个的操作

如下所示:

我们在一开始定义了一个函数,名为JIAFA,接着在主函数内调用这个函数,完成了加法运算。由于这个函数的功能比较单一,因此在调用函数后看起来反而比以往更加复杂,但是以后遇到了复杂的功能或者算法,使用函数是非常有效的方法。

8、数组

什么是数组,C语言中规定,一组相同类型的元素的集合,就称之为数组

数组的定义方法: 数据类型 arr[  ]  = {  数组内要存放的元素  };另外需要注意数组的下标,下标默认从零开始,下标的意义是方便更好地访问数组内部的元素,

打一个简单的比方,打印数组中的一个元素,如下:(成功访问了下标为4的元素)

接着我们利用刚刚讲解过的循环语句和判断语句,该进了一下代码,让其能够把所有元素都打印出来,如下所示:

9、操作符(简单介绍)

(1)算术操作符:+ - * / %(取余数)

(2)移位操作符:  <<(左移操作符)、>>(右移操作符)  注意:移位操作符移动的是二进制          位

之所以这么移位,是因为一个整型占4个字节,(一个字节8比特)因此  a   共有32bit,也就是32位,在此基础上进行左移。 

另PS:在对  a  进行移位操作后,如果不重新赋值给  a  ,a的值是不会改变的。

(3)位操作符 (依然是操作二进制位):与、或、异或等。。。

(4)赋值操作符,需要注意的是,一个等号  =  是赋值,两个等号 ==  是判断。

赋值操作中,还有一种赋值值得留意, a=a+10;  a+=10;  这两种写法完全等价。减号同理。

(5)单目操作符 / 双目操作符 / 三目操作符-- 这里的目是什么意思呢,就是操作数的意思,比如说:  a+b  有两个操作数,所以加法 +  被称为双目操作符,同理的就是单目操作符和三目操作符。

常见的单目操作符: 逻辑反操作(二进制里的取反)、sizeof ---以字节为长度计算变量或者类型所占空间大小。使用语法为   sizeof(待计算的变量或者类型)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言是一种广泛应用于软件开发的编程语言,具有简洁、高效、灵活等特点。为了更好地学习和掌握C语言,整理一份完整的笔记是非常有必要的。 首先,C语言的基础知识是理解和掌握该语言的关键。笔记中应包含C语言的基本语法,如变量的声明和定义、数据类型、运算符、控制语句等,这些是编写C程序的基础。 其次,C语言函数也是非常重要的一部分。函数C语言中的一种模块化的编程方式,可以提高代码的重用性和可维护性。在笔记中应包含函数的定义和调用、参数传递、函数返回值等内容,以及常用的C库函数的使用。 此外,C语言的数组和指针也是需要重点关注的内容。数组是一种存储多个相同类型数据的方式,而指针则是C语言中与内存地址相关的操作。在笔记中应包含数组的定义和初始化、多维数组的使用、指针的声明和运算等内容。 还有,C语言中的内存管理是需要特别注意的。动态内存分配是C语言的一个重要特性,可以根据需要在运行时分配和释放内存。笔记中应包括动态内存分配的函数,如malloc、free等,以及内存泄漏和内存溢出的问题的解决方法。 最后,C语言的文件操作也是需要掌握的一部分。文件操作是C语言中与磁盘文件进行读写的关键部分,可以实现数据的长久保存和共享。在笔记中应涵盖文件的打开和关闭、读取和写入、文件指针的操作等内容。 综上所述,C语言笔记的完整版应该包含C语言的基础知识、函数、数组和指针、内存管理以及文件操作等内容。通过阅读和整理笔记,可以更好地理解和应用C语言,提高程序编写的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值