初识C语言(1)
文章目录
一、什么是C语言
二、第一个C语言程序
三、数据类型
五、字符串+转义字符+注释
前言
我也是才学习C语言,所以文中有什么错误之处,望大家能及时批评指正,很期待和大家一起相互学习,相互交流。之后我也会陆续将我学习的一些方法和心得以博客的方式呈现出来,希望大家能多多关注。蟹蟹!
声明:首先我们的来梳理一下C语言的大概内容,对C语言有一个大概的了解。所以文中有些内容只是点到为止,不做深究,后期会一一剖析。
下文中所有程序代码都是在visual studio 2019中运行的。
一、什么是C语言
C语言是一门通用计算机编程语言,广泛应用于底层开发,C语言的设计目标是提供一种能以简易的方式编译,处理低级存储器,产生少量的机器码以及不需要任何环境支持就能运行的编程语言。
C语言有着良好跨平台的特性,以一个标准规格写出的C语言程序可在多个电脑平台上进行编译,甚至包含一些嵌入式处理器,以及超级电脑等作业平台
二十世纪八十年代,为了避免各个开发厂商的C语言语法产生差异,由美国国家标准为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准组织(ISO)和国机电工委员会(IEC)发布的C11
C语言是一门面向过程的计算机编程语言,与c++,Java等面向对象的编程语言有所不同。C语言的主要编译器有Clang、GCC、MSVC、WIN-TC、SUBLIME、Turbo C
二、第一个C语言程序
代码如下:
#include int main(){ printf("hello world!\n"); printf("he he\n"); return 0;}//解释://main函数是程序的入口//一个工程中main函数有且仅有一个
程序运行结果如下:
三、数据类型
C语言中常见的数据类型有以下几种:
数据类型 | 类型大小/byte | |
char | 字符数据类型 | 1 |
short | 短整型 | 2 |
int | 整型 | 4 |
long | 长整型 | 4 |
long long | 更长的整型 | 8 |
float | 单精度浮点数 | 4 |
double | 双精度浮点数 | 8 |
#include int main(){ printf("%d\n", sizeof(char)); printf("%d\n", sizeof(short)); printf("%d\n", sizeof(int)); printf("%d\n", sizeof(long)); printf("%d\n", sizeof(long long)); printf("%d\n", sizeof(float)); printf("%d\n", sizeof(double)); printf("%d\n", sizeof(long double)); return 0;}//sizeof是C/C++中的一个操作符(operator)//简单的说其作用就是返回一个对象或者类型所占的内存字节数。
visual studio 2019中32位编译环境下运行的结果如下:
● 存在这么多的数据类型,其实是为了更加丰富的表达生活中的各种值。
四、变量、常量
在我们的实际生活中,有些值是不变的,有些值是可变的。不变的值C语言中用常量的概念来表示,可变的值C语言中用变量来表示。
4.1 定义变量的方法
int age = 150;float weight = 45.5f;char ch = 'w';
4.2 变量的分类
● 局部变量
● 全局变量
注意:当局部变量和全局变量同名时,局部变量优先使用。
4.3 变量的使用
#include int main(){ int num1 = 0; //对变量进行初始化 int num2 = 0; int sum = 0; printf("输入两个操作数:>"); scanf("%d %d", &num1, &num2); sum = num1 + num2; printf("sum = %d\n", sum); return 0;}
程序运行结果如下:
4.4 变量的作用域和生命周期
作用域
作用域是程序设计的概念,通常来说。一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
1.局部变量的作用域是变量所在的局部范围。
2.全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量销毁之间的一个时间段
1.局部变量的生命周期是:进入作用域生命周期开始,出作用有生命周期结束。
2.全局变量的生命周期是:整个程序的生命周期。
4.5常量
C语言常量分为以下几种:字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量.
#include int main(){//字面常量99;3.14;"bcd";'a';//const 修饰的常变量//虽然下面的num是不能被修改的,但本质上还是一个变量const int num = 10;printf("num = %d\n", num);//10num = 20;printf("num = %d\n", num);//20//数组的概念//int arr[100] = {0};//const int n = 100//int arr[n] = {0}; //这里的n不能为变量//C99标准中,是支持变长数组,允许变量来指定数组大小return 0;}
//#define 定义标识符常量//一般习惯大写#include #define MAX 100int main(){int a = MAX; int arr[MAX]; //说明MAX是常量printf("%d\n", a);return 0;}
程序运行结果如下:
//枚举常量//枚举- 一一列举//生活中有些值是可以一一列举的,但有些值不合适一一列举//定义枚举类型#include enum Sex{//枚举这种类型的可能取值-就是枚举常量MALE,FEMALE,SECRET};int main(){//enum Sex s = MALE;printf("%d\n", MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);//MALE = 10; //这是错误的,因为MALE是常量return 0;}
程序运行结果如下:
注意:枚举常量的默认是从0开始,依次向下递增1的。
五、字符串+转义字符+注释
5.1字符串
用双引号引起的一串字符称为字符串字面值,或者简称字符串。
注意:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串内容。C语言中字符串没有字符串类型。
#include int main(){ char ch = "abc" //这是错误的,因为ch是一个字符变量,它里面只能存一个字符 //可以把字符串放在字符数组中 char arr1[] = "bit"; //字符串 char arr2[] = {'b', 'i', 't'}; //字符串没有以‘\0’作为结束标志//所以在打印出bit后会打印一些随机值直到遇到‘\0’结束 char arr3[] = {'b', 'i', 't', '\0'}; printf("%s\n", arr1); printf("%s\n", arr2); printf("%s\n", arr3); return 0;}
程序运行结果如下:
● 通过调试可以看出,字符串的末尾其实隐藏一个'\0',所以'\0'是字符串的结束标志。
#include int main(){char arr1[] = "abc";char arr2[] = { 'a','b','c' };printf("%d\n", strlen(arr1)); //strlen //string length - 求字符串长度的函数 printf("%d\n", strlen(arr2)); //arr2数组中没有出现‘\0’,所以它的结果是一个随机值 return 0;}
程序运行结果如下:
● strlen在求字符串长度时,只统计在‘\0’之前出现多少个字符
5.2转义字符
假设我们想在屏幕上打印一个目录:d:\code\test.c\n
1.#include int main(){printf("d:\code\test.c\n");return 0;}2.#include int main(){printf("d:\\code\\test.c\\n");return 0;}
实际上代码的结果是这样的:
修改后,代码2运行的结果才是我们想要的,如下图:
以上结果就是因为转义字符的作用而导致的。转义字符顾名思义就是转变意思。具体的来讲,就是所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
字符表
转义字符 |
释义 |
|
\a |
警告字符,蜂鸣 | |
\b |
退格,将当前位置移到前一列 |
|
\f |
换页,将当前位置移到下页开头 |
|
\n |
换行 ,将当前位置移到下一行开头 |
|
\r |
回车,将当前位置移到本行开头 |
|
\t |
水平制表 (跳到下一个TAB位置) |
|
\v |
垂直制表 |
|
\\ |
代表一个反斜线字符''\' |
|
\' |
代表一个单引号(撇号)字符 |
|
\" |
代表一个双引号字符 |
|
\? |
代表一个问号 在书写连续多个问号时使用,防止他们被解析成三字母词 |
|
\0 |
空字符 |
|
\ddd |
1到3位八进制数所代表的任意字符 如: \130 X |
|
\xhh |
十六进制所代表的任意字符 如: \x30 0 |
#include int main(){ printf("%d\n", strlen("abcdef")); // \62被解析成一个转义字符 printf("%d\n", strlen("c:\test\628\test.c")); return 0;}
运行结果如下:
注://??) 是三字母词会被转义为 ]
5.3注释
1. 代码中有不需要的代码可以直接删除,也可以注释掉。
2. 代码中有些代码比较难懂,可以加一下注释文字。注释有两种风格:
● C语言风格的注释 /*xxxxxx*/
● 缺陷:不能嵌套注释;
● C++风格的注释 //xxxxxxxx
● 可以注释一行也可以注释多行;