兰州E931阳光网盟

 找回密码
 加入阳光

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]
发表于 2005-3-31 21:45:03 | 显示全部楼层
  看完了,不过有的地方还是不太明白。
 楼主| 发表于 2005-4-5 17:46:00 | 显示全部楼层
3.4        实行数据

3.4.1        实型常量的表示方法

实数又称浮点数。实数有两种表示形式:
1》实型常量的表示型式。它由数字和小数组成。
2》指数形式。如123e3或123E3都代表123*10^3。

3.2        实型变量

1.实型数据在内存中的存放形式

2.实型变量的分类

类型                比特数        有效数字        数值范围
float                32        6~7        10^-37~10^38
double                64        15~16        10^-307~10^308
long double        128        18~19        10^-4931~104932               

3.实行数据的舍入误差

因为实型变量是由有限的存储单元组成的,因此提供的有效数字也是有限的。在有效数位以外的数字将被舍去。由此,可能会产生一些误差。例如:a+20的结果显然应该比a大。

我们看看这个程序:

main()

{

float a,b;
a=123456.789e5;
b=a+20;
printf("%f",b);

}

请注意:

程序内printf函数中的“%f”是输出一个实型时的格式符。请执行这个程序,看看有什么不同。


待续
 楼主| 发表于 2005-4-6 19:14:08 | 显示全部楼层

你发现了吗?a的值比20大很多,a+20的理论值应是12345678920,而一个实型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确的表示该数。运行得到a和b的值是12345678848.000000,前8位是准确的,后几位是不准确的,把20加在后几位上,是无意义的。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。

3.4.3        实型常量的类型



3.5        字符型数据

3.5.1        字符常量

C的字符常量是用单引号括起来的一个字符。如‘shine’‘windcolor’‘boeing’‘?’等,都是字符常量,注意‘a’‘A’是不同的字符常量。

除了上述,C还允许特殊形式的字符常量,就是以一个“\”开头的字符序列。例如,前面我们曾多次在printf函数中见到的‘\n’,它代表一个“换行”。这是一种“控制字符”,在屏幕上不会直接显示。在程序中也无法使用一般形式表示他,只能用特殊形式来表示。

常用的以“\”开头的特殊字符见表3.3

表3.3 转义字符及其作用

字符形式        含义                        ASCII代码
\n                换行,                        10
\t                水平制表,到一个TAB位        9
\b                退格                        8
\r                回车,将当前位移到本行首13
\f                换页                        12
\\                反斜杠字符“\”                92
\'                单引号字符                39
\"                双引号字符                34
\ddd                1到3位8进制数所代表的字符
\xhh                1到2位16进制数所代表的字符

以上表3.3中的转义字符就是将\后面的字符转换成另外的意义。

例3.5        转义字符的使用

main()

{

printf(" ab c\t de\rf\tg\n");
printf("h\ti\b\bj k");

}

先不要使用C程序,用大脑算出以上程序的输出结果。
提示:一个TAB位等于8列。

待续
发表于 2005-4-6 23:01:38 | 显示全部楼层
  看完了。
  
发表于 2005-4-7 14:20:21 | 显示全部楼层
多了!!我接受比了!!!吃不完 !!1
 楼主| 发表于 2005-4-9 19:28:34 | 显示全部楼层


第一个printf函数现在第一行左端开始输出“ ab c”(注意a前有空格),然后遇到“\t”,它的作用是跳到下一个制表位,也就是说第九列。然后再从第九列开始输出de,之后\r要求我们返回该航行首,也就是本行的第一列,输出f,然后\t,再次从第9列开始输出,g.\n还行至下一行,也就是第二行。

第二个printf函数,

输出h,
光标移至第九列
输出i,
退格
退格
(目前是第七列)
输出j k

整个程序运行完成后,将会是以下结果

f       gde
h      j k

3.5.2        字符变量

    字符型变量是用来存放字符的变量。

例如

char name;
name='wind_colors';

注意:字符值必须用引号。

3.5.3        字符数据在内存中的存储形式及其使用方法

将一个字符常量放到一个字符变量中,实际上并非将字符本身放入到内存单元中,而是将该字符相应的ASCII代码存到该单元中。例如,通过ASCII表,我们可以查到a的的ASCII值为97,然后,C会把a转换成97再转换成二进制01100001存储到内存中。

例3.6        向字符变量赋以整数

main()

{

char char1,char2;
char1 = 97,char2 = 98;
printf("%c%c\n",char1,char2);
printf("%d%d",char1,char2);
}

之后,运行程序会得到这个结果,看看是否和你想象的一样:

a  b
97 98

小技巧:        大小写字母的转换

1》在ASCII代码中小写字母比其相应的大写字母的ASCII码大32。反之。……。
2》c允许字符数据与整数直接进行算术运算。
3》字符数据与整型数据可以相互赋值。如

int i;
char c;
i = 'a';
c = 97;

例3.7       

main()

{

char c1,c2;
c1 = 'a';
c2 = 'b';
c1=c1-32;
c2=c2-32;

printf("%c%c",c1,c2);

}

运行结果

A        B

3.5.4        字符串常量

注意:字符常量不等于字符串常量。

字符常量使用‘’,而字符串常量使用“”

字符串常量不可以付给字符变量,如

char c;
c = "a";

是极其错误的。

为什么是错误的呢??

因为字符常量在内存中使用一个单元,但字符串常量使用两个(1个单元用于本身字符的存储,另一个单元用于串结束符\0的存储,当然,这一切工作是由c完成的,所以,是不可见的)

