编程语言的能力追求T型。

以前学过C语言,但是只学了理论。

从今天开始,我买了本《C语言程序开发范例宝典》。我要把它通关掉。

这应该可以极大地提升我的编程能力。

第一章  基础知识

这章没太多难点,基本都是以前提到的基础语句,语法。

有意思的是:

020  对调数问题

问题:一个两位正整数,将个位与十位对调后得到的新正整数,就是原正整数的对调数。如56和65.现给定一个两位正整数,问能否找出另一个对调后不同的正整数,使得这两个正整数之和等于它们各自的对调数之和。如:63+47=36+74.

逻辑:逻辑很简单。既然给定了一个两位的正整数了。那么它的对调数也确定了。然后设另一个数为ab,它的对调书为ba。循环,验证。OK。

程序代码:<略,如果需要,可以找我>

反思:其实,我想的是是否可以通过对题目的数学分析,来降低程序的代码量以及程序运行的耗损。通过运行后,会发现一个问题。两个正整数的个位与十位加起来都是相同的。经过数学验证后,发现这点是确定的。所以,可以通过两者和来大幅度降低循环所需的时间。

028  设计魔方阵

问题:打印5阶幻方即它的每一行,每一列,对角线之和都相等。

逻辑:其实,一开始我看到这个问题时,有点纠结。我第一反应是中间(3,3)位置是13,第二反应是利用循环验证,第三反应是,我要优化这个程序,第四反应是中间就一定不可以是其他数字吗?不过,我为了解决问题。我确定了中间数字为13,其他关于中间位置对称的两个数字和定为26.这样再采取循环验证,获取的结果必然正确。

然后我看了书上的逻辑。相信我,你不会想知道的。它运行的结果只有一个确定的5阶幻方。(如果需要,可以找我)。

程序代码:<略,如果需要,可以找我>

反思:我修改了程序,将中间的数字设为一个通过循环得到的不确定数字。再添加了一个条件判断,只显示不是13的5阶幻方。结果,我是不会说的。你们可以试试。

其实从数学角度思考一下。幻方有意思的是不同位置,它的计算次数是不同的。一共有三个分类,优先级:1.中间点:4次;2.对线点:3次;其他点:2次。想要幻方成立,首先要使得数字和均衡。有时候会发现,规则是那么美丽。

038  分数计算器

问题:计算分数之间的基本运算。

其实,问题不难。只是你不一定会记得利用最小公倍数,和最大公约数。

反思:当你想不到如何解决这个问题时,就将你对这个问题的思考过程细化一下。你就会发现可以靠程序模拟的大脑思考过程了。

049  用宏定义实现值转换

其实,之所以提这一点。主要是想说一个小的重点。

一定要记得宏定义后的宏转换,就是直接替换,不存在()什么的计算优先级。

如:  #define a 5+8

   b=2*a*3;

   (结果b=34,而不是b=78.因为实际运行的是b=2*5+8*3;)

050  循环移位

这是第一章最难的一节(我才不会说老师上课几乎没提过这个,所以我直接眼黑了)

知识点:位运算  

其实将数据二进制化,然后进行移位运算。最后将结果转化为所需要的进制。

引用:

1.位左移

左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。例如int a,b;

a=5;

b=a<<2;

则b=20,分析过程如下:

(a)10=(5)10=(0000 0000 0000 0101)2

b=a<<2;

b=(0000 0000 0001 0100)2=(20)10

从上例可以看出位运算可以实现二倍乘运算。由于位移操作的运算速度比乘法的运算速度高很多。因此在处理数据的乘法运算的时,采用位移运算可以获得较快的速度。

提示 将所有对2的乘法运算转换为位移运算,可提高程序的运行效率

2.位右移

 

位右移运算的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。如果当前的数为无符号数,高位补零。例如:

int (a)10=(5)10=(0000 0000 0000 0101)2

b=a>>2;

b=(0000 0000 0000 0001)2=(1)10

如果当前的数据为有符号数,在进行右移的时候,根据符号位决定左边补0还是补1。如果符号位为0,则左边补0;但是如果符号位为1,则根据不同的计算机系统,可能有不同的处理方式。可以看出位右移运算,可以实现对除数为2的整除运算。

提示 将所有对2的整除运算转换为位移运算,可提高程序的运行效率

上面这段当然不是我写的了。

采摘自http://blog.chinaunix.net/uid-21411227-id-1826986.html

写得很好,真的。起码我看了之后,发出了哦的一声。

其中有意思的还有:

(2)数值交换 

