第一讲:Hello ,C语言

        C语言作为编程中的高级语言,也是其他语言的基础语言之一,应用广泛,C语言的发展史,不做过多的讲述,可以自行百度查找。    

编译器的选择

         俗话说 ,工欲善其事必先利其器,而C语言的利器则是编译器,初期选一个适合自己语言检查严格的编译器,对于初学者来说很重要。目前C语言的主流编译器为Msvc、Glang和GCC,还有一些集成开发环境,如VS2022、Xcode、CodeBlocks、DevC++、Clion等。下面是集成开发环境的差异对比。

        • VS2022 集成了MSVC(安装报包较⼤⼀些,安装简单,⽆需多余配置,使⽤起来⾮常⽅便)

        • XCode 集成了clang(苹果电脑上的开发⼯具)

        • CodeBlocks 集成了gcc(这个⼯具⽐较⼩众,需要配置环境,不太推荐)

        • DevC++ 集成了gcc(⼩巧,但是⼯具过于简单,对于代码⻛格的养成不好,⼀些竞赛使⽤)

         • Clion 是默认使⽤CMake,编译器是可以配置的(⼯具是收费,所以暂时推荐⼤家使⽤)

初学者推荐使用VS2022,因为VS2022对于语法的检查更为的严格,能更好的培养我们的编程习惯,去除一些编程恶习。

C语言是如何实现.exe文件

        计算机不像人类一样可以识别很多的字体,在它的认知里,它只认识二进制数,既0和1.C语言的源代码都是文本文件,所以它必须经过编译器翻译和链接器链接,生成二进制的可执行文件,才能让计算机做我们想让它做的事情。

        C语言代码是放在.c为后缀的文件中,.c后缀的文件又被称为源文件,那么.h结尾的文件则为头文件,这里先不做过多的描述,后面会慢慢的了解。

第一个C语言程序

#include <stdio.h>

int main()

{

        printf("Hello,world");

        return 0;

}

以上代码意思是打印一行字,内容为:Hello,world。按CTRL+F5运行。以下是显示情况。

代码展示

main函数

        main函数是作为C语言编译程序的唯一入口,又称为主函数,有且仅有一个此函数的定义!!!

        main函数前面的int 的意思是 main函数的返回类型,其类型为整数型。那什么是返回类型呢?我们所学的函数的表达形式一般都为f(x)=x+y,而x+y以后得到的数,就被称为函数f(x)的返回值,至于类型,则是x+y的计算后的数值是整数还是小数之类的表现形式。return 0则类似于 f(x)=x+y中的等号的意义。

下面是main函数的要点:

        • main函数是程序的⼊⼝

        • main函数有且仅有⼀个

        • 即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)

printf和库函数

上面的代码中有一段代码如下:

printf("Hello,world");       

其中,printf()是一个函数,作用是在屏幕上打印括号中引号内的内容。

        printf()函数也可以用其他的形式来使用:

int n = 100;

printf("%d\n", n); //printf打印整型

printf("%c\n", 'q'); //printf打印字符

printf("%lf\n", 3.14); //printf打印双精度浮点

这里面%d、%c、%lf被称为占位符,会被后面的值替换,这里需要注意当要在printf输出两个以上的值时,后面所跟数值的顺序是什么,那么输出时就按照他的排序进行输出。

int main()
{    
    int a = 1;
    int b = 2;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}

输出展示

库函数在使用的时候,切记一定要记得引入头文件。在第一段代码中 #include <stdio.h>这句话就是头文件的引用,如果不引用头文件,则程序是无法运行的,会报错,所以大家在使用库函数的时候,要注意头文件是否引用了。

#include <stdio.h>

关键字介绍

关键字是C语言中的一些具有特殊意义的词语,这些词语只能用来做C语言让它做的事情,不能做其他的事情,比如 你想起个名字 叫int,那这不行,C语言不会让你这么干的。

C语言常用的关键字如下:

1.auto  break  case  char  const  continue  default  do  double  else  enum  ex

2.float  for  goto  if  int  long  register  return  short  signed  sizeof

3.struct  switch  typedef  union  unsigned  void  volatile  while 

对于关键字的用法以及介绍大家可以去这里了解一下:https://zh.cppreference.com/w/c/keyword

字符和ASCII码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'。这些字符在计算机中的是以数字编号的形式存储的,其中数字标号我们称为编码。

我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数 据:

        • 字符A~Z的ASCII码值从65~90

        • 字符a~z的ASCII码值从97~122

        • 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32

        • 数字字符0~9的ASCII码值从48~57 • 换⾏ \n 的ASCII值是:10

        • 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察

#include <stdio.h>

int main()

{

        printf("%c\n", 'Q');

        printf("%c\n", 81);//这⾥的81是字符Q的ASCII码值,也是可以正常打印的

        return 0;

}

以上代码的展示效果如下:

可打印的字符的如下:

#include <stdio.h>

