【零基础玩转C语言】初识C语言(2)

一.常量

C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
● 字面常量
const 修饰的常变量
#define 定义的标识符常量
● 枚举常量

Ⅰ.字面常量

字面常量就是我们直接写在代码中的数字,文字等代码文本。

#include <stdio.h>

int main()
{
	30;
	3.14;
	'w';//字符
	"abc";

	return 0;
}

Ⅱ.const 修饰的常变量

const修饰的常变量在初始化赋值后,具有了常量的属性,就不能修改它的值了,否则系统会报错

#include <stdio.h>

int main()
{
	//const 修饰的常变量
	const float pai = 3.14f;   //这里的pai是const修饰的常变量
	//pai = 5.14;//是不能直接修改的! 编译时会报错

	return 0;
}

上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了。变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。

例如,定义一个数组时需要用一个常量给出数组的大小,而const修饰的常变量不能定义数组的大小,说明const 修饰的常变量本质还是一个变量

#include <stdio.h>

int main()
{
	const int size = 4; 
	//int arr[size] = { 0 };//这样系统会报错
	int arr[4] = { 0 };//这样才可以通过编译,运行成功

	return 0;
}

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

#define修饰的常量的值也是不能修改的,必须在定义的时候就赋一个准确的值

#include <stdio.h>

#define MAX 100
#define STR "abcdef"
int main()
{
	printf("%d\n", MAX);
	int a = MAX;
	printf("%d\n", a);
	printf("%s\n", STR);
	//MAX = 200;//修改常量的值,会报错

	return 0;
}

Ⅳ. 枚举常量

有时候我们会使用enum关键词来创建一个新的类型,这个类型里面包含了多个元素。
注意:
1.每一个枚举元素后面都需要加上逗号’,’
2.每次建立完枚举类型之后,都需要在大括号{}后面加一个分号";"

enum Color
{
	RED,
	GREEN,
	BLUE
};
//括号中的RED,GREEN,BLUE是枚举常量

枚举常量默认值是0,1,2依次递增的

//枚举常量演示
	printf("%d\n", RED);//0
	printf("%d\n", GREEN);//1
	printf("%d\n", BLUE);//2
	//注:枚举常量的默认是从0开始,依次向下递增1的

枚举常量的应用

用枚举常量声明一个新的变量c

enum Color c = RED;

枚举常量的值的大小除了在声明的时候可以赋值,其他地方枚举常量的大小都不能被改变

#include <stdio.h>

enum Color
{
	RED = 20,//正确
	GREEN,
	BLUE
};

int main()
{
	//RED = 20;//报错

	return 0;
}

但是我们又需要注意,如果只给其中一个枚举常量赋值,但是后面的值没有被赋予。那么后的常量会根据被赋予值开始,依次递增。而被赋值前的值从0开始递增。

#include <stdio.h>

enum Color
{
	RED,
	GREEN = 20,
	BLUE
};

int main()
{
	printf("%d\n", RED);//0
	printf("%d\n", GREEN);//20
	printf("%d\n", BLUE);//21

	return 0;
}

二.字符串+转义字符+注释

Ⅰ.字符串

由双引号引起来的一串字符称为字符串字面值,或者简称字符串。

"hello world\n"

C语言中没有字符串类型,我们通常用一个字符数组来存储字符串

#include <stdio.h>

int main()
{
	"abcdef";
	//arr1,arr2,arr3三个字符数组都可以存储"abcdef“这个字符串
	char arr1[] = "abcdef";//arr1数组的末尾默认有一个'\0'
	char arr2[10] = "abcdef";//数组的长度大于字符串的长度,末尾也会自动补上'\0'
	char arr3[] = {'a','b','c','d','e','f','\0'};
	//arr4就不能表示字符串"abcdef"了
	char arr4[] = {'a','b','c','d','e','f'};

	return 0;
}

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
在这里插入图片描述

可以看到字符数组arr1arr2都能正常输出字符串"abcdef",而字符数组arr3输出了字符串"abcdef"后,又输出了其他字符,这是因为打印字符串是只有遇到'\0'才会结束打印。arr3数组存放在内存中,当打印完arr3数组的内容时,会继续接着往后打印,直到在内存空间中碰到字符'\0'才结束,所以就输出了其他字符

打印字符串需要用%s

#include <stdio.h>

int main()
{
	char arr1[] = "abcdef";
	printf("%s\n", arr1);//abcdef

	return 0;
}

C语言中求字符串长度的一个函数—strlen,使用时需要加上头文件 string.h

#include <stdio.h>
#include <string.h>

int main()
{
	int len = strlen("abc");
	printf("%d\n", len);//3

	return 0;
}

Ⅱ.转义字符

假如我们要在屏幕上打印一个目录: c:\code\test.c
我们该如何写代码?

#include <stdio.h>

int main()
{
	printf("c:\code\test.c\n");

	return 0;
}

实际上程序运行的结果是这样的:
在这里插入图片描述
这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。
下面看一些转义字符

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

\?:

