【C语言】2. C语言基础(上)



点击查看作者主页

一、main函数

  1. main函数是程序的⼊⼝。
  2. main函数有且仅有⼀个。
  3. 即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数。

第⼀次写代码,⼀些常⻅的错误需要注意:

  • 英文main 被写成了mian。
  • main后边的()漏掉了。
  • 代码中不能使⽤中⽂的括号(,)或句号(。)
  • ⼀条语句写完后,要有分号(;)

二、printf和库函数

printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏打印信息的。
例如:

printf("Hello world !");

运行结果:

这一行代码的含义就是打印出字符串Hello world!。

printf函数也可以⽤来打印其他类型的数据,⽐如:

int n = 100;
printf("%d\n", n);//打印整数
printf("%c\n", 'q');//打印字符
printf("%lf\n", 3.14);//打印双精度浮点数

括号里面的%d以及%c等等在这里都是占位符,表示的是后面值的类型,同时所处的位置都会被后边的值所替代。

printf函数就是包含在<stdio.h>这个头文件里面的,因此使用的时候需要在文件开头声明对应的头文件。如:#include<stdio.h>

那什么是库函数呢?
为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准库,这些函数也被称为库函数。

⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头文件。点击查看库函数

三、关键词

C语⾔中有⼀批保留名字的符号,⽐如: int 、 if 、 return等这些符号被称为保留字或者关键字。
关键词有以下注意事项:

  1. 关键字都有特殊的意义,是保留给C语⾔使⽤的。
  2. 程序员⾃⼰在创建标识符的时候是不能和关键字重复的。
  3. 关键字是不能⾃⼰创建的。

C语⾔的32个关键字如下:

数据类型控制语句存储类型其他
char:字符型for:常用循环语句aoto:声明自动变量const:声明只读变量
int: 整型do:与while结合构成do-while循环extern:声明变量volatile:变量可被隐含改变
float:单精度浮点型while:循环语句register:声明寄存器变量
double:双精度浮点型break:跳出当前循环static:声明静态变量
void:无类型continue:结束当前循环的本次迭代
short:短整型if:条件语句
long :长整型else:条件语句的否定分支
signed: 有符号类型goto:无条件跳转语句
unsigned: 无符号类型switch:多分支选择结构
struct:结构体类型case:switch语句中的分支
union:联合体类型default:switch语句中的其他分支
enum:枚举类型return :子程序返回语句
typedef:对数据类型取别名
sizeof:计算数据类型长度

注:在C99标准中还加⼊了 inlinerestrict_Bool_Complex_Imaginary等等关键字。点击查看关键词

四、字符和ASCII编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。
众所周知在计算机中所有的数据都是以⼆进制的形式存储的,而这些字符每一个都被定义了一个二进制序列,这个就叫做编码。

为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII 编码,C语⾔中的字符就遵循了 ASCII 编码的⽅式。

常见的ASCII码值如下:

  • 字符A~Z的ASCII码值对应 65 ~90
  • 字符a~z的ASCII码值对应 97 ~122
  • ⼤⼩写字符的ASCII码值的差值是32
  • 数字字符0~9的ASCII码值对应48 ~57
  • 换⾏ \n 的ASCII值对应10
  • ASCII码值对应0~31 的32个字符是不可打印字符,⽆法打印在屏幕上。

例如打印字符A,可以直接打印字符,也可以打印其ASCII码值,结果是相同的。

#include<stdio.h>

int main()
{
	printf("%c\n", 'A');
	printf("%c", 65);
	return 0;
}

运行结果:

打印全部字符(128个):

#include<stdio.h>

int main()
{
	for (int i = 0; i <= 127; i++)
	{
		printf("%c ", i);
		//一行打印16个字符
		if (i % 16 == 15)
		{
			printf("\n");
		}
	}
	return 0;
}

运行结果:

点击查看ASCII码表

五、字符串和\0

C语言中使⽤双引号括起来的⼀串字符就被称为字符串,如"abcdef"就是⼀个字符串。
字符串的换行符是%s,也可以直接打印字符串。

#include<stdio.h>

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

运行结果:

可以观察到打印的效果都是一样的。

注意:在字符串的末尾还隐藏着⼀个\0 ,这个\0 是字符串的结束标志。

