接下来复习一下C语言部分,毕竟C++与C语言本自同根生,并且在汇编层面C与C++可以说完全相同。假如你没有C语言基础的话,可以先暂停去学习一下C语言,C语言可以看“C语言之父”谭浩强的《C语言程序设计》或者观看学堂在线的免费公开课,在此推荐清华大学的c++课程:http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/a0f3bf5a4c044dfaaad6814821533699/
最起码要先了解C基础才能进行接下来的学习。
基础包括:(想到哪写哪,有点乱,但是知道这些以后就可以开始动手了)
0.C基本数据类型
1.顺序结构 、选择结构、循环结构
2.程序都要从main()入口, 然后从最上面顺序往下读。(当然,这种说法其实是错误的,有兴趣的话我会在以后写明。)
3.函数的定义与使用
4.编译预处理不是C语言的一部分,不占运行时间
5.在函数中不可以再定义函数
6.每个C语言程序写完后,都是先编译,后链接,最后运行。
7.标识符合法的要求是由字母,数字,下划线组成,并且由下划线或字母开头。
8.C语言只有八、十、十六进制,没有二进制。
9.复合的赋值表达式
a.自增自减语法,以及符号在前与在后的区别
b.基本的位运算与逻辑运算、算术运算
c.指针部分最好理解,如果实在不理解,在以后的博客中,我会讲解一部分汇编知识,以便d.大家深入理解指针。
e.文件操作如果不理解也没关系
//应该还有很多没想到的知识点…不过,在项目中遇到了再通过注释的方式详解吧,这样更//好理解一点。
好,在此假设屏幕前的你已经有了最基本的C语言知识。
我们来动手写两个小项目,进一步熟悉C语言的语法以及VS这款IDE。
项目一:打印菱形。(可以说是灰常简单了)
项目二:写一个C语言版的贪食蛇。(初学者看到,可能觉得自己肯定写不出来,其实只要具备一定的C语言基础,都可以很简单的写出来,只不过苦于无人指导,遇到一个棘手的问题可能就真的过不了这个坎了,在此我会尽可能详细的讲解可能遇到的问题,如果仍无法解决的话,欢迎请求远程协助:QQ:1149375463,一些知识细节,遇到后会在项目注释里尽可能的写详细。)
在此再次推荐VS,因为VS拥有良好的调试功能,包括对于变量在内存中的观察,优秀的断点,以及可以反汇编,在以后与bug做斗争的过程中,会让你事半功倍。
首先与第一篇一样,新建工程,新建cpp文件:
然后编码:
#include //C标准输入输出库
#include//Windows库
int main() //程序主函数,当main函数执行结束后,进程退出
{
int line = 0; //上半部分层数,此后所说的层数都是之上半部分层数
char draw; //要输入什么字符组成的菱形
scanf("%c", &draw);
printf("请输入你想打印的行数:"); //printf()函数,属于stdio.h
scanf("%d", &line); //scanf()函数,属于stdio.h
/*
0001000 对于这个四层菱形,用0代替空格,用1代表要打印的字符
0011100 先打印上四层,再打印下三层
0111110 可以发现:左侧空格的数量 = 要打印的总层数 - 当前是第几层
1111111 然后打印下三层,采用相同的方式
0111110 左侧空格数量 = (1,2,3),即 1 开始,到层数 -1
0011100 OK,找到规律后就可以开始编码啦
0001000
*/
//打印上line层
for (int i = 0; i < line; i++) {
for (int n = 0; n < line - 1 - i; n++) {
printf(" ");
}
for (int j = 0; j < 2 * i + 1; j++) {
printf("%c",draw);
}
printf("\n");
}
//打印下line-1层
for (int i = 0; i < line - 1; i++){
for (int n = 0; n < i + 1; n++){
printf(" ");
}
for (int j = 0; j < 2 * (line - 1 - i) - 1; j++){
printf("%c",draw);
}
printf("\n");
}
system("pause"); //system()函数,属于windows.h,便于观察结果
return 0; //执行完return语句时退出进程
}
点击本地Windows调试器或者快捷键或者快捷键ctrl+F5
如果你使用了和我一样的IDE,一定会遇到:
这是因为VS为了避免开发者疏忽导致程序在使用某些函数时产生溢出,引发漏洞或程序崩溃,所以基于原标准库开发了一套安全函数库,在VS中使用安全函数可以在一定程度上使此程序更加健壮。但在学习过程中通常是不必要的。因此我们:
点开项目属性:
找到C/C++目录,将SDL检查置为否
oK,接下来运行便可看到,用你输入的图形打印了输入行数的菱形。
接下来我们将程序的功能部分写成一个函数,让代码具有更好的可读性,得到如下代码:
#include //C标准输入输出库
#include//Windows库
void PrinDia(char , int ); //PrinDia函数的声明
int main() //程序主函数,当main函数执行结束后,进程退出
{
char draw;
int line;
printf("请输入你想打印的图形:");
scanf("%c", &draw);
printf("请输入你想打印的行数:"); //printf()函数,属于stdio.h
scanf("%d", &line); //scanf()函数,属于stdio.h
PrinDia(draw, line);
system("pause"); //system()函数,属于windows.h,便于观察结果
return 0; //执行完return语句时退出进程
}
void PrinDia(char draw,int line) {
// line //上半部分层数,此后所说的层数都是之上半部分层数
// draw; //要输入什么字符组成的菱形
/*
0001000 对于这个四层菱形,用0代替空格,用1代表要打印的字符
0011100 先打印上四层,再打印下三层
0111110 可以发现:左侧空格的数量 = 要打印的总层数 - 当前是第几层
1111111 然后打印下三层,采用相同的方式
0111110 左侧空格数量 = (1,2,3),即 1 开始,到层数 -1
0011100 OK,找到规律后就可以开始编码啦
0001000
*/
//打印上line层
for (int i = 0; i < line; i++) {
for (int n = 0; n < line - 1 - i; n++) {
printf(" ");
}
for (int j = 0; j < 2 * i + 1; j++) {
printf("%c", draw);
}
printf("\n");
}
//打印下line-1层
for (int i = 0; i < line - 1; i++) {
for (int n = 0; n < i + 1; n++) {
printf(" ");
}
for (int j = 0; j < 2 * (line - 1 - i) - 1; j++) {
printf("%c", draw);
}
printf("\n");
}
}
再次运行依然可以看到结果。
OK,接下来便是另一个项目,C语言版的贪食蛇。在此之前需要学习一下如何使用VS调试程序,VS自带了很强大的调试器,可以在以后的学习中很好的处理自己的bug。
好啦,建议屏幕前的你再好好复习一下C语言吧,一定一定要复习好C语言,或者观看清华大学课程的前几章基础,熟练一下语法......莫贪快欧~
下一篇详解如何使用VS调试程序。