C语言入门基础知识

本文介绍了C语言的基础知识,包括其与编程语言的关系、编译原理、源文件与头文件、main函数的作用、库函数的使用、数据类型(整型、字符型、浮点型)以及printf和scanf函数的基本用法。通过学习这些内容,读者可以初步理解C语言并准备进一步探索。
摘要由CSDN通过智能技术生成

       Hello! 博友们,进入大学编程语言的学习,很多同学肯定都是从C语言入手,那么C语言究竟是什么样的语言呢?今天就让我来介绍一下吧!

1.对C语言本身的理解

       提及代码与编程语言,很多小白可能都会不由自主地认为这是一门很高级的技术,自己估计学不会,从而产生了一丝畏难之心。实际上,和汉语、英语、⽇语一样,C语⾔也是一门语言,只不过,前者属于人与人日常交流的自然语言,而C语⾔则属于众多计算机语⾔中的⼀种,用于人与计算机的交流。当然, C++/Java/Go/Python 也是主流的计算机语⾔。

2.C语言的程序运行原理

        C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器编译和链接器的链接后,可执⾏⽂件才能执⾏。 如下图所示,演示了源程序经过编译器和链接器处理的过程。

        1. 每个源⽂件(.c)单独经过编译器处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件)
        2. 多个⽬标⽂件和库⽂件经过链接器处理⽣成对应的可执⾏程序(.exe⽂件)

3.源文件与头文件的介绍

C语⾔把 .c   为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。
在VS上写代码,我们是需要创建项⽬的,直接右击源文件添加新建项即可。

4.写第一个C语言程序

Hello C language !!!

按住 ctrl+f5 执行(笔记本电脑 ctrl+fn+f5)

恭喜你!编好了第一个C语言程序!

5.main函数

每个 C 语⾔程序不管有多少行代码,都是从 main 函数开始执行的, main 函数是程序的入口, main 函数也被叫做:主函数。 main 前⾯的 int 表示 main 函数执⾏结束的时候返回⼀个整型类型的值,所以在 main 函数的最后写  “ return 0; ” 正好前后呼应。

main函数是程序的⼊⼝
main函数有且仅有⼀个
即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)
易错点 总结:
main 被写成了mian
main后边的()漏掉了
main()后面多加了分号

6.库函数

        为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函数其他编译器不⼀定⽀持)。
        上图中 #include<stdio.h>  就是库函数,其中包含了 printf  
        printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上面的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给 printf 函数就可以打印。

7.关键字介绍

  • void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
  • char:字符型类型数据,属于整型数据的一种
  • int:整型数据,通常为编译器指定的机器字长
  • float:单精度浮点型数据,属于浮点数据的一种
  • double:双精度浮点型数据,属于浮点数据的一种
  • short:修饰int,短整型数据,可省略被修饰的int。
  • long:修饰int,长整形数据,可省略被修饰的int。
  • signed:修饰整型数据,有符号数据类型
  • unsigned:修饰整型数据,无符号数据类型
  • struct:结构体声明
  • union:共用体声明
  • enum:枚举声明
  • typedef:声明类型别名
  • sizeof:得到特定类型或特定类型变量的大小
  • auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
  • static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
  • register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
  • extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用“
  • const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
  • volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
  • return:用在函数体中,返回特定值(或者是void值,即不返回值)
  • continue:结束当前循环,开始下一轮循环
  • break:跳出当前循环或switch结构
  • goto:无条件跳转语句
  • if:条件语句
  • else:条件语句否定分支(与if连用)
  • switch:开关语句(多重分支语句)
  • case:开关语句中的分支标记
  • default:开关语句中的“其他”分支
  • for:for循环结构
  • do:do循环结构
  • while:while循环结构

8.数据类型

        C语⾔提供了丰富的数据类型来描述⽣活中的各种数据:使⽤整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数
        每⼀种数据类型都有自己的⻓度,使⽤不同的数据类型,能够创建出长度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。

上图为C语言数据类型概述图

1.整型

      整型的定义符是 int ,整型有两个空间大小修饰符 short 和 long 。 short int 称为短整型,占有2字节; long int 称为长整型,占有4字节。在 VS 环境中, long 是缺省的长度修饰符,所以 int 等价于 long int 。
        整型有两个符号位修饰符 signed 和 unsigned 。 signed int 表示有符号整数, unsigned int 表示无符号整数。 signed 是缺省的符号位修饰符,所以 int 也等价于 signed int 。由于类型修饰符及默认的书写格式,使得整型的表现形式变化较多,实际上,整型共分为4类:有符号的长整型、无符号的长整型、有符号的短整型、无符号的短整型。

2.字符型

        字符型的定义符是 char ,字符数据在内存中占用1字节,存储的是字符的 ASCII 值。如' a '~' z '的码值是97~122,' A '~' Z '的码值是65~90,'0'~'9'的码值是48~57。常见字符与 ASCII 代码对照表参照ASCll码表。和整型相似,字符类型的修饰符有 signed 、 unsigned ,具体类型分为 signed char (有符号字符型)和 unsigned char (无符号字符型)。 signed 是缺省修饰符,所以 char 等价于 signed char . unsigned char 型采用二进制数据形式存储字符码值,码值范围是0~255。 signed char 型采用补码形式存储字符的码值,将最高位作为符号位,码值范围是-128~127。实际上,就简单字符处理而言,unsigned char 与 signed char 基本没有差别。

