给一个网站如何做推广,要实现对网站中的所有内容进行搜索代码应该怎么写,做网站的运营维护都要学什么,中国十大公司排行榜一、一个极简但完整的C程序
我们编写程序是为了解决问题和任务的。
1、任务#xff1a; 某个书店将每本售出的图书的书名和出版社#xff0c;输入到一个文件中#xff0c;这些信息以书售出的时间顺序输入#xff0c;每两周店主会手工计算每本书的销售量、以及每个出版社的…一、一个极简但完整的C程序
我们编写程序是为了解决问题和任务的。
1、任务 某个书店将每本售出的图书的书名和出版社输入到一个文件中这些信息以书售出的时间顺序输入每两周店主会手工计算每本书的销售量、以及每个出版社的销售量。报表以出版社名称的字母顺序排序以便下订单进货填补已经卖出去的书。
现在我们写一个程序来完成这个任务。
2、分解任务 将复杂问题分解成一个个容易实现的小问题。分而治之divide and conquer, 逐步求精stepwise refinement。 上面书店任务分成以下4个子任务 1读取销售文件 2根据书名和出版社名称计算销售量 3以出版社名称对书名进行排序 4输出结果
子问题3还是太复杂继续分隔任务 1读取销售文件 2根据书名和出版社名称计算销售量 3a按出版社排序 3b对每个出版社的书按书名排序 3c在每个出版社组中比较相邻的书名如果二者匹配增加第一个的数量删除第二个。 4输出结果
子问题脉络不清继续整理动作序列 1读取销售文件 2对文件排序————先按出版社然后在出版社内部按书名排序 3压缩重复的书名 4将结果写入文件 这个动作序列就是算法algorithm下面就是把这个算法转化为C语言的程序。
3、编写程序
1C语句 在C语言中操作数operand 操作符operator 表达式expression。也就是动作被称为表达式。 以分号结尾的表达式称为语句statement。语句是C中最小的程序单元。上述代码就是3条语句。
语句A是一个声明语句declaration。 book_count是标识符identifier或者叫符号变量symbolic variable,简称变量variable或者对象object。都是指计算机内存中的一块区域这块区域是存储整数值的这块区域与变量名book_count相关联。认真看过编译原理的同学就知道变量名其实是给程序员看的程序编译的时候变量名直接被编译器映射成首地址和长度(长度是从变量的类型上看到的比如上面的int类型)。 0是文字常量literal constant表示变量book_count被初始化为0。
语句B是一个赋值语句assignment。作用就是把变量books_on_shelf和变量books_on_order的值相加并把结果写入变量book_count的内存区域中。当然前提是books_on_shelf和books_on_order都已经被声明和初始化过了。
语句C是一个输出语句output。作用是在用户终端先输出一个字符串再输出与变量名book_count相关联的内存区域中的值。 cout是用户终端是输出操作符。
2编写C程序 把上述语句按逻辑语义分组就形成一些有名字的单元这些单元称为函数function。 每个程序都是由一系列函数组成的。那照葫芦画瓢我们把书店任务子任务1读取销售文件的实现语句都组织到一个称为readIn()的函数中。其他任务同理分别组织到sortBook()、compactBook()、printBook()函数。
在C中每个程序必须有一个main()函数程序才能运行。因为main函数是一个程序的入口(当然你也可以设置其他入口但每必要)。这个main函数是由程序员写的。
一个程序是不可能一下子从头到尾一口气写出来的都是渐进式一点点添加完成的所以下面我们先用哑函数来实现这个书店的任务也就是先把程序代码的整体大块写出来
解释 a、上图ABCDEF都是函数。通常函数由四部分组成返回类型、函数名、参数表、函数体。 void表示该函数没有返回值。int表示函数返回值是整数类型。 参数表由小括号括起来。多个参数由逗号分开。 函数体由花括号括起来。函数体由多个程序语句序列构成。
b、上图F函数是main函数main函数是一个程序的入口。也就是说这个程序是从main函数开始执行的然后是从上往下依次执行的除非遇到条件语句、分支语句、控制流语句等才会跳出执行跳出执行完毕后继续回到原来位置继续往下执行。 return 是C预定义的语句作用是终止函数的执行。return 后面的值是函数的返回值return value。在C标准中如果main函数没有显示的提供返回语句则默认返回0。
c、上例中函数BCDE都是定义函数。main函数里面的才是函数调用。当开始执行main函数时main函数体先调用invoke函数这部分在编译时讲过然后才是readIn,sortBook,依次往后执行到return 0后程序正常结束。
d、include是预处理器指示符preprocessor include directive预处理器指示符用#号 标识。作用是复制iostream文件中的内容到本文本文件中这是预处理器的作用预处理器又是捆绑在编译器中。 iostream是输入输出流库标准文件文件中就包括比如cout的信息。但是类似cout这样的关键字不是你可以直接在代码文本中使用的你还得加上using namespace std;语句才可以直接使用。 这条语句被称为using指示符using directive。C标准库中的名字都是在一个叫std的名字空间中声明的。using指示符告诉编译器要使用在名字空间std中声明的名字。
4、编译程序 当我们的文本程序文件————.cpp文件中的代码编写完毕后就改执行这个.cpp文件看它是否可以帮我我们完成书店的任务。 代码是人类认识的文本计算机cpu只认识0和1所以代码到执行中间还有很长的路这个路就是编译。 编译也是一个非常非常复杂的过程建议大家先看【C】编译原理-CSDN博客 这里我就简单说一些流程就好了。
1编辑-编译-调试 edit-compile-debug 在程序编译阶段一般情况下都会报出bug就是我们写的程序计算机理解不了编译器都会报出来比如你的代码犯了语法错误、类型错误等编译器就会报错此时你首先要明白既然报错就一定是你代码的错不可能是计算机的错所以要改的是你的代码。然后你就进入编辑-编译-调试这个循环过程直到顺利编译完毕没有bug为止。
2代码生成code generation 当编译成功后也就是你的代码被编译器成功转化为目标代码或汇编指令代码这些代码是cpu理解的代码。而你编译成功的结果一般是生成一个.exe的可执行文件如上图的G。
5、执行程序 双击运行G这个可执行文件就是上图的H。 如果H的运行结果符合我们的要求比如正确统计出来并显示那就任务完成。上图的结果H显然不是我们想要的结果哈哈那是因为的的代码还没开始写我们用的是哑函数这里主要展示项目开发的流程实际功能就根本没开始写呢。下面我们开始慢慢补充。
6、补充1 我们先不补充这几个函数我们补充一种情况比如如果销售很慢比如这两周店主卖出了0本或者只卖出了1本。当卖出0本时我们也要给店主回复个没有销售记录的提示。当卖出1本时我们就不必要排序和压缩了。当然如果卖出了2本或2本以上那就走正常流程了。我们先用if语句实现这种情况代码如下 1此时就得修改readIn函数的返回值我们根据readIn函数的返回值决定程序该如何执行。 2修改main函数。首先是获取readIn函数的返回值代码A用一个整型变量count接受readIn函数的返回值。 如果readIn函数返回值count大于1就是卖出了2本或者2本以上那我们正常执行就是继续执行排序、压缩。 如果readIn函数返回值count等于0就是没有销售返回一个字符串“no sales this nonth...” 如果readIn函数返回值count不等于0就执行else语句也就是B语句就是调用writeBook函数。
暂时先补充这一个逻辑后面我们学到相关的知识点在继续补充。