一篇文章带你了解C语言:入门基础

目录
  • C语言本身特点
  • 数据类型
  • 常量变量
    • 变量分类
    • 使用小建议
    • 生命周期作用域
    • 常量分类及其特点
  • 字符串+转义字符+注释
    • 字符串
    • 转义字符
    • 两种注释
    • 选择循环语句
    • 函数
    • 数组
  • 总结

闲话少说,先上思维导图。

如图所示,现在还是初识C语言的第一部分,本次只介绍了C语言本身特点,数据类型,常量变量,字符串转义字符注释,选择循环语句,函数,数组。

接下来请和我一起粗略地探讨其中内涵所在。

C语言本身特点

这是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等。

但总结其特点就是

1.底层开发,

2.国际标准 ANSI C,

3.面向过程

#include <stdio.h>
//stdio-标准输入输出  standard input & output headfile
//int -整型-整数的类型
//主函数
//main函数是程序的入口
//唯一性有且仅有一个
int main()
{
	//库函数-打印函数-输出函数
	printf("hello world!\n");
	printf("hello world!\n");
	printf("hello world!\n");

	return 0;
}
//这种写法明确告诉你,main函数不需要传参
int main(void)
{
}
//这种写法有用,但不是重点
int mian(int argc, char* argv[])
{
}

数据类型

C语言主要有六种数据类型,分别为字符型char,短整型short,整形int,长整型long,单精度浮点型float以及双精度浮点型double。

这六种分别有自己的字符长度即其所建变量所占的空间,char最小只要1个字节,short占2个,int占4个,long一般是4个,也有可能是8个,反正只要满足long的字节长度大于等于int就可以了。两个浮点型的最为特殊,分别是4和8,显然双精度的精度更高。

int main()
{
	//如何计算一个类型创建的变量所占空间的大小
	//sizeof();
	printf("%d\n", sizeof(char));//1个字节
	printf("%d\n", sizeof(short));//2个字节
	printf("%d\n", sizeof(int));//4个字节
	printf("%d\n", sizeof(long));//4个字节
	printf("%d\n", sizeof(long long));//8个字节
	printf("%d\n", sizeof(float));//4个字节
	printf("%d\n", sizeof(double));//8个字节
return 0;
}

常量变量

变量分类

显而易见的是,分为两类变量和常量讲述。变量又分两类,一是局部变量,二是全局变量。

顾名思义,局部变量是定义在一对大括号内的,显然我们平时在main函数里创建的都是局部变量,全局变量则为定义在大括号外面的变量。当二者同名时,局部变量优先,当然,这种代码谁写谁SB。

使用小建议

在程序中使用scanf函数,若程序为scanf("%d%d");%d%d之间不管有没有空格,输入变量时都要用空格隔开,若二者之间有逗号则逗号隔开。

生命周期作用域

对这二者讨论他们的作用域和生命周期的话,全局变量的作用域为整个工程文件,若想在其他.c文件中使用则需要extern声明一下,生命周期呢,则是整个工程的生命周期,也就是main函数的生命周期。局部变量的作用域为其定义的大括号{ }内,进作用域生命开始,出则结束。

//验证局部变量的作用域
int main()
{
	int b = 100;//主函数任意位置
	{
		int a = 10;//局部变量作用域:局部所在范围
		printf("a=%d\n", a);
		printf("b=%d\n", b);
	}
	//printf("a=%d\n", a);
	printf("b=%d\n", b);

	return 0;
}

//验证全局变量的作用域为整个工程
int a = 200;
void test()
{
	printf("test:%d\n", a);
}
int main()
{
	test();
	printf("main:%d\n", a);//全局变量可以任意使用
	return 0;
}
//全局变量在其他源文件的使用
//转到test1.c文件查看
int g_val = 110;

//验证局部变量的生命周期为进作用域到出作用域
int main()
{
	{
		int a = 100;
		printf("%d\n", a);
	}
	printf("%d\n", a);//出作用域即生命周期结束
	return 0;
}

//全局变量的生命周期为整个工程即main函数生命周期
int main()
{
	printf("%d\n", g_val);

	return 0;
}

常量分类及其特点

常量呢,大致分为四种,1字面常量,2const修饰的常变量,3#define定义的标识符常量,4枚举常量。

第一种,字面常量就是随便写出来的一个数,如3.14就是一个字面常量。

第二种,const修饰的常变量,即在创建变量时加上const修饰,如const int a=0;这样变量a就具有了常属性,不可被修改。但值得注意的是,常变量一词,它仍然是个变量,不可用于定义数组。

