【初识c语言】(1)


一、什么是c语言?

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,拥有经过了漫长发展历史的完整的理论体系,在编程语言中具有举足轻重的地位,我们所熟知的c++,JAVA,Python,都是从c中衍生出来的语言。

语言的变迁:


二、认识第一个c语言程序

2.1在屏幕上打印出“Hello world”

C 程序主要包括以下部分:
预处理器指令
函数
变量
语句 & 表达式
注释
代码如下:

#include<stdio.h>//这是编译预处理指令				
int main()//定义主函数
{	//函数开始的标志
	printf("Hello world\n");//输出所指定的一行信息
	return 0;//函数执行完毕时返回的函数值为0
}//函数结束的标志

2.2 程序分析

2.2.1 空白和注释

在这里插入图片描述

注释方法有如下三种:

	/*
	**第一种
	*/
		//第二种
			#if	0
					第三种
			#endif

2.2.2 预处理指令( 预处理命令以符号“#”开头)

1.宏定义

1.不带参数的宏定义:宏定义又称为宏代换、宏替换,简称“宏”。
格式:
#define标识符文本
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为文本(这个文本可以是字符串、可以是代码等)
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define MAX 100
把程序中全部的标识符MAX换成100
说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。
(3)可以用#undef命令终止宏定义的作用域
(4)宏定义可以嵌套
2.带参数的宏:
除了一般的字符串替换,还要做参数代换
格式:
#define 宏名(参数表) 文本
例如:#define S(a,b) a * b
area=S(3,2);
第一步被换为area=a * b;
第二步被换为area=3 * 2;
(1)实参如果是表达式容易出问题
#define SQUARE( x ) x * x
int a = 5;
printf("%d\n" ,SQUARE( a + 1) );
结果是printf ("%d\n",a + 1 * a + 1 );答案是11 你以为是36
正确的宏定义是#define SQUARE(x) (x) * (x)
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算,不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换。
(6)宏展开使源程序变长,函数调用不会
(7)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)

2.文件包含

一个文件包含另一个文件的内容
格式:
#include “文件名” OR #include <文件名>
编译时以包含处理以后的文件为编译单位,被包含的文件是源文件的一部分。
编译以后只得到一个目标文件.obj
被包含的文件又被称为“标题文件”或“头部文件”、“头文件”,并且常用.h作扩展名。
修改头文件后所有包含该文件的文件都要重新编译
头文件的内容除了函数原型和宏定义外,还可以有结构体定义,全局变量定义:
(1)一个#include命令指定一个头文件;
(2)文件1包含文件2,文件2用到文件3,则文件3的包含命令#include应放在文件1的头部第一行;
(3)包含可以嵌套;
(4)<文件名>称为标准方式,系统到头文件目录查找文件,
"文件名"则先在当前目录查找,而后到头文件目录查找;
(5)被包含文件中的静态全局变量不用在包含文件中声明。

3.条件编译

有些语句希望在条件满足时才编译。
格式:(1)

#ifdef 标识符
程序段1
#else
程序段2
#endif
//当标识符已经定义时,程序段1才参加编译。
#ifdef
程序段1
#endif

格式:(2)

#ifndef 标识符
#define 标识1
程序段1
#endif
//如果标识符没有被定义,则重定义标识1,且执行程序段1。

格式:(3)

#if 表达式1
程序段1
#elif 表达式2
程序段2
……//当表达式1成立时,编译程序段1,当不成立时,编译程序段2
#elif 表达式n
程序段n
#else
程序段n+1
#endif

使用条件编译可以使目标程序变小,运行时间变短。
预编译使问题或算法的解决方案增多,有助于我们选择合适的解决方案。
此外,还有布局控制:#pragma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。

2.2.3 main函数

main是函数的名字,表示“主函数",main前面的int表示此函数的类型是int类型(整型)。在执行主函数后会得到一个值(即函数值),其值为整型。“return 0;"的作用是:当main函数执行结束前将整数0作为函数值返回到调用函数处。每一个C语言程序都必须有一个main函效。是C编译系统提供起来。printf是输出函数。\n是换行符,即在输出"Hello world.”后,显示屏上的光标位置移到下一行的开头。这个光标位置称为输出的当前位置,即下一个输出的字符出现在此位置上。每个语句最后都有一个分号,表示语句结束。

2.2.4 标识符

C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。因此,在 C 中,Max 和 max 是两个不同的标识符。

2.2.5 关键字

下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

关键字说明
auto声明自动变量
break跳出当前循环
case开关语句分支
char声明字符型变量或函数返回值类型
const声明只读变量
continue结束当前循环,开始下一轮循环
default开关语句中的"其它"分支
do循环语句的循环体
double声明双精度浮点型变量或函数返回值类型
else条件语句否定分支(与 if 连用)
enum声明枚举类型
extern声明变量或函数是在其它文件或本文件的其他位置定义
float声明浮点型变量或函数返回值类型
for一种循环语句
goto无条件跳转语句
if条件语句
int声明整型变量或函数
long声明长整型变量或函数返回值类型
register 声明寄存器变量
return子程序返回语句(可以带参数,也可不带参数)
short声明短整型变量或函数
signed声明有符号类型变量或函数
sizeof计算数据类型或变量长度(即所占字节数)
static声明静态变量
struct
switch用于开关语句
typedef用以给数据类型取别名
unsigned声明无符号类型变量或函数
union声明共用体类型
void声明函数无返回值或无参数,声明无类型指针
volatile说明变量在程序执行中可被隐含地改变
while循环语句的循环条件

三、数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。

C 中的类型可分为以下几种:

序号类型与描述
1基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型。
2枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3void 类型: 类型说明符 void 表明没有可用的值。
4派生类型: 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。

3.1 整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型存储大小值范围
char1 字节-128 到 127 或 0 到 255
unsigned char1 字节0 到 255
signed char1 字节-128 到 127
int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295
short2 字节-32,768 到 32,767
unsigned short2 字节0 到 65,535
long4 字节-2,147,483,648 到 2,147,483,647
unsigned long4 字节0 到 4,294,967,295

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主
我们可以用sizeof()来计算类型大小

下面是大小的换算

在这里插入图片描述

3.2 浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

类型存储大小值范围精度
float4 字节1.2E-38 到 3.4E+386 位小数
double8 字节2.3E-308 到 1.7E+30815 位小数
long double16 字节3.4E-4932 到 1.1E+493219 位小数

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zzt.opkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值