在早期C语言编译器上,
??)代表的意思是]
??(代表的意思是[

#include <stdio.h>

int main()
{
	printf("%s\n", "(are you ok??)");
	//会打印成(are you ok]

	printf("%s\n", "(are you ok\?\?)");
	//就可以打印出(are you ok??)

	return 0;
}

\':

当我们想要打印出一个'的时候

#include <stdio.h>

int main()
{
	//printf("%c\n", ''');//编译器会报错,它以为前两个单引号是一对,第三个落单了

	printf("%c\n", '\'');//这样就可以打印出'

	return 0;
}

\":

当我们想要打印出一个"的时候或者打印一个带"的字符串时

#include <stdio.h>

int main()
{
	//打印一个"
	//printf("%s\n", """);//编译器会报错,它以为前两个双引号引号是一对,第三个落单了
	printf("%c\n", '\"');//这样就可以打印出”

	//打印带"的字符串
	//printf("%s\n","abcd"ef");//编译器会报错,它以为前两个双引号引号是一对,第三个落单了
	printf("%s\n", "abcd\"ef");//abcd"ef

	return 0;
}

\\:
当我们想要打印一个带\0的字符串时

#include <stdio.h>

int main()
{
	printf("%s\n", "abcd\0ef");

	printf("%s\n", "abcd\\0ef");

	return 0;
}

执行结果为:
在这里插入图片描述

打印第一个字符串时,遇到字符串中的\0就停止打印了
而打印第二个字符串时,\\表示一个\,不会被解释成转义字符\0,因此会全部打印完

或者当我们想打印”c:\test\test.c“这串字符时
我们不想\t表示转义字符,就想让它被打印为\t
在这里插入图片描述
因此,\\可以防止它被解释为一个转义序列符
\a:
当输出一个\a的时候,电脑会发出一声蜂鸣声

#include <stdio.h>

int main()
{
	printf("\a\a\a\a\a\a");//发出一阵蜂鸣声

	return 0;
}

\n:
打印的时候会进行换行
在这里插入图片描述
\r:
表示回车,在有些电脑上换行回车不一样
\t:
就相当于键盘上的Tab键,它只表示1个字符,但是它的效果相当于4个空格字符
\ddd:

#include <stdio.h>

int main()
{
	printf("%c\n", '\130');//会打印X
	//八进制的130转换为十进制是88
	//就会打印88在ASCII码表上对应的字符X

	return 0;
}

ASCII码表:
主要记住小写字母的ASCII值比对应的大写字母的ASCII值大32就行了
在这里插入图片描述
\xdd:

#include <stdio.h>

int main()
{
	printf("%c\n", '\x62');//会打印b
	//十六进制的62转换为十进制是98
	//就会打印98在ASCII码表上对应的字符b

	return 0;
}

下面来看一道笔试题:

//程序输出什么?
#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    // \62被解析成一个转义字符,八进制
    //八进制数字只能由0-7组成
    printf("%d\n", strlen("c:\test\628\test.c"));
    return 0;
}

结果为:
在这里插入图片描述

Ⅲ.注释

1. 代码中有不需要的代码可以直接删除,也可以注释掉
2. 代码中有些代码比较难懂,可以加一下注释文字

比如:

#include <stdio.h>
int Add(int x, int y)
{
    return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/
int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法
    printf("%d\n", Add(1, 2));
    return 0;
}

注释有两种风格:
C语言风格的注释 /*xxxxxx*/
缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx 可以注释一行也可以注释多行
C++风格的注释可以嵌套使用,更推荐C++风格的注释

三.选择语句

C语言是【结构化】的程序设计语言,分为三种结构
顺序结构
选择结构
循环结构

如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,去工地搬砖。
这就是选择!
在这里插入图片描述
用一个C语言程序来实现这个流程图:

#include <stdio.h>

int main()
{
    int input = 0;
    printf("进入大学\n");
    printf("是否好好学习(1/0)?");
    scanf("%d", &input);
    
    if (input == 1)
    {
    	printf("好offer\n");
    }
    else
    {
    	printf("搬砖\n");
    }

    return 0;
}

C语言实现选择有两种语法:
if else
switch

后续会更详细地介绍选择结构,这里只作简单了解

四.循环语句

有些事必须一直做,比如我日复一日的讲课,比如大家,日复一日的学习。
还比如:
在这里插入图片描述

//while循环的实例
#include <stdio.h>
int main()
{
    printf("进入大学\n");
    int line = 0;
    while(line<=20000)
   {
        line++;
        printf("我要继续努力敲代码\n");
   }
    if(line>20000)
        printf("好offer\n");
    return 0;
}

C语言中实现循环方式:
while语句
for语句
do ... while语句

后续会更详细地介绍循环结构,这里只作简单了解

五.函数

函数就相当于我们给定一个或多个输入,它会返回给我们一个输出
在这里插入图片描述
写一个程序,实现两个数的加法

#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;
}

函数的特点就是简化代码,代码复用。
后续会更详细地介绍函数,这里只作简单了解

六.数组

要存储1-10的数字,怎么存储?
C语言中给了数组的定义:一组相同类型元素的集合

Ⅰ.数组的定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

int——数组的类型,表示整型,也可以是其他的类型
arr——数组的名称,可以自己随便取
[10]——数组的大小,表示数组可以容纳10个相同类型的元素
{1,2,3,4,5,6,7,8,9,10}——数组的内容

Ⅱ.数组的下标

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

int arr[10] = {0};
//如果数组10个元素,下标的范围是0-9

在这里插入图片描述

注意:不能访问超过数组的下标的元素,例如arr[10],这样会造成访问越界的错误

Ⅲ.数组的使用

#include <stdio.h>
int main()
{
	//依次输出每个数组元素
    int i = 0;
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

运行结果:
在这里插入图片描述
后续会更详细地介绍数组,这里只作简单了解

七.总结

💓感谢观看,本文到这里就结束了,如果觉得有帮助,请给文章点个赞,让更多人看到👍👍👍;有不足的地方也可以在评论区指出,作者会不断完善每一篇文章!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值