初识C语言—C语言基础
中文,英语,法语…是人与人之间交流的基本自然语言,那么在计算机中交流的语言就是计算机语言。目前已知的已有上期千种计算机语言,计算机语言可以使计算机工作,以满足大家的需求, C语言 就是众多计算机语言其中一种。
include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
1. main函数
- main函数是程序的入口,C语言程序无论有多少行,都是从main函数开始执行,所以main函数又称为 主函数 。
main
函数前面的int
表示main
函数执行后返回一个整型类型的值,正好与结尾的return 0
呼应mian
函数是程序的入口;mina
函数有且只有一个;- 即使有多个
.c
文件(在一个项目中),因为程序的入口只有一个,所以只能有一个main
函数;
- 关于
main
函数的常见错误总结main
函数写成mian
;main
后边的()漏掉了;- 代码中不能使用中文符号,如:括号和分号等;
- 一段语句结束后,要添加分号;
2.printf
函数和库函数
printf
函数
printf("Hello World!\n");
printf
的作用是实现屏幕上的信息打印
printf
函数是一个库函数,它的功能是在标准输出设备(常指屏幕)上打印(输出)信息。上面的代码是打印了一串字符串。只要把想要打印的内容放在双引号内传递给printf
即可打印输出。
printf
当然也可以打印其他类型的数据。例如
include <stdio.h>
int main()
{
int n = 100;
printf("%d\n",n);//整型
printf("%c\n",'q');//字符型
printf("%lf\n",3.14);//双精度浮点型
return 0;
}
这里的%d,%c,%lf属于占位符,会被后面的值替换。
- 库函数
- 为了提高程序员的开发效率,避免一些重复功能代码的出现,C语言标准规定了一些函数,这些函被提前实现组成了一个函数库,被称为 标准函数库 ,简称 库函数 内置到编译器上给程序员使用 。不同的编译器厂商可能会在此基础上扩展部分函数。
- 想要使用这些库函数就必须声明,需要包含对应的头文件,如:想要使用
printf
函数就需要声明#include <stdio.h>
。
3.关键字
- C语言中有一些有意义的关键符号,如:
int
,if
,reurn
等,这些符号被称为保留字或关键字- 关键字在程序中有特殊意义,是保留给C语言使用的;
- 在编程过程中自己创建标识符时是不能和关键字重复的;
- 关键字同时页不能自己创建;
- 常见的**关键字** 有 32个:
关键字 | 功能说明 |
---|---|
auto | 声明自动变量 |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 声明字符型变量或函数返回值类型 |
const | 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变 |
continue | 结束当前循环,开始下一轮循环 |
default | 开关语句中的"其它"分支 |
do | 循环语句的循环体 |
double | 声明双精度浮点型变量或函数返回值类型 |
else | 条件语句否定分支(与 if 连用) |
enum | 声明枚举类型 |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
float | 声明浮点型变量或函数返回值类型 |
for | 一种循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 声明整型变量或函数 |
long | 声明长整型变量或函数返回值类型 |
register | 声明寄存器变量 |
return | 子程序返回语句(可以带参数,也可不带参数) |
short | 声明短整型变量或函数 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
static | 声明静态变量 |
struct | 声明结构体类型 |
switch | 用于开关语句 |
typedef | 用以给数据类型取别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 声明函数无返回值或无参数,声明无类型指针 |
volatile | 说明变量在程序执行中可被隐含地改变 |
while | 循环语句的循环条件 |
注意:在C99标准中加入了inline
,restrict
,_Bool
,_Complex
,_Imaginary
等关键字。
4.ASCII编码
- 我们在键盘上敲出的各种字符,如:@,#,¥,%,a,b,c等,都被称为字符(在C语言中一般都用单引号‘’括起来)
- 计算机中的所有数据是以二进制的方式储存的,为了储存这些字符,美国国家标准协会(ANSI)出台了一个标准**ASCII编码**,C语言就遵循了ASCII 编码的方式 ,如下表:
- 学习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时不可打印的
5.字符串与\0
- 在C语言中,使用双引号括起来的一串字符被称为字符串,例如:“wwm”。字符串的打印格式可以用%s来指定,当然也可以直接打印:
#include <stdio.h>
int main(){
printf("%s\n","hello world");//%s指定
printf("hello world\n");//直接打印
return 0;
}
注意:\0
是一个很特别的字符,就是在字符串的末尾会隐藏放一个\0
,表示字符串结束的标志 (不管你有没有输入)。
- 我们输入的是:h,e,l,l,o,w,o,r,l,d
,但实际上是h,e,l,l,o,w,o,r,l,d,\0
.
- \0
是字符串结束的标志,所以我们在使用库函数printf`()``打印字符串和
strlen()``计算字符串长度时,遇到\0
就会自动停止。
- 将一个字符串放到一个字符数组中,以便于我们来验证一下
\0
的功能
#include <stdio.h>
int main(){
char arr1[] = {'a','b','c'};
char arr2[] = {"abc"};
printf("%s\n",arr1);
printf("%s\n",arr2);
return 0;
}
-我们可以看到,打印arr1字符数组的时候,打印a,b,c后还打印了一些随机值,这就是因为arr1结尾没有\0
字符作为结束标志的原因。可以看到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
就停止了。
6.转义字符
- 前面我们看到的
\0
,\n
可能会很疑惑,其实这些字符都是 转义字符 顾名思义:就是转变原来的意思的字符。比如:- 一串字符串中有n
#include <stdio.h>
int main(){
printf("abcndef");
return 0;
}
- 如果我们在n
前面加上\
:
#include <stdio.h>
int main(){
printf("abc\ndef");
return 0;
}
前后输出代码不一致,这就是转义字符导致的结果,\n
就是一个表示换行的转义字符
- C语言中转义字符大概有以下这些:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符"" | 092 |
\’ | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xdd | 十六进制所代表的任意字符 | 十六进制 |
注意:最后两种转义字符是8进制和16进制的表示形式
7.语句和语句分类
- C语言的代码是有一条一条的语句构成的,C语言的语句分为以下五类:
- 空语句
- 表达式语句
- 函数调用语句
- 复合语句
- 控制语句
1.空语句
- 一个分号就是一条语句
#include <stdio.h>
int main() {
;//空语句
return 0;
}
2.表达式语句
- 表达式语句就是在表达式后面加上分号
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
b = a + 3;//表达式语句
return 0;
}
3.函数调用语句
- 函数调用的时候同样会加分号,这就是函数调用语句。
#include <stdio.h>
int Add(int x, int y) {
return x + y;
}
int main() {
int ret = Add(2, 3);//函数调用语句
printf("%d",ret);
return 0;
}
4.复合语句
- 成对括号中的代码就构成一个代码块,也被称为复合语句
#include <stdio.h>
int main() {
int score = 85;
// 如果分数大于60,执行复合语句
if (score > 60) {
// 这是一个复合语句
{
int level = 'A'; // 在复合语句内部声明的变量
printf("分数是 %d,等级是 %c\n", score, level);
}
}
return 0;
}
5.控制语句
- 控制语句用于控制程序的执行流程,实现程序的各种结构化方式。其中C语言支持三种结构:顺序结构,选择结构,循环结构,所以C语言有九种控制语句。
类别 | 语句 |
---|---|
条件语句(分支语句) | if语句,switch语句 |
循环语句 | do-while语句,while语句,for语句 |
转向语句 | break语句,goto语句,continue语句,return语句 |
8.注释
- 注释是对程序的说明,编译器会自动忽略掉,对代码不产生影响。
- 注释是帮助自己和别人理解代码的有利方式
- 注释的方法有两种:
1./*式注释
/* 注释 */
/*
这是一行注释
*/
int arr1/*注释也可以夹在行内*/[] = {0};
2.//式注释
int a = 0;//注释
注意:
- 无论是哪种注释都不能放在双引号内,因为可能会成为字符串的一部分,从而失去注释作用。
- 编译时,注释会被替换成一个空格