初识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
是结束标志,不算作字符串内容。
可以看到字符数组
arr1
和arr2
都能正常输出字符串"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 | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示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;
}
运行结果:
后续会更详细地介绍数组,这里只作简单了解
七.总结
💓感谢观看,本文到这里就结束了,如果觉得有帮助,请给文章点个赞,让更多人看到👍👍👍;有不足的地方也可以在评论区指出,作者会不断完善每一篇文章!