初识C语言(1)
🎪1.什么是C语言
在学习一门语言之前,我们首先要了解一些这门语言的历史,功能以及所应用的场景。下面让我们一起走进C语言吧!
1.1历史背景
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSIC,作为C语言最初的标准。 [1] 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
1.2应用场景
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
1.3编译器的选择
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C、devc++、VS等。
在接下来C语言的学习过程中,作者使用的编译器是Microsoft Visual Studio 2022
。
🏧2.第一个C语言程序
下面将展示我们C语言学习道路上的 第一个简单的C语言程序
。
#include <stdio.h>
int main()
{
printf("hello world!");
return 0;
}
接下来我们一起解读一下这段代码
#include <stdio.h>
这是每个C语言程序都应该写的一行代码 其中:
include的英语单词意思为包含
<stdio.h>是C语言中的一个头文件
std - standard(标准)
i - input(输入)
o - output(输出)
当我们在代码中用了对应头文件中的库函数时,我们的代码的开始几行就应该包含这个头文件。就相当于你开门必须要用钥匙一样,库函数是那扇门,头文件就是对应的钥匙。
接下来看下一部分:
int main()
{
printf("hello world!");
return 0;
}
这是一个main函数,是实现代码功能的主要部分
C语言规定main函数是程序的入口,并且main函数有且仅有一个
其中int表示整型类型,是C语言的基本类型,接下来的学习过程中我们也会学到,return表示返回,0表示一个整数
标准的主函数写法:
int main()
{
return 0;
}
或许在一些书上还会看到这样的主函数写法:
void main()
{
}
这是一种古老的写法,不推荐使用
🚦3.数据类型
我们写代码时为了解决生活中的问题,而在生活中我们有许多的东西需要被表示,比如年龄、价格、性别、名称等等,所以在C语言中规定了一些数据类型,来表示这些数据。
C语言的基本数据类型:
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
既然这些数据需要存储在计算机中,那么每种类型的大小是多少?
#include <stdio.h>
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;
}
运行结果为:
单位是bit
计算机中的单位:
bit - 比特
byte - 字节
kb
mb
gb
tb
pb它们之间的进制为:
1byte = 8bit
1kb = 1024bit
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
1pb = 1024tb
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
类型的使用:
int age = 18;
char ch = 'a';
double price = 9.99;
⛽️4.变量&常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等),有些值是可变的(比如:年龄,体重,薪资)。
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。
4.1定义变量的方法
int weight = 140;
float height = 183.5f;
char ch = 'w';
4.2变量的分类
局部变量 - {}内部定义的变量
全局变量 - {}外部定义的变量
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
int local = 2018;//局部变量
//下面定义的global会不会有问题?
int global = 2020;//局部变量
printf("global = %d\n", global); //结果为2020
return 0;
}
总结:
上面的局部变量global变量的定义其实没有什么问题的!
当局部变量和全局变量同名的时候,局部变量优先使用。但是建议不要将全局和局部变量的名字写成一样的.
变量的使用实例
写一个代码,计算2个整数的和并输出
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
//scanf 是一个输入函数
//printf是一个输出函数
printf("请输入两个操作数:\n");
scanf("%d %d", &num1, &num2);
//求和
sum = num1 + num2;
//输出
printf("sum=%d\n", sum);
return 0;
}
4.3解决VS编译器上scanf函数编译出错的问题
上面所写的代码是完全正确的,但是在VS上编译运行可能会出现如下的情况:
VS编译器不让使用scanf输入函数,而让我们使用scanf_s输入函数,但是scanf_s这个函数是VS编译器自己提供的函数,非标准C提供的函数,那也就是只有VS编译器自己认识,其他编译器不认识。
所以这里还是推荐使用scanf函数,那怎么去解决编译出错的问题呢?
第一个方法:
在你的源文件的第一行写上这行代码
#define _CRT_SECURE_NO_WARNINGS
但使用这种方法的话,以后你每次在VS编译器上使用scanf函数的话都要在开头写这行代码
下面推荐一个一劳永逸的方法
第二个方法:
在VS的安装路径下有一个文件:newc++file.cpp的文件
在VS工程中创建新的.c或者.cpp文件时,都是拷贝newc++file.cpp这个文件的!这样的话我们只用在newc++file.cpp文件中加上这行代码
#define _CRT_SECURE_NO_WARNINGS
以后在新的.c或者.cpp文件中就会自动生成这行代码
在你电脑的VS安装路径中找到newc++file.cpp文件(如果找不到,推荐使用everything软件查找)
在文件夹中可能没法直接修改
将这份文件复制到桌面,然后打开桌面的这个文件,然后在里面写#define _CRT_SECURE_NO_WARNINGS
写完后按Ctrl+S保存,关闭该文件,将其移回原来的文件夹并替换该文件夹下的newc++file.cpp文件,这样就可以了
4.4变量的作用域&生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
下面看一个代码示例:
#include <stdio.h>
int a = 10;//全局变量,作用域为整个工程
void test()
{
int b = 20;//局部变量,作用域为test这个函数
printf("a=%d\n", a);//编译通过
printf("b=%d\n", b);//编译通过
}
int main()
{
int c = 30;//局部变量,作用域为main函数
{
int d = 40;//局部变量,作用域为最近的这个{}
printf("d=%d\n", d);//编译通过
}
test();//运行test函数
printf("a=%d\n", a);//编译通过
printf("b=%d\n", b);//编译错误
printf("c=%d\n", c);//编译通过
printf("d=%d\n", d);//编译错误
return 0;
}
点击编译后会出现如下错误:
所以我们在日常编写代码的时候,要注意所定义的变量的作用域和生命周期,防止编译时报错哟!
总结
今天我们正式走进了C语言,了解了C语言的历史与背景,也学习了C语言中的一些数据类型的表示,变量与常量的区别、应用和生命周期,还解决了如何应对VS编译器上scanf输入函数报错的问题。希望我的文章和讲解能对大家的学习提供一些帮助。
感谢阅读,当然,本文仍有许多的不足之处,欢迎各位小伙伴们一起交流,批评指正!如果觉得收获满满的话,可以点点赞👍,支持一下!