C语言学习——初识C语言(一)

本文介绍了C语言的基础知识,包括C语言在底层开发中的应用,如何编写和理解第一个C语言程序,main()函数的作用,printf()和scanf()函数的使用,基本数据类型(整型、字符型、浮点型)的介绍,以及变量和常量的概念、作用域和生命周期。
摘要由CSDN通过智能技术生成

引言

       由于工作需要,我决心以一个初学者的姿态重新从头开始吃透C语言。学习C语言的第一步,就是要搞清楚基本概念,把基础知识理顺。初识阶段只需要搭建起一个C语言的大体印象,许多知识要后面揉碎掰开细细理解。

一、什么是C语言?

        C语言是一门广泛应用于底层开发的通用计算机编程语言。

那么底层开发指什么呢?

二、第一个C语言程序                

        上学时,我敲下的第一个C语言程序是打印 "Hello world" ,这里用这个程序做例程。

#include<stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}

1. main() 函数

        C语言都是从main() 函数开始执行,整个程序有且仅有一个main() 函数,我们不能随便定义main() 函数的名字。

    1.1 int main()

        int 代表整型,在这里表示main() 函数的返回的值是整数。返回到到哪里?返回给操作系统。

我大学老师教的写法是:void main() 。这是已经过时了的老写法,不推荐。

还有的书里是这样写的:int main(void) 。这种写法也是对的,这里void表明函数不带任何参数。 

2. printf("Hello World!\n");

        语句中使用 printf() 函数,这是C库函数,可以在屏幕上打印输出 Hello World! 。这里的 \n 是换行符 (后面会总结),因此打印结果中光标会停在下一行。

        C库函数是C语言编译器提供的现成函数。想要使用 printf() ,需要引用头文件 stdio.h ,引用方式参考代码第一行(#include<stdio.h>)。

3. scanf() 函数

        虽然例程中没有使用 scanf() 函数,但是说完 printf() 后怎能不提到它呢?scanf() 函数也是C库函数,使用时也需要引用头文件 stdio.h ,使用该函数后你可以按照自己想要的格式输入内容。

这里举个栗子:     

scanf("%d %d",&a,&b);    //a、b为两个变量,这句代码的意思是分别输入a和b的值

代码中的 &取地址符,输入的数据要存入a和b对应的内存。 

代码中的 %d 表示你输入的应当是整数 (后面会总结)。

scanf()函数返回的是读取到数据的个数,如果你规定输入两个值(像上面的例子一样),scanf()函数读取成功的情况下,返回的值就是2。

如果scanf()函数读取失败会返回EOF(end of file 文件结束标志),EOF=-1

scanf()函数的返回值有什么用呢,可以看看下面这个例子:

//输入一个整数表示一个人的智商,如果大于等于140,则表明他是天才
//要求多组输入,每行输入一个整数表示的智商

#include<stdio.h>
int main()
{
	int IQ, num;
	IQ = 0;
	num = 140;
/*
判断scanf的返回值,如果返回值为1,则说明读取到了我们输入的数值
从而实现多组输入
*/
	while(scanf("%d", &IQ)==1)    
	{
		if (IQ >= num)
			printf("Genius\n");
	}
	return 0;
}

//若要结束循环,需要在运行窗口按下 ctrl + Z

运行结果:

 

4.return 0;

        return 表示函数的返回值,返回值的类型由函数类型决定。

5.代码规范:

        应当注意缩进、注释、大小括号成对、语句末尾的分号,且所有符号必须为英文半角。

三、基本数据类型

基本数据类型分为整型、字符型、浮点型。

1. 整型

整型指整数类型,也就是0、1、2、3......这样的数。

char 为字符类型,但本质上也是整型,只是存放的不是数字,而是英文或符号。

long 的存储大小为 ≥ 4个字节。

long long 占用 8 个字节。

2. 浮点型:

浮点数就是小数。

double 为双精度浮点类型,存放数据大,且小数点后的有效位更多,精度高于 float ;

float 为单精度浮点类型,占用内存少,运算速度快,如果不是对精度要求特别高,最好用 float 。

3. sizeof 运算符

        数据类型的存储大小与系统位数有关,如果想准确知道当前系统/编译器上某数据类型的存储大小,可以用 sizeof 运算符来计算。

sizeof(type) 可以得到对象或类型的存储字节大小,单位是字节。 sizeof 不是函数,是运算符。

#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;
}