//const修饰的变量
int main()
{
	//局部变量
	int a = 200;
	//不可被改变的属性,常属性
	const int a = 110;
	a = 100;
	printf("%d\n", a);
	//const修饰的变量不可定义数组
	//(常变量)
	int n = 110;
	int arr[n] = { 0 };//数组

	return 0;
}

第三种,#define定义的常量,写法如 #define N 10,这是真真正正的常量,可以用来定义数组。同样也是不可修改的(常量当然不可被修改)。

#define PAI 314
int main()
{
	int a = PAI;
	printf("a=%d\n", a);
	//MAX = 300;//#define定义的变量不可被修改
	//可用于定义数组
	int arr[PAI] = { 0 };
	return 0;
}

第四种,枚举常量,具体使用方法像enum sex {MALE,FEMALE,SECRET};这样就得到了枚举常量,各自都是有初值的,分别为0,1,2依次类推,当然也可以自己赋值。

//枚举常量 SEX性别举例
//可以一一列举的值,性别,三原色
enum Sex
{
	//枚举的可能取值
	MALE=3,//赋初值
	FEMALE=8,
	SECRET//向后延一个为9
};
int main()
{
	//FEMALE = 99;//ERR 枚举变量值不可修改
	enum Sex a=MALE;
	enum Sex s = FEMALE;
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);
	return 0;
}

字符串+转义字符+注释

字符串

被单引号引起来的,如'w','r'是字符,被双引号引起来的"yyx","abcdef"是字符串。字符串一般以'\0'结尾隐含在字符串的末尾。既然'\0'为字符串结束标志,在计算字符串长度时当然不算作字符串内容。

//字符,字符串
int main()
{
	//'a', ' ' , 'X' - 字符
	//"abc"   "123" - 字符串
	//"abcdef"; //字符串字面值
	//①
	char ch1[] = "abcdef";//初始化字符数组
	//a ,b ,c ,d ,e ,f ,\0
	//%s - 打印字符串
	//strlen - 打印字符串长度,(遇\0则停止,本身不算)\0是字符串结束标志
	printf("%s\n", ch1);
	//abcdef
	printf("%d\n", strlen(ch1));//6
	//②
	char ch2[] = { 'a','b','c','d','e','f' };
	//a ,b ,c ,e ,f
	printf("%s\n", ch2);
	//abcdef烫烫烫烫烫abcdef
	printf("%d\n", strlen(ch2));//22,找不到\0
	//③
	char ch3[] = { 'a','b','c','d','e','f','\0' };
	//a ,b ,c ,d ,e ,f ,\0
	printf("%s\n", ch3);
	//abcdef
	printf("%d\n", strlen(ch3));//6

	return 0;
}

转义字符

有防止单引号,双引号,反斜杠被转移的' \' ' , ' \" ',' \\ ' 。警告,蜂鸣的' \a ' ,退格符' \b ',进纸符' \f ',换行符' \n ',回车符' \r ',水平制表符' \t ',垂直制表位' \v ',八进制数字' \ddd ',十六进制数字' \xdd ' 。

#include <stdio.h>
int main()
{
	printf("c:\code\test.c\n");//c:code  est.c
	printf("c:\\code\test.c\n");//c:\code  est.c
    //单个\是转义序列符,但这里又没有\c的转义字符,所以系统自动忽略该\
	//想要出现该\,则必须要搭配两个\\,防止其被转义

	return 0;
}
// \?
//三字母词
// ??) --> ]   ??( --> [
//\' \"
int main()
{
	printf("%c\n", 'a');
	printf("%c\n", 'b');
	printf("%c\n",'\'');//在'前面加上\,以单纯的将其视为字符'
	printf("%s\n", "\"");// \"
	return 0;
}
//\a \b \f \v \t \n \r
//\ddd八进制数字  \xdd十六进制数字
int main()
{
	printf("%c\n", '\165');
	//打印八进制数字065转化为十进制数字53所代表的字符(ASCII码)
	printf("%d\n", '\165');
	//打印八进制数字065转化为十进制数字53
	printf("%c\n", '\x15');
	printf("%d\n", '\x15');//21
	return 0;
}

两种注释

C++的风格 //xxxxx ,这种只能注释一行。C语言的风格 /*xxxxx*/ ,不可嵌套注释。

选择循环语句

选择语句,实现分支。具体情况为 if ( 条件 ) { 语句 } else ( 条件 ) { 语句 };循环语句,有while循环,do...while循环和for循环。

int main()
{
	int i = 0;
	printf("加入比特\n");
	printf("要好好敲代码吗(1/0)?\n");
	scanf("%d", &i);
	if (i == 1)
	{
		printf("好offer\n");
	}
	else
	{
		printf("药丸\n");
	}
	return 0;
}
int main()
{
	int line = 0;
	printf("加入比特\n");
	while (line<20000)
	{
		printf("敲%d了代码\n",line);
		line++;
	}
	printf("牛逼坏了拿到了好offer\n");
	return 0;
}

