| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 735 人关注过本帖
标题:[建议]程序员考试补课笔记
取消只看楼主 加入收藏
风中情子
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2005-1-11
收藏
 问题点数:0 回复次数:1 
[建议]程序员考试补课笔记
第二天   因为前天老师摸到我们的底的关系,所以今天要补一补前面的基础部份。他先是列出一个数据类型的表,如下:            | 整型            | 字符型      | 基本类型<         | 单精度型      |      | 实型(浮点型)<      |      | 枚举类型    | 双精度型      | 数据类型<      | 数组类型      | 构造类型< 结构体类型 (结构)      |     | 共用体类型 (联合)      | 指针类型      | 空类型   上面这个表,基本类型是我们平常用得最多的,包括整型、字符型、实型(浮点型),就从这里最常用的数据类型说起吧。   说起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里的次方运算符,这可真的闹出笑话了。之后是要我们编一个主函数来调用这个函数。
搜索更多相关主题的帖子: 程序员考试 笔记 
2005-02-23 08:00
风中情子
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2005-1-11
收藏
得分:0 
我是我做的
main()
{
  float s;
  int n;
  printf("please input:";
  scanf("%d",&amp;n);
  fun(&amp;s,n);
  printf("%f",s);
}

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

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

  他可以还没有了解到C语言里的函数参数的问题吧,既没有定义一个可以存放结果的变量,参数方面也用错了,如果真的要用指针也得要指针指向一个存储单元才行吧。而且还不是传了地址,他而是试图传一个指针指向单元进函数里,这是绝对错误的。因为该调用的函数是地址,好了,下面给他的程序更正一下。如下:
main()
{
  float *ss,s; /*这里多定义一个单精度的变量*/
  int n;
  ss=&amp;s;
  printf("Please input:";
  scanf("%d",&amp;n);
  fun(*ss,n); /*这里出了问题*
  printf("%f",*ss);
}

  好了,就这样这条程序就完全正确了,不过要是为了节省空间就用我写的那条吧,因为不要多开消一个指针变量。今天写得特别的长,也特别的嗅,望大家见谅了。
2005-02-23 08:00
快速回复:[建议]程序员考试补课笔记
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049206 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved