C语言学习记录———이 初识C语言(2)

目录

一、常量

const修饰的常量

#define定义的标识符常量

枚举常量

二、字符串+转义字符+注释

字符串 

转义字符、

注释、

三、选择语句

if,while语句

if-else语句

for语句


一、常量

       分类:字面常量,#define修饰的常量,const修饰的常量,枚举常量。字面常量也就是我们很熟悉的常量,比如5,g,这些都是常量,无法被改变,可以直接写出来。之前的int a = 5,a就是变量,可以被赋值5。

const修饰的常量

int main()
{
    int num = 1;
    printf("%d\n", num);
    num = 19;
    printf("%d\n", num);
    return 0;
}

运行后可以打印出1和19两个数字。num先被赋值为1,后又改为19.现在在int num前加上const,

const int num = 1;  const的意义就是常属性。当加上const后,num的值就不能被改变了,const给num加上了常属性,虽然它是变量,但是却有常数的性质,所以num此时叫常变量。再次运行程序,编译器会报错,因为有常属性,就不允许修改。虽然const给了变量常属性,但是变量还是变量,并不是常量。

#define定义的标识符常量

#define MAX 10
int main()
{
    int arr[MAX] = { 0 };
    printf("%d\n", MAX);
    return 0;
}

运行起来,可以发现打印出10。如果:

const int a = 10;

int arr[a] = {0};

此时就会出错。而define则可以。

这里的[a]是表示一个数组,这个后面再写。定义数组的时候可以写上这个数组要有多少个元素,10就是10个元素,这里的例子说明[]里填充的表示个数的数字不能是变量,但也有变长数组可以这样。关于数组的描述,以及下文中也有的描述,可以不用理解,之后会有专门说明数组的博客。

枚举常量

枚举要用到enum关键字。

enum Sex
{
    Female,
    Male,
    Secret
}; //这个分号必须有。这三个值就是枚举常量。

int main()
{
    enum Sex s = Female;
    printf("%d\n", Female);
    printf("%d\n", Male);
    printf("%d\n", Secret);
    return 0;
}

运行起来,会打出0,1,2这三个数字。这三个词是有数值的且不可被改变,0,1,2。这三个数从0开始,并且是递增的,注意这个并且,是两个性质,如果Female设为200,在enum中写上Female = 200,   那么就打印200,201,202;如果Male设为200,那就0,200,201。

二、字符串+转义字符+注释

字符串 

       字符串是由双引号引起的一串字符,其结束标志是\0,计算字符串长度的时候\0不计入,它不是字符串内容,写的时候也不用写\0。比如"asdasdasd","1231235452","z"都是字符串 。字符串的存储可以用数组来存储,数组就是一组数。

    char arr1[] = "abc";
    printf("%s\n", arr1);
    return 0;

这样打印出的结果就是abc。如果:

int main()
{
    char arr1[] = "abc";
    char arr2[] = { 'a', 'b', 'c' };
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    return 0;
}

       结果是abc 和abc...bc,省略号会出现随机字。为什么就出现这种情况?第一种以字符串形式呈现,第二种是三个字符呈现。那么为什么会有不同?第一种的具体内容其实是三个字符加上结束标志\0,\0的值是0,所以如果给第二个后面再写一个0,那么显示结果就一样了。arr2在读取时,会一直找到\0才停止,而在我们可以看到的,可以定义的字符中只有abc三个字符,所以后面是什么我们也不知道,这里会涉及到内存相关的知识,现在只需要知道后面的东西是计算机自己存储的数据,我们把它当作随机值即可。我们既可以写成'\0',也可以直接写0,读取数组内容读取到c时就停了,就不会有其他的东西了。 \0是隐藏的。

       \0有数值,其他字符自然也有数值。'a'的值为97,'A'的值为65,像#¥这些也都有自己的值,这里牵扯到ANCII 编码,ANCII码值。可以收藏这个

ANSCII码表_ansicc码表_free(me)的博客-CSDN博客https://blog.csdn.net/weixin_43772611/article/details/123134850

        我们还可以更具体的看刚才代码中字符串的长度。

