目录
C语言是啥?
C语言是计算机语言的一种,人可以通过计算机语言写程序,让计算机工作,解决问题。
C语言的历史:
C语言最初作为Unix系统的开发工具而发明。
我选择的编译器VS2022
C语言源代码放在.c为后缀的文件中,要通过编译器翻译和链接器链接,生成二进制可执行文件,该文件才可执行。
一个工程一般都会有多个源文件组成,每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件),多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)。
我选择VS2022集成开发环境,是因为其包含了编辑器+编译器+调试器,优点大于缺点,则取之。当然,大家也可以根据自己的需求,选择不同的开发环境,例如XCode(苹果电脑的开发工具),CodeBlocks,DevC++(一些竞赛使用)...
在VS上写代码,先创建新项目,后创建空项目,在进行配置新项目,在项目中可以在源文件内和头文件内添加新建项,源文件后缀为.c,头文件后缀为.h。
写第一个C语言程序
#include<stdio.h>
int main()
{
printf("Hello C\n");
return 0;
}
用快捷键Ctrl+f5,则可以在VS2022上运行结果。
常见的概念:
(1)main函数
main函数是程序的入口,也叫主函数,有且仅有一个,即使一个项目中有多个.c文 件,也只能有一个main函数,因为程序入口只有一个。
main前面的 int 表示main函数执行结果时返回一个整型类的值,所以在main函数的 最后写return 0,正好对应。
(2)printf和库函数
printf:
printf函数实现代码在屏幕上的信息的打印。printf是一个库函数。
#include<stdio.h>
int main()
{
printf("Hello C\n");
int n = 100;
printf("%d\n",n);//打印整型
printf("%c\n", 'q');//打印字符
printf("%lf\n", 3.14);//打印双精度浮点型
return 0;
}
用库函数时,要包含头文件,例如printf函数需要包含stdio.h这个头文件。如下:
#include<stdio.h>
库函数:
为了不再重复实现常见代码,提高效率,C语言标准规定了一组函数,这些函数组成 了函数库,称为标准库,这些函数称为库函数。在这个基础上一些编译器厂商可能 会额外扩展提供部分函数(这些函数其他编译器不一定支持)。
一个系列的库函数一般会声明在同一个头文件中,所以库函数的使用,要包含对应 的头文件。参考链接:https://cplusplus.com/reference/clibrary/
(3)关键字介绍
C语言有一批保留的名字的符号,称为保留字或关键字。值得注意的是,其都有特殊意义,保留给C语言用;程序员在创建标识符时不能和关键字重复;关键字也不能自己创建。
C语言使用最多的32个关键字如下:
(4)字符和ASCII编码
字符:
ASCII编码:
数据在计算机内存中要以二进制形式存储,则每个字符要被编一个二进制序列,叫做编码,为了提高效率,美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C语言中的字符就遵循ASCII编码的方式。
参考:https://zh.cppreference.com/w/cpp/language/ascii,使用时查看即可。需掌握的如下:
1.字符A~Z的ASCII码值从65~90
2.字符a~z的ASCII码值从97~122
3.对应大小写字符如a和A的ASCII码值差值为32
4.数字字符0~9的ASCII码值从48~57
5.换行\n的ASCII码值是:10
6.从0~31这32个字符是不可打印字符,无法在屏幕上观察。
单个字符打印可以使用%c来指定格式:
#include<stdio.h>
int main()
{
printf("%c\n", 'Q');
printf("%c\n", 81);//81是字符Q的ASCII码值,可以正常打印
return 0;
}
(5)字符串和\0
字符串:
用双引号括起来的一串字符被称为字符串,如"abcdef"。
字符串打印可以用%s来指定格式:
#include<stdio.h>
int main()
{
printf("%s\n", "Hello C");
printf("Hello C");
return 0;
}
#include<stdio.h>
int main()
{
char arr1[] = { 'a','b','c' };//arr1数组中放了3个字符
char arr2[] = "abc";//arr2数组中存放字符串
printf("%s\n", arr1);
printf("%s\n",arr2);
return 0;
}
调试代码,观察arr1和arr2内容
运行结果:
从以上可知:arr1字符数组打印时,abc后面有随机值,是因为没有\0做结束标志。
arr2打印正常,因为arr2数组是使用字符串常量初始化,数组中有\0作为结束标志。
再看一个例子来证明\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;
}
运行结果:
(6)转义字符
顾名思义:转变原来意思的字符。常用转义字符如下:
#include<stdio.h>
int main()
{
printf("%c\n", '\'');//字符常量\'
printf("%s\n", "\"");//字符串内部双引号\"
printf("%c\n", '\130');//130是8进制,转换成10进制是88,以88作为ASCII码值的字符是X
printf("%c\n", '\x30');//x30是16进制,转换成10进制是48,以48作为ASCII码值的字符是0
return 0;
}
运行结果如下:
(7)语句和语句分类
C语言代码是由一条条语句构成。
C语言语句可为以下五类:
空语句:
#include<stdio.h>
int main()
{
;//空语句
return 0;
}
表达式语句:
#include<stdio.h>
int main()
{
int a = 1;
int b = 1;
b =2 - a;//表达式语句
return 0;
}
函数调用语句:
#include<stdio.h>
int Add(int x,int y)
{
return x + y;
}
int main()
{
printf("hehe\n");//函数调用语句
int ret = Add(2, 3);//函数调用语句
return 0;
}
复合语句:
#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++)//for循环的循环体的大括号构成复合语句
{
arr[i] = 10 - i;
printf("%d\n", arr[i]);
}
return 0;
}
控制语句:
(8)注释
注释可提高代码可读性。
/**/形式:
/* 注释 */
/*
这也是一行注释
*/
注意不要遗漏/*或*/
//形式:
int x=1;//这是一行注释
注意:
1.双引号里面的注释号,会成为字符串一部分,解释为普通符号,失去注释作用,则无论哪一种注释,都不能放在双引号里面。
printf("//hello /*world*/");
2.注释会被替换成空格,如min/*注释*/max,变成min max,不是minmax。
若有不足地方,望各位指正,谢谢。