兰州E931阳光网盟

 找回密码
 加入阳光

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
楼主: 左庶

【原创】阳光强军计划-之-C语言描述

[复制链接]
发表于 2005-4-29 22:41:02 | 显示全部楼层
    此总结第一段第二句,需要在此更改:
   
    了解到,C语言是一种非常灵活的语言,但是应用它的时候要非常的严谨与仔细。
发表于 2005-5-6 21:33:10 | 显示全部楼层
    我这几天把第一章反反复复看了好几遍,又发现一些问题:

    在实型变量中,我们学习了float,知道此类型数据的有效数字是6~7,在应用时要避免很大的数相加或相减很小的数,否则就会“丢失”小的数。

    那么我用一个90除去80时,用”%f“输出时,却是0.000000,实在找不出原因,请老题解惑。辛苦了!
发表于 2005-5-6 21:55:57 | 显示全部楼层
    我在练习的时候,发现一个问题不解:

    我们学习知道无符整型变量只支持正,但是当我编译以下程序时发现出现负数,这是为何?
    #include <math.h>
    #include<stdio.h>
    main()
    {
    unsingned int a,b;
    a=32767;
    b=a+2;
    printf("%d,%d"a,b);
    };
 楼主| 发表于 2005-5-26 10:57:29 | 显示全部楼层
第四章        C程序设计

4.1 简述

C语句可以分为5类:

1>控制语句,完成一定的控制功能.C有九种控制语句,它们是:
if()~else~                条件语句
for()~                        循环语句
while()~                循环语句
do~while()                循环语句
continue                结束本次循环语句
break                        中止执行switch或循环语句
switch                        多分支选择语句
goto                        转向语句
return                        从函数返回语句

2>函数调用语句。
3》表达式语句。
4》空语句。

这就是一个空语句。
5》符合语句。用{}括起来的语句,叫做符合语句,又称分程序。

4.2        赋值语句

4.3        数据输入输出的概念及在C语言中的实现

C本身不提供输入输出语句,输入和输出操作是由函数来实现的。C提供了一些输入输出函数。如:printf

scanf。在使用它们时,千万不要以为它们是C的输入输出语句。printf和scanf不是C的关键字,而只是函

数的名字。实际上可以完全不适用,printf和scanf,而另外编写两个输入输出函数,用其它函数名。C提

供的函数是一库的形式存放在系统中,它们不是C语言文本中的组成部分。

C中有一批“标准输入输出函数”,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。

其中有:putchar(输出字符),getchar(输入字符),printf(格式输出),scanf(格式输入),puts(输出字

符串),gets(输入字符串)。

在使用C的库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户原文件中。在头文件

中包含了与用到的函数有关的信息。。例如,使用标准输入输出库时,用用到“stdio.h”文件。文件“h

”是head的缩写。文件开头应有以下预编译:

#include <stdio.h>
#include "stdio.h"

stdio.h是standard input & output的缩写。考虑到printf & scanf函数使用的频繁,请不要忘记使用预

编译命令。
 楼主| 发表于 2005-5-26 11:24:12 | 显示全部楼层
以下是引用风的色彩在2005-4-29 21:36:40的发言:
    通过这段时间C语言的学习,对于C语言有了一个最基本的认识。了解到,C语言是一种非常灵活的语言,也一是种非常严谨的语言。通过对它的学习,不仅得到了知识的补充,更是让我在其中受到启发,知道了作为一个计算机从业人员最基本的职业操守,对我来说又是一次质的飞跃。
     在第一章结束之时,我作了一个总结:一方面回顾一下过去所学的知识;另一方面,主要还是有些疑问需要向老师请教。
      其实在第一章中最重要的是两个重点:一是函数;二是数据类型。
      在这里我就不在一一重复它们了。
       我有以下问题不解,请老师赐教:
        1、数制的转换:八进制数如何转换成十进制数?
        2、实型分为单精度与双精度型,哪如果我要扣留小数点后三位我该如何做呢?我曾经试图用printf(“%f”,a),但是得出的结果大相径庭。
        3、编写程序当中,在函数体{}内的语句的顺序是否也会影响到运算的顺序呢?
             比如:int wind=20;
                      wind=++wind;
                      shine=wind++;
                      printf(“%d,%d”,wind,shine)
      像这个程序是不是因为wind在先,所以先算出wind,然后再代入下面的语句中,是这