例如我们要打印字符串abcdef:

#include<stdio.h>

int main()
{
	printf("abcdef");
	return 0;
}

运行结果:
在这里插入图片描述
可以观察到输出的结果是六个字符。

如果我们进行调试:

可以观察到字符串末尾确实还有一个字符‘\0’,但是它不会打印出来,只是作为结束标志。

C语言中也可以将⼀个字符串放在⼀个字符数组中,如下:

#include<stdio.h>

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

在这里插入图片描述

我们可以看到,数组arr1打印了 a b c 后还打印了⼀些随机值,这是因为 arr1 没有‘\0 ’作为结束标志,所以在打印的时候没有完全停⽌。而 arr2 打印的内容就是正常的,这是因为arr2中有’\0’作为结束标志。

如果在数组arr1末尾加上‘\0’作为结束标志就可以实现正常打印。如下:

#include<stdio.h>

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

在这里插入图片描述

可以看到三次打印的结果是⼀样的,字符串都是打印到 ‘\0‘ 的时候就停⽌了。

六、转义字符

在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。
⽐如:我们有字符 n ,在字符串中打印的时候⾃然能打印出这个字符。

#include<stdio.h>

int main()
{
	printf("abcndef");	
	return 0;
}

运行结果:
在这里插入图片描述
而使用转义字符后:

#include<stdio.h>

int main()
{
	printf("abc\ndef");
	return 0;
}

在这里插入图片描述

我们可以看到代码修改前后输出的结果是截然不同的。

其实这就是转义字符的作用,\n 这个转义字符是表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。
C语⾔中像这样的转义字符还有许多,点击查看转义字符

我们讲解下面这几种转义字符:

  • \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰八进制130所对应ASCII码值的字符:‘X’。
  • \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰十六进制30所对应ASCII码值的字符:‘O’。
  • 0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,用作字符串的结束标志,对应的ASCII码值是0。

代码如下:

#include<stdio.h>

int main()
{
	printf("%c\n", '\130');
	printf("%c", '\x30');
	return 0;
}

运行结果:
在这里插入图片描述

七、语句和语句分类

C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:
空语句,表达式语句,函数调⽤语句,复合语句,控制语句。

1、空语句

⼀个分号就是⼀条空语句。

#include<stdio.h>

int main()
{
	//空语句
	;
	return 0;
}

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

2、表达式语句

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

int main()
{
	int a = 20;
	int b = 0;
	b = a + 5; 
	return 0;
}

3、函数调用语句

就是调用函数的语句,后面也有分号。

#include<stdio.h>

int Add(int x, int y)
{
	return x + y;
}

int main()
{
	int ret = Add(2, 3);//函数调用语句
	printf("%d\n", ret);
	return 0;
}

4、复合语句

一对括号中的代码构成⼀个代码块,也被称为复合语句。

#include<stdio.h>

void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}//复合语句
}

int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i <= 10; i++)
	{
		arr[i] = 10 - i;
		printf("%d\n", arr[i]);
	}//复合语句
	return 0;
}

5、控制语句

控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选择结构、循环结构),C语⾔有九种控制语句。
可分成以下三类:

  1. 条件判断语句:if、switch。
  2. 循环语句:for、while、do while。
  3. 转向语句:break、goto、continue、return。

八、注释是什么?为什么写注释?

注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。
注释是给程序员⾃⼰,或者其他程序员看的。
好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。

1、注释的2种形式

C 语⾔的注释有两种表⽰⽅法。

1)/**/ 的形式

第⼀种⽅法是将注释放在 /* */ 之间
如下:

int main()
{
	printf("Hello world !")/*Hello world*/
	return 0;
}
int main()
{
	printf("Hello world !")
	/*
	Hello world
	*/
	return 0;

还要注意 /* 开始后,遇到第⼀个 */ 就认为注释结束了。

/*
printf("a ");
printf("b ");
printf("c "); /* 注释二 */
printf("d "); 

2) // 的形式

第⼆种写法是将注释放在双斜杠 // 后⾯,这是 C99 标准新增的语法。

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

但是不管是哪⼀种注释,都不能放在双引号⾥⾯。
双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,从而失去注释作⽤。

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

上⾯⽰例中,双引号⾥⾯的注释符号,会被视为普通字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值