int main()
{
    char arr1[] = "abc";
    char arr2[] = { 'a', 'b', 'c' };
    printf("%d\n", strlen(arr1));
    printf("%d\n", strlen(arr2));
    return 0;
}

strlen——string length    用于计算字符串长度。刚才提到了,\0在求字符串长度时不进入计算过程。

运行的结果是3和随机值。第一种具体写为a b c \0,第二种是a b c ...后面全为随机值,直到遇到一个随机值0,才能停止,所以我们手动在c后给一个0或者'\0'才能和第一种一样,如果写'0'则没有作用,因为这个就是一个普通的字符,不代表字符串停止符\0。

转义字符、

\0就是一种转义字符。这里要具体说一下转义字符。

printf("abcn");

       这样的结果就是abcn,如果在n前加上转义符号\,变成abc\n,那么结果就是abc,然后切到下一行。\n是换行转义字符,输出完后就换行。让我们看这样一个代码。

printf("c:\test\32\test.c");

       结果会是c:       est一个向右的箭头             。这很奇怪,并没有打出相应的字符串。t是一个正常的字符,但是\t就是一个转义字符了,\t是一个水平指表符,它会打印出一块空白,其实就是一个水平制表符(四个空格)这样长度的一个空格。水平制表符并不重要,重点在于转义字符。给一些转义字符:

\?          在书写连续多个问号时使用,防止它们被解析成三字母词。

\'            用于表示字符常量或者说字符’

\"           用于表示一个字符串内部的双引号

\\           用于表示一个反斜杠,防止它被解释为一个转义序列符     

\a          警告字符,蜂鸣     

\b          退格符

\f           进纸符

\n          换行

\r           回车

\t           水平制表符

\v          垂直制表符

\ddd      ddd表示1~3个八进制的数字。如\130x

