重生之日再次捡起c语言,考完研,放松了半个月时间,心里越发焦虑,开始重新迈出前进的步伐,本人是电子信息专业,之前学校里学过c++,但由于基础不牢固,打算重新从头过一遍c语言,大概十几天的时间过一遍,尽量做到每天都打卡上传学习内容,用的开发环境为vs2019.
本日学习大纲
- c语言的概念
- 数据类型
- 变量、常量
- 字符串+转义字符+注释
- 选择语句
- 循环语句
- 函数
- 操作符
- 常见关键字
- define定义常量和宏
- 指针
- 结构体
1、C语言的基本概念
C
语言是一门通用
计算机编程语言
,广泛应用于底层开发。
C
语言的设计目标是提供一种能以简易的方式
编译
、处理低级
存储器
、产生少量的
机器码
以及不需要任何运行环境支持便能运行的编程语言。尽管C
语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式
处理器
(单片机或称
MCU
)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C
语言语法产生差异,由
美国国家标准局
为
C
语言制定了一套完整的美国国家标准语法,称为
ANSI C
,作为
C
语言最初的标准。
[1]
目前
2011
年
12
月
8
日,国际标准化组织(
ISO
)和国际电工委员会(IEC
)发布的
C11
标准
是
C
语言的第三个官方标准,也是
C
语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与
C++
,
Java
等面向对象的编程语言有所不同。
其编译器主要有
Clang
、
GCC
、
WIN-TC
、
SUBLIME
、
MSVC
、
Turbo C
等。
2、数据类型
计算机中的基本数据单位
bit | 比特 |
byte | 字节 |
kb | 千字节 |
mb | |
gb | |
tb | |
pb |
其中的转换关系为
1 byte | =8 bit |
1 kb | =1024 byte |
1 mb | =1024 kb |
1 gb | =1024 mb |
1 tb | =1024 gb |
1 pb | =1024 tb |
c语言中的数据类型有:
数据类型 | 说明 | 字节 | 应用 |
char | 字符型 | 1 | 作于存储单个字符 |
short int | 短整型(int 可以省略) | 2 | 同于存储整数 |
int | 整型 | 4 | 同于存储整数 |
long int | 长整型 | >=4 | 同于存储整数 |
long long int | 长长整型 | 8 | 同于存储整数 |
float | 单精度浮点型 | 4 | 用于存储小数 |
double | 双精度浮点型 | 8 | 用于存储更多小数 |
下面用程序输出各种类型的大小是多少
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char));// %d定义输出为整型数据
printf("%d\n",sizeof(short)); // \n时转义字符定义为:输出换行(后面会讲)
printf("%d\n",sizeof(int)); // sizeof()是计算数据大小的函数,记住即可
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
return 0;
}
运行结果为(单位为字节):
故可以验证上述所写的字节大小。
3、变量、常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
在c语言中,用常量的概念来表示不变的量,用变量来表示可以变化的数值
3.1定义变量的方法:
int age =150; //整型变量
float weight =62.5; //浮点型变量
char ch = 'w'; //字符型变量
3.2变量的分类
- 局部变量(在函数里面的变量)
- 全局变量(在函数外面的变量)
注意:当全局变量与局部变量冲突时(如命名相同)局部优先
下面举个例子
#include <stdio.h>
int a = 200;//全局变量
int main()
{
int b =100;//局部变量
//这里用与全局变量相同名称定义局部变量会发现什么问题呢?
int a =400;//局部变量
printf("a = %d\n",a);//输出变量a结果为?
return 0;
}
结果为:a=400;
故验证
当全局变量与局部变量冲突时(如命名相同)局部优先
3.3变量的使用
上面已经写到输出函数printf();
现在介绍一下输入函数scanf();
输入函数在使用前需要在原文件第一行放
#define _CRT_SECURE_NO_WARNINGS
下面举个例子(实现两个整数的加法):
#include <stdio.h>
int main()
{
int num1 = 0;//第一次定义变量令其等于0是初始化,没别的意思
int num2 =0;
int sum = 0;
printf("输入两个操作数:");
scanf("%d %d",&num1,&num2);//输入两个整数型数据,&num1为指针后面会说
sum = num1 +num2;
printf("%d\n",sum);
return 0;
}
结果为:
3.4变量的作用域和生命周期
作用域:说白了就是变量可以使用的区域;
- 局部变量:局部变量的作用域是变量所在的局部区域
- 全局变量:全局变量的作用域是整个工程
特别的 Extern int a //声明来自外部的符号
生命周期:
- 局部变量:局部变量的生命周期是进入作用域开始,出作用域结束
- 全局变量:全局变量的生命周期在整个程序都存在
3.5常量
c语言中常量分为以下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
举个例子说明(注意看注释):
#include <stdio.h>
enum Colour
{
RED,
GREEN,
BLUE
};
//上面括号里面的RED,GREEN,BLUE是枚举变量
int main()
{
3.14;//字面常量
100;
const float pi = 3.14;//这里的pi是const修饰的常变量(是不可以改变的)
//#define的标识符常量举例
#define MAX 100
printf("max = %d\n",MAX);
//枚举常量演示
printf("%d\n",RED);
printf("%d\n",GREEN);
printf("%d\n",BLUE);
return 0;
}
4、字符串+转义字符+注释
4.1字符串
c语言中是没有字符串的数据类型的,所以要存储一串字符串应使用数组
注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0当作结束标志,不算做字符串内容,故不算长度。
下面用例子说明“\0”的重要性
int main()
{
char arr1[]="abc";
char arr2[]={'a','b','c'};
char arr3[]={'a','b','c','\0'};
printf("%s\n",arr1);
printf("%s\n",arr2);
printf("%s\n",arr3);
return 0;
}
输出结果为:
注:“abc”中默认有\0,而‘a’,‘b’,‘c’中没有\0,要等到遇到\0才停止
所以用单引号来存储字符串时注意要加上结束标志‘ \0’
计算字符串长度来说明 \0
strlen()是计算字符串长度的函数
例子:
int main()
{
char arr1[] = "abcdef";//不知道字符串大小,中括号可以不写
char arr2[] = { 'a','b','c','d','e','f','\0' };//'\0'是结束标志
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}
运行结果为:
说明\0不算入字符串长度。
4.2 转义字符
转义字符就是一条斜杠加一个字母表示,这种形式就是转义字符,顾名思义,转义字符就是转变字符原来的意思,使其转变为全新的意思
转义字符 | 释义 |
\? |
在书写连续多个问号时使用,防止他们被解析成三字母词
|
\' |
用于表示字符常量
'
|
\" |
用于表示一个字符串内部的双引号
|
\\ |
用于表示一个反斜杠,防止它被解释为一个转义序列符
|
\a |
警告字符,蜂鸣
|
\b |
退格符
|
\f |
进纸符
|
\n |
换行
|
\r |
回车
|
\t |
水平制表符
|
\v | 垂直制表符 |
\ddd |
ddd表示
1~3
个八进制的数字。 如:
\130 X
|
\xdd |
dd表示
2
个十六进制数字。 如:
\x30 0
|
注:
\ddd (ddd为八进制的三位数,转换为十进制后对应的ascii码值)ddd的范围为0-127之间
\xdd (dd为十六进制的两位数,转换为十进制后对应的ascii码值)
格式符 %x
格式符 | 说明 |
%d | 带符号十进制整数 |
%c | 单个字符 |
%s | 字符串 |
%f | float类型的数据(单精度浮点数) |
%lf | double类型的数据(双精度浮点数) |
例题
//程序输出什么?
#include <stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));
// \62被解析成一个转义字符
printf("%d\n", strlen("c:\test\628\test.c"));
return 0;
}
答案为14
4.3 注释
c的注释 /*xxxxxxx*/
- Cpp的注释 //xxxxxx
- 可以梳理思路
- 对复杂的代码进行解释
- 写代码的时候写注释,是帮助自己,也是帮助别人的