C语言——基础语法

1、基本语法

1.1、语句

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

int x = 1; //声明整数变量x,并变量x的值设置为1

多个语句可以写在一行。一个语句也可以成多行,这时就要依靠分号判断语句在哪一行结束

int x; x = 1;//多个语句写在同一行

//一个语句写在多行
int x;
x
=
1
; //需要依靠分号来判断语句在哪一行结束

单个分号也是有效语句,称为“空语句”,没有实际作用。

1.2、表达式

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

1 + 2 //这就是一个表达式,用来获取 1+2 这个算式的结果

表达式与语句的区别:

  • 语句可以包含表达式,但是表达式本身不构成语句。
  • 表达式都有返回值,语句不一定有。因为语句用来执行某个命令,很多时候不需要返回值,比如变量声明语句int x = 1就没有返回值。

1.3、语句块

C 语言允许多个语句使用一对大括号{},组成一个块,也称为复合语句。在语法上,语句块可以视为多个语句组成的一个复合语句

//下面示例中,大括号代表一个语句块,大括号结尾不需要添加分号
{
	int x;
	x = 1;
}

1.4、空格

C 语言里面的空格,主要用来帮助编译器区分语法单位。如果语法单位不用空格就能区分,空格就不是必须的,只是为了增加代码的可读性。

int x = 1;
// 等同于
int x=1;

语法单位之间的多个空格等同于单个空格。

int    x =     1;
// 等同于
int x = 1;

空格还用来表示缩进。多层级的代码有没有缩进,其实对于编译器来说并没有差别。强调代码缩进,只是为了增强代码可读性,便于区分代码块。大多数 C 语言的风格要求是,下一级代码比上一级缩进4个空格。

// 缩进四个空格
if (x > 0)
    printf("positive\n");
// 缩进两个空格
if (x > 0)
  printf("positive\n");

只包含空格的行被称为空白行编译器完全忽略该行。

1.5、注释

注释对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。

C语言的注释有两种表示方法:

第一种方法是将注释放在/*...*/之间,内部可以分行。

/* 注释 */
/*
  这是一行注释
*/

这种注释可以插在行内。

int open(char* s /* file name */, int mode);
// 上面示例中,/* file name */用来对函数参数进行说明,跟在它后面的代码依然会有效执行。

第二种写法是将注释放在双斜杠//后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾。

// 这是一行注释
int x = 1; // 这也是注释

不管是哪一种注释,都不能放在双引号里面。双引号里面的注释符号,会成为字符串的一部分,解释为普通符号,失去注释作用。

printf("// hello /* world */ ");

1.6、printf()

1.6.1、基本用法

printf()的作用是将参数文本输出到屏幕。它名字里面的f代表format(格式化),表示可以定制输出文本的格式。

printf("Hello World"); //该命令会在屏幕上输出一行文字“Hello World”

printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n

printf("Hello World\n");// 输出“Hello World”后换行

printf("Hello\nWorld\n");// 输出“Hello”后换行输出“World”再换行

printf()是在标准库的头文件stdio.h定义的。使用这个函数之前,必须在源码文件头部引入这个头文件。

#include <stdio.h>
int main(void){
  	printf("Hello World\n");
}

1.6.2、占位符

printf()可以在输出文本中指定占位符。所谓“占位符”,就是这个位置可以用其他值代入。

//输出 这里有3个苹果
printf("这里有%i个苹果\n", 3);// %i 表示这里代入的值必须是一个整数。

1.6.3、常用占位符

  • %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:十六进制整数
  • %zdsize_t类型
  • %%:输出一个百分号

1.6.4、输出格式

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

  1. 限定宽度

    //默认输出
    printf("%5d\n", 123); // 输出为 "  123"
    
    //左对齐输出
    printf("%-5d\n",123);// 输出为"123  "
    

    整数:%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出默认右对齐,如果希望改为左对齐,可以在占位符的%后面插入一个-号。

    printf("%12f\n", 123.45);// 输出 "  123.450000"
    

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

  2. 总是显示正负号

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

    printf("%+d\n", 12); // 输出 +12
    printf("%+d\n", -12); // 输出 -12
    
  3. 限定小数位数

    希望小数点后面只保留两位,占位符可以写成%.2f

    printf("%.2f\n", 1.4);// 输出 "1.40"
    
    //与限定宽度占位符,结合使用
    printf("%6.2f\n", 1.4);// 输出为 "  1.40"
    
  4. 输出部分字符串

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

    printf("%.5s\n", "hello world");// 输出 hello
    

2、变量

变量可以理解成一块内存区域的名字。通过变量名,可以引用这块内存区域,获取里面存储的值。由于值可能发生变化,所以称为变量,否则就是常量了

2.1、变量名

变量名在C语言里面属于标识符,命名有严格的规范:

  • 只能由字母(包括大写和小写)、数字和下划线(_)组成
  • 不能以数字开头
  • 长度不能超过63个字符

2.2、变量的声明

C语言的变量,必须先声明后使用。如果一个变量没有声明,就直接使用,会报错。每个变量都有自己的类型。声明变量时,必须把变量的类型告诉编译器。

int height; //声明了一个int类型的变量 height

如果几个变量具有相同类型,可以在同一行声明。

int height, width;
// 等同于
int height;//声明变量的语句必须以分号结尾
int width;

2.3、变量的赋值

C 语言会在变量声明时,就为它分配内存空间,但是不会清除内存里面原来的值。这导致声明变量以后,变量会是一个随机的值。所以,变量一定要赋值以后才能使用。

int num;//声明了一个整型变量
num = 42;//将数值42赋值给变量num

//多个相同类型变量的赋值,可以写在同一行
int x = 1, y = 2;

2.4、变量的作用域

作用域指的是变量生效的范围。C语言的变量作用域主要有两种:

  • 文件作用域:在源码文件顶层声明的变量,从声明的位置到文件结束都有效

    int x = 1;
    int main(void) {
      printf("%i\n", x);
    }
    
  • 块作用域:由大括号({})组成的代码块,它形成一个单独的作用域。凡是在块作用域里面声明的变量,只在当前代码块有效,代码块外部不可见。

    int a = 12;
    if (a == 12) {
      int b = 99;
      printf("%d %d\n", a, b);  // 12 99
    }
    printf("%d\n", a);  // 12
    printf("%d\n", b);  // 出错
    
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值