C语言笔记---(2)基本语法

2024-08-23 20:17:36 浏览数 (2)

C语言的结构

一个C语言程序由若干个头文件与多个函数构成,每个函数有自己的功能,例如

C 代码:

代码语言:javascript复制
#include <stdio.h> //stdio.h就是头文件

int main(void) {    //从int到结尾这是主函数
  printf("Hello Worldn");
  return 0;
}
  • #include <stdio.h>是一条预处理命令, 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。
  • 函数个人理解为就是一小块写好的代码,是实现代码逻辑的一个小的单元

主函数

这里有一个主函数,主函数他是必不可少的,一个C程序有且只有一个主函数,即main函数。在最新的C标准中,main函数前的类型为int而不是void。

  • C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。
  • main前面的int就是主函数的类型。
  • printf()是格式输出函数,它的作用就是在屏幕上输出指定的消息。
  • return是函数的返回值,不同的函数会返回不同的值。

关键字

什么是关键字? 关键字,也叫作保留字。是指一些被C语言赋予了特殊含义的单词 关键字有什么特征?

全部都是小写

在开发工具中会显示特殊颜色 关键字需要注意什么? 关键字注意点: 因为关键字在C语言中有特殊的含义, 所以不能用作常量名、变量名、函数名以及其他标识符名称。


关键字

作用

auto

声明自动变量

break

跳出当前循环

case

开关语句分支

char

声明字符型变量或函数返回值类型

const

定义变量,如果一个变量被const修饰,那么它的值就不能再被改变,叫做常量

continue

结束当前循环,开始下一轮循环

default

开关语句中的“其他分支”

do

循环语句的循环体

double

声明双精度浮点型变量或函数返回值类型

else

条件语句否定分支(与if连用)

enum

声明枚举类型

exterm

声明变量或函数是在其他文件或本文件的其他位置定义

float

声明浮点型变量或函数返回值类型

for

一种循环语句

goto

无条件跳转语句

if

条件语句

int

声明整型变量或函数

long

声明长整型变量或函数返回值类型

register

声明寄存器变量

return

子程序返回语句(可以带参数,也可不带参数)

short

声明短整形变量或函数

signed

声明又符号类型变量或函数

sizeof

计算数据类型或变量长度(即所占字节数)

static

声明静态变量

struct

声明结构体类型

switch

用于开关语句

typedef

用以给数据类型取别名

unsigned

声明无符号类型变量或函数

union

声明共用体类型

void

声明函数无返回值或无参数,声明无类型指针

volatile

说明变量在程序执行中可被隐含地改变

while

循环语句的循环条件


标识符

什么是标识符?

C语言由函数构成,一个C程序中会有很多个函数,为了更好的区分这些函数,所以给每一个函数起一个名字,这个名字就是标识符。

标识符的命名规则

只能由字母、数字、下划线组成

第一个字符必须是字母或下划线,不能以数字开头

不能是C语言中的关键字

严格区分大小写字母

标识符最好选择有意义的英文单词组成,不要使用拼音。

标识符的长度最好不要超过8位,在某些版本中规定标识符前8位有效,如果你的两个标识符前8位相同时,就会被认为时同一个标识符。


变量

变量是计算机中一块特定的内存空间由一个或多个连续的字节组成。 C语言的代码由一行行语句组成。语句就是程序执行的一个操作命令。C语言规定,语句必须使用分号结尾,除非有明确规定可以不写分号。

text 代码:

代码语言:javascript复制
int Number = 1;

语句

C语言的代码由一行行语句组成。语句是程序执行的一个操作命令。每个语句必须使用分号结尾,除非由明确规定可以不写分号。

C 代码:

代码语言:javascript复制
int Number = 1;

这就是一个变量声明语句,声明整形变量Number,并给他赋值为1。 同一行可以写多个语句,换行只是方便阅读,并不是必须的。

C 代码:

代码语言:javascript复制
int Number;Number = 1;

一个语句也可以写在很多行,这个时候就需要依靠分号来判断语句是在哪一行结束的。

C 代码:

代码语言:javascript复制
int Number;
Number
=
1
;

在这里编译器在编译时会自动忽略代码中的换行。 单个分号也是一个有效语句,被称为“空语句”,但是他毫无作用。


表达式

C语言的计算是通过表达式完成的。表达式是一个计算式,用来获取值。

C 代码:

代码语言:javascript复制
1 2

在这个地方的1 2就是一个表达式,用来获取1 2这个算术的计算结果。 在表达式后加上分号,也是语句,但是没有作用。 表达式与语句的主要区别:

语句包含表达式,但是表达式本身不构成语句

表达式都是又返回值的,语句不一定有。语句是用来执行命令的,一般不需要返回值。

语句块(函数体)

C语言允许多个语句使用一对大括号{},组成一个块,也称为复合语句。在语法上,语句块可以视为多个语句组成的一个复合语句。它使用大括号把许多语句和声明组合到一起,形成单条语句。

C 代码:

代码语言:javascript复制
{
  int Number;
  Number = 1;
}

上面中一个大括号(花括号)形成了一个语句块,大括号的结尾不需要添加分号。

空格

C语言中的空格主要是用来帮助编译器区分语法单位的。如果语法单位不需要空格就可以被区分,那么就不需要空格,只是为了让程序员更容易观看,增加可读性。

C 代码:

代码语言:javascript复制
int Number = 1;
// 等于
int Number=1;

在代码中,语法单位之间的多个空格等于一个空格。

C 代码:

代码语言:javascript复制
int Number    =       1;