把两个单元量的数据存储于一个单元显然是非常可笑的。

3.6        变量赋初值

例如
int a= 3;
float f=3.5;
chat c='a';

int a,b,c=5;
//这种方法是正确的,也很方便,但是他的意思是定义a,b,c为整型,且c的初值为5,千万不要搞错

int a=b=c=5;
//a,b,c初值是5,但并不是他们的关系是相等的。请注意。

上面的语句相当于
int a;
int b;
int c;
a =5;
b=5;
c=5;

3.7 各类数值间的混合运算

3.8 算术运算和算术表达式

待续
发表于 2005-4-13 21:40:09 | 显示全部楼层
    老师,这两天很忙吧。

    忙也要注意身体呀。
 楼主| 发表于 2005-4-18 17:20:17 | 显示全部楼层
3.8.1        C运算符简介

c的运算符有以下几类:
1.算术运算符        +        -        *        /        %
2.关系运算符        >        <        ==        >=        <=        !=
3.逻辑运算符        !        &&        ||
4.位运算符        <<        >>        ~        |        ^        &
5.赋值运算符        =及其扩展赋值运算符
6.条件运算符        ?        :
7.逗号运算符        ,
8.指针运算符        *        &
9.求字节数运算符        sizeof
10.强制类型转换运算符        (类型)
11.分量运算符        .        →
12.下标运算符        []
13.其他       

3.8.2        算术运算符和算术表达式

1.基本算术运算符

+、-、*、/,即加减乘除,就不多讲啦,因为该问题涉及智商问题,非本讲座研究范畴。

%,模运算符,或称求余运算符,参与运算的数值必须是int。

2.算术表达式和运算符的优先级与结核性

小学内容,略。就是类似有括号先算括号里的一些基本数学知识。

3.强制类型转换运算符

以例说明

(doubule)wind
(int)(wind+color)
(float)(5%3)

格式

<类型名>(表达式)

例3.8        强制类型转换

main()
{
int toptic;
float time;
topic = 3.6;
time = (int)topic;
print ("toptic=%f,time=%d",x,i);
}

使用大脑算出该程序的结果。
















toptic=3.600000,time=3

toptic类型仍为float,支仍等于3.6。

4.自增、自减运算符

(重点、重点、重点、重点、重点、)
 楼主| 发表于 2005-4-18 18:14:22 | 显示全部楼层

其实,该部分并不复杂,只不过是一个重要的实用技巧,所以,请大家务必掌握。

其作用是使变量的值增1或减1,如:

++i,--i                在使用i之前,先使i的值加(减)1
i++,i--                在使用i之后,使i的值加(减)1

为了方便理解,我在这里简单示意,如下

++i        相当于        先执行i=i+1,再使用i
i++        相当于        先使用i,再执行i=i+1

那么,用大脑算算下面的语句

int wind=20;
wind = ++wind;
shine = wind++;
printf("%d,%d",wind,shine)
shine = 1979;
printf ("%d",++shine);

那么,程序的运行结果应该是什么呢??下面的输出值正确吗?

22 21 1980

3.9        赋值运算符和赋值表达式

1.赋值运算符

=即赋值运算符。

2.类型转换

如果赋值运算符两侧的类型不一致,单都是数值型或字符型时,在赋值时要进行类型转换。

1》将实型数据赋给整型变量时,c将会自动舍弃时数的小数部分,之后赋值。
2》将整型数据赋给实型变量时,数值不变,c会将其自动转换成浮点数,之后赋值,此时的值应该会有许多小数位。不妨自己用程序测试看看。
3》将一个double赋给float时,c会自动截取前7位有效数字,存放到float变量中。但应注意数值范围不能溢出。切忌。



float f;
double d=123.456789e100;
f=d;

就会出现溢出错误。

4》其余类型转换,推理可得。用程序配合学习,多演练不同的类型转换,但必须是合理的。

3.10         逗号运算符和逗号表达式

3+5,6+8

成为逗号表达式,又称为“顺序求值运算符”。通常一般形式为

表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。所以,这个例子的值为14。

用大脑算算这个表达式:

shine=3*5,shine*4

有结果拉吗?好的,先在再用c验证一下……

你发现拉了什么问题,好好总结一下。

注意:赋值运算符的优先级高于逗号表达式。

好的,通过这个例子我们知道,原来c也是运算次序的。

求下面解表达式的值,还有每个表达式中,变量shine和boeing的值

shine = (boeing=17,24)
shine  = boeing = 23,2*boeing

boeing = (shine*2,5+6,8/4,shine+23)

最后一个等式你算出来了吗?没错,是23。

这是逗号表的事的扩展形式,即

表达式1,表达式2,表达式3,……,表达式n

那么,其结果,为表达式n的值


至此,第一章的内容就全部结束拉,类似偶拉,头回地地道道手把手的教人,请学习者们,认真复习之前的所有内容,回头,我会出一分考卷,来检测大家在这一单元的学习状况,以变革为学习者,发现自己的不足。

那么,下一张,我们将会涉及到大家最感兴趣的程序设计,所以,之前的基本功一定要打扎实,好好努力吧。

开饭喽,厚厚厚,好开心乃~~

待续
发表于 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,然后再代入下面的语句中,是这
样吗?
   
    先到这里,再以后的实践当中,可能会有更多的问题需要向老师您请教!请多多费心、费神了。

    生日快乐!
    祝你天天乐哈哈,天天哈哈乐!
您需要登录后才可以回帖 登录 | 加入阳光

本版积分规则

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

GMT+8, 2021-3-1 18:04 , Processed in 1.123397 second(s), 15 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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