降C大法——第一篇

 C语言是一门高级语言,广泛应用于底层开发

vs2019-集成开发环境(编辑器+编译器+调试器)

e84101eca7354bf7830a48f7ee2e3bdd.png

在C语言中,一般创建的是.c .h的文件

.c - 源文件

.h - 头文件

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYml0LWFuc3dlcg==,size_20,color_FFFFFF,t_70,g_se,x_16

 //写C语言代码,首先要写出主函数

//主流的写法

//int - 整型

//printf 是一个C语言提供的库函数

//专门用来按照某种指定的格式来打印的

//库函数的使用,得包含对应的头文件

//std  i  o

//标准 输入 输出 头文件

//

//主函数是程序的入口

//在一个工程中,主函数有且仅有一个
//函数体必须用一对{}括起来
//预处理命令由#开头

#include <stdio.h>

//int main()

//{

//     printf("hehe\n");

//     printf("hehe\n");

//     printf("hehe\n");

//     printf("hehe\n");

//     printf("hehe\n");

//     return 0;

//}

 字符串+转义字符

1.字符串

由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符

串。

int main()
{
	char arr1[] = "abc\0def";
	char arr2[] = { 'a','b','c','d','e','f', '\0'};

	printf("%s\n", arr1);
	printf("%s\n", arr2);

	return 0;
}

2.转义字符

//转义字符 - 转义就是转变它的意思

现在呢我想去打印C盘下test文件夹下的test.c文件:

int main()
{
	printf("c:\test\test.c");
	
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

我们发现结果是这样的,这是怎么了呢,为什么和我们预想的不一样呢?

原因很简单,在这里 \t 被认定为一个转义字符

我们再来看一段代码:

int main()
{
	/*printf("c:\test\test.c");*/
	printf("abcndef");
	printf("abc\ndef");
	return 0;
}

 代码的运行结果为:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

为什么会出现这种情况呢?

因为在n的前面加上\,就形成了换行符! 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

//转义字符 - 转义就是转变它的意思
int main()
{
	printf("c:\\test\\test.c");
	printf("abcndef");
	printf("abc\ndef");
	//三字母词 - 
	//??) -> ]
	printf("(are you ok\?\?)");//(are you ok]
	printf("%c\n", 'a');
	printf("%c\n", '\'');
	printf("%s\n", "abc");
	printf("%s\n", "a");
	printf("%s\n", "\"");

	printf("\a\a\a\a\a");

	printf("%c\n", '\135');
	              64+24+5 =  
	printf("%c\n", '\x42');

	return 0;
}

//以上部分后期会展开详解,此处只做了解即可

练习 

a82de8e791db4293bd2e59dc2646dcf6.png

 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//第一题
	printf("*\n**\n***\n");
	//第二题
	printf("  *\n*   *\n  *\n");
	//第三题
	printf("*********\n");
	printf(" 学生信息\n");
	printf("*********\n");
	return 0;
}

ad0e439fe56d4baa8dd921b2c3763e1b.png

源程序——.c

由高级语言编写的程序

 

可执行文件——.exe

利用编译器软件把我们的源程序编译成目标程序

 

目标程序——.obj 

由二进制代码表示的程序

注释

int main()
{
	/*
	int b = 20;
	*/
/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/
	int a = 10;//创建一个整型变量,并赋值10
    //C++注释风格    

	return 0;
}

但是各位客官注意咯,C语言的注释风格是有一定缺陷滴~额滴个亲娘乐这玩意有啥缺陷快给我一一道来。

注释有两种风格:

  • C语言风格的注释 /*xxxxxx*/

缺陷:不能嵌套注释

  • C++风格的注释 //xxxxxxxx

可以注释一行也可以注释多行

1、标识符的定义:

由字母,数字和下划线组成,并且只能由字母或下划线开头

  例如:以下是合法的标识符

             a1、_ab2、_12s

            以下是不合法的标识符

             12wd、a_#gg、_12$s

   2、C语言的标识符分为以下三类:

      ①关键字

            在C语言中有特殊含义的

      例如:像后面我们要学的定义基本整型int

      ②预定义标识符

           像C提供的库函数printf

      ③用户自定义标识符

        像我们后面要学的变量名、一般要做到见名起义

 

3、注意点:

 C语言的关键字不能用作自定义标识符

虽然预处理命令可以用作自定义标识符、但失去了它的原有意义

auto  break   case  char  const   continue  default  do   double else  enum   
extern float  for   goto  if   int   long  register    return   short  signed
sizeof   static struct  switch  typedef union  unsigned   void  volatile  while

 练习

fe7109b591db4176ab4a481a9d7cb030.png

 解释:

B:由字母,数字和下划线组成,并且只能由字母或下划线开头

C: C语言的关键字不能用作自定义标识符

D: C语言的关键字不能用作自定义标识符

 

 C语言的关键字不能用作自定义标识符

虽然预处理命令可以用作自定义标识符、但失去了它的原有意义

常量

C语言中的常量和变量的定义的形式有所差异。

C语言中的常量分为以下几种:
·字面常量
·const 修饰的常变量
·#define 定义的标识符常量
·枚举常量

 这四类呢,我会仔细的给各位客官讲述,让各位客官能够更好的理解

1.字面常量

//1.字面常量
int main()
{
	int a = 100;
	char ch = 'c';
	"abcdef";//字符串常量
	3.14;
	return 0;
}

 

  • 2. const修饰的常变量

