8000字了解初阶C语言

我是学码猴关注我,和我一起踏上编程之路吧!

目录

1.在学习C语言之前,让我们了解一下什么是编程语言什么是C语言。

1.1C语言的发展史(简述)

2.最简单的C语言程序

2.1输出一句你想说的话

 3.聊一聊数据类型

 3.变量与常量

3.1变量的作用域与生命周期

3.2常量

4.字符串+转义字符

4.1字符串

4.2转义字符

5.注释

6.选择语句

 7.循环语句

8.函数

9.数组

9.1数组的定义

9.2数组的下标和使用

10.简单的操作符

10.1算术操作符

 10.2移位操作符

10.3位操作符 

 10.4赋值操作符

10.5单目操作符

10.6关系操作符

10.7逻辑操作符

10.8条件操作符

10.9逗号表达式

11.常见关键字

12.define定义常量和宏

13.指针

14.结构体


1.在学习C语言之前,让我们了解一下什么是编程语言什么是C语言。

人与人之间的交流需要通过语言,中国人之间沟通用汉语,英国人用英语,俄罗斯用俄语等等等等,那么人和计算机之间的交流也需要解决语言的问题,需要创造一种计算机和人都可以识别的语言,这就是计算机语言。为了能够更好的与计算机打交道,我们就需要了解编程语言,编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错,达不到我们的目的。 C语言(C Language)是编程语言的一种,学习C语言,主要是学习它的格式和词汇。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

初学C语言时,我们都见过这样的一条语句:printf(“Hello World!”);

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

就像这个程序体现出来的那样,当你踏入进C语言大门的那一刻,你就会发现:我们的世界,就是C的世界!或者是说:C语言描述了一个新的世界——信息世界。

1.1C语言的发展史(简述)

C语言是一种由低级发展到高级的语言,从机器指令到汇编指令到B语言再到我们的高级语言——C语言等。1972年,美国贝尔实验室的丹尼斯·里奇在B语言的基础上设计出了C语言。最初的C语言只是为了描述和实现UNIX操作系统提供一种工作语言而设计的。1973年,肯尼斯·蓝·汤普森丹尼斯·里奇合作把UNIX的90%以上用C语言改写,即UNIX第五版,随着UNIX的日益广泛使用,C语言也迅速的发展起来得到推广。1978年以后,C语言先后移植到小、中、大及微型计算机上,很快C语言风靡全世界,成为世界上应用最广的程序设计高级语言,直到现在C语言的地位依然高高在上。这也使我对编程对C产生了兴趣,让我们就从这里开始吧!

2.最简单的C语言程序

为了使用C语言编写程序,必须了解C语言,并且可以熟练的使用C语言。接下来我将浅浅的分享我的学习笔记,给大家介绍怎么样阅读C语言程序和使用C语言编写程序。

2.1输出一句你想说的话

我将在屏幕上打印“This is a C program”

#include<stdio.h>//调用函数库
int main()//C语言代码中一定要有main函数(主函数)
{
	printf("This is a C program");//打印输出
	return 0;//我需要返回一个整型值,这里不需要理解,要知道是这么写
}

或许你可以尝试着看一下,打开自己编程软件试一试,非常简单吧? 我们看这个程序的第二行,其中的main是我们函数的名字,表示“主函数”的类型是int(整型),在执行主函数之后我们会得到一个值,就是我们的函数值,该值为整型。return 0的作用是当main函数执行结束前将整数0作为整型函数值返回到函数调用处,有同学问为什么不return 1或者其他整型呢?这里不用过于纠缠,这是一种使用习惯。printf("This is a C program");这条语句双引号内就是我们需要进行打印输出的内容,而想要打印就得用printf这个函数,然后我们用这个函数就务必要调用函数库,简单说就是和stdio.h打了招呼说:“你的printf我拿去用用!” 你明白了吗?

 3.聊一聊数据类型

