初始C语言(2)
文章目录
- 初始C语言(2)
- 一、常量
- 1.1字面常量
- 1.2const修饰的常变量;
- 1.3#define定义的标识符常量
- 1.4枚举常量
- 二、字符串+转义字符+注释
- 2.1字符串
- 2.2转义字符
- 2.3注释
- 三、选择语句
- 3.1选择结构
- 3.2循环结构
- 四、函数
- 五、数组
- 5.1数组的定义:
- 5.2数组的下标
- 5.3数组的使用:
- 总结`
一、常量
什么是字符?
答:键盘上输入的就是字符,C语言中定义由一对单引号引起来的(‘a’)就是一个字符;(’ ')单引号中间一个空格叫做空白字符;
C语言中的常量和变量的定义的形式有所差异;
C语言中的常量分为以下几种:
a:字面常量
b:const修饰的常变量
c:#define定义的标识符常量
d:枚举常量
直接可以从字面看出来数值是多少的常量;
#define _CRT_SECURE_NO_WARNINGS 1 #include1.2const修饰的常变量;#include //标准输入输出头文件 //std-标准 i-intput 输入 o-output 输出 int main() { //1.字面常量 30; //整型的字面常量 3.14; //浮点型的字面常量 "abcdef"; //字符串字面常量 'a'; //字符型的字面常量 return 0; }
const修饰的变量就具有了一种常属性(即不可被修改);
但是const后面的变量本质还是一个变量,只是变成了一个常变量;
int main() {
int num = 100;
num = 200;
printf("%dn", num);//num = 200;
//在变量的前面加const
const int num1 = 150;
num1 = 204;
printf("%dn", num1);//一定会报错,左值指定const对象
return 0;
}
怎么验证后面的还是一个变量?
int main() {
int n = 10;
int arr[10]={1,2,3,4,5,6,7,8,9,10};//10是常量;
int arr1[n] = { 4,5,6,7,8,9,10,1,2,3 };//报错应该输入常量表达式,说明n是一个变量;
const int m = 11;
int arr3[m] = { 1,2,3,4,5,6,7 };报错应该输入常量表达式,说明m是一个变量;
//m虽然是一个变量,但是因为有const的修饰,他不能被修改;
return 0;
}
C语言在C99标准之前,不允许数组的大小使用变量指定;
int n=10; int arr[n];//err报错
C99标准中引入了变长数组的概念,允许了数组的大小可以使用变量指定;
但是VS2019不支持C99中的变长数组的概念;
int n=10; int arr[n];//OK1.3#define定义的标识符常量
int main() {
//3.#define 定义的标识符常量;
int a = MAX;
printf("%dn", a);//输入a=1000;没有问题
MAX = 2000;//err 因为MAX是一个常量不可以修改;
int arr[MAX];//因为MAX是一个常量
//所以可以用它来定义一个数组的大小;
return 0;
}
1.4枚举常量
枚举的意思:一 一列举;
C语言就支持我们创建枚举类型,enum是枚举的关键字;枚举类型是有值的,初始默认值是0,1,2…依次递增,但是初始值是可以更改的,比如在枚举类型的结构体中令MALE=4;就会将默认值修改,依次往后推FEMALE=5;SECRET=6;并且枚举常量是常量,不可以被修改;
在枚举类型结构体MALE=4;这种操作叫做赋初值,与枚举类型不可修改不矛盾,结构体外面修改才会报错;
#define _CRT_SECURE_NO_WARNINGS 1 #include//标准输入输出头文件 enum sex { //枚举类型中列举出的可能指都是枚举常量; //MALE,//默认值是0 MALE=4; FEMALE,//默认值是1 SECRET//默认值是2 }; int main() { //4.枚举常量 enum Sex s =SECRET; enum Sex s2 = FEMALE; printf("%d%d%dn", MALE, FEMALE, SECRET);//0,1,2 MALE = 3;//err 左边不可以修改,所以枚举常量也是常量; return 0; }
其实枚举类型中MALE,FEMALE,SECRET本质还是数,所以如果要打印用%d来操作;
二、字符串+转义字符+注释 2.1字符串键盘上能敲出来的都是字符。(单引号引起来的)
可以在VS中打开监视功能来查看变量的相关信息和变化情况;(但是需要调试起来之后在调试里面窗口点监视)
计算机中的存储表示都是二进制;
‘a’–97 ‘b’–98 (ASCII编码)
ASCII表(字符大小写对应不同的ASCII值)
ASCII表查询
%d-有符号的整型
%s-打印字符串
%c-打印字符
#include//标准输入输出头文件 int main() { char ch = 'a';//将字符a赋给变量ch; ch = 'x'; printf("%c",ch);//ch=x; return 0; }
双引号引起来的一串字符叫做字符串字面值,比如:“Hello bit.n”,或者简称字符串。(只要是双引号引起来的不管里面什么内容都属于字符串)
注意:字符串的结束标志的一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算做字符串的内容。
#include//标准输入输出头文件 int main() { "zhangsan"; "a"; ""; char arr1[]="abcdef";//最后面有一个 char arr2[]={'a','b','c','d','e','f'}; //根据后面内容的大小确定数组的大小 printf("%dn",strlen(arr1));//6 printf("%dn",strlen(arr2));//随机的 return 0; }
字符串的存储:使用char型的数组来存储
是字符串的结束标志,字符串结尾隐藏着一个 ,如上面代码中arr2数组中存储的字符结尾没有 ,所以直接打印会一直打印,直到在所开辟的系统空间中遇到一个 才会结束打印。但是可以人为的在后面加上一个 ;
strlen函数是C语言的一个库函数,可以计算字符串的大小, 是计算结束的标志,统计的是字符串中 之前出现了多少个字符;
转义就是转变意思(意义);将原来的意思转变了
int main()
{
printf("abcndef");//abcndef
printf("abcndef");//adb换行def
printf("C:trogram Files (x86)tingDing")//打印出来地址会发生改变,因为t识别的不是字符t,
//而是转义字符
printf("%sn","(are you ok??)");//新版本的打印出来是??但是旧的编译器打印出来是一个】;
printf("%sn","(are you ok??)");//但是这样在任何地方打印都是??不会理解为三字母词;
//三字母词
printf("%cn",''');//报错
printf("%cn",''');//对单引号加上转义,顺利打出'
printf("%cn",'130');// 130还是字符,用%c打印 结果是X
printf("%cn",'x30');//字符0;
printf("%cn",'x3a');//a是10,3是3乘以16的一次方 ,结果是58,打印出来是58,表示:
printf("%cn",strlen("c:test628test.c"));//大小是14
return 0;
}
转义表:
三字母词:
??)----->];
如果想打印的内容本身就是特殊符号引起的错误,可以在前面加上转义符顺利打出;
ddd表示1-3个八进制的数字。如:130x(超过3个就会超出内存);
dd表示2个十六进制的数字,如x30 0
xxx表示一个将xxx这个八进制的数转化成十进制作为ASIIC码代表其对应的字符;
例如130转化成十进制为88,而88作为ASIIC码代表X,即打印结果是X;
xdd 表示2个十六进制的数字
strlen计算时一个转义字符大小是1;
1.代码中有不需要的代码可以注释掉
2.代码中难道的地方加上注释,方便理解;
//C++注释风格–C99
这是C语言的注释风格,可注释多行,不支持嵌套注释;
C语言是结构化的程序设计语言
C语言有三种结构:
顺序结构
选择结构
循环语句
if语句和switch语句
int main()
{
int input=0;
scanf("%dn",&input);
if(input==1)
printf("所输入的是1n");
else
printf("所输入的是0n");
return 0;
}
3.2循环结构
for循环
while循环
do while循环
int main(){
while(循环条件语句){
执行语句;
}
}
四、函数
数学中的函数:f(x)=2*x+1;
C语言的函数和数学函数还是非常相似的;
两个整数的和:
int Add(int x,int y) //Add函数,x,y是形参
{
int z=0;
z=x+y; //函数体
return z; //最后将返回的z放到sum里面;
}
int main()
{
int sum=0;
int num1=0;
int num2=2;
scanf("%d%d",&num1,&num2);
//求和
// sum=num1+num2;
sum=Add(num1,num2);//调用Add函数;
printf("%d",sum);
return 0;
}
函数可以简化代码,让代码逻辑更加清晰,代码复用,减少代码冗余等;
上面的Add函数还可以写成:
int Add(int x,int y)
{
return (x+y);//更加简单了一些
}
代码剖析:Add叫做函数名
x,y是int型的形式参数;
Add前面的int是函数的返回类型;
大括号里面的部分叫做函数体;
存放一组相同类型的数据----数组;
5.1数组的定义:数据类型+数组名[数组长度]={ };
数组长度也可以不输入,可以根据{ }里的内容自动识别数组大小;
int arr[n]={1,2,3,4,5};//数据类型+数组名[数组长度]={ };
char ch[5]={0};//不完全初始化,剩余的默认会初始化0;
char ch2[]={'a','b','c'};//自动识别数组大小为3
char ch3[]={0}//一个 ;
char ch4=0;//放进去是其实是一个 ,但是和0没有多大区别;
存进数组的每一个字符其实本质上是存储其ASCII码值;
5.2数组的下标数组里面的元素有下标(标号),从0开始; 也是一个转义字符----ASCII值是0
可以根据下标访问数组,但是不可以越界访问;
越界访问就是具体值某一个数组大小为10,则它里面元素的下标是0~9,一旦超过9就会越界访问报错;
创建数组时,数组的大小只能时常量,但是访问输入输出数组某个元素时,数组元素的下标可以是变量,两者不矛盾;
int main()
{
int arr[10]={0};
//0~9
//输入10个数给数组
int i=0;
while(i<10)
{
scanf("%d",&arr[1]);//使用scanf函数一定要注意&(取地址运算符);
i++;
}
//输出数组中的10个数;
i=0;
while(i<10)
{
printf("%d",arr[i]);
i++;
}
return 0;
}
总结`
初始C语言(2)里面讲到了常量的分类以及每种常量的相关知识及使用方法,以及字符串的相关知识,还有C语言的顺序结构,选择结构和循环结构,最后还有函数的知识和数组的相关知识,学习如逆水行舟,不进则退,明天要比今天更努力,加油!!!