3.浮点型

        浮点型又叫实型,分为单精度实型和双精度实型。单精度实型的定义符是 float ,占用4字节;双精度实型的定义符是 double ,占用8字节。在内存中,实型数据被分成符号位(1位)、小数部分、指数部分,按指数形式存储。其中小数部分和指数部分的位数由具体的编译系统决定。显然,小数部分位数越多,数据精度就越高;指数部分位数越多,数据范围就越大。

4.sizeof操作符

sizeof 是⼀个关键字,也是操作符,专⻔是用来计算sizeof操作符数的类型长度的,单位是字节。
sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
格式如下:
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。
注意:
sizeof 运算符的返回值,C 语⾔只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是 unsigned long ,甚至是 unsigned long long , 对应的 printf() 占位符分别是 %u %lu %llu , 这样不利于程序的可移植性。 C 语言提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表示  sizeof 的返回值类型,对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是 unsigned long long 。

9.变量

变量的创建方法:

变量在创建的时候就给⼀个初始值,就叫初始化

注意:在定义float类型时,小数后面要加f,否则默认为double类型 float a=8.3f;

10.单目操作符

         +  -  *  \  % (加减乘除取模) 都是常见的双目操作符,顾名思义,操作符两端都有操作数,在此重点探讨一下单目操作符的用法。
        单目操作符分为 ++ -- ,两者又分为前置和后置。

1.前置++

计算⼝诀: 先+1,后使用

我们来看一下结果:

2.后置++

计算⼝诀: 先使用,后+1

我们来看一下结果:

你明白二者的区别了吗?(前置--和后置--同理)

11.printf 函数

1.printf中的占位符

所谓 “占位符”,就是这个位置可以⽤其他值代入,例:

        上面示例中,The robot has %d functions 是输出文本,里面的 %d 就是占位符,表示这个位置要用其他值来替换。占位符为百分号 % ,  %d 表示这里代入的值必须是⼀个整数。
printf() 的第⼆个参数就是替换占位符的值,上⾯的例⼦是整数 11  替换 %d  , 执行后的输出结果就是 The robot has 11 functions 。
       常用的占位符除了 %d ,还有 %s 表示代入的是字符串,例:
上面实例中, %s 表示代⼊的是⼀个字符串,所以 printf() 的第⼆个参数就必须是字符串,在这个例子是 Falcon 。执行后的输出就是 Falcon says he  will come tonight
输出文本里面可以使用多个占位符,例:

        上⾯示例中,输出文本 %s says he will come at %d o'clock 有两个占位符,第⼀个是字符串占位符 %s ,第⼆个是整数占位符 %d ,分别对应 printf() 的第⼆个参数( Falcon )和第三个参数 (11)。执行后的输出就是 Falcon  says he will come  at 11 o'clock
        printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。

2.常见占位符:

        %c :字符。
        %d :⼗进制整数。
        %f :小数(包含 float 类型和 double 类型)。  
         %Lf :long double 类型浮点数。
         %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
         %o :⼋进制整数。
         %p :指针。
         %s :字符串。
         %u :⽆符号整数(unsigned int)。
         %x :⼗六进制整数。
         %zd size_t 类型。
         %% :输出⼀个百分号。
        %hd :⼗进制 short int 类型。
        %ho :⼋进制 short int 类型。
         %hx :⼗六进制 short int 类型。
         %hu :unsigned short int 类型。
         %ld :⼗进制 long int 类型。
         %lo :⼋进制 long int 类型。
         %lx :⼗六进制 long int 类型。
         %lu :unsigned long int 类型。
         %lld :⼗进制 long long int 类型。
         %llo :⼋进制 long long int 类型。
         %llx :⼗六进制 long long int 类型。
         %llu :unsigned long long int 类型。

3.限定宽度

printf() 允 许限定占位符的最小宽度,例:

      
        上面示例中, %6d 表示这个占位符的宽度至少为6位。如果不满6位,对应的值的前面会添加空格。输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入⼀个 -  号。
        而对于小数,这个限定符会限制所有数字的最小显示宽度,例:
        上面示例中, %12f 表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以 543.21  输出结果的头部会添加2个空格。

4.限定小数位数

        输出小数时,有时要限定小数的位数。例:希望小数点后面保留三位,占位符可以写成 %.3f 

12.scanf 函数

当我们有了变量,我们需要给变量输⼊值就可以使⽤ scanf 函数

1.基本用法

        scanf() 函数用于读取用户的键盘输⼊。程序运行到这个语句时,会停下来,等待用户从键盘输⼊。用户输⼊数据、按下回车键后,scanf() 就会处理用户的输⼊,将其存⼊变量。
        它的原型定义在头文件 stdio.h ,语法跟 printf() 类似。
         scanf( " %d ", &i );
注意:变量前面必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,而是地址,
即将变量 i 的地址指向用户输⼊的值。

2.占位符

scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。
%c :字符
%d :整数
%f float 型浮点数
%lf double 型浮点数
%Lf long double 型浮点数
%s :字符串
上面所有占位符之中,除了 %c 以外,都会自动忽略起首的空白字符 %c 不忽略空白字符,总是返回当前第⼀个字符,无论该字符是否为空格。如果要强制跳过字符前的空白字符,可以在   %c 加上⼀个空格,表示跳过零个或多个空白字符。

13.结语

        亲爱的同学们,你们学会了吗?了解完C语言入门基础知识之后,我们就正式敲开了C语言世界的大门了。接下来的博客,我会将C语言下面章节的重难点和易错点分享给大家,以便大家更深入地理解和应用!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值