在C语言中,数据类型分为:基本数据类型,和复杂数据类型。基本数据类型包括:整型(int)、长整型(long)、长长整型(long long)、短整型(short)、字符型(char)、单精度浮点型(folat)、双精度浮点型(double);复杂数据类型有:数组、结构体、枚举体。此外,还有一个较为特殊的数据类型:指针。在这里我们只需要了解基本的数据类型即可。那么,数据类型有什么用呢?就是向内存申请空间存储数据。那么怎么申请呢?非常简单,请看:

int main()
{
//数据类型 变量名 = 申请的空间大小
	int age = 20;
	return 0;
}

同时,在C语言中,想要检测某一个变量的数据类型所占据的内存空间的大小,即所占据的内存中的字节数,可以使用一个关键字来检测,sizeof。

#include<stdio.h>//调用函数库
int main()
{
	printf("%zu\n", sizeof(char));
	printf("%zu\n", sizeof(short));
	printf("%zu\n", sizeof(int));//sizeof(int)<=sizeof(long)
	printf("%zu\n", sizeof(long));
	printf("%zu\n", sizeof(long long));
	printf("%zu\n", sizeof(float));
	printf("%zu\n", sizeof(double));
	return 0;
}

输出结果为:

 然后我们就知道了,字符型(char)的大小为1字节(1字节 = 8bite);短整型(short)的大小为2字节;整型(int)的大小为4字节;长整型(long)的大小为4字节,这里注意,长整型的大小是大于等于整型的,一般按四字节使用;长长整型(long long)的大小为8字节;单精度浮点型(float)大小为4字节;双精度浮点型(double)大小为8字节。

short2
int4
long>=int
long long 8
char1
float4
double8

 3.变量与常量

什么是变量?变量指的是在程序运行的过程中存储可以变化的数据。

什么是常量?常量就是指在程序运行期间没有办法对其进行改变的一个数据。

变量又分为全局变量和局部变量,请看:

int b = 12;//在大括号外部定义的变量叫全局变量
int a = 100;
int main()
{
	int a = 10;//大括号内部定义的变量叫局部变量
	printf("%d\n", a);//全局变量和局部变量可以相同,当全局变量和局部变量名字相同的情况下,局部优先(但是不建议写成一样)
	return 0;
}
//在同一范围内,变量只能定义一次

可见我们定义了一个全局变量a和一个局部变量a ,那么当我们调用到a的时候打印出来的结果会是什么呢?

 所以看得出在大括号外部定义的变量叫全局变量,在内部定义的变量就是局部变量。全局变量和局部变量可以相同,当全局变量和局部变量名字相同的情况下,局部优先,但是不建议写成一样,容易混淆。

3.1变量的作用域与生命周期

变量的作用域,首先是局部变量的:

// 局部变量
// 就是变量所在的局部范围(所在的大括号之内)
// 这里定义了两个不同局部范围的变量
int main()
{
	{
		int a = 10;
		printf("我会输出 %d 吗?", a);
	}
	printf("那我会输出 %d 吗?", a);
	return 0;
}

int main()
{
	int a = 10;
	{
		printf("我会输出 %d 吗?", a);
	}
	printf("那我会输出 %d 吗?", a);
	return 0;
}

变量的作用域,然后是全局变量的:

extern:显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。 

动动小手尝试一下,你就会瞬间明白作用域的含义了!

什么是生命周期呢?请看:

//变量的生命周期
//一个人的生命周期是从出生到死亡
//变量的生命周期呢?
//1.局部变量的生命周期
int main()
{
	{
		int a = 100;//进入作用域生命周期开始
		printf("%d", a);
	}//出作用域生命周期结束
	printf("%d", a);
	return 0;
}
//2.全局变量的生命周期
// 全局变量可以说是整个程序的生命周期
 int a = 10;
int main()
{
	{
		int a = 100;
	}
	printf("%d", a);
	return 0;
}