int main()
{
    int i = 0;
    for (i = 32;i <= 127;i++)
    {
        printf("%c ", i);
            if (i % 16 == 15)
            {
                printf("\n");

            }
    }
    return 0;
}

字符串和\0

C语⾔中如何表⽰字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个 字符串。

字符串的打印格式可以使⽤ %s 来指定,也可以直接打印如下:

#include<stdio.h>

int main()
{
    printf("Hello,world\n");
    printf("%s\n", "Hello,C");
    return 0;
}

C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串 的结束标志。

对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个 \0 的 转义字符, \0 是字符串的结束标志。所以我们在使⽤库函数 printf() 打印字符串或者 strlen() 计算字符串⻓度的时候,遇到 \0 的时候就⾃动停⽌了。

在C语言中,我们经常用数组来存储字符串,例如arr[]。我们用数组来验证下\0的意义。

#include <stdio.h>

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

神奇的事情发生了,为什么arr2的输出除了我们给的abcd以外,后面还跟了一堆汉字?

我们重新运行一下,看下内存中的arr1和arr2的存储有什么问题。

这时我们发现,arr1数组中最后面有个\0,但是我们并没有输入\0啊,这就要提到字符串的初始化问题了,在数组初始化的时候,我们是直接用字符串赋值的,此时,系统是自动给我们补全\0到数组arr1中的,那么数组arr2我们并没有添加\0,后面就显示了一堆乱码,直到遇到了内存中的\0才停止输出。

那么我们再重新定义一个数组arr3,这里在arr2的基础上我们添加上\0,看看效果如何。

#include <stdio.h>

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

    printf("%s\n", "ab\0cdefg");

    printf("%s\n", arr3);
    return 0;
}

此时我们看见,数组arr3的输出正常了,而且printf("%s\n", "ab\0cdefg");这里也是只是打印ab就结束了不在打印。从上述的例⼦我们确实能够观 察到 \0 的作⽤和重要性的。

转义字符

在上面例子中,出现了很多\n  ,\0之类的字眼,这是什么意思呢?在C语言中,有一些特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。

比如我们要打印英文单词 天使   angle;

#include<stdio.h>

int main()
{
    printf("%s", "angle");
    return 0;
}

此时是正常打印出 angle单词的,那么我们在n前面加上一个\ 看看是效果;

#include<stdio.h>

int main()
{
    printf("%s", "a\ngle");
    return 0;
}

此时angle单词没正常打印,而且字母n也没了,让系统吃了么?系统出问题了?其实这就是因为转义字符\的原因。

\n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思 发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。 C语⾔中像这样的转义字符还有⼀些,具体如下:

        • \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。

        • \' :⽤于表⽰字符常量'

        • \" :⽤于表⽰⼀个字符串内部的双引号

        • \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。

        • \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。

        • \b :退格键,光标回退⼀个字符,但不删除字符。

        • \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。

        • \n :换⾏符。

        • \r :回⻋符,光标移到同⼀⾏的开头。

        • \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。

        • \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。

下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式

        • \ddd :d d d表⽰1~3个⼋进制的数字。        如:        \130        表⽰字符X

        • \xdd :d d表⽰2个⼗六进制数字。        如:        \x30        表⽰字符0

        \0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其 ASCII码值是0.

#include <stdio.h>

int main()
{
    printf("%c\n", '\130');//130是8进制,转换成10进制是88,以88作为ASCII码值的字符
    printf("%c\n", '\x30');//x30中的30是16进制,转换成10进制是48,以48作为ASCII码值;

    return 0;
}

语句和语句分类

C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:

• 空语句

• 表达式语句

• 函数调⽤语句

• 复合语句

• 控制语句

空语句

空语句是最简单的,⼀个分号就是⼀条语句,是空语句。

#include <stdio.h>

int main()
{
   ;//空语句

    return 0;
}

空语句,⼀般出现的地⽅是:这⾥需要⼀条语句,但是这个语句不需要做任何事,就可以写⼀个空语 句。

表达式语句

表达式语句就是在表达式的后边加上分号。如下所⽰

#include <stdio.h>

int main()
{
   int  a = 0 ;

   int  b = 0;

   b = a + 10 ;//表达式

    return 0;
}

函数调⽤语句

函数调⽤的时候,也会加上分号,就是函数调⽤语句。

#include <stdio.h>

//求和自定义函数

int sub (int x , int y)

{

         return x+y;

}

int main()
{
   int  a = 20;

   int  b = 10;

   int ret = sub(a ,b);//函数调用语句

    return 0;
}

复合语句

复合语句其实就是代码块,成对括号{}中的代码就构成⼀个代码块,也被称为复合语句。

控制语句

控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语⾔有九种控制语句。

可分成以下三类:

        1. 条件判断语句也叫分⽀语句:if语句、switch语句;

        2. 循环执⾏语句:do while语句、while语句、for语句;

        3. 转向语句:break语句、goto语句、continue语句、return语句。

后期会给大家一一介绍控制语句的使用及意义。

本博客只为学习使用,如有错误请大家指出,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值