在上一篇中,对C语言的编译器进行了说明,并且着重讲述了如何使用VS,紧接着就讲述了如何写第一个C语言程序,然后依次介绍了数据类型,再之后就介绍了变量的定义分类和使用,有不清楚的可以去翻阅一下我的博客“初识C语言1”中的内容。

常量

今天我们接着上一次说,上一次说到了变量,可是我们的生活中不止有像年龄、身高、体重等会变的量,还有例如身份证号码、血型、圆周率等不变的量,C语言作为人类和计算机交流的语言也必须要涉足于这些量,所以在C语言中,我们把这些不能改变的量称之为常量。

常量的分类

在C语言中常量分为4类:字面常量、const修饰的常变量和#define定义的标识符常量以及枚举常量。
给出以下示例代码:

#include <stdio.h>#define PI 3.14 //此时PI为#define定义的标识符常量,其值为3.14enum 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语言中我们可以用数组来储存字符串。

#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'结束标志才停,故其输出的内容不是我们想要的结果,输出的字符串长度是随机值。

转义字符

转义字符,顾名思义就是改变意思的字符,我们来看一个示例代码:

#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      

下标引用、函数调用和结构成员

[]      ()      .      ->      

此篇结束

©著作权归作者所有:来自51CTO博客作者EricsTong的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 字符串函数基础知识应用场景实例演示
  2. 20个PHP字符串函数实例
  3. PHP字符串常用函数
  4. 不少于20个字符串函数练习
  5. 数组排序、数组合并
  6. PHP基础知识:数组相关函数和操作
  7. 指向函数指针数组的指针
  8. 数组排序-合并-成员统计-交差并补
  9. PHP常用的数组函数

随机推荐

  1. Android 基本概念
  2. android 开发环境建立
  3. Android xml资源文件中@、@android:type
  4. android app 与android wear 通过Message
  5. android支持的media文件格式--MediaFile
  6. Android 程式开发(原创)の目录索引
  7. android 向webview传值
  8. Android Studio 的原生输入框控件 EditTe
  9. 学习Android从0开始之背景篇-Android系统
  10. 【百度网盘】老罗android开发视频教程[压