(书讲到这里,有些看官已经纳了闷,这常量就是常量,变量就是变量,这常变量是个上面古怪玩意儿?)

 

 

我们先看这样一段代码:

int main()
{
	int n = 10;
	printf("n=%d\n", n);//10
	n = 20;
	printf("n=%d\n", n);//20
	return 0;
}

这段代码相信客官们一眼看破结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

很显然n是一个变量 ,它是可以被改变的。

那有看官就会说了,小赛毛,这const修饰的常变量是什么概念呢?

各位客官请注意,咱们醒木一拍,接下来看老夫展示

当我现在在n定义的前面加上一个const,这个时候再来编译我刚刚的代码:

//2. const修饰的常变量
int main()
{
	const int n = 10;
	printf("n=%d\n", n);//10
	n = 20;
	printf("n=%d\n", n);//20
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

 各位看官请注意,这个时候是不是具有了一种保护,对不对

这个时候我想告诉大家的是const一旦去修饰这个n,n就具有了一定的常属性,常属性的意思就是它就不能被改变了,现在已经明显的看到了它不能被改变,具有了常属性。

但是呢,虽然它具有这种常属性,但它本质上还是一个变量,它不是常量,它没有变成彻底的常量,它只是具有了常属性。那我们怎么证明这么一回事呢?

我再来给大家举一个栗子:

我们先写这样一段代码:

int main()
{
	int arr[10] = { 0 };

	return 0;
}

显而易见代码是没有问题的,接下来我们对代码进行修改;

int main()
{
	int n = 10;
	int arr[n] = { 0 };

	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_16,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_16,color_FFFFFF,t_70,g_se,x_16

 我们发现编译器提示了这样的错误。那有看官就说了,小赛毛你给它前面加个const试试

 

int main()
{
	const int n = 10;//这里的n具有常属性,但是本质上是一个变量
	int arr[n] = { 0 };
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

 各位看官应该也发现了编译器报错:这里的n具有常属性,但是本质上是一个变量。

老夫呢,突然想到一个东西,本来想着以后讲给大家伙,现在兴致一来,就让老夫提前说上那么一点。

int main()
{
	int arr[10] = { 0 };//C99之前的语法
	return 0;
}

在C99标准之前的语法,就是数组这里必须要给上常量。

在C99标准中增加一个变长数组的概念,这里指定数组大小的时候,可以使用变量了。

3.#define 定义的标识符常量

接下来呢,我将举一些栗子给大家来讲述以下#define 定义的标识符常量是怎么一回事儿:

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

如果,这里打印m的值为100,是不是就说明 MAX 的值传递给m了?CTRL+f5代码走起来,我们一看究竟:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

 果然,这个地方,是不是就相当于我们把100放到m里面去了。

当然各位客官也可以直接去打印MAX。

这个时候呢,有些看官就按捺不住了,说我在main函数里面把这个MAX改改行不行呢?那我们来试试:

#define MAX 100
int main()
{
	//MAX = 101;//err
	int m = MAX;
	printf("%d\n", m);
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_14,color_FFFFFF,t_70,g_se,x_16

这个时候编译器就开始报错了,刚才我们说什么来着?常量不可以被修改!欸,对!常量不可以被修改,各位看官要是非要去修改,那不就错了嘛~

4.枚举常量

各位看官已经了解了上述三种常量,那就由老夫再来给大家伙讲述一下枚举常量,那么什么叫做枚举常量呢?我们不妨再举个栗子:

光从字面上说起,我们是不是会感觉枚举就是一一列举

//枚举就是一一列举
//枚举是C语言提供的一种自定义类型的方法

什么意思呢?

比如生活中:

//性别:男,女,保密

//三原色:red green blue

 

enum Sex
{
	MALE,
	FEMALE,
	SECRET
};


//enum COLOR
//{
//	RED,
//	GREEN,
//	BLUE
//};
int main()
{
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);

	return 0;
}

 枚举常量是有值的,而且值是整形

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

这时候可能又有客官要说了,那它的值我们可不可以改呢?不妨我们来一试便知:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6LWb5q-b,size_13,color_FFFFFF,t_70,g_se,x_16

 我们可以看出编译器提示错误,所以呢,MALE是常量。希望各位客官可以理解~

 

表示方法有十进制、八进制、十六进制

       十进制:基本数字范围0~9

例如:32767、-32768、0,19等

       八进制:以0开头,基本数字范围0~7

例如:012、034等(但注意像018就不是的)

十六进制:用0到15一连串数字表示(注意10用字母a、11用字母b、12用字母c、13用字母d、14用字母e、15用字母f表示、字母可以是

小写也可以是大写)、但必须用数字0和字母x开头,例如:0x12、0xae2

    注意:只有十进制有负数、而八进制、十六进制只有正数

 

表示形式有小数形式和指数形式

      小数形式:小数点右边必须有数字

例如:1.2、-3.4等(必须带有小数点)

      指数形式:(即数学上的用幂的形式来表示

数据)例如:2.3026在数学用幂表示0.23026×101而在C语言中表示为0.23026E1

而且C语言规定E前必须有数字而且E后指数必须有数据且必须为整数。例如:e3、.5e3.6、.e3、e都是非法的(注意:E的前后及数字之间不得插入空格)

例题

596ad0ec77ac458096f76f2e04429660.png

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小赛毛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值