在上一篇中,对C语言的编译器进行了说明,而且着重讲述了如何使用VS,紧接着就讲述了如何写第一个C语言程序,而后依次介绍了数据类型,再以后就介绍了变量的定义分类和使用,有不清楚的能够去翻阅一下个人博客“初识C语言1”中的内容。数组
今天咱们接着上一次说,上一次说到了变量,但是咱们的生活中不止有像年龄、身高、体重等会变的量,还有例如身份证号码、血型、圆周率等不变的量,C语言做为人类和计算机交流的语言也必需要涉足于这些量,因此在C语言中,咱们把这些不能改变的量称之为常量。ide
在C语言中常量分为4类:字面常量、const修饰的常变量和#define定义的标识符常量以及枚举常量。
给出如下示例代码:函数
#include <stdio.h> #define PI 3.14 //此时PI为#define定义的标识符常量,其值为3.14 enum Sex//定义枚举常量的枚举关键字enum { MAN, FEMALE, SECRET }//此时MAN,FEMALE,SECRET为枚举常量,其值由系统分配,是不可改变的 int main() { 3;//字面常量 100;//字面常量 const int num=4;//此时num是const修饰的常变量,其值为4在使用过程当中不可变 }
代码是很简单的代码,带了注释,方便你们理解,在注释里面也分别标识了四种常量。
字面常量,就是直接给出的常量,例如:1,2,3,4,5,6,7等等,像上示例代码中的3和100等直接给出的常量均为字面常量。
const修饰的常变量,其是变量被const修饰以后就具备了常属性,其在编译中是按变量编译的,这和C++是有区别的,在C++中const修饰的常变量是一个常量。
#define定义的标识符常量,就我我的理解#define定义的标识符常量就是一种定义方式而已,在上示例代码中,PI就是此种常量,它的值为3.14是不能够改变的。
还有最后一种就是枚举常量,枚举常量就像列举法同样,把全部的量都一一列举出来,每个列举出来的量,系统都会给其分配一个值,这个值是固定的,不可改变的,能够直接打印输出的。学习
前面咱们介绍数据类型的时候介绍过字符型数据,可是在生活中咱们常常会用到多个字符连在一块儿的字符串:测试
"Hello world!"
像上面示例代码中用双引号包起来的一串字符就是字符串,在C语言中咱们能够用数组来储存字符串。code
#include <stdio.h>//输入输出函数的头文件 #include <string.h>//求字符串长度的函数的头文件 int main() { char arr1[]="abc";//定义字符型数组保存字符串 char arr2[]={'a','b','c'};//定义字符型数组保存字符串 char arr3[]={'a','b','c',0};//定义字符型数组保存字符串 printf("arr1=%s\n",arr1);//输出字符串 printf("arr2=%s\n",arr2);//输出字符串 printf("arr3=%s\n",arr3);//输出字符串 //strlen--求字符串的长度的函数,是C语言库函数,在使用以前必须打招呼 printf("arr1字符串长度为:%d\n",strlen(arr1));//输出字符串长度 printf("arr2字符串长度为:%d\n",strlen(arr2));//输出字符串长度 printf("arr3字符串长度为:%d\n",strlen(arr3));//输出字符串长度 return 0; }
示例代码运行结果以下:
经过上面运行结果,发现输出字符串的时候,arr2数组输出出现乱码的状况,而arr1和arr3输出的就是咱们须要的结果,在输出字符串长度时,arr1和arr3字符串长度都是3个字节,而arr2的字符串长度倒是15个字节,而arr2和arr3最主要的区别就是:arr3数组里面有(0),而arr2里面没有,这个0是相当重要的。
在C语言中字符串的结束标志是'\0',这个'\0'是一个转义字符(等会会说到)在计算字符串长度时,以'\0'为结束标志,其不算字符串的内容。而在ASCII码表中'\0'对应的就是十进制下的0。
因此在上述示例代码中,arr2中是没有结束标志的,arr3中有结束标志'\0',因为是字符型数组,因此数组中的内容在编译的过程当中会按ASCII码将十进制0转换成'\0'故:arr3中是有结束标志的,在arr1中,虽然没有写'\0'可是双引号内的字符串都会默认最后有'\0'结束标志,故arr3和arr1均有字符串结束标志,在编译完成以后输出了咱们想要的结果,而arr2中没有字符串结束标志,故其在输出过程当中,出现了乱码,在输出字符串长度时是一个随机值,当读完数组元素后还会往下读,直到读到'\0'结束标志才停,故其输出的内容不是咱们想要的结果,输出的字符串长度是随机值。blog
转义字符,顾名思义就是改变意思的字符,咱们来看一个示例代码:字符串
#include <stdio.h> int main() { printf("E:\class\test.c\n"); return 0; }
运行结果以下:
咱们原本是要打印一个目录的,结果运行结果不尽人意,主要是在编译的过程当中,系统把'\t'当作转义字符(水平制表符)来编译了,才致使出现了截图的运行结果。
在C语言中还有很多转义字符,就是经过'\'和字符来组成的,出现这种状况咱们一般要在'\'以前再加上一个'\'变成'\'(其实也是转义字符)来消除以上状况,能够将上述示例代码进行修改为以下代码:编译器
#include <stdio.h> int main() { printf("E:\class\test.c\n"); printf("E:\\class\\test.c\n"); return 0; }
在运行的过程当中出现了一个小插曲,我所写的代码文件被个人电脑管家误认为是***了。。
遇到这种状况你们不用着急,由于大部分的***都是人为编写的,因此各类杀毒软件对咱们编写的代码文件都极为敏感,会出现一不当心就判断为***的状况,咱们只需找回文件,以后将咱们代码文件放入信任区便可。
将文件放入信任区以后咱们就能够正常运行了。
运行结果以下:
在第5行代码中将'\'变成了'\'便可以正常的打印目录。
下表是常见的转义字符:博客
代码中有不须要的代码能够删除掉,也能够注释掉;
代码中有比较难懂的代码能够加一些注释方便其余人阅读,以及后面本身查阅。
C语言注释:
/*111111111*/
其存在缺陷:不能嵌套注释
/* 1111111/*111111*/1111 */
在上述示例代码中
框框里面的内容没有被注释,这是由于在C语言中当编译到'/*'
后但凡遇到了'*/'
就会结束注释,所以C语言风格的注释最大的缺陷就是不能嵌套注释。
C++注释:
//1111111111 //1111111111
能够注释一行也能够注释多行。
鉴于以上,在写代码过程咱们一般使用C++注释,C语言注释用的少。
在生活中咱们会面临着各类各样的选择,C语言做为人类和计算机沟通的语言,也应该有相应的语句与咱们平常生活中的选择相对应。在C语言中须要根据某一条件是否知足来决定是否执行指定的操做任务,或者从给定的两种或多种操做中选择其一,这样的结构叫作选择结构。
C语言中有两种选择语句:if语句和switch语句,初识C语言不作阐述,后面聊选择结构的时候细说。仅举个示例:
#include <stdio.h> int main() { int i; printf("是否有好好学习?(如有好好学习,请键入非零正整数;若没有好好学习,请键入0)\n");//给出选择 scanf("%d",&i); if(i==0)//判断 printf("请好好学习\n");//一种选择下的结论 else printf("真棒!请继续加油\n");//另外一种选择下的结论 return 0; }
两种不一样选择时的运行结果以下:
上述示例代码的做用就是判断有没有好好学习,如有好好学习则键入一个非零正整数,输出'真棒!请继续加油',若没有好好学习则键入一个0,输出'请好好学习'。此选择结构采用了if选择语句。
在生活中,咱们天天都要吃饭,天天都要工做或者学习,咱们会常常重复着同一件事情,在C语言中,也有相应的语句与之相对应。重复着同一个语句,这样的结构叫作循环结构。
C语言中循环语句有三种:while语句、for语句以及do...while语句,初识C语言不作阐述,后面聊循环结构的时候细说。仅以while语句为例来举一个示例代码:
#include <stdio.h> int main() { int a=1; while(a<=10)//结束循环的条件 { //循环体 printf("%d\t",a);//'\t'转义字符(水平制表符)使其输出整齐 a=a+1; } printf("\n");//'\n'转义字符(换行) return 0; }
运行结果以下:
上述示例代码中运用了while循环来依次输出了1,2,3,4,5,6,7,8,9,10这十个数字。
C语言程序是由语句构成的,而实现一个小功能的多个语句结合而成,给封装起来就变成了函数,函数的做用就是使程序简单化,防止重复使用一样的多行代码。
举个栗子:
#include <stdio.h> int Max(int a,int b)//函数声明 { if(a>=b) return a; else return b; } int main() { int x,y,m,n,max; printf("请输入两个正整数x,y:\n"); scanf("%d %d",&x,&y); printf("请输入两个正整数m,n:\n"); scanf("%d %d",&m,&n); max=Max(x,y);//调用函数 printf("x和y这两个数较大的是:%d\n",max); max=Max(m,n);//调用函数 printf("m和n这两个数较大的是:%d\n",max); return 0; }
运行结果以下:
上述示例代码实现的功能就是依次键入两组数,每组数中有两个数字,输出每组数中的最大值,代码中输出最大值功能的代码被封装在自定义的Max函数中,后面经过调用Max函数来实现输出最大值功能。
在咱们数学中有集合的定义,也就是具备相同属性的事物的集合称之为一个集合,集合里面的每一个事物称之为元素,在C语言中也有与之对应的定义----数组。
在C语言中:一组相同数据类型的元素的集合称之为数组。
在C语言中,数组的定义和变量定义差很少,看实例:
char arr[10];//定义了一个字符型数组 int arr1[3]={1,2,3};//定义了一个整型数组,并赋值
在上述实例中,arr是一个字符型数组,其容量为10,也就是说里面最多只能有10个元素,arr1为整形数组,而且其被赋值,里面有3个元素,3个元素的值依次为1,2,3。
在C语言中,咱们一般经过访问下标来访问数组中的元素,使用循环结构来输出一个数组,例如:
#include <stdio.h> int main() { int n=0; int n1=0; int arr[10]={1,2,3,4,5,6,7,8,9,10};//定义一个整型数组,元素个数为10,并赋值 //打印数组元素 while(n<=9) { printf("打印数组的第%d个元素:%d\n",n,arr[n]);//经过下标来访问数组元素,下标由0开始 n=n+1; } printf("数组所占字节大小:sizeof(arr)=%d\n",sizeof(arr));//sizeof是计算数据类型长度(单位是字节),是C语言的库函数,其头文件和printf函数的头文件相同 n1=sizeof(arr)/sizeof(arr[1]);//数组的元素个数=整个数组的数据类型长度/每一个元素的数据类型长度 printf("数组中元素的个数:n1=%d\n",n1); return 0; }
运行结果以下:
在C语言中,是经过下标来访问数组元素的,下标是由0开始的,经过循环结构依次来访问数组元素,进而输出数组中各元素。
初识C语言不作阐述,后面聊操做符的时候细说。仅作简单介绍:
+ - * / %
>> <<
& ^ |
= += -= *= /= &= ^= |= >>= <<=
! 逻辑反操做 - 负值 + 正值 & 取地址 sizeof 操做数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 间接访问操做符(解引用操做符) (类型) 强制类型转换
> >= < <= != 用于测试“不相等” == 用于测试“相等”
&& 逻辑与 || 逻辑或
exp ? exp2 : exp3
exp1,exp2,exp3,…expN
[] () . ->
此篇结束