最后做一个小总结:局部变量的作用域只限其范围内,全局变量的作用域是整个工程。局部变量的生命周期从进入作用域生命周期开始,出作用域生命周期结束,全局变量的生命周期可以说是整个程序的生命周期。那生命周期与作用域感觉意思差不多呀。严谨点说 生命周期 ≈ 作用域。

tip:如果全局变量中变量未定义,则会自动初始化为1,但是在局部变量中未定义,系统则会自动赋予变量一个随机值。

3.2常量

常量包括字面常量、const修饰的常变量、define定义的标识符常量和枚举常量

什么是字面常量,就是非常普通的字面数据。

 const修饰的常变量由下图可知const是防止变量被更改,所以说const修饰的常变量,本质是变量但是不能被修改,所以就具有常量的属性。

再说define定义的标识符常量:#define 标识符常量名 值 即define定义的标识符常量:

#define MAX 100
#define STR "abcd"
int main()
{
	int a = MAX;
	printf("%d", MAX);
	printf("%s\n", STR);
	return 0;
}

 枚举常量(enum):这里我定义了一个三原色RGB的枚举常量,如码所示,Red、Green、Blue就是我们枚举Color的枚举常量,类似于结构体一样,这个后期我们会讲到。如下代码所示,我们可以调用枚举常量中的内容,但是不能对其进行修改,这是规定。

enum Color
{
	//枚举常量
	Red,
	Green,
	Blue
};//枚举常量是不能被更改的
int main()
{
	int num = 10;
	enum Color c = Red;//定义了一个Color的变量c,然后将枚举变量Red赋给我们的c,它的取值一定是RGB中的一个
	return 0;
}

4.字符串+转义字符

4.1字符串

什么是字符串,一个字符是字符那么一串字符不就是字符串码?对,就是这样。在程序中用双引号(“”)引起来的一串字符就叫字符串,单引号(‘’)引起来的叫做单个字符,可别混淆,字符串用字符数组表示。注意:c语言中可没有字符串类型哦!

 这里我们来运行一段代码:

int main()
{
	char arr1[] = "Hello";
	char arr2[] = { 'H','e','l' };
	char arr3[] = { 'H','e','l','\0'};
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0;
}

 在电脑计算我们字符串内容的时候,"\0"是结束标志,在编译过程中系统没有检测到结束标志的话会子动进行随机查找直至找到结束字符,所以在字符串的尾部添加‘\0’是一个必要的过程,而我们用双引号引起来的那串字符串,其实里面是隐藏了我们的结束标志”\0“的,是包含的;

4.2转义字符

什么是转义字符?顾名思义,不就是转变意思吗?我们来看一组转义字符:

\?在书写连续多个问号时使用,防止他们被解析成三字母词 
\'用于表示字符常量 ‘
\“用于表示一个字符串内部的双引号
\\用于表示一个反斜杠\,防止它被解释为一个转义序列符
\a警告字符
\b退格符
\f将当前位置移到下一页的开头
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。 如: \130 X
\xdddd表示2个十六进制数字。 如: \x30 0

动动小手,是不是有一点悟了?那你能告诉我 "c:\code\test.c\n" 这里有多少个字符吗?你能正确的打印出它吗?

5.注释

什么是注释?为什么要用注释?

注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性,以便于以后的参考、修改。代码中有暂时不需要的代码可以直接删除但是也可以注释掉,代码中有些代码比较难懂,可以加一下注释文字来解释意思。

你看,他们都被注释掉了。

6.选择语句

什么是选择语句?如果你认真学习的话你会收获很多知识,如果你不认真的话,那么你将一无所获。这就是选择!

选择是我们在编写程序中非常常用的一个关键字,就像判断。

#include <stdio.h>
int main()
{
    int a= 0;
    printf("你会去好好学习吗?(选择1 or 0):>");
    scanf("%d", &a);
    if(a== 1)//如果输入的值为1
   {
       prinf("坚持,你会有收获满满的offer\n");
   }
    else
   {
       printf("放弃,一无所获\n");
   }
    return 0;
}

 7.循环语句

