本章目录
一、什么是C语言
(一)、自然语言
· 一提到语言这个词语,自然会想到的是像英语、汉语等这样的自然语言。
· 自然语言是人和人交换信息不可缺少的工具。
(二)、C语言
· 随着社会的进步,计算机逐步普及,那么人们可以用什么样的方式和计算机做最直接的交流呢?
· 人们自然想到的是最古老也最方便的方式——语言。
· 那么,计算计算机语言就诞生了,而C语言就是人和计算机交流的一种语言。
(三)、自然语言与C语言的区别
· 语言是人和人交流,C语言是人和计算机交流。
· 只是,人可以不听另外一个人,但是,计算机是无条件服从,当然,前提是你的命令的语法是正确的(计算机能够看懂的)。
· C语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。
二、计算机语言的发展历史
· 机器语言(使用0和1表达)
· 汇编语言(使用了部分符号)
· 高级语言(C语言、Python语言、JAVA语言)
下面这张图片展现了这三种语言表示加法的写法,复杂程度一目了然。
三、C语言特点
(一)、优点
· 功能强大:可以编写操作系统、嵌入式、动态库、服务器、应用程序、外挂、其他语言等。
· 执行效率高:C语言描述问题比汇编语言简练,而代码质量与汇编语言相当,运行速度相当快。
· 可移植性好:一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行
(二)、缺点
· 面向过程的封装性不好(与C++相比),原因就是C语言是面向过程的语言而C++是面对对象的语言。
· 语法限制不太严格,过于自由,导致初学者处理问题时会因为考虑不周而出现错误。
四、环境搭建
(一)、下载软件
在百度搜索 visual studio,选择如下图中的选项。
进入Visual Studio 官网后,选择下载Windows版,并选择Community 2022 社区版本进行下载。
保存软件到电脑中。
(二)、安装软件
双击运行下载的安装文件,弹出安装界面。
选择使用C++的桌面开发 这一选项,如需其他,自行勾选。当然现在不选择等以后需要使用的时候再进行扩展就可以了。
点击安装按钮。开始安装
安装成功后提示重启,点击重启跟随提示完成剩余配置。
重启后,在开始菜单中就可以找到Visual Studio 2022进行开发了。
五、第一个C程序
编写一个C程序总共分为4个步骤:创建项目、创建文件、编写代码、运行程序。
(一)、创建项目
Visual Studio 2022是我们用来编写C语言程序的主要工具,我们先将它打开,接下来按照下图的步骤执行就可以成功创建一个新项目了。
提示大家一点,创建项目的名称和路径,最好都使用英文。
(二)、创建文件
右键源文件,选择添加->新建项,给C文件起个名称,然后点击添加即可。
注意,命名文件时的名称一定要以 .c 为后缀,否则你创建的是一个C++文件。
(三)、编写代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("Hello world\n");
system("pause");
return 0;
}
(四)、运行程序
运行程序的方式就是点击最上方的“本地Windows调试器”,就可以运行程序了。
六、注释
(一)、作用
在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码。
(二)、两种格式
1、单行注释:// 描述信息
通常放在一行代码的上方,或者一条语句的末尾,对该行代码说明。
2、多行注释: /* 描述信息 */
通常放在一段代码的上方,对该段代码做整体说明。也有可能放在项目的开头,作为项目开发的说明。
提示:编译器在编译代码时,会忽略注释的内容,即注释对编译过程没有影响。
这里给出一个例子,是上面的第一个C语言程序加入注释的结果,养成在编写代码的时候加入适当的注释是一个很好的习惯(注意不要过度注释)。
/*
编写时间:2024年8月6日
编写人员:刘博实
程序功能:实现在屏幕上打印“Hello world”
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("Hello world\n"); //实现打印“Hello world”
system("pause");
return 0;
}
七、程序框架介绍
我们以第一个C语言程序为例,介绍一下我们编写程序时需要用到的程序框架。
(一)、include头文件包含
· #include的意思是头文件包含,#include <stdio.h>代表包含stdio.h这个头文件。
· 使用C语言库函数需要提前包含库函数对应的头文件,比如这里使用了printf()函数,需要包含stdio.h头文件。
· stdio.h = std (standard) + i (input) + o (output) + .h (header)。
· 同理我们使用到了system函数,所以也需要包含stdlib.h(standard +library)这个头文件。
(二)、int main () 函数
· 一个完整的C语言程序,有且仅有一个main()函数 (又称主函数)。
· 其他若干个函数结合而成(可选)。
· main函数是C语言程序的入口,程序是从main函数开始执行。
· int 代表函数的返回值类型 —— 整型。下面的return语句代表了函数的返回值类型。
· () 可存放参数列表。
(三)、{} 括号,程序体和代码块
· {}叫代码块,一个代码块内部可以有一条或者多条语句,是程序员编写代码的地方。
· C语言每句可执行代码都是分号结尾,所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的。
· 所有的可执行语句必须是在代码块里面。
(四)、printf函数
· printf是C语言库函数,功能是向标准输出设备输出一个字符串。
· \n 的意思是换行。
(五)、return语句
· return代表函数执行完毕,返回return代表函数的终止。
· 如果main定义的时候前面是int,那么return后面就需要写一个整数。
· 在main函数中return 0代表程序执行成功。有些程序员也会写成return EXIT_SUCCESS。
八、system函数
(一)、函数功能
在已经运行的程序中执行另外一个外部程序
(二)、函数功能示例
#include <stdio.h>
#include <stdlib.h>
//自定义函数,不会默认执行,必须在main函数中进行调用
void test01()
{
printf("Hello world\n");
system("mspaint"); //打开“画图”
system("calc"); //打开“计算器”
system("notepad"); //打开“记事本”
}
int main()
{
test01();
system("pause");
return 0;
}
这段代码就展现了system函数的功能,比如,打开“画图”“计算器”“记事本”,等外部工具。
九、常用快捷键
我们了解VS2022中一些快捷键,可以提升我们编程的速度,提高效率。我们常见的快捷键如下:
十、C4996错误警告
VS2022建议采用带_s的函数,如scanf_s、strcpy_s,sprintf_s 但这些并不是标准C函数,反而当我们使用标准C函数的时候,会出现C4996的错误提示,类似如下:
解决方案:
· #define _CRT_SECURE_NO_WARNINGS 第一行写 (宏定义)
· #pragma warning(disable:4996)
· 项目配置 ——>属性——> C/C++ ——> 预处理器 ——> 预处理定义
十一、转义字符
在程序员编写程序的时候,对输出格式有时会有一定的要求,比如说换行、水平制表符。另外有一些字符用printf无法直接输出。这些功能的实现都需要使用到转义字符,我在这里整理了常见的转义字符,如下:
十二、本章小结
学习完本章的知识之后,我们已经可以编写简单的纯打印功能的程序了,比如下面这段代码,我就实现了一个非常有意思的绘画功能,其中也并没有运用到复杂的语法逻辑:
#include<stdio.h>
#include<stdlib.h>
void test01()
{
system("cls"); //实现清屏
//打印皮卡丘
printf(" `;-. ___,\n");
printf(" `.`\\_...._/`.-\"`\n");
printf(" \\ / ,\n");
printf(" /() () \\ .' `-._\n");
printf(" |) . ()\\ / _.'\n");
printf(" \\ -'- ,; '. <\n");
printf(" ;.__ ,;| > \n");
printf(" / , / , |.-'.-'\n");
printf(" (_/ (_/ ,;|.<`\n");
printf(" \\ , ;-`\n");
printf(" > \\ /\n");
printf(" (_,-'`> .'\n");
printf(" (_,' \n");
system("pause");
system("cls");
}
void test02()
{
system("cls");
printf(" .::::.\n");
printf(" .::::::::. \n");
printf(" ::::::::::: \n");
printf(" ..:::::::::::'\n");
printf(" '::::::::::::'\n");
printf(" .::::::::::\n");
printf(" '::::::::::::::..\n");
printf(" ..::::::::::::.\n");
printf(" ``::::::::::::::::\n");
printf(" ::::``:::::::::' .:::.\n");
printf(" ::::' ':::::' .::::::::.\n");
printf(" .::::' :::: .:::::::'::::.\n");
printf(" .:::' ::::: .:::::::::' ':::::.\n");
printf(" .::' :::::.:::::::::' ':::::.\n");
printf(" .::' ::::::::::::::' ``::::.\n");
printf(" ...::: ::::::::::::' ``::.\n");
printf(" ```` ':. ':::::::::' ::::..\n");
printf(" '.:::::' ':'````..\n");
system("pause");
system("cls");
}
void test03()
{
system("cls");
printf(" _ooOoo_ \n");
printf(" o8888888o \n");
printf(" 88\" . \"88\n");
printf(" (| -_- |) \n");
printf(" O\\ = /O \n");
printf(" ____/`---'\\____\n");
printf(" .' \\\\| |// `.\n");
printf(" / \\\\||| : |||// \\\n");
printf(" / _||||| -:- |||||- \\\n");
printf(" | | \\\\\\ - /// | |\n");
printf(" | \\_| ''\\---/'' | |\n");
printf(" \\ .-\\__ `-` ___/-. /\n");
printf(" ___`. .' /--.--\\ `. . __\n");
printf(" ."" '< `.___\\_<|>_/___.' >'"".\n");
printf(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | |\n");
printf(" \\ \\ `-. \\_ __\\ /__ _/ .-` / /\n");
printf(" ======`-.____`-.___\\_____/___.-`____.-'======\n");
printf(" `=---=' \n");
printf(" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 佛祖保佑 永无BUG \n");
system("pause");
system("cls");
}
void test04()
{
system("cls");
printf(" **** ****\n");//打印第一行
printf(" ********* *********\n");//打印第二行
printf("************* *************\n");//打印第三行
int i, j;//定义变量
for (i = 0; i < 3; i++)//打印4-6行,一共3行,因此i小于3
{
for (j = 0; j < 29; j++)//限制每行输出*的个数
{
printf("*");//这三行只打印*号,无空格输出
}
printf("\n");//打印完一行需要进行换行
}
for (i = 0; i < 7; i++) //打印7-13行,一共7行,因此i小于7
{
for (j = 0; j < 2 * (i + 1) - 1; j++)//这个for循环和下面的for是并列的
{
printf(" ");//打印空格
}
for (j = 0; j < 27 - i * 4; j++)//读者可以带入几个数找出条件
{
printf("*");//打印*
}
printf("\n");
}
for (i = 0; i < 14; i++)//打印最后一行的*
{
printf(" ");//打印空格
}
printf("*\n");//打印*
system("pause");
system("cls");
}
void show_Menu()
{
printf("********************************************\n");
printf("********************************************\n");
printf("************* C语言画画 *************\n");
printf("************* 1.皮卡丘 *************\n");
printf("************* 2.美女 *************\n");
printf("************* 3.佛祖 *************\n");
printf("************* 4.爱心 *************\n");
printf("************* 0.退出 *************\n");
printf("********************************************\n");
printf("********************************************\n");
printf("\n");
}
int main()
{
int choice = 1;
while (0 != choice)
{
show_Menu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice)
{
case 1:
test01();
break;
case 2:
test02();
break;
case 3:
test03();
break;
case 4:
test04();
break;
case 0:
exit(0);
break;
default:
printf("您输入的数字不在目录之中,请重新输入\n\n");
system("pause");
system("cls");
break;
}
}
system("pause");
return EXIT_SUCCESS;
}