以上代码在 VS2019 的执行结果为:

4. 数据类型的使用

数据类型是为了声明变量或函数的类型而存在。

数据类型 变量名 ;                              int age ;
数据类型 变量名 = 初始值 ;               int age = 20 ;

float weight = 55.5f ;        //在小数后面加 f 表明是 float 类型

double weight = 55.5 ;        //直接写小数,编译器默认为 double 类型

上述例子定义了 age 和 weight 两个变量

四、变量和常量

        生活中有些值是变化的(体重、年龄等),称为变量;有些值是不变的(血型、圆周率、身份证号码等),称为常量。

1. 变量

1.1 定义变量的方法 

        变量创建的本质是在内存中开辟一个空间将数据存起来。与此同时,我们要给数据取个名字方便使用它。

        还是之前的例子:

        int age ;         //创建了一个叫 age 的整型变量

        float weight = 55.5f ;        //创建了一个叫 weight 的浮点型变量,并给变量一个初始值 

注意:

  • 变量名也叫标识符,应当起的尽量有意义,方便后续代码的维护。
  •  定义单个字符时用单引号 ' ' 引起来,定义字符串时用双引号 “ ” 引起来。如:char ch = 'a' ; 

变量命名的规则:

  •  名称可以用小写字母、大写字母、数字和下划线来命名。
  •  名称的第一个字符必须是字符或下划线,不能是数字。
  •  C语言的名称区分大小写,如 Star、star 和 STAR 都不同。
  •  由于编译器只能识别63个字符,故变量名长度不能超过63个字符。
  •  变量名不可使用关键字。
1.2 变量的分类

        根据变量的作用域范围不同,可以将变量分为局部变量和全局变量。 

  • 局部变量
  • 全局变量
//作为初学者,怎么好理解就怎么理解

#include<stdio.h>

int a = 100;    //全局变量
int main()
{
	int b = 10;    //局部变量
	printf("a=%d\n", a);

	return 0;
}

上面是一个简单的程序。作为初学者,我们可以粗糙地理解为,定义在大括号{ }之外的变量为全局变量;定义在大括号{ }之内的变量为局部变量。

  • 原则上,变量名尽量不要冲突。
  • 但是当全局变量与局部变量名字冲突的情况下,局部变量优先。 如上面例程中,如果将局部变量 b 的变量名改为 a ,则最后打印出来的结果是10,而不是100 。
  • 如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字 即可。例如:extern int a ;
 1.3 变量的作用域和生命周期
    1.3.1 变量的作用域

        通常来说,程序中用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

  • 局部变量的作用域是变量所在的局部范围。
  • 全局变量的作用域是整个工程。
   1.3.2 生命周期

        变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期。

(“ 销毁 ” 的意思是将变量占用的内存空间释放出来。)

1.4 数据的输出格式 
%d打印带符号的十进制整数
%c打印单个字符
%s打印字符串
%f打印 float 类型的浮点数
% lf打印 double 类型的浮点数
%p打印地址

2. 常量

 C语言中定义的常量分为以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量
2.1 字面常量

         字面常量,就是类似于 1、3.14、a、abcdef 之类的,可以直接使用的量。

2.2 const 修饰的常变量

        const 是关键字,用于限定一个变量为“只读”。

const int a = 5;         表明 a 的值不能再改变了,具有常属性,但是 a 本质仍是变量。

2.3 #define 定义的标识符常量

        由一个标识符表示一个常量。一般形式为:#define 标识符 常量值

#define CH 'W'
#define PI 3.14      //常量标识符一般用大写,变量标识符一般用小写
2.4 枚举常量

        枚举,也就是一一列举,生活中有些值是可以一一列举的,如血型、三原色等。枚举类型数据描述的是一组整型值的集合,可用关键字 enum 来定义。

enum SEX{FEMALE,MALE,SECRET};
enmu SEX Amy;    
//用枚举类型定义了一个变量,Amy的性别可以是FEMALE、MALE、SECRET中的任意一个

        除特别指定外,这组常量中的第1个常量的值为0,第二个常量的值为1,往后依次递增1。当然,我们也可以指定枚举常量的值为不连续的整数。

                                                                                                                                   (未完待续)

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值