有些事必须一直做,比如我每天都要看CSDN,比如大家,日复一日的学习。 还比如:

//while循环的实例
#include <stdio.h>
int main()
{
    printf("早上起床开始背单词\n");
    int English = 0;
    while(English <= 10000)//当English大于10000的时候循环才会结束
   {
        English++;
        printf("我要继续努力背单词\n");
   }
    if(line>10000)
        printf("考试拿高分\n");
    return 0;
}

 能实现循环的语句有while语句、for语句、do ... while语句

8.函数

什么是函数?简单来说函数就是c语言的模块,一块块的,有较强的独立性,但是可以相互调用。比如:

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}

这是一个求两数之和的程序,那么我们把它转换为函数的形式看看:

上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
   int z = x+y;
   return z;
}
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

函数的特点就是简化代码,代码复用,最大化减少不必要的麻烦。(了解即可)

9.数组

9.1数组的定义

在定义数组时,数组的大小不能为0,数组中的元素类型都是相同的。

9.2数组的下标和使用

 C语言规定:数组的每个元素都有一个下标,下标是从0开始的。 数组可以通过下标来访问的。 比如:

 

 是不是非常的简单?接下来我将使用for循环打印出该数组内的所有数字(看看就行):

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i = 0; i <= 9; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

10.简单的操作符

10.1算术操作符

加减乘除想必大家已经非常非常熟悉了,这里做几个运算给大家看一看。

#include<math.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = a + b;
	int d = b - a;
	int e = a * b;
	int f = b / a;
	printf("%d\n%d\n%d\n%d\n", c, d, e, f);
	return 0;
}

 %是我们的取模操作符,也就是取余。

int main()
{
	int f = 3%2;
	printf("%d\n", f);
	return 0;
}

 那11%4的结果应该是多少呢?自己动动小手试试吧!

 10.2移位操作符

*

10.3位操作符 

*

 10.4赋值操作符

*

A += 2  就是  A = A + 2    以此类推。以后会细讲。

10.5单目操作符

10.6关系操作符

10.7逻辑操作符

逻辑与:并且;                   逻辑或:或者

int main()
{
    int a = 0;
    int b = 0;
    if (a && b)//判断结果为真才会输出hehe;在c中0为假非0为真
    {
        printf("hehe\n");
    }
  return 0;
}

输出结果是什么呢? 

10.8条件操作符

解释: 条件exp1满足吗?满足的话结果就为exp2否则为exp3

10.9逗号表达式

逗号表达式就是逗号隔开的一串表达式
逗号表达式的特点是:从左向右依次计算,整个表达式的结果是最后一个表达式的结果

int main()
{
    int a = 10;
    int b = 20;
    int c = 0;
    //       c=8    a=28   5
    int d = (c=a-2, a=b+c, c-3);
    printf("%d\n", d);

    return 0;
}

11.常见关键字

12.define定义常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);

    sum = 10 * ADD(2, 3);
    printf("sum = %d\n", sum);

    return 0;
}

13.指针

首先要知道内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。而变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:

#include <stdio.h>
int main()
{
 int num = 10;
 &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%p\n", &num);//打印地址,%p是以地址的形式打印
 return 0;
}

那地址如何存储?需要定义指针变量。

int num = 10;
int *p;//p为一个整形指针变量
p = &num;

指针的使用实例:

#include <stdio.h>
int main()
{
 int num = 10;
 int *p = &num;
 *p = 20;
    return 0;
}

地址也被称为指针所以存放指针的变量叫指针变量,指针变量就是用来存放地址的

14.结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。 比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。 这里只能使用结构体来描述了。 例如:

struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};

结构体的初始化:

//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

本章完,如有问题可以主页私信

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值