抽丝剥茧C语言(初阶 中)

抽丝剥茧C语言(初阶 中),第1张

C语言初阶(中)
  • 导语
  • 1.字符串+转义字符+注释
    • 字符串
    • 转义字符
    • 注释
  • 2.选择语句
  • 3.循环语句
  • 4.函数
  • 5.数组
    • 数组定义
    • 数组的下标
    • 数组的使用

导语

大家要清楚一件事,C语言有C语言的语法,就像汉语和英语都有自己的规则一样,美国人学中文也觉得别扭,国人学英语也别扭,经常中式英语,所以你学什么语言就要遵守什么语言的语法规则,有些地方不要过度深究,不然你的思绪就会越来越乱!

1.字符串+转义字符+注释 字符串

“Welcome to League of Legends\0”;

这种由双引号引起来的一串字符称为字符串字面值,简称字符串。



注:字符串的结束标志是一个 \0 的转义字符。


在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。



举个例子

#include 
//下面代码,打印结果是什么?为什么?(突出'int'的重要性)
main ()char
{
    [ arr1]= "lol" ;char
    [ arr2]= 'l' {,'o' ,'l' };char
    [ arr3]= 'l' {,'o' ,'l' '}';printf(
    "%s\n",); arr1printf(
    "%s\n",); arr2printf(
    "%s\n",); arr3return0
    ; }include
int

arr1[] arr2[] arr3[] 这个东西叫做数组,你先当它是储存字符串的变量就好了,关于数组后面会说。



让我们来运行这段代码试一试:

看到第二个打印出来的内容我们就疑惑了,心里想我明明要打印lol这个字符串可是却出来一堆乱码,这是怎么回事呢?
刚才我们说了,\0 是转义字符也是字符串结束的标志,如图:

你看,这就是数组里储存方式,打印从l开始,往后打印,遇到\0自然会停下来,因为你后面根本不知道后面有什么,图片里数组只储存了四个字符,后面的没有进行初始化,所以是随机值,随机值当中包括 \0 ,但是你不知道能在哪里可以遇到 \0 ,也就造成打印了一些乱码,然后在某一个地方遇到了野生的 \0 才会停下来。



那么会有人说,arr1[] 不是也没有 \0 吗,其实字符串是自带 \0 的,所以很正常。



而第二个就不一样了,他是一个字符一个字符储存进去的,并没有带 \0 ,所以它就只能往后走,遇到一些不明生物最终才找到野生的 \0 .
第三个虽然也是一个字符一个字符放进去的,但是最后放进去了一个 \0 进去,所以纸打印了 lol .

转义字符

假如我们要打印这个目录路径: c:\code\test.c
这个我们怎么写代码?

#main 
( )printf(
{
	"c:\code\test.c\n");return0
	; }转义字符
释义

是这样吗?我们一起来看一下运行结果:

这结果和我们想要的结果不一样,这是为什么呢?
这就涉及到了我们刚才提到的转义字符,转义字符顾名思义就是转变意思。



下面看一些转义字符。


\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\"用于表示一个字符串内部的双引号
\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\ddd\xdd
三字母词ddd表示1~3个八进制的数字。


如: \130 X

对应的字符dd表示2个十六进制数字。


如: \x30 0

什么是三字母词?这就是

VS2022include
??=#
??([
??)]
??<}
??/{
??>/
??!|
??’^
??-~

例子:

printf(“Eh??)”);

相当于

printf(“Eh]”);

但是这种问题是不会出现在我的int编译器上的,我也没有过多的了解,暂时先放一放.
我们来看看一些常用的转义字符是干嘛的:

#main 
( )printf(
{
    "%c\n",'\'') ;printf(
    "%s\n","\"") ;printf(
    "\a");return0
    ; 关于字符这里的知识,我要多句嘴,就是ASCII值
  • 代码中有不需要的代码可以直接删除,也可以注释掉
  • 输出结果如下

    就和上面表格介绍的一样,\n是换行,不然这两个字符都会在第一行仅仅的贴在一起, \a 是怎么一回事呢?它运行的时候会让你电脑触发你 *** 作系统的提示音,我的是win11,有的人是win10,蜂鸣声音就不一样,大家可以试一下.
    剩下的就不一一介绍了,有兴趣的好兄弟可以试一下.
    include

    这个是ASCII对照表,我们可以看到这些字符都有对应的数字.
    因为我们都知道.计算机储存数据是二进制 0 1 这两个数字,而字符缺不是数字,那么它是怎么储存到我们计算机里的呢,就是对应的ASIIC值,最后这些数字由十进制转化为二进制.关于
    例:

    printf("%c",‘A’+2);
    输出结果为 C

    因为字符A的ASCII的值是65,加上2之后是67,67对应ASCII表我们发现其实是字符C,然后我们又用%c(这是打印字符的)的形式打印出来,所以打印的是C,也就是说字符的确是以数字形式储存的.

    注释
      int
    1. 代码中有些代码比较难懂,可以加一下注释文字
      比如:
    #Add 
    ( int,int x) return y+
    {
        ; x}y/*C语言风格注释
    int Sub(int x, int y)
    {
        return x-y;
    }
    */ 
    int
    main
    ( )//C++注释风格//int a = 10;
    {
        //调用Add函数,完成加法
        printf
        (
        "%d\n",Add( 1,2) );return0
        ; }xxxxxx
    include
    

    这里我解释一下,在你的编译器里,以/* 这个符号开头,以 */ 这个符号结尾,两个两个一对,中间的任何文字,数字,字符都是不被编译器识别的,这是C语言的注释风格, // 这个是C++注释风格,被修饰的一行都不过会被编译器识别.
    C语言风格的注释 /int/
    缺陷:不能嵌套注释
    C++风格的注释 //xxxxxxxx
    可以注释一行也可以注释多行
    注释通常用来解释你这段代码是干嘛的,让你的代码更能让人读懂,能让你的同事更好的和你合作.
    比如,有些时候你自己定义的变量不是单词,只是一个字母,别人很难能看懂,这时候你就要写注释了.

    2.选择语句

    我们生活当中会有各种各样的选择,比如说
    大家都能接到诈骗电话,如果你选择了相信,可能你会哭死,如果你选择不相信,那么你就逃过一劫.
    C语言也有选择语句,今天先来介绍一种最常用的选择语句,if语句.

    #main 
    ( )int=
    {
    	0 coding ; printf(
    	);"你会给骗子汇款吗?(选择1 or 0):>"scanf(
    	"%d",&) ;codingif(
    	== 1coding ) printf(
    	{
    		"是的.结果,你知道自己被骗了,不甘心,决心和骗子斗智斗勇,结果你又被骗了很多钱,你破产了!\n");}else
    	printf
    	(
    	{
    		"不要.结果,你逃过一劫\n");}return
    	0
    	; }include
    int
    

    如果你输入1,恭喜你倾家荡产,如果你输入0,那么就逃过一劫.

    我们来看这个if语句,它后面的括号是判断条件.也就是选择条件,注意看 == 这个符号,他不是赋值,他是判断两端是不是相等,这个还可以这么写,1 == coding ,在C语言这种语法是允许的.而赋值是被改变的变量必须在左边.
    下面那个 else 是上面的 if 没有成立会选择 else 大括号里面的内容如果我们输入0或者是其他不等于1的数字,if语句就会先判断,.coding不等于1,那么就选择else里面的内容.
    有人想问,if语句只能有两种选择吗?并不是,如果有多种情况的话,你在 if 和 else 中间加一个else if 就可以了,但是需要加判断条件,像这样.

    #main 
    ( )int=
    {
    	0 coding ; printf(
    	);"你会给骗子汇款吗?(选择1 或者是0或者其他):>"scanf(
    	"%d",&) ;codingif(
    	== 1coding ) printf(
    	{
    		"是的.结果,你知道自己被骗了,不甘心,决心和骗子斗智斗勇,结果你又被骗了很多钱,你破产了!\n");}else
    	if
    	( ==0coding ) printf(
    	{
            "你给骗子忽悠到怀疑人生了!");}else
        printf
    	(
    	{
    		"不要.结果,你逃过一劫\n");}return
    	0
    	; }让你打印20000次我要继续努力敲代码这句话
    //while循环的实例
    

    这个样子你输入0就是你忽悠骗子了,输入除了1和0之外就是逃过一劫.
    注意,单个的else只能放在最后,先了解到这里,后面我会详细的讲解if语句.

    3.循环语句

    有些事必须一直做,比如我们每天都要吃饭睡觉.
    或者是

    你进入大学,可以先买彩票碰运气,要是真的能中5000万,OK,以后你可以横着走,如果你没有用就老老实实学习,提升自己能力才是最稳的,学的不够到位就是菜鸟,学的好就是大佬,有个好文凭,优秀的技术和知识储备量,那么你同样也能走上人生巅峰.
    C语言同样也有循环语句:
    while语句-讲解
    for语句(后期讲)
    do … while语句(后期讲)

    include
    你不可能真的一遍一遍的去敲printf(“我要继续努力敲代码这句话”);
    就算复制粘贴都需要很久,所以要让你的编译器帮你完成这个任务!

    int
    #main 
    ( )printf(
    {
        "开始编程\n");int=
        0 line ; while(
        <=20000line)++;
       {
            lineprintf(
            "我要继续努力敲代码\n");}return
       0
        ; }include 
    int
    

    输出的结果就是两万行 我要继续努力敲代码 这句话.
    ++ 这个运算符号你可以认为它是line =line+1.每一次进入这个循环,line都会加一.

    我们一起来看一下这个while循环语句,后面大括号和if语句一样,都是判断的地方,这里是变量line<=20000的判断条件,那么他在line等于20001的时候不在进入这个循环,因为判断条件已经不成立了.
    在这里我要说明一点,无论哪一个语句,有判断条件情况下,结果为零就是假,就等于这个条件不成立;非零就是真,条件等于成立;有人就说了,刚才那个coding == 0 是怎么回事?这个判断条件就是让coding等于假能进去,如果没有这种规定,判断条件是假,那么一定进不去.

    #main 
    ( )printf(
    {
    	"开始编程\n");int=
    	0 line ; while(
    	0 )++;
    	{
    		lineprintf(
    		"我要继续努力敲代码\n");}return
    	0
    	; }include
    int
    

    我把条件改成了0,输出结果如下:

    果然,原来的2万行现在一行没有.

    4.函数

    函数我们已经接触一点点了,比如main函数printf函数,当然它可不是我们认知的数学那些函数.
    先来一段代码,我们一点点分析:

    #main 
    ( )int=
    {
    	0 num1 ; int=
    	0 num2 ; int=
    	0 sum ; printf(
    	);"输入两个 *** 作数:>"scanf(
    	"%d %d",&, &num1) ;num2=+
    	sum ; num1 printf num2(
    	"sum = %d\n",); sumreturn0
    	; }include
    int
    

    上述代码写成函数如下

    #Add 
    ( int,int x) int y= 
    {
    	+ z ; x return y;
    	} zint
    main
    ( )int=
    {
    	0 num1 ; int=
    	0 num2 ; int=
    	0 sum ; printf(
    	);"输入两个 *** 作数:>"scanf(
    	"%d %d",&, &num1) ;num2=Add
    	sum ( ,)num1; num2printf(
    	"sum = %d\n",); sumreturn0
    	; }因为生命周期仅仅在Add函数内有效
    return就是返回的意思,后面空格加上你要返回的就可以了,不可只能返回一个值,一旦返回,return后面的代码将不会被执行
    

    看到main函数外面的那个Add函数了吗,这就是我们自定义的函数.
    首先我们要知道,函数是什么样子的,我们可以看到,自己定义的名字,就和变量一样,但是不可以定义和库函数重名的函数,库函数你们以后会知道的,假如你定义了一个printf函数买这个本身就是个函数,再次定义就冲突了,人家会默认为你写的是printf函数而不是你定义的函数.
    函数除了名字,后面的是圆括号,这里面是参数,你要传进去什么的参数,我们先看main函数里面的Add函数的参数,把变量num1 num2传进去了,main函数外部的Add函数用int x int y来接收,为什么呢?
    这是函数的语法规定,你传进去的是整形的参数那么你就要用整形的参数来接收,你要声明一下我的这个x y是整形才能接收,至于x y这两个临时变量(数组挺重要的)名字是你自己定义的,和变量一样,名字也可以是num 1num 2

    他们名字前面的int又是什么呢?这是地方是函数的返回类型,我们这段代码要算加法,运行完之后我们要返回一个值,int,这里返回的是z,z是我们在Add创建的临时变量,我们当然不是真的返回z,而是返回z里面的整形数据,也就是两数相加的和,因为返回的也是一个常量,所以并不会被销毁,
    所以说,返回的是什么类型,函数名前面就要加上什么类型,如果你不需要返回,那么请在你的函数名前写上void

    那么,自定义的函数道义有什么意义呢?它可以不用麻烦的做一段重复的事情,还可以节省空间,你想想,如果自定义函数里是非常复杂的计算公式还有很多东西,你难不成用一次复制粘贴一次吗,这样很浪费空间和时间,需要的时候直接调用就行
    就像printf这个函数一样,你只需要引头文件声明一下就可以了,也就是和人打一下招呼,我要用这个函数了,就是我们之前看到的#include ,并不需要你把源代码复制粘贴,那样太麻烦
    函数的特点就是简化代码,代码复用。


    5.数组

    [

    数组定义
    10 arr]=1 , {2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素char[
    4 arr1 ]="lol" ;//定义一个字符数组,最多放4个元素int[
    ] arr2=1,{2,3,4,5,6,7,8,9,10};//定义一个整形数组,里面有10个元素char[
    ] arr3="lol";//定义一个字符数组,加上include,已经有4个元素了intmain
    

    首先,这是数组的初始化,数组是能储存多个元素的变量,你想储存什么类型的元素就在数组名前面加上类型,很显然,arr arr1 arr2 arr3 就是数组名,也是变量

    因为arr1可以容纳10个元素,我们又初始化了十个元素,所以我们叫做完全初始化

    而后面的 [ ] 是什么呢,这个是数组的结构,[ ]里面的常量是决定数组能容纳多少元素,如果[ ]里面没有写,像arr2 arr3那样,那么它会看后面自己有多少个元素就决定自己能容纳多少个元素,不会多不会少.

    如果说初始化的是int arr [10] ={1,2,3};那么后续的7个元素是什么呢?因为arr可以容纳10个元素,但是只初始化了3个元素,那么系统会默认剩下7个元素为0
    这里我们叫做未完全初始化

    数组的下标

    C语言规定:数组的每个元素都有一个下标,下标是从0开始的。



    数组可以通过下标来访问的。



    比如:

    int arr[10] = {0};
    //如果数组10个元素,下标的范围是0-9

    蓝色部分是我们的元素

    我们每个元素都是从从下标为0一直向左走,在我们规定的范围内,我们已经把这个地方的"原住民"给替换掉了,全都换成了0 ,所以在这个范围内是安全的,如果你想越界,那么你肯定不知道外面的是什么东西,因为都是随机值,就像之前说的字符串一样.

    数组的使用

    我们先用数组的下标来试着访问数组里每个元素:

    #( 
    ) int[10
    {
        ] arr=1, 2 {,3,4,5,6,7,8,9,10};printf("%d "
        ,[0] arr);printf("%d "
        ,[1] arr);printf("%d "
        ,[2] arr);printf("%d "
        ,[3] arr);printf("%d "
        ,[4] arr);printf("%d "
        ,[5] arr);printf("%d "
        ,[6] arr);printf("%d "
        ,[7] arr);printf("%d "
        ,[8] arr);printf("%d "
        ,[9] arr);return0;
        } 今天我们的内容是
    
    

    有人问,为什么printf函数后面为什么这么写?这就是C语言的语法,嗯,至于和初始化确实很像,不过,这次[ ]里面的值不仅仅是常量,变量也可以,这个后期会演示,[ ]里面的值是下标的数,这是我们的打印结果:

    这就是数组的使用,数组我们就先了解到这里,后期会详细讲解


    1.字符串+转义字符+注释
    2.选择语句
    3.循环语句
    4.函数
    5.数组
    重点: \0 是字符串的终止标志.
    转义字符虽然作用多,但是别忘记只要加了 \ 这个符号你可能就会少打印一个字母或者是数字,多打印了一些奇怪的东西.
    注释要好好利用,不仅仅可以快速屏蔽代码,还可以让人更容易读懂你的代码!
    选择语句和循环语句最重要的就是判断条件.
    函数在传参的时候一定不要忘记声明一下你传过去的是什么类型,也不要忘记返回类型.
    数组一定不要越界,要在规定范围内活动,下标是从0开始,不是从1开始.

    欢迎分享,转载请注明来源:内存溢出

    原文地址:https://www.54852.com/langs/606970.html

    (0)
    打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
    上一篇 2022-04-14
    下一篇2022-04-14

    发表评论

    登录后才能评论

    评论列表(0条)

      保存