数值交换。例如a=3,b=4。在例11-1中,无须引入第三个变量,利用位运算即可实现数据交换。以下的操作可以实现a,b两个数据的交换:

a=a^b;

b=b^a;

a=a^b;

其实我刚开始接触编程时,也弄了个只用两个变量的数值交换方法:

a=a+b;

b=a-b;

a=a-b;

说明,我也是蛮不错的嘛。

至于其中的逻辑算法,就不提,很简单的。

至于有关负数部分,暂时不提,牵扯到电脑二进制存储问题。如果有需要,可以找我。或者百度。

这样下来第一章就结束了。第一次写这个。感觉好low。感觉我还是擅长表述一些。

总结:基础是最为重要的。后面再多的程序也是由基础构成的。基础学好,可以省很多事儿。

解决问题,我现在的原则是:从数学思想和程序思想两个方面着手,获取最优化的方法。

C语言范例学习01的更多相关文章

  1. C语言范例学习04

    第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算 ...

  2. C语言范例学习03-中

    栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...

  3. C语言范例学习03-上

    第三章 数据结构 章首:不好意思,这两天要帮家里做一些活儿.而且内容量与操作量也确实大幅提升了.所以写得很慢. 不过,从今天开始.我写的东西,许多都是之前没怎么学的了.所以速度会慢下来,同时写得也会详 ...

  4. C语言范例学习06-上

    第六章 文件操作 前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了.这章正如我标题所写的,是C语言在文件上的操作.学习了这个后,你们可以自行编辑一些所需的快捷程序,来实现一些既定的目的 ...

  5. c语言基础学习01

    =============================================================================每一种语言都有其独特的语法规则与语言定义. 指 ...

  6. C语言范例学习02

    第二章 指针 算是重点吧,这也是C语言的特色啊,直接访问物理存储. 重点: 指针就是一个存放它指向变量地址的变量,好绕口.   区分*在定义是与引用是的作用.   区分*.&的不同.   指针 ...

  7. C语言范例学习03-下

    树与图 3.5 二叉树及其应用 PS:二叉树是最经典的树形结构,适合计算机处理,具有存储方便和操作灵活等特点,而且任何树都可以转换成二叉树. 实例101 二叉树的递归创建 实例102 二叉树的遍历 问 ...

  8. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  9. Java学习01

    Java学习01 第一章 1.JRE与JDK JDK(JAVA Develop Kit,JAVA开发工具包)提供了Java的开发环境和运行环境,主要用于开发JAVA程序,面向Java程序的开发者; J ...

随机推荐

  1. vmware 无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件

    点击“开始→运行”,在运行框中输入 CMD 回车打开命令提示符,然后依次执行以下命令. net start vmci net start vmx86 net start VMnetuserif sc ...

  2. git 在提交之前撤销add操作

    问题 在使用git时,在未添加.ignore文件前使用 git add . 将所有文件添加到库中,不小心将一些不需要加入版本库的文件加到了版本库中.由于此时还没有提交所以不存在HEAD版本,不能使用 ...

  3. 本人独立博客:http://www.zjmainstay.cn

    为了方便各种管理,本人创建了独立博客,博客地址:http://www.zjmainstay.cn 欢迎新老朋友围观.

  4. WCF中因序列化问题引起的异常和错误。

    尝试对参数 http://tempuri.org/ 进行序列化时出错: parameters.InnerException 消息是“不应为数据协定名称为“DBNull:http://schemas.d ...

  5. 用MapX与C#开发地理信息系统

    转:http://www.cnblogs.com/dachie/archive/2010/08/17/1801598.html 第四章 MapX与C#实例... 5 4.1 MapX图层建立... 5 ...

  6. Fireasy新版本发布

    1.5.40.42028  2015-2-4 ** Fireasy.Common 1.DynamicBuilder新增使用表达式SetCustomAttribute的重载方法 2.DateTimeEx ...

  7. MyBatis知多少(4)MyBatis的优势

    MyBatis是一个混合型解决方案.它汲取了所有这些解决方案中最有价值的思想并将它们融会贯通.下表总结了MyBatis从我们之前讨论的那些方案中所汲取的思想. 方 案 相同的优点 解决的问题 存储过程 ...

  8. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  9. Linux高级编程--04.GDB调试程序(设置断点)

    调试已运行的程序 在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb PID格式挂接正在运行的程序. 先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程 ...

  10. Asp.Net(C#)自动执行计划任务的程序实例分析

    在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务.实现计划任务的方法也有很多,可以采用SQ ...