广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一篇文章带你了解C语言:入门基础
  • 164
分享到

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

2024-04-02 19:04:59 164人浏览 泡泡鱼
摘要

目录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语言的风格 ,不可嵌套注释。

选择循环语句

选择语句,实现分支。具体情况为 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;
}

总结

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

--结束END--

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

本文链接: https://www.lsjlt.com/news/131785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一篇文章带你了解C语言:入门基础
    目录C语言本身特点数据类型常量变量变量分类使用小建议生命周期作用域常量分类及其特点字符串+转义字符+注释字符串转义字符两种注释选择循环语句函数数组总结闲话少说,先上思维导图。 如图...
    99+
    2022-11-12
  • 一篇文章带你了解C语言:入门基础(2)
    目录操作符算术操作符移位操作符位操作符单目操作符逻辑反操作!操作符++,--逻辑操作符条件操作符逗号表达式常见关键字typedefexternstatic修饰局部变量修饰全局变量和函...
    99+
    2022-11-12
  • 一篇文章带你入门C语言:数组
    目录数组一维数组初始化使用总结:内存存储二维数组创建初始化数组越界问题数组作函数参数应用实例总结数组 一维数组 创建 定义 数组是一组相同类型的元素的集合。那数组的语法形式: t...
    99+
    2022-11-12
  • 一篇文章带你入门C语言:函数
    目录函数定义库函数定义介绍Example 1 strcpyExample 2 memset自定义函数Example 1Example 2 两数交换链式访问Example 1函数声明函...
    99+
    2022-11-12
  • 一篇文章带你了解C++(STL基础、Vector)
    目录STL基本概念STL六大组件STL中容器、算法、迭代器容器算法迭代器初识Vector容器Vector三大遍历算法Vector存放其他数据类型 Vector容器嵌套总结S...
    99+
    2022-11-12
  • 一篇文章带你深入了解javaIO基础
    目录一.认识IO1.IO的分类2.IO的方式3.IO读写的方式4.IO的特性二.文件操作1.文件的构成2.文件的创建3.文件操作的API使用三.IO流1.流的分类2.流的创建3.流的...
    99+
    2022-11-12
  • 一篇文章带你深入了解Java基础
    目录1、String类1.1两种对象实例化方式1.2字符串比较1.3字符串常量是String的匿名对象1.4String两种实例化方式区别1、分析直接赋值方式2、构造方法赋值1.5字...
    99+
    2022-11-12
  • 一篇文章带你入门C语言:操作符
    目录操作符分类算术操作符移位操作符整数存储规则左右移位规则赋值操作符单目操作符取地址操作符& 解引用操作符*类型长度操作符sizeof按位取反操作符~++ -- 操作符强制类...
    99+
    2022-11-12
  • 一篇文章带你入门和了解Jquery的基础操作
    目录1.Jquery的使用步骤:(1)导入js库(2)页面载入事件2.Jq对象和js对象的转换(1)js对象------>jq对象(2)jq对象------>js对象3....
    99+
    2022-11-12
  • 一篇文章带你了解C++语法基础--字符串
    目录总结字符与整数的关联在于ASCII码:每一个常用字符都对应一个-128 ~ 127 的数字,二者之间是可以进行相互转换的: #include <iostream>...
    99+
    2022-11-12
  • 一篇文章带你深入了解Java基础(2)
    目录1、Java主要特点2、计算机的高级汇编语言类型:3、JVM(Java Visual Machine)4、编写第一个Java程序并运行5、CLASSPATH指的是类加载路径6、程...
    99+
    2022-11-12
  • 一篇文章带你深入了解Java基础(3)
    目录1、方法的基本定义2、方法重载3、方法的递归调用4、面向对象的前身是面向过程5、类与对象总结1、方法的基本定义 限制条件:本次所讲解的方法指的是在主类中定义,并且由主方法由主方法...
    99+
    2022-11-12
  • 一篇文章带你深入了解Java基础(4)
    目录1、private实现封装处理2、构造方法与匿名对象3、简单java类4、数组总结1、private实现封装处理 如果像想要知道封装,首先必须清楚如果没有封装会怎么样? 没有封装...
    99+
    2022-11-12
  • 一篇文章带你深入了解Java基础(5)
    目录1、数组Java对数组的支持1、数组的排序:java.util.Arrays.sort(数组名称)2、数组的拷贝:指的是将一个数组的部分内容替换掉另一个数组的部分内容总结1、数组...
    99+
    2022-11-12
  • 一篇文章带你了解C语言操作符
    目录一、操作符分类 二、算术操作符三、移位操作符1、左移操作符 2、右移操作符2.1算术移位 2.2逻辑移位 四、位操作符 1、按位...
    99+
    2022-11-12
  • 一篇文章带你了解python元组基础
    目录1. 元组基本知识1.元组的基本格式和用法2. 元组操作实例1.建立元组2.查找元素:通过元组下标实现。3.删除元组:对元组的删除时不允许的,可以通过del函数,实现对整个元组对...
    99+
    2022-11-12
  • 一篇文章带你了解python字典基础
    目录1. 字典基础知识字典的基本格式表示字典的键、值设置要求1)键的设置要求2)值的设置要求2. 字典元素增加1.利用赋值给字典增加元素2.利用setdefault()方法给字典增加...
    99+
    2022-11-12
  • 一篇文章带你了解python集合基础
    目录1. 集合类型定义(1)集合是多个元素的无序组合2. 集合操作符 3. 集合处理方法4. 集合类型应用场景(1)包含关系比较(2)数据去重:集合数据所有元素无重复总结1...
    99+
    2022-11-12
  • 一篇文章带你了解python异常基础
    目录1. 程序中的问题1.1 低级语法错误1.2 中介错误:代码存在隐性错误1.3 高级错误:软件面对不确定性的异常错误2. 捕捉异常2.1 基本异常捕捉语句2.2 带finally...
    99+
    2022-11-12
  • 一篇文章带你了解Java基础-抽象
    目录Java基础知识(抽象)抽象抽象定义abstract的使用定义抽象类抽象类的一些注意点总结Java基础知识(抽象) 抽象 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作