空格还可以用来表示缩进,一般情况下一级代码比上一级代码缩进四个空格。 只有空格的一行代码被称为空白行,编译器会直接忽略掉这行代码。


注释

注释是对代码进行解释说明,编译器不会读取,只是给程序员看的。 C语言有两种注释方法,第一种:

C 代码:

代码语言:javascript复制
/*这是一段注释*/
/*
  被他包含起来就可以
*/

这是第一种注释,他可以穿插在代码行中

C 代码:

代码语言:javascript复制
int Number/*这是注释*/ = 1;

第二种:

C 代码:

代码语言:javascript复制
// 这是第二种注释
int Number = 1;

第二种注释是将注释内容放到//的后面,从双斜杠后面一直到这一行结束都属于注释。可以将他放到第一行或者某一行的行尾。 不管是哪种注释都不能放到双引号""编译器在编译时,会将双引号里的注释字符视为普通字符,不存在注释的作用。

C 代码:

代码语言:javascript复制
#include<stdio.h>
int main()
{
  printf("/*我是注释*/Hello,world");
  return 0;
}

这段代码编译后运行,会输出:

C 代码:

代码语言:javascript复制
/*我是注释*/Hello,world

printf()

基本用法

printf()的作用是将指定的参数文本输出到屏幕上。printf()是在标准库的头文件stdio.h定义的。使用这个函数之前,必须在源码文件头部引入这个头文件。只有在源码头部加上#include <stdio.h>,才能使用printf()这个函数。

C 代码:

代码语言:javascript复制
#include <stdio.h>

int main(void) {
printf("Hello Worldn");
}

上面的命令会在屏幕上输出一行文字:Hello World


占位符

printf()可以在输出的文本中指定占位符。占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号。

C 代码:

代码语言:javascript复制
//输出Are these 2 paragraphs?
printf("Are these %i paragraphs?", 2);

从这个示例看,Are these %i paragraphs?是输出文本,其中的%i就是占位符,它占住了这个位置。可以用别的值来替换,在双引号后的2就是要替换的值。占位符的第一个字符都是%,第二个字符是表示占位符的类型,这里是ii代表整数,是int的首字母。编译后输出的结果为:Are these 2 paragraphs? 一段输出文本中可以使用很多个占位符。

C 代码:

代码语言:javascript复制
printf("My name is %s. I'm %i years old", "Joe", 18)

下面是常用占位符 • %a:浮点数。 • %A:浮点数。 • %c:字符。 • %d:十进制整数。 • %e:使用科学计数法的浮点数,指数部分的e为小写。 • %E:使用科学计数法的浮点数,指数部分的E为大写。 • %i:整数,基本等同于%d。 • %f:小数(包含float类型和double类型)。 • %g:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e为小写。 • %G:等同于%g,唯一的区别是指数部分的E为大写。 • %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 类型。 • %Le:科学计数法表示的 long double 类型浮点数。 • %Lf:long double 类型浮点数。 • %n:已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。 • %o:八进制整数。 • %p:指针。 • %s:字符串。 • %u:无符号整数(unsigned int)。 • %x:十六进制整数。 • %zd:size_t类型。 • %%:输出一个百分号。


输出格式

printf()可以定制占位符的输出格式

(1)限定宽度

printf允许限定占位符的最小宽度。

C 代码:

代码语言:javascript复制
printf("]n", 123); // 输出为 "  123"

在上面的示例中,]表示这个占位符的宽度最少是5位,如果不满的话,对应的值也就是123会添加空格补齐。 输出的值默认是右对齐,如果希望改成左对齐,需要在占位符%的后面家一个-号。 printf("%-5dn", 123); // 输出为 "123 " 上边的示例中,输出内容123后边会加两个空格,因为他是左对齐。 如果你输出的是小数的话,这个字符会限制所有数字的最小显示宽度。

C 代码:

代码语言:javascript复制
// 输出 "  123.450000"
printf("fn", 123.45);

上面示例中,f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45输出结果的头部会添加2个空格。

(2)总是显示正负号

默认情况下,printf()正数不显示 号,只对负数显示-号。如果想让正数也`输出 号,可以在占位符的%后面加一个 。

C 代码:

代码语言:javascript复制
printf("% dn", 12); // 输出  12
printf("% dn", -12); // 输出 -12

上面示例中,% d可以确保输出的数值总是带有正负号。

(3)限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成%.2f

C 代码:

代码语言:javascript复制
// 输出 Number is 0.50
printf("Number is %.2fn", 0.5);

上面示例中,如果希望小数点后面输出3位(0.500),占位符就要写成%.3f

(4)输出部分字符串

%s占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用%.[m]s指定输出的长度,其中[m]代表一个数字,表示所要输出的长度。

C 代码:

代码语言:javascript复制
// 输出 hello
printf("%.5sn", "hello world");

上面示例中,占位符%.5s表示只输出字符串“hello world”的前5个字符,即“hello”。


标准库、头文件

在C程序的编写过程中,有些功能不一定非要自己写,C语言本身已经自带了不少了,我们只要直接调用就好了。比如最常用到的printf()这个函数就是C语言自带的。 C语言自带的所有这些功能,都统称为“标准库”,因为他们是写入标准的,都是被规定好的。这样保证了代码的规范性和可移植性。 不同的功能定义在不同的文件里,这些文件被叫做“头文件”。如果系统自带某一个功能,就一定还会带描述这个功能的头文件,比如printf()的头文件就是系统自带的stdio.h头文件的后缀一般为.h 如果要使用某个功能,就必须要先加载对应的头文件,加载使用的命令是#include。这就是我们为什么要在使用printf()之前,必须先要加载stdio.h的原因了。

0 人点赞