样吗?
     
     先到这里,再以后的实践当中,可能会有更多的问题需要向老师您请教!请多多费心、费神了。

     生日快乐!
     祝你天天乐哈哈,天天哈哈乐!


嗯~~

看到你的发问,我很高兴,我为你对计算机浓厚的兴趣感到高兴,我相信在不久的将来,又有一位计算机天才会闪亮登场.你的进步非常快,能够注重细节学习的计算机人员才是真正的专业人员.

1.你的问题很好,进制转换和函数是C程序里最渺小的知识点,但恰恰是最重要的,因为,它能帮我们全方位的理解数学知识,这样达到对数,对结构更深刻的理解,你能注重他们的学习,让我深深地感觉到,怕你培养成一位专业人员,而不是计算机爱好者是大有希望的,但必须有你坚持不懈的努力才能实现这个梦想!努力吧,年轻人~~

关于你的第一个问题,我不直接回答,我接下来将会插入一节"关于进制的选修课"准们帮助你在这方面的深入学习,此后,若有不明白处,再作发问,相信天才的你,会轻易学懂他们,期待你的收获.

2.那么首先我们要明白,数据类型,是一种对变量值的具体定义,仅定义取值范围,并不表示具有更多意义的操作性.那么关于取若干位有效数字的问题,那么这涉及到具体的数值操作(请注意数值定义预数值操作的问题),所以,要达到取3位有效数字的目的,我可以通过调用某些特定函数或编写某些语言来实现这一数值操作.

3.absolute yes.我曾不止一次的强调,C是顺序结构,任何语言都不例外,因为我们人的脑袋具有较强的逻辑思维,而电脑恰恰相反,所以,我们要向上帝一样赐给他们“顺序”,函数(子函数等)在整个程序里是灵活的,不受顺序的影响,但是,语句一定得按照顺序执行,因为,这是程序的基本工作原理。就象我们是不可以先执行语句,再定义变量的道理是一样的。

请务必继续努力,自强不息!

 楼主| 发表于 2005-5-26 14:43:46 | 显示全部楼层
[fu=风的色彩]

选修课 二进制、八进制、十六进制

1 为什么需要八进制和十六进制?

2 二、八、十六进制数转换到十进制数

  2.1 二进制数转换为十进制数

  2.2 八进制数转换为十进制数

  2.3 八进制数的表达方法

  2.4 八进制数在转义符中的使用

  2.5 十六进制数转换成十进制数

  2.6 十六进制数的表达方法

  2.7 十六进制数在转义符中的使用

3 十进制数转换到二、八、十六进制数

  3.1 10进制数转换为2进制数

  3.2 10进制数转换为8、16进制数

4 二、十六进制数互相转换

5 原码、反码、补码

6 通过调试查看变量的值

7 本章小结


这是一节“前不着村后不着店”的课。不同进制之间的转换纯粹是数学上的计算。不过,你不必担心会有

么复杂,无非是乘或除的计算。

生活中其实很多地方的计数方法都多少有点不同进制的影子。

比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我

想我们现在一定是在使用20进制。

至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双

袜子。

生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度……



1 为什么需要八进制和十六进制?
 

编程中,我们常用的还是10进制……必竟C/C++是高级语言。

比如:

int a = 100,b = 99;

不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解

决问题。

但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:

0000 0000 0000 0000 0110 0100

面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。

 

用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是16

或8进制,而不其它的,诸如9或20进制呢?

2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制

或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现

这一点。

2 二、八、十六进制数转换到十进制数


2.1 二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

所以,设有一个二进制数:0110 0100,转换为10进制为:

下面是竖式:

 

0110 0100 换算成 十进制

 

第0位 0 * 20  =  0

第1位 0 * 21  =  0

第2位 1 * 22  =  4

第3位 0 * 23  =  0

第4位 0 * 24  =  0

第5位 1 * 25  = 32

第6位 1 * 26  = 64

第7位 0 * 27  =  0     +

---------------------------

              100   

 

用横式计算为:

0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100

 

0乘以多少都是0,所以我们也可以直接跳过值为0的位:

1 * 22 + 1 * 23 +  1 * 25 + 1 * 26 = 100

 

2.2 八进制数转换为十进制数
八进制就是逢8进1。

八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

所以,设有一个八进制数:1507,转换为十进制为:

用竖式表示:

 

1507换算成十进制。

 

第0位 7 * 80 = 7

第1位 0 * 81 = 0

第2位 5 * 82 = 320

第3位 1 * 83 = 512   +

--------------------------

              839

同样,我们也可以用横式直接计算:

7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839

 

结果是,八进制数 1507 转换成十进制数为 839

 

2.3 八进制数的表达方法
C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。

所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。

由于C和C++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,C和C++语言的数值表达的第二种进制法。

现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:

 

int a = 100;

我们也可以这样写:

int a = 0144; //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。

 

千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。

 

2.4 八进制数在转义符中的使用
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。

比如,查一下第5章中的ASCII码表,我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。

事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。

 

2.5 十六进制数转换成十进制数
2进制,用两个阿拉伯数字:0、1;

8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;

10进制,用十个阿拉伯数字:0到9;

16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?

 

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

假设有一个十六进数 2AF5, 那么如何换算成10进制呢?

 

用竖式计算:

 

2AF5换算成10进制:

 

第0位:  5 * 160 = 5

第1位:  F * 161 = 240

第2位:  A * 162 = 2560

第3位:  2 * 163 = 8192  +

-------------------------------------

                 10997  

直接计算就是:

5 * 160  + F * 161 + A * 162 + 2 * 163 = 10997

(别忘了,在上面的计算中,A表示10,而F表示15)

 

现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。

假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:

1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100

 

2.6  十六进制数的表达方法
如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。

C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)

以下是一些用法示例:

 

int a = 0x100F;

int b = 0x70 + a;

 

至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。

 

2.7 十六进制数在转义符中的使用
 

转义符也可以接一个16进制数来表示一个字符。如在6.2.4小节中说的 '?' 字符,可以有以下表达方式:

 

'?'     //直接输入字符

'\77'   //用八进制,此时可以省略开头的0

'\0x3F' //用十六进制

 

同样,这一小节只用于了解。除了空字符用八进制数 '\0' 表示以外,我们很少用后两种方法表示一个字符。

 

3 十进制数转换到二、八、十六进制数
3.1 10进制数转换为2进制数
 

给你一个十进制,比如:6,如果将它转换成二进制数呢?

 

10进制数转换成二进制数,这是一个连续除2的过程:

把要转换的数,除以2,得到商和余数,

将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。

 

听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。

 

“把要转换的数,除以2,得到商和余数”。

那么:

要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 (不要告诉我你不会计算6÷3!)



“将商继续除以2,直到商为0……”

现在商是3,还不是0,所以继续除以2。

那就: 3 ÷ 2, 得到商是1,余数是1。

 

“将商继续除以2,直到商为0……”

现在商是1,还不是0,所以继续除以2。

那就: 1 ÷ 2, 得到商是0,余数是1 (拿笔纸算一下,1÷2是不是商0余1!)

 

“将商继续除以2,直到商为0……最后将所有余数倒序排列”

好极!现在商已经是0。

我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!

 

6转换成二进制,结果是110。

 

把上面的一段改成用表格来表示,则为:
 



见鬼怎么没法上传图片

[/fu]















[此贴子已经被hidebluer于2005-5-26 14:58:05编辑过]

 楼主| 发表于 2005-5-26 14:55:01 | 显示全部楼层
[fu=风的色彩]图片上传不了,奇怪,让我查查服务器再写[/fu]
发表于 2005-5-27 13:26:12 | 显示全部楼层

阳光强军计划----C语言描述的有关教程,非常的精彩。
学习是不懈的积累,阳光强军,指日可待。
固顶奖励此帖,衷心希望阳光技术规划组不断发展壮大!
发表于 2005-5-27 14:00:27 | 显示全部楼层
左盟主的帖子让我受益匪浅   真得很感谢你!
发表于 2005-5-30 13:23:01 | 显示全部楼层
很强的贴子,楼方高人哪.

小声音说一下,能不能给些算法的讲结,或是搞些这方面的放在上面,供我们这些菜人学习呀,

不胜感谢,继续关注中!!
您需要登录后才可以回帖 登录 | 加入阳光

本版积分规则

小黑屋|手机版|Archiver|兰州E931阳光网盟 ( 陇ICP备05001119号 )

GMT+8, 2021-3-1 17:52 , Processed in 1.124460 second(s), 15 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表