查看全部128种考试
软件水平考试
 考试动态 报考指南 历年真题 模拟试题 复习资料 心得技巧 专业英语 技术文章 软考论坛 考试用书
 程序员 软件设计师 网络管理员 网络工程师 系统分析师 数据库系统工程师
1
2
3
4
5
6
7
8
9
10
Exam8.com  
【字体: 程序员考试补课笔记-第二天
程序员考试补课笔记-第二天
spks.exam8.com 来源:狂风校园 更新:2004-12-26 13:20:00 软件水平考试 考试论坛

因为前天老师摸到我们的底的关系,所以今天要补一补前面的基础部份。他先是列出一个数据类型的表,如下:
           | 整型
           | 字符型
     | 基本类型<         | 单精度型
     |      | 实型(浮点型)<
     |      | 枚举类型    | 双精度型
     |
数据类型<      | 数组类型
     | 构造类型< 结构体类型 (结构)
     |     | 共用体类型 (联合)
     | 指针类型
     | 空类型

  上面这个表,基本类型是我们平常用得最多的,包括整型、字符型、实型(浮点型),就从这里最常用的数据类型说起吧。
  说起C语言的数据内容就要说说计算机里存放的数据是究竟怎么一回事,大家应该都知道计算机只可以处理二进制的数吧,因为是硬件的关系(二态器件),这些只能有两种表示的状态,所以运用到计算机里就显得特别有用了。从现在开始我们要知道计算机处理的所有数据都是二进制数,那么他究竟是怎么运算的呢?老师先给一些十进制数转换为二进制数的几道题我们做,这些小儿科当然是没问题啦,很简单的就做了出来。老师当然知道我们是会做的了,但是其实是想我们在做这些题目的时候找出更简单的转换方法。例:
10111012 =(93)10 很简单的就可以计算出来了,我的方法就是传统的计算方法。它们都有自己的位权,第一位就是20,第二位是21,跟着的都如些类推,将有1的地方乘上该位的数跟着相加起来就等于93了。这里说说其实二进制的次方特别好算,就像我们的内存一样阶梯上去的,1-2-4-8-16-32-64-128-256-512-1024……你知道这规律吗,如果知道是不是计算起来特别别好办呢!
  不过老师在这里提出了一个更好的方法,起码比一个一个加上去也快多了。就是将那个要转换的数变为全都是1111111,你知道这个数是多少吗?其实就是有一技巧在里面,把它看成10000000 减 1吧!那么是不是很快就知道10000000是多少呢,没错就是128嘛,再减1就是127了,在些基础上试着将原来的那个二进制数位为零的那两个数求出来,第一个零在第二位,所以是2,第二个零在第六位,所以是32,将其加起来被127减去就可以得出93了,是不是很简单方便呢(学到东西快交学费啊,哈哈~!)。你知道计算机里二进制有什么几种运算吗?我在这里告诉你,其实就只有这么的一种,就是加法运算(你不要告诉我你连二进制的加法也不会运算,其实就是蓬二制一嘛)。为什么这样说呢?其实二进制也有减法运算和乘除,但是计算机里有一种叫补码的方法,可以将减法运算变为加法运算,至于怎么实现教师也没有再深入讲下去了(在些补充,乘法也是利用移位来实现转为加法的)。
  现在转入到C语言的整型数据里,C语言的整型数据是2字节的,就是16位,最多可以存储65536,他的范围是 -32768 到 32767 。C语言里分有符号类型和无符号类型,如果是没有符号的整数类型的范围就是0 到 65535 了。关于字符型数据,如果严格来说C语言里根本没有字符这种类型,因为他所存储的是它的ASCII码。直接可以用来和其它的数据类型运算,比如:
