伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

初识C语言2

来源:本站原创 浏览:49次 时间:2023-06-11

在上一篇中,对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      
下标引用、函数调用和结构成员
[]      ()      .      ->      

此篇结束

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net