函数

函数主要传参和返回值的类型要对应

int ADD(int num1, int num2)
{
	scanf("%d %d", &num1, &num2);
	int sum = num1 + num2;
	return sum;
}
int main()
{
	int num1 = 0;
	int num2 = 0;
	输入
	//scanf("%d %d", &num1, &num2);
	相加
	//int sum = num1+num2;
	输出
	//printf("sum=%d\n", sum);

	//int output = ADD(num1,num2);
	//printf("%d\n", output);
	printf("%d\n", ADD(num1, num2));

	return 0;
}

数组

定义是一组相同类型的元素组成的集合,数组的使用是根据下标来的,从0开始数。

int main()
{
	//数组 - 相同元素的集合
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%3d", arr[i]);
	}
	printf("\n");
	for (i = 9; i >= 1; i--)
	{
		printf("%3d", arr[i]);
	}
	return 0;
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 一篇文章带你了解C语言:入门基础(2)

    目录 操作符 算术操作符 移位操作符 位操作符 单目操作符 逻辑反操作! 操作符++,-- 逻辑操作符 条件操作符 逗号表达式 常见关键字 typedef extern static 修饰局部变量 修饰全局变量和函数 其它 #define定义常量和宏 定义常量 定义宏 指针 内存单元 指针变量 &取地址操作符,*解引用操作符 类型所占空间 结构体 定义结构体 使用结构体变量 总结 本节将结束对初识C语言的概述,只追求大概,不求精细. 本节包括的内容有操作符,常见关键字,#define定义常量和宏

  • 一篇文章带你入门C语言数据结构:绪论

    目录 绪论 什么是数据结构? Example 1 讨论 Example 2 Example 3 Example 4 总结 绪论 什么是数据结构? 不同于计算机操作培训,注意与程序设计的区别. Example 1 求n个数的最大值.次最大值. //1.遍历 - 最朴素的方法 int main() { int arr[10] = { 22,334,552,1,4,6,78,23,55,98 }; int i = 0; int temp = 0; int max1 = arr[0]; int max2

  • 一篇文章带你入门C语言:函数

    目录 函数 定义 库函数 定义 介绍 Example 1 strcpy Example 2 memset 自定义函数 Example 1 Example 2 两数交换 链式访问 Example 1 函数声明 函数递归 Example 1 Example 2 函数迭代 Example 3 Example 4 总结 函数 定义 程序里的函数又被叫做子程序,他作为一个大型程序的部分代码,有一或多个语句项组成.函数负责完成某项特定任务,提供了对过程的封装和对细节的隐藏,这样的代码通常会被集成为软件库.

  • 一篇文章带你入门C语言:数组

    目录 数组 一维数组 初始化 使用 总结: 内存存储 二维数组 创建 初始化 数组越界问题 数组作函数参数 应用实例 总结 数组 一维数组 创建 定义 数组是一组相同类型的元素的集合.那数组的语法形式: type_t arr_name [const_n] //如: int arr[10]; type_t 指的是数组元素的类型. const_n 指的是一个常量表达式,用来指定数组的大小. 此时运行程序的话,系统会报一个警告:未初始化变量.打开调试就会发现系统默认填入一些无意义的数据. 当然全局数组

  • 一篇文章带你入门C语言:操作符

    目录 操作符 分类 算术操作符 移位操作符 整数存储规则 左右移位规则 赋值操作符 单目操作符 取地址操作符& 解引用操作符* 类型长度操作符sizeof 按位取反操作符~ ++ -- 操作符 强制类型转换操作符(type) 关系操作符= 逻辑操作符 短路运算 条件操作符 逗号表达式 下标引用.函数调用和结构成员 下标引用操作符[] 函数调用操作符() 结构成员操作符. -> 结构体定义 结构体使用 结构体地址 表达式求值 隐式类型转换 整型提升 如何整型提升 有符号数 无符号数 算术转换

  • 一篇文章带你了解C语言:入门基础

    目录 C语言本身特点 数据类型 常量变量 变量分类 使用小建议 生命周期作用域 常量分类及其特点 字符串+转义字符+注释 字符串 转义字符 两种注释 选择循环语句 函数 数组 总结 闲话少说,先上思维导图. 如图所示,现在还是初识C语言的第一部分,本次只介绍了C语言本身特点,数据类型,常量变量,字符串转义字符注释,选择循环语句,函数,数组. 接下来请和我一起粗略地探讨其中内涵所在. C语言本身特点 这是C语言的定义: C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种

  • 一篇文章带你学习Mybatis-Plus(新手入门)

    目录 Mybatis-Plus 1.快速入门地址:安装 | MyBatis-Plus (baomidou.com) 2.创建数据库mybatis-plus 3.创建springboot项目,配置yml文件 4.导入依赖 5.创建pojo包,新建User实体类 6.创建mapper包,新建UserMapper实体类 7.在主启动类中加上Mapperscan注解扫描mapper映射文件 8.查询所有数据测试类 9.开启mybatis-plus日志配置文件 10.主键生成策略 11.增加数据测试类 1

  • 一篇文章带你了解C语言--数据的储存

    目录 前言 数据类型介绍 类型的基本归类 整形在内存中的存储 原码.反码.补码 大小端介绍 浮点型在内存中的存储 前言 前面我们学习了C语言的一些基本知识和基础的语法,想必大家对C语言都有了自己的认识. 当然只是学习这些知识还是不够的,我们需要进行更加深入的学习. 从本章开始,我们将进行C语言进阶阶段的学习,所以难度会有所增加. 数据类型介绍 前面我们已经学习了基本的内置类型: char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更

  • 一篇文章带你了解C语言浮点数之间的比较规则

    目录 你认为这段代码输出什么? 为什么不等于呢? 应该怎么解决? 那么怎么判断两个浮点数 f1 和 f2 相等呢. 伪代码 可以简化为 >> 怎么判断浮点数等于0? 还有一个问题 总结 你认为这段代码输出什么? int main() { float f1 = 1.1; float f2 = 2.2; if (f2 - 1.1 == f1) printf("等于"); else printf("不等于"); return 0; } 答案是不等于. 为什么不

  • 一篇文章带你使用C语言编写内核

    目录 gcc 命令 文件头 将内核载入内存 总结 gcc 命令 使用 gcc 编译 c语言 -c 编译.汇编到目标代码,不进行链接,也就是直接生成目标文件 -o 将输出的文件以指定文件名来储存,有同名文件存在时直接覆盖 gcc -c -o kernel/main.o kernel/main.c 编译:编译号之后只是个目标文件,也称为待重定位文件,重定位指的是文件里面所用的符号还没有安排地址,这些符号的地址需要将来与其他目标文件"组成"一个可执行文件时再重新定位(编排地址〉,这里的符号就

  • 一篇文章带你了解C语言操作符

    目录 一.操作符分类 二.算术操作符 三.移位操作符 1.左移操作符 2.右移操作符 2.1算术移位 2.2逻辑移位 四.位操作符 1.按位与 2.按位或 3.按位异或 4.一道练习题 五.赋值操作符 1.赋值操作符(=)是一个很棒的操作符,他可以让你得到一个你之前不满意的值.也就是你可以对其重新赋值. 2.赋值操作符可以连续使用 3.复合赋值符 六.单目操作符 1.逻辑反操作 2.取地址 3.sizeof 4.++和--运算符 4.1前置++和-- 4.2后置++和-- 七.关系操作符 八.逻

  • 一篇文章带你了解C语言的一些重要字符串与内存函数

    目录 一.字符串函数 1. 求字符串长度的strlen 2.比较字符串大小的strcmp 3.复制字符串的strcpy 4.追加字符串的strcat 5.查找字符串函数的strstr 二.内存函数 1.复制 memcpy,memmove 2.比较 memcmp 总结 一.字符串函数 1. 求字符串长度的strlen size_t strlen ( const char * str ); 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '

  • 一篇文章带你实现C语言中常用库函数的模拟

    目录 前言 函数介绍 strlen(求字符串长度) strcpy(字符串拷贝) strcat(字符串追加) strcmp(字符串比较) strstr(找子字符串) memcpy(内存拷贝) memmove(内存移动) 总结 前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中. 字符串常量适用于那些对它不做修改的字符串函数. 函数介绍 strlen(求字符串长度) size_t strlen ( const char * str

  • 一篇文章带你用C语言玩转结构体

    目录 前言 一.结构体的声明与定义 1.结构体的声明 2.结构成员的类型 3.结构体的定义 二.初始化结构体 三.访问结构体成员 四.结构体嵌套 五.结构体指针 六.结构体传参 总结 前言 C语言提供了不同的数据类型,比如说int.float.double.char等,不同的类型决定了一个变量在内存中应该占据的空间以及表现形式. 但是,当我们定义一个人的时候,人的不同属性就比较难用同一个数据类型来定义了,因为人的身高.年龄.体重等属性往往需要不同数据类型,在这个时候,我们便引入结构体这个概念.

随机推荐