main()
{
  char s='A';
  int i=2;
  s=s+i;
  printf("%d",s); /*这里可以直接输出其ASCII码*/
  printf("%c",s); /*这里的结果因为上面的语句改变了字符s的字符,输出的是'C'*/
}
  那么更不要说字符串了,所以字符串在C语言里也只是用数组来表示,和其它的高级语言不同,有其的字符串类型,而且还是字符和字符串结合在同一种类型里。现在该说一下实型数据了,字型类型通常用在有小数位的一些数据。就像这题一样:
S=1/1+1/3-1/5+1/7……1/2n-1

这个程序是我写的:
main()
{
  int n,i,s;
  int r=1;
  printf("please input: ";
  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
    s=s+r/(2*i-1);
    r=-1*r;
  }
  printf("%d",s);
}

这个是考试里的:
void fun(float *sn, int n)
{
  float s=0.0,w,f=-1.0;
  int i=0;
  for(i=0;i<n;i++)
  {
    f=___*f; /*这里填 -1 */
    w=f / (2*i+1);
    s+=w;
  }
  ____=s; /*这里填 *sn */
}

  考试里的两个空我都做对了,可是自己写的那个程序就有大问题了,就是答案用了整型数据,从答可知答案应该是小数啊,真的一时的糊涂就可以至命啊!我们几乎所有人都是错了这点,当然也要另类的错法,就是用回来以前QB的一些运算符,^ 这个是QB里的次方运算符,这可真的闹出笑话了。之后是要我们编一个主函数来调用这个函数。

我是我做的
main()
{
  float s;
  int n;
  printf("please input:";
  scanf("%d",&n);
  fun(&s,n);
  printf("%f",s);
}

  这是这么几条简单的语句,不过就难道了几乎所有人(除了我)。你知道他们的答案吗?让我给大家展示出来吧

main()
{
  float *ss;
  int n;
  printf("Please input:";
  scanf("%d",&n);
  fun(*ss,n); /*这里出了问题*/
  printf("%f",*ss);
}

  他可以还没有了解到C语言里的函数参数的问题吧,既没有定义一个可以存放结果的变量,参数方面也用错了,如果真的要用指针也得要指针指向一个存储单元才行吧。而且还不是传了地址,他而是试图传一个指针指向单元进函数里,这是绝对错误的。因为该调用的函数是地址,好了,下面给他的程序更正一下。如下:

main()
{
  float *ss,s; /*这里多定义一个单精度的变量*/
  int n;
  ss=&s;
  printf("Please input:";
  scanf("%d",&n);
  fun(*ss,n); /*这里出了问题*
  printf("%f",*ss);
}

  好了,就这样这条程序就完全正确了,不过要是为了节省空间就用我写的那条吧,因为不要多开消一个指针变量。今天写得特别的长,也特别的嗅,望大家见谅了。

转帖于:软件水平考试_考试吧
文章搜索  
看了本文的网友还看了:
·程序员考试补课笔记-第九天  (2004-12-29 23:59:00)
·程序员考试补课笔记-第八天  (2004-12-27 13:29:00)
·程序员考试补课笔记-第七天  (2004-12-27 13:28:00)
·程序员考试补课笔记-第六天  (2004-12-27 13:27:00)
·程序员考试补课笔记-第四天  (2004-12-27 13:26:00)
·程序员考试补课笔记-第三天  (2004-12-26 13:21:00)
软件水平考试权威辅导教材: 订书电话:010-62168566  更多>>>
网友评论
昵 称: *  评 分: 1分 2分 3分 4分 5分
标题:   匿名发表    (共有条评论)查看全部评论>>
版权声明 -------------------------------------------------------------------------------------
  如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。
关于本站  网站声明  广告服务  联系方式  付款方式  站内导航  客服中心  友情链接  考试论坛  网站地图
Copyright © 2004-2008 考试吧软件水平考试网 All Rights Reserved    
中国科学院研究生院权威支持(北京) 电 话:010-62168566 传 真:010-62192699
百度大联盟黄金认证  十佳网络教育机构  经营许可证号:京ICP060677