C语言保姆级教程(极客江南出品)_第1页
C语言保姆级教程(极客江南出品)_第2页
C语言保姆级教程(极客江南出品)_第3页
C语言保姆级教程(极客江南出品)_第4页
C语言保姆级教程(极客江南出品)_第5页
已阅读5页,还剩393页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机常识什么是计算机程序?什么是计算机语言?常见的计算机语言类型有哪些?什么是C语言?C语言历史C语言标准C语言现状为什么要学习C语言?如何学好C语言工欲善其事必先利其器编写C语言程序用什么工具?什么是QtCreator?QtCreator安装什么是环境变量?为什么要配置系统变量,不配置用户变量QtCreator快捷键如何创建C语言程序如何创建C语言文件C语言程序组成函数定义格式如何执行定义好的函数如何运行编写好的程序main函数注意点及其它写法C语言程序练习初学者如何避免程序出现BUG多语言对比什么是注释?为什么要使用注释?注释的分类注释的注意点注释的应用场景使用注释的好处什么是关键字?关键字分类什么是标识符?标识符命名规则练习标识符命名规范数据分类C语言数据类型什么是常量?常量的类型什么是变量?如何定义变量变量的初始化如何修改变量值?变量之间的值传递如何查看变量的值?变量的作用域变量内存分析(简单版)printf函数Scanf函数scanf运行原理putchar和getchar运算符基本概念运算符分类运算符的优先级和结合性算数运算符赋值运算符自增自减运算符sizeof运算符逗号运算符关系运算符逻辑运算符三目运算符类型转换阶段练习流程控制基本概念选择结构选择结构if选择结构switch循环结构循环结构while循环结构dowhile循环结构for四大跳转循环的嵌套图形打印函数基本概念函数的分类函数的定义函数的参数和返回值函数的声明main函数分析递归函数(了解)进制基本概念进制转换十进制小数转换为二进制小数二进制小数转换为十进制小数原码反码补码位运算符变量内存分析char类型内存存储细节类型说明符short和longsignedunsigned数组的基本概念定义数组初始化数组数组的使用数组的遍历数组长度计算方法练习数组内部存储细节数组的越界问题数组注意事项数组和函数数组元素作为函数参数数组名作为函数参数数组名作函数参数的注意点计数排序(CountingSort)选择排序冒泡排序插入排序希尔排序折半查找进制转换(查表法)二维数组二维数组的定义二维数组的初始化二维数组的应用场景二维数组的遍历和存储二维数组的遍历二维数组的存储二维数组与函数二维数组作为函数参数注意点作业字符串的基本概念字符串的初始化字符串输出字符串常用方法练习字符串数组基本概念指针基本概念什么是指针什么是指针变量定义指针变量的格式指针变量的初始化方法访问指针所指向的存储空间指针类型二级指针练习指针访问数组元素指针与字符串指向函数指针什么是结构体定义结构体类型定义结构体变量结构体成员访问结构体变量的初始化结构体类型作用域结构体数组结构体指针结构体内存分析结构体变量占用存储空间大小结构体嵌套定义结构体和函数共用体枚举全局变量和局部变量auto和register关键字static关键字extern关键字static与extern对函数的作用QtCreator编译过程做了什么?计算机是运算过程分析预处理指令预处理指令的概念宏定义带参数的宏定义条件编译typedef关键字宏定义与函数以及typedef区别const关键字如何使用const?内存管理进程空间栈内存(Stack)堆内存(Heap)malloc数free函数callocrealloc函数链表静态链表动态链表动态链表头插法动态链表尾插法动态链优化链表销毁链表长度计算链表查找链表删除作业文件基本概念文件的打开和关闭一次读写一个字符一次读写一行字符一次读写一块数据读写结构体其它文件操作函数计算机常识什么是计算机?顾名思义,就是能够进行数据运算的机器(台式电脑、笔记本电脑、平板电脑、智能手机)计算机_百度百科计算机的发明者是谁?关于电子计算机的发明者是谁这一问题,有好几种答案:1936年英国数学家图灵首先提出了一种以程序和输入数据相互作用产生输出的计算机构想,后人将这种机器命名为通用图灵计算机1938年克兰德·楚泽发明了首台采用继电器进行工作的计算机,这台计算机命名为Z1,但是继电器是机械式的,并不是完全的电子器材1942年阿坦那索夫和贝利*发明了首台采用真空管的计算机,这台计算机命名为ABC1946年ENIAC诞生,它拥有了今天计算机的主要结构和功能,是通用计算机现在世界上公认的第一台现代电子计算机是1946年在美国宾夕法尼亚大学诞生的ENIAC(ElectronicNumericalIntegratorAndCalculator)计算机特点是什么?计算机是一种电器,所以计算机只能识别两种状态,一种是通电一种是断电正是因为如此,最初ENIAC的程序是由很多开关和连接电线来完成的。但是这样导致改动一次程序要花很长时间(需要人工重新设置很多开关的状态和连接线)为了提高效率,工程师们想能不能把程序和数据都放在存储器中,数学家冯·诺依曼将这个思想以数学语言系统阐述,提出了存储程序计算机模型(这是所谓的冯·诺依曼机)那利用数学语言如何表示计算机能够识别的通电和断电两种状态呢?非常简单用0和1表示即可所以计算机能识别的所有指令都是由0和1组成的所以计算机中存储和操作的数据也都是由0和1组成的0和1更准确的是应该是高电平和低电平,但是这个不用了解,只需要知道计算机只能识别0和1以及存储的数据都是由0和1组成的即可。什么是计算机程序?计算机程序是为了告诉计算机"做某件事或解决某个问题"而用"计算机语言编写的命令集合(语句)只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作,计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成现实生活中你如何告诉别人如何做某件事或者解决某个问题?通过人能听懂的语言:张三你去楼下帮我买一包烟,然后顺便到快递箱把我的快递也带上来其实我们通过人能听懂的语言告诉别人做某件事就是在发送一条条的指令计算机中也一样,我们可以通过计算机语言告诉计算机我们想做什么,每做一件事情就是一条指令,一条或多条指令的集合我们就称之为一个计算机程序 什么是计算机语言?在日常生活、工作中,语言是人们交流的工具中国人和中国人交流,使用中文语言美国人和美国人交流,使用英文语言人想要和计算机交流,使用计算机语言可以看出在日常生活、工作中,人们使用的语言种类很多如果一个很牛人可能同时掌握了中文语言和英文语言,那么想要和这个人交流既可以使用中文语言,也可以使用英文语言计算机其实就是一个很牛的人,计算机同时掌握了几十门甚至上百门语言,所以我们只要使用任何一种计算机已经掌握的语言就可以和计算机交流 常见的计算机语言类型有哪些?机器语言所有的代码里面只有0和1,0表示不加电,1表示加电(纸带存储时1有孔,0没孔)优点:直接对硬件产生作用,程序的执行效率非常非常高缺点:指令又多又难记、可读性差、无可移植性汇编语言符号化的机器语言,用一个符号(英文单词、数字)来代表一条机器指令优点:直接对硬件产生作用,程序的执行效率非常高、可读性稍好缺点:符号非常多和难记、无可移植性高级语言非常接近自然语言的高级语言,语法和结构类似于普通英文优点:简单、易用、易于理解、远离对硬件的直接操作、有可移植性缺点:有些高级语言写出的程序执行效率并不对比(利用3种类型语言编写1+1)机器语言101110000000000100000000000001010000000100000000汇编语言MOVAX,1ADDAX,1高级语言1+1什么是C语言?C语言是一种用于和计算机交流的高级语言,它既具有高级语言的特点,又具有汇编语言的特点非常接近自然语言程序的执行效率非常高C语言是所有编程语言中的经典,很多高级语言都是从C语言中衍生出来的,如:C++、C#、Object-C、Java、Go等等C语言是所有编程语言中的经典,很多著名的系统软件也是C语言编写的几乎所有的操作系统都是用C语言编写的几乎所有的计算机底层软件都是用C语言编写的几乎所有的编辑器都是C语言编写的C语言历史“初,世间无语言,仅电路与连线。及大牛出,天地开,始有FORTRAN、LISP、ALGOL随之,乃有万种语”CPLCombinedProgrammingLangurage)语言。CPL语言在ALGOL60的基础上接近硬件一些,但规模比较大,难以实现1967年英国剑桥大学的MatinRichards(理查兹)对CPL语言做了简化,推出了BCPL(BaseCombinedProgrammingLangurage)语言1970年美国贝尔实验室的KenThompson(肯·汤普逊)以BCPL语言为基础,又作了进一步的简化,设计出了很简单的而且很接近硬件的B语言(取BCPL的第一个字母),并用B语言写出了第一个UNIX操作系统。但B语言过于简单,功能有限1972年至1973年间,贝尔实验室的Dennis.Ritchie(丹尼斯·里奇)在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言即保持BCPL语言和B语言的优点(精练、接近硬件),又克服了他们的 缺点(过于简单,数据无类型等)C语言标准1983年美国国家标准局(AmericanNationalStandardsInstitute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSIC(C89)1999年,国际标准化组织ISO又对C语言标准进行修订,在基本保留原C语言特征的基础上,针对应该的需要,增加了一些功能,命名为C992011年12月,ANSI采纳了ISO/IEC9899:2011标准。这个标准通常即C11,它是C程序语言的现行标准 C语言现状年度编程语言该奖项颁发给了一年中最热门的编程语言编程语言排行榜查看为什么要学习C语言?40多年经久不衰了解操作系统、编译原理、数据结构与算法等知识的最佳语言了解其它语言底层实现原理必备语言基础语法与其它高级语言类似,学会C语言之后再学习其它语言事半功倍,且知根知底当你想了解底层原理时,你才会发现后悔当初没有学习C语言当你想学习一门新的语言时,你才会发现后悔当初没有学习C语言当你使用一些高级框架、甚至系统框架时发现提供的API都是C语言编写的,你才发现后悔当初没有学习C语言学好数理化,走遍天下都不拍学好C语言,再多语言都不怕如何学好C语言学习本套课程之前学习本套课程中学习本套课程之后你懂得哦如何达到这样的效果工欲善其事必先利其器编写C语言程序用什么工具?记事本(开发效率低)Vim(初学者入门门槛高)VSCodeeclipse(不喜欢)CLion(深爱,但收费)Xcode(逼格高,但得有苹果电脑)QtCreator(开源免费,跨平台安装和运行)什么是QtCreator?QtCreator是一款新的轻量级集成开发环境(IDE)。它能够跨平台运行,支持的系统包括Windows、Linux(32位及64位)以及MacOSXQtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务开源免费,简单易用,能够满足学习需求集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析QtCreator安装切记囫囵吞枣,不要纠结里面的东西都是什么含义,初学者安装成功就是一种成功下载QtCreator离线安装包:版本和代码编辑器任意选择都可以spanbaiducomsgxhNDBJkAgxwFJxwfghttpdownloadqtio以管理身份运行离线安装包下一步,下一步,下一步,等待ing...注意安装路径中最好不要出现中文对于初学者而言全选是最简单的方式(重点!!!)配置QtCreator开发环境变量你的安装路径\5.11.0\mingw53_32\bin你的安装路径\Tools\mingw530_32\bin启动安装好的QtCreator非全选安装到此为止,全选安装继续往下看出现这个错误,忽略这个错误即可等待安装完毕之后解决刚才的错误找到安装目录下的strawberry.msi,双击运行什么是环境变量?打开我们添加环境变量的两个目录,不难发现里面大部分都是.exe的可执行程序如果我们不配置环境变量,那么每次我们想要使用这些"可执行程序"都必须"先找到这些应用程序对应的文件夹"才能使用为了方便我们在电脑上"任何地方"都能够使用这些"可执行程序",那么我们就必须添加环境变量,因为Windows执行某个程序的时候,会先到"环境变量中Path指定的路径中"去查找为什么要配置系统变量,不配置用户变量用户变量只针对使用这台计算机指定用户一个计算机可以设置多个用户,不同的用户用不同的用户名和密码当给计算机设置了多个用户的时候,启动计算机的时候就会让你选择哪个用户登录系统变量针对使用这台计算机的所有用户也就是说设置了系统变量,无论哪个用户登录这台计算机都可以使用你配置好的工具 otCreetor快捷键QtCreatorKeyboardShortcuts(Documentation)QtCreatorKeyboardShortcuts(Wiki)如何创建C语言程序这个世界上,几乎所有程序员入门的第一段代码都是HelloWorld.原因是当年C语言的作者DennisRitchie(丹尼斯里奇)在他的名著中第一次引入,传为后世经典,其它语言亦争相效仿,以示敬意如何创建C语言文件C语言程序组成手机有很多功能,"开机","关机","打电话","发短信","拍照"等等手机中的每一个功能就相当于C语言程序中的一个程序段(函数)众多功能中总有一个会被先执行,不可能多个功能一起执行想使用手机必须先执行手机的开机功能所以C语言程序也一样,由众多功能、众多程序段组成,众多C语言程序段中总有一个会被先执行,这个先执行的程序段我们称之为"主函数"一个C语言程序由多个"函数"构成,每个函数有自己的功能一个程序有且只有一个主函数如果一个程序没有主函数,则这个程序不具备运行能力程序运行时系统会自动调用主函数,而其它函数需要开发者手动调用主函数有固定书写的格式和范写函数定义格式主函数定义的格式:int代表函数执行之后会返回一个整数类型的值main代表这个函数的名字叫做main()代表这是一个函数{}代表这个程序段的范围return0;代表函数执行完之后返回整数0intmain(){//insertcodehere...return0;}其它函数定义的格式int代表函数执行之后会返回一个整数类型的值call代表这个函数的名字叫做call()代表这是一个函数{}代表这个程序段的范围return0;代表函数执行完之后返回整数0intcall(){return0;}如何执行定义好的函数主函数(main)会由系统自动调用,但其它函数不会,所以想要执行其它函数就必须在main函数中手动调用call代表找到名称叫做call的某个东西()代表要找到的名称叫call的某个东西是一个函数;代表调用函数的语句已经编写完成所以call();代表找到call函数,并执行call函数intmain(){call();return0;}如何往屏幕上输出内容输出内容是一个比较复杂的操作,所以系统提前定义好了一个专门用于输出内容的函数叫做printf函数,我们只需要执行系统定义好的printf函数就可以往屏幕上输出内容但凡需要执行一个函数,都是通过函数名称+圆括号的形式来执行如下代码的含义是:当程序运行时系统会自动执行main函数,在系统自动执行main函数时我们手动执行了call函数和printf函数经过对代码的观察,我们发现两个问题并没有告诉printf函数,我们要往屏幕上输出什么内容找不到printf函数的实现代码}call(){return0;main(){call();printf();return0;}如何告诉printf函数要输出的内容将要输出的内容编写到printf函数后面的圆括号中即可注意:圆括号中编写的内容必须用双引号引起来printfprintf("helloworld\n");如何找到printf函数的实现代码由于printf函数是系统实现的函数,所以想要使用printf函数必须在使用之前告诉系统去哪里可以找到printf函数的实现代码#include<stdio.h>就是告诉系统可以去stdio这个文件中查找printf函数的声明和实现#include<stdio.h>intcall(){return0;}intmain(){call();printf("helloworld\n");return0;}如何运行编写好的程序方式1:点击小榔头将"源代码"编译成"可执行文件"找到编译后的源代码,打开终端(CMD)运行可执行文件方式2直接点击Qt开发工具运行按钮main函数注意点及其它写法C语言中,每条完整的语句后面都必须以分号结尾main函数中的return0可以不写intmain(){printf("helloworld\n")//如果没有分号编译时会报错return0;}intmain(){//如果没有分号,多条语句合并到一行时,系统不知道从什么地方到什么地方是一条完整语句printf("helloworld\n")return0;}C语言中除了注释和双引号引起来的地方以外都不能出现中文intmain(){printf("helloworld\n");//这里的分号如果是中文的分号就会报错return0;}一个C语言程序只能有一个main函数intmain(){return0;}intmain(){//编译时会报错,重复定义return0;}一个C语言程序不能没有main函数intcall报错,因为只有call函数,没有main函数return0;}intintmian(){//编译时报错,因为main函数的名称写错了,还是相当于没有main函数return0;}main函数前面的int可以不写或者换成void#include<stdio.h>main(){//不会报错printf("helloworld\n");return0;}#include<stdio.h>voidmain(){//不会报错printf("helloworld\n");return0;}intmainintmain(){//不会报错printf("helloworld\n");}多种写法不报错的原因C语言最早的时候只是一种规范和标准(例如C89,C11等)标准的推行需要各大厂商的支持和实施而在支持的实施的时候由于各大厂商利益、理解等问题,导致了实施的标准不同,发生了变化TurboCVisualC(VC)GNUC(GCC)所以大家才会看到不同的书上书写的格式有所不同,有的返回int,有的返回void,有的甚至没有返回值所以大家只需要记住最标准的写法即可,nozuonodie#include<stdio.h>intmain(){printf("helloworld\n");return0;}Tips:语法错误:编译器会直接报错逻辑错误:没有语法错误,只不过运行结果不正确C语言程序练习编写一个C语言程序,用至少2种方式在屏幕上输出以下内容*************************普通青年实现printf("******\n");printf("*********\n");printf("*******\n");printf("****\n");printf("**\n");2B青年实现printf("******\n*********\n*******\n****\n**\n");文艺青年实现(装逼的,先不用理解)intinti=0;while(1){if(i%2==0){printf("******\n");printf("*********\n");printf("*******\n");printf("****\n");printf("**\n");lse{printf("\n");****\n");*******\n");*****\n");**\n");sleep(1);i++;system("cls");}printf("printf("printf("printf("}初学者如何避免程序出现BUG_ooOoo_o8888888o88"."88(|-_-|)O\=/O____/`---'\____.'\\||//`./\\|||:|||//\||\\\-///||\.-\__`-`___/-./___`..'/--.--\`..__.""'<`.___\_<|>_/___.'>'"".||:`-\`.;`\_/`;.`/-`:||\\`-.\___\/___/.-`//======`-.____`-.___\_____/___.-`____.-'======`=---='.............................................佛祖保佑有无BUG━━━━━━━━━神兽出没━━━━━━r┛┻━━━━━━┛┻┓┃┃T┛┃┃┃┃┃LT┃┃┻┃┃r━┛Codeisfarawayfrombugwiththeanimalprotecting━C语言III神兽保佑,代码无bugIIIL---1L11r-T1r」I11I11------感觉萌萌哒------´´´´´´´´██´´´´´´´´´´´´´´████´´´´´´´´´´´████████´´´´´´`´███▒▒▒▒███´´´´´´´´███▒.▒▒.▒██´´´´´´███▒▒▒▒▒▒██´´´´´´´´███▒▒▒▒██´´´██████▒▒███´´´´´´██████▒▒▒▒███´´██████▒▒▒▒▒▒███´´´´´´▓▓▓▓▓▓▓▓▓▓▓▓▓▒´´´´▒▒▒▒▓▓▓▓▓▓▓▓▓▒´´´´´´▒▒▒▒▒▒▒▒▒▒▒▒´´´´´´´´´███████´´´´´´´´´´´´´████████´´´´´´´´´´´´´´█████████´´´´´´´´´´´´██████████´´´´不累,这就是现实!´´´´´´██████████´´´项目:第一个C语言程序版本控制:git-github代码风格:江哥style大部分人都在关注你飞的高不高,却没人在乎你飞的累我从不相信梦想,我,只,相,信,自,´´´´´´´█████████´´´´´´´´´█████████´´´´´´´´´´´████████´´´´´________▒▒▒▒▒_________▒▒▒▒_________▒▒▒▒________▒▒_▒▒_______▒▒__▒▒_____▒▒___▒▒_____▒▒___▒▒____▒▒____▒▒___▒▒_____▒▒███____▒▒████____████_███__█_███——————————————————————————女神保佑,代码无bug——————————————————————多语言对比#include<stdio.h>intmain(){printf("南哥带你装B带你飞");return0;}#include<iostream>usingnamespacestd;intmain(){cout<<"南哥带你装B带你飞"<<endl;return0;}OC语言#import<Foundation/Foundation.h>intmain(){NSLog(@"南哥带你装B带你飞");return0;}Java语言classTest{publicstaticviodmain(){system.out.println("南哥带你装B带你飞");}}Go语言packagemainimport"fmt"//引入fmt库funcmain(){fmt.Println("南哥带你装B带你飞")}注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流沟通注释可以是任何文字,也就是说可以写中文被注释的内容在开发工具中会有特殊的颜色为什么要使用注释? 没有编写任何注释的程序voidprintMap(charmap[6][7],introw,intcol);intmain(intargc,constchar*argv[]){charmap[6][7]={{'#','#','#','#','#','#','#'},{'#','','','','#','',''},{'#','R','','#','#','','#'},{'#','','','','#','','#'},{'#','#','','','','','#'},{'#','#','#','#','#','#','#'}introw=sizeof(map)/sizeof(map[0]);intcol=sizeof(map[0])/sizeof(map[0][0]);printMap(map,row,col);intpRow=2;intpCol=1;intendRow=1;intendCol=6;while('R'!=map[endRow][endCol]){printf("亲,请输入相应的操作\n");printf("w(向上走)s(向下走)a(向左走)d(向右走)\n");charrun;run=getchar();switch(run){case's':if('#'!=map[pRow+1][pCol]){map[pRow][pCol]='';pRow++;//3map[pRow][pCol]='R';}break;case'w':if('#'!=map[pRow-1][pCol]){map[pRow][pCol]='';pRow--;map[pRow][pCol]='R';}break;case'a':if('#'!=map[pRow][pCol-1]){map[pRow][pCol]='';pCol--;map[pRow][pCol]='R';}break;case'd':if('#'!=map[pRow][pCol+1]){map[pRow][pCol]='';pCol++;map[pRow][pCol]='R';}break;}printMap(map,row,col);}printf("你太牛X了\n");printf("想挑战自己,请购买完整版本\n");return0;}}voidprintMap(charmap[6][7],introw,intcol){system("cls");for(inti=0;i<row;i++){for(intj=0;j<col;j++){printf("%c",map[i][j]);}printf("\n");}}编写了注释的程序/*R代表一个人#代表一堵墙//0123456#######//0##//1#R###//2###//3###//4#######//5>1.保存地图(二维数组)>2.输出地图>3.操作R前进(控制小人行走)3.1.接收用户输入(scanf/getchar)w(向上走)s(向下走)a(向左走)d(向右走)人行走3.2.1.替换二维数组中保存的数据(1.判断是否可以修改(如果不是#就可以修改)2.修改现有位置为空白3.修改下一步为R)3.3.输出修改后的二维数组4.判断用户是否走出出口//声明打印地图方法voidprintMap(charmap[6][7],introw,intcol);intmain(intargc,constchar*argv[]){//1.定义二维数组保存迷宫地图charmap[6][7]={{'#','#','#','#','#','#','#'},{'#','','','','#','',''},{'#','R','','#','#','','#'},{'#','','','','#','','#'},{'#','#','','','','','#'},{'#','#','#','#','#','#','#'}//2.计算地图行数和列数introw=sizeof(map)/sizeof(map[0]);intcol=sizeof(map[0])/sizeof(map[0][0]);//3.输出地图printMap(map,row,col);//4.定义变量记录人物位置intpRow=2;intpCol=1;//5.定义变量记录出口的位置intendRow=1;intendCol=6;//6.控制人物行走while('R'!=map[endRow][endCol]){//6.1提示用户如何控制人物行走printf("亲,请输入相应的操作\n");printf("w(向上走)s(向下走)a(向左走)d(向右走)\n");charrun;run=getchar();//6.2根据用户输入控制人物行走switch(run){case's':if('#'!=map[pRow+1][pCol]){map[pRow][pCol]='';pRow++;//3map[pRow][pCol]='R';}break;case'w':if('#'!=map[pRow-1][pCol]){map[pRow][pCol]='';pRow--;map[pRow][pCol]='R';}break;case'a':if('#'!=map[pRow][pCol-1]){map[pRow][pCol]='';pCol--;map[pRow][pCol]='R';}break;case'd':if('#'!=map[pRow][pCol+1]){map[pRow][pCol]='';pCol++;map[pRow][pCol]='R';}break;}//6.3重新输出行走之后的地图printMap(map,row,col);}printf("你太牛X了\n");printf("想挑战自己,请购买完整版本\n");return0;}/***@brief*@param*@paramprintMapmap需要打印的二维数组row二维数组的行数 **@paramcol二维数组的列数voidprintMap(charmap[6][7],introw,intcol){//为了保证窗口的干净整洁,每次打印都先清空上一次的打印system("cls");for(inti=0;i<row;i++){for(intj=0;j<col;j++){printf("%c",map[i][j]);}printf("\n");}}注释的分类单行注释//被注释内容使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面作用范围:从第二个斜线到这一行末尾快捷键:Ctrl+/多行注释/*被注释内容*/使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面作用范围:从第一个/*到最近的一个*/ 注释的注意点单行注释可以嵌套单行注释、多行注释//南哥//公号代码情缘///*江哥*///瓜哥//公众号代码情缘多行注释可以嵌套单行注释/*//作者:LNJ//描述:第一个C语言程序作用:这是一个主函数,C程序的入口点多行注释不能嵌套多行注释/*哈哈哈/*嘻嘻嘻*/呵呵呵注释的应用场景思路分析/*R代表一个人#代表一堵墙//0123456#######//0##//1#R###//2###//3###//4#######//5>1.保存地图(二维数组)>2.输出地图>3.操作R前进(控制小人行走)3.1.接收用户输入(scanf/getchar)w(向上走)s(向下走)a(向左走)d(向右走)人行走3.2.1.替换二维数组中保存的数据(1.判断是否可以修改(如果不是#就可以修改)2.修改现有位置为空白3.修改下一步为R)3.3.输出修改后的二维数组4.判断用户是否走出出口对变量进行说明//2.计算地图行数和列数introw=sizeof(map)/sizeof(map[0]);intcol=sizeof(map[0])/sizeof(map[0][0]);对函数进行说明/**/***@briefprintMap*@parammap需要打印的二维数组*@paramrow二维数组的行数*@paramcol二维数组的列数voidprintMap(charmap[6][7],introw,intcol){system("cls");for(inti=0;i<row;i++){for(intj=0;j<col;j++){printf("%c",map[i][j]);}printf("\n");}}多实现逻辑排序//1.定义二维数组保存迷宫地图charmap[6][7]={{'#','#','#','#','#','#','#'},{'#','','','','#','',''},{'#','R','','#','#','','#'},{'#','','','','#','','#'},{'#','#','','','','','#'},{'#','#','#','#','#','#','#'}//2.计算地图行数和列数introw=sizeof(map)/sizeof(map[0]);intcol=sizeof(map[0])/sizeof(map[0][0]);//3.输出地图printMap(map,row,col);//4.定义变量记录人物位置intpRow=2;intpCol=1;//5.定义变量记录出口的位置intendRow=1;intendCol=6;//6.控制人物行走while('R'!=map[endRow][endCol]){}使用注释的好处注释是一个程序员必须要具备的良好习惯帮助开发人员整理实现思路解释说明程序,提高程序的可读性初学者编写程序可以养成习惯:先写注释再写代码将自己的思想通过注释先整理出来,在用代码去体现因为代码仅仅是思想的一种体现形式而已 什么是关键字?关键字,也叫作保留字。是指一些被C语言赋予了特殊含义的单词关键字特征:全部都是小写在开发工具中会显示特殊颜色关键字注意点:因为关键字在C语言中有特殊的含义,所以不能用作变量名、函数名等C语言中一共有32个关键字12345678charshortfloatelsereturnwhileforswitchcasereakontinuedefaultsizeoftogistertaticexterntypedefstructenumdtvolatile这些不用专门去记住,用多了就会了。在编译器里都是有特殊颜色的。我们用到时候会一个一个讲解这个些关键字怎么用,现在浏览下,有个印象就OK了关键字分类什么是标识符?从字面上理解,就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来其实标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称,这个名称就是标识符综上所述:程序员在程序中给函数、变量等起名字就是标识符标识符命名规则不能包含除下划线以外的其它特殊字符串不能以数字开头不能是C语言中的关键字标识符严格区分大小写,test和Test是两个不同的标识符练习下列哪些是合法的标识符fromNo22from#22lean2ndObjGUIMike2jack江哥_testtest!32haha(da)ttjack_rosejack&rose标识符命名规范见名知意,能够提高代码的可读性驼峰命名,能够提高代码的可读性驼峰命名法就是当变量名或函数名是由多个单词连接在一起,构成标识符时,第一个单词以小写字母开始;第二个单词的首字母大写.例如:myFirstName、myLastName这样的变量名称看上去就像驼峰一样此起彼伏 生活中无时无刻都在跟数据打交道例如:人的体重、身高、收入、性别等数据等在我们使用计算机的过程中,也会接触到各种各样的数据例如:文档数据、图片数据、视频数据等数据分类静态的数据静态数据是指一些永久性的数据,一般存储在硬盘中。硬盘的存储空间一般都比较大,现在普通计算机的硬盘都有500G左右,因此硬盘中可以存放一些比较大的文件存储的时长:计算机关闭之后再开启,这些数据依旧还在,只要你不主动删掉或者硬盘没坏,这些数据永远都在哪些是静态数据:静态数据一般是以文件的形式存储在硬盘上,比如文档、照片、视频等。动态的数据动态数据指在程序运行过程中,动态产生的临时数据,一般存储在内存中。内存的存储空间一般都比较小,现在普通计算机的内存只有8G左右,因此要谨慎使用内存,不要占用太多的内存空间存储的时长:计算机关闭之后,这些临时数据就会被清除哪些是动态数据:当运行某个程序(软件)时,整个程序就会被加载到内存中,在程序运行过程中,会产生各种各样的临时数据,这些临时数据都是存储在内存中的。当程序停止运行或者计算机被强制关闭时,这个程序产生的所有临时数据都会被清除。既然硬盘的存储空间这么大,为何不把所有的应用程序加载到硬盘中去执行呢?主要原因就是内存的访问速度比硬盘快N倍 静态数据和动态数据的相互转换也就是从磁盘加载到内存动态数据和静态数据的相互转换也就是从内存保存到磁盘数据的计量单位不管是静态还是动态数据,都是0和1组成的数据越大,包含的0和1就越多1B(Byte字节)=8bit(位)//00000000就是一个字节//111111111也是一个字节//10101010也是一个字节//任意8个0和1的组合都是一个字节1KB(KByte)=1024B1MB=1024KB1GB=1024MB1TB=1024GBC语言数据类型作为程序员,我们最关心的是内存中的动态数据,因为我们写的程序就是在内存中运行的程序在运行过程中会产生各种各样的临时数据,为了方便数据的运算和操作,C语言对这些数据进行了分类,提供了丰富的数据类型C语言中有4大类数据类型:基本类型、构造类型、指针类型、空类型"量"表示数据。常量,则表示一些固定的数据,也就是不能改变的数据就好比现实生活中生男生女一样,生下来是男孩永远都是男孩,生下来是女孩就永远都是女孩,所以性别就是现实生活中常量的一种体现不要和江哥吹牛X说你是泰国来的,如果你真的来自泰国,我只能说你赢了常量的类型整型常量十进制整数。例如:666,-120,0八进制整数,八进制形式的常量都以0开头。例如:0123,也就是十进制的83;-011,也就是十进制十六进制整数,十六进制的常量都是以0x开头。例如:0x123,也就是十进制的291二进制整数,逢二进一0b开头。例如:0b0010,也就是十进制的2实型常量小数形式单精度小数:以字母f或字母F结尾。例如:0.0f、1.01f双精度小数:十进制小数形式。例如:3.14、6.66默认就是双精度可以没有整数位只有小数位。例如:.3、.6f指数形式以幂的形式表示,以字母e或字母E后跟一个10为底的幂数上过初中的都应该知道科学计数法吧,指数形式的常量就是科学计数法的另一种表示,比如字母e或字母E后面的指数必须为整数字母e或字母E前后必须要有数字字母e或字母E前后不能有空格字符常量字符型常量都是用''(单引号)括起来的。例如:'a'、'b'、'c'字符常量的单引号中只能有一个字符特殊情况:如果是转义字符,单引号中可以有两个字符。例如:'\n'、'\t'字符串常量字符型常量都是用""(双引号)括起来的。例如:"a"、"abc"、"lnj"系统会自动在字符串常量的末尾加一个字符'\0'作为字符串结束标志自定义常量后期讲解内容,此处先不用了解常量类型练习1.1F1.1.3"李南江""量"表示数据。变量,则表示一些不固定的数据,也就是可以改变的数据就好比现实生活中人的身高、体重一样,随着年龄的增长会不断发生改变,所以身高、体重就是现实生活中变量的一种体现就好比现实生活中超市的储物格一样,同一个格子在不同时期不同人使用,格子中存储的物品是可以变化的。张三使用这个格子的时候里面放的可能是尿不湿,但是李四使用这个格子的时候里面放的可能是面包 如何定义变量格式1:变量类型变量名称;为什么要定义变量?任何变量在使用之前,必须先进行定义,只有定义了变量才会分配存储空间,才有空间存储数据为什么要限定类型?用来约束变量所存放数据的类型。一旦给变量指明了类型,那么这个变量就只能存储这种类型的数据内存空间极其有限,不同类型的变量占用不同大小的存储空间为什么要指定变量名称?存储数据的空间对于我们没有任何意义,我们需要的是空间中存储的值只有有了名称,我们才能获取到空间中的值intinta;floatb;charch;格式2:变量类型变量名称,变量名称;连续定义,多个变量之间用逗号(,)号隔开inta,b,c;变量名的命名的规范变量名属于标识符,所以必须严格遵守标识符的命名原则可以利用=号往变量里面存储数据在C语言中,利用=号往变量里面存储数据,我们称之为给变量赋值intvalue;value=998;//赋值注意:C常量998赋值给左边的整型变量value赋值的时候,=号的左侧必须是变量(10=b,错误)为了方便阅读代码,习惯在=的两侧各加上一个空格变量的初始化C语言中,变量的第一次赋值,我们称为“初始化”初始化的两种形式先定义,后初始化intvalue;value=998;//初始化定义时同时初始化inta=10;intb=4,c=2;其它表现形式(不推荐)inta,b=10;//部分初始化intc,d,e;c=d=e=0;不初始化里面存储什么?随机数上次程序分配的存储空间,存数一些内容,“垃圾”系统正在用的一些数据如何修改变量值?多次赋值即可每次赋值都会覆盖原来的值intinti=10;i=20;//修改变量的值变量之间的值传递可以将一个变量存储的值赋值给另一个变量inta=10;intb=a;//相当于把a中存储的10拷贝了一份给b如何查看变量的值?使用printf输出一个或多个变量的值intinta=10,c=11;printf("a=%d,c=%d",a,c);输出其它类型变量的值doubleheight=1.75;charblood='A';printf("height=%.2f,血型是%c",height,blood);变量的作用域C语言中所有变量都有自己的作用域变量定义的位置不同,其作用域也不同按照作用域的范围可分为两种,即局部变量和全局变量局部变量局部变量也称为内部变量局部变量是在代码块内定义的,其作用域仅限于代码块内,离开该代码块后无法使用intmain(){inti=998;//作用域开始return0;//作用域结束}intmain(){{inti=998;//作用域开始}//作用域结束printf("i=%d\n",i);//不能使用return0;}intmain(){{{inti=998;//作用域开始}//作用域结束printf("i=%d\n",i);//不能使用}return0;}全局变量全局变量也称为外部变量,它是在代码块外部定义的变量inti=666;intmain(){printf("i=%d\n",i);//可以使用return0;}//作用域结束intcall(){printf("i=%d\n",i);//可以使用return0;}注意点:同一作用域范围内不能有相同名称的变量intmain(){inti=998;//作用域开始inti;//报错,重复定义return0;}//作用域结束inti=666;inti;//报错,重复定义intmain(){return0;}不同作用域范围内可以有相同名称的变量inti=666;intmain(){inti=998;//不会报错return0;}intmain(){inti=998;//不会报错return0;}intcall(){inti=666;//不会报错return0;}变量内存分析(简单版)字节和地址每一个小格子代表一个字节每个字节都有自己的内存地址内存地址是连续的变量存储占用的空间一个变量所占用的存储空间,和定义变量时声明的类型以及当前编浑环境有关类型char111244float444888short222448888void*248变量存储的过程根据定义变量时声明的类型和当前编译环境确定需要开辟多大存储空间在内存中开辟一块存储空间,开辟时从内存地址大的开始开辟(内存寻址从大到小)将数据保存到已经开辟好的对应内存空间中intmain(){intnumber;intvalue;number=22;value=666;}#include<stdio.h>intmain(){intnumber;intvalue;number=22;value=666;printf("&number=%p\n",&number);printf("&value=%p\n",&value);}//0060FEAC//0060FEA8先不要着急,刚开始接触C语言,我先了解这么多就够了.后面会再次更深入的讲解存储的各种细printf函数printf函数称之为格式输出函数,方法名称的最后一个字母f表示format。其功能是按照用户指定的格式,把指定的数据输出到屏幕上printf函数的调用格式为:printf("格式控制字符串",输出项列表);例如:printf("a=%d,b=%d",a,b);非格式字符串原样输出,格式控制字符串会被输出项列表中的数据替换注意:格式控制字符串和输出项在数量和类型上必须一一对应格式控制字符串形式:%[标志][输出宽度][.精度][长度]类型类型格式:printf("a=%类型",a);类型字符串用以表示输出数据的类型,其格式符和意义如下所示类型含义d有符号10进制整型i有符号10进制整型u无符号10进制整型o无符号8进制整型x无符号16进制整型X无符号16进制整型f单、双精度浮点数(默认保留6位小数)e/E以指数形式输出单、双精度浮点数以最短输出宽度,输出单、双精度浮点数c字符s字符串p地址##include<stdio.h>intmain(){inta=10;intb=-10;floatc=6.6f;doubled=3.1415926;doublee=10.10;charf='a';//有符号整数(可以输出负数)printf("a=%d\n",a);//10printf("a=%i\n",a);//10//无符号整数(不可以输出负数)printf("a=%u\n",a);//10printf("b=%u\n",b);//429496786//无符号八进制整数(不可以输出负数)printf("a=%o\n",a);//12printf("b=%o\n",b);//37777777766//无符号十六进制整数(不可以输出负数)printf("a=%x\n",a);//aprintf("b=%x\n",b);//fffffff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论