\xdd      dd表示2个十六进制数字。如\x30  0

        \?是一个老旧C语言的字符,连续两个问号后加上一个字符,它就会转换成任意一个其他的字符,而不是原本程序员想输出的内容,这也就是出现了三字母词。如果在两个字母前分别加上\,则可以正常打印内容,这个无需在意。

       再看之前的程序,由于转义字符的存在,结果打印出错。我们可以在\前再加\一个,这样形成一个\\,作用在上面,这样就可以防止内容被转义,也就是这样的代码:c:\\test\\32\\test.c,于是 c:\test\32\test.c 就可以打印出来了。这就是转义字符。

       再说一下其他的转义字符。\':如果我们还想打印',那么printf("%c\n", ''');  这样会出错。编译器解析的时候会把前两个当成一对,而第三个'则落空,所以会形成一个空字符常量。在中间的'前加上\,这样就是’   \'    ',那么这样就可以正常打印出'了。%c打印字符,%s打印字符串。刚才是字符,那么字符串也一样:printf("%s\n", "\"")这样才能打印正确。

printf("%d\n", strlen("c:\test\32\test.c"));

       结果出来是13。\t是算一个字符,\32也算一个。\32其实际上,32是两个八进制数字,\32是32这两个八进制数字转换成十进制数字后这个十进制数字就是一个ANCII码值,这个值对应的字符,注意读作三二,而不是三十二。我们只打印一下\32,printf("%c\n", '\32');  会得出一个向右的箭头,就是之前所说的打印结果中出现的箭头。具体ANCII码值可以自行搜索。

       同样,\xdd也是如此,比如printf("%c\n", '\x61'),也能找到对应的符号。

注释、

注释是给人看的,对于程序本身没有什么作用,只是在给程序员解释一下这行代码要做的事。另一方面,有些代码不需要执行时,也可以注释掉,程序就会自动跳过这些代码。在C语言中,/* ........   */ 这是注释的形式。以/*开始,以*/结束,只要遇到*/,注释就结束,这个可以注释掉很多内容;单行注释就用//,会把它之后的一行的内容注释掉。注释在整个项目中很重要,别人读你的代码时也要参考注释,不过像现在所学,注释就没有多少作用,学到一定水平后,代码逐渐复杂,学习的内容逐渐变难,写的程序逐渐专业,注释不仅可以帮助别人读代码,也可以帮助自己整理思路。

三、选择语句

选择语句是C语言中很常用的语句,也很重要。选择语句顾名思义,重在选择,通过给定一些条件代码,来让计算机自己做选择。选择语句在之后的学习中也很重要。学到后期会发现,很多程序都是靠着条件来控制的,不仅仅是循环语句上的条件,单纯的条件也可以实现让程序自动化的需求。

if,while语句

    int line = 0;
    while (line < 20)
    {
        printf("asdasd\n");
        line++;
    }
    printf("xcz\n");
    return 0;

        程序的顺序是声明一个变量line,给了一个line<20的条件,计算机会自己判断line是否符合条件,符合条件,就会打印出asdasd,然后line++的意思就是line加1,然后再次进入while循环,再次判断。当某次line为20时,不再符合条件了,那么此时跳出循环打印出xcz,然后程序结束。这样的结果就是,会出现20次asdasd,然后最后一行出现xcz。可是这个程序还不够严谨,除此之外,我们还可以再加上对循环次数的监视,让他每次循环都表示出这是第几次。

    int line = 0;
    while (line < 20)
    {
        printf("asdasd: %d\n", line);
        line++;
    }
    if (line >= 20)
        printf("xcz\n");

asdasd冒号右面以十进制常数呈现,数字存储在line里。这样就能显示出每一行是第几次循环。这里按照人的思路,应当第一次出现asdasd: 1,但是现在这样写就会出现0,把line++放在printf前面就可以。while语句的格式就是:

expr1;

while(expr2)

expr3;

expr为表达式。

if-else语句

if,else,其意为如果;其他,否则。其形式为:

if(expr1)

statement1;

else

statement2;

这里还要引入一个

else if(expr2)

statement3;

.....

else if就是再给一个判断。举一个例子:

int ag = 7;

int main()
{
    if(ag >= 8)
        printf("asd\n");
    else if (ag <= 6)
        printf("qwe\n");
    else
        printf("zxc\n");
}

给ag赋值7,然后进入程序,判断条件,由于ag均不符合两个条件,所以打印出zxc,从第一个开始,自上而下依次判断,这个特性在一些复杂的条件控制中起到关键性作用,学到数据结构时会发现这点。

for语句

for语句与while语句可以同时比较。其形式为for(expr1;expr2;expr3)expr1执行赋值,expr2执行测试判断,expr3增加存储值。expr3是循环体完成的最后一件事,比如:

int h = 0;
int sum = 0;
int main()
{
    for (h = 1; h <= 47; h++)
        sum += h;
    if (h = 48)
        printf("%d\n", sum);
    return 0;
}

       进入程序后,原先被赋值为0的h,现在被赋值为1,所以第一个就是一个赋值语句;然后判断h <= 47,接着就往下走,遇到sum += h,这行代码的意思为sum = sum + h,把sum + h的值赋值给sum,之后再往上走,执行语句h++,h++的意思为h+1。第二次循环,h为2,仍然符合判断条件<=47,新的sum等于原sum值加新h值,也就是1 + 2,也就是sum + h1 + h2,那么循环下来,sum就把所有的h值都加在了一起,也就算出来了1加到47的和。之后h为48时,判断不正确,为零。C语言中,只有非零和零,分别为真和假,于是来到if语句,此时h一定等于48,因为h为整数,47再加1后就是48,所以打印出sum值。其实不加if语句也可以,只是出于严谨而已。for语句在C语言中是应用很广泛的语句,因为相对于while来讲,for语句只需写出一行即可展示所有表达式,并且视觉上看起来很简洁。但做题的时候,while里会更加自由,这个在自己的做题中会逐渐感受到。

       这里插入一条,在C语言中,=与==不一样,可以注意到,之前涉及到=的时候,我一直写的是赋值,而不是等于。=是赋值,==是等于,赋值的意思是把右边表达式的结果给左边的变量,而等于就是数学意义上的等于,所以=与==不相同,如果在刚才for语句例子里用==,那么就会出错,并且也解释不通。

       循环语句还有do-while语句,之后的记录中会有更详细的关于循环语句以及do-while语句的说明。

       结束。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值