C语言求教

C、C++和Java语言
回复
lintix
帖子: 21
注册时间: 2007-10-17 10:18
送出感谢: 0
接收感谢: 0

C语言求教

#1

帖子 lintix » 2007-11-18 16:02

To all:
大家好,我是个Ubuntu的入门级菜鸟,发现这里真的是一个很好的学习地方,看到的帖都有人回,真是令人兴奋。
今天我来不是问关于Ubuntu的东西,因为我有一大堆关于这的书,我是来请教C问题的,哈哈!

题目:
[编写C程序,输入多个两位正整数(以回车键作为结束标志),并统计出其中小于等于40、大于40小于等于70、大于70的数据个数。]

因为C语言只学到循环这里,所以不能用后面的方法去解决,比如数组(因为还没学)!

我的解决办法是:

代码: 全选

#include <stdio.h>
#include <conio.h>

int main(void)
{
  char c;
  int x=0,y=0,z=0,i=0,s;
  printf("please input a number list:\n");
  while((c=getchar())!='\n')
  			{
  				i=i+1;
  				s=i%2;
  				
  				while(s!=0)
  						{
  							if(c>'1'&&c<='4')
  								x++;
  							if(c>'4'&&c<='7')
  								y++;
  							if(c>'7')
  								z++;
  							break;
  						}
  			   			 
  			 }
  printf("There are %d numbers less than 40.\nThere are %d numbers more than 40 and less than 70.\nThere are %d numbers less than 70.",x,y,z);
  getch();
  return 0;
}
使用:连续输入几个两位数,不用任何符号隔开,且必须是双数(好像在讲废话)!
例如: 输入 5241639871[回车] 输出 There are 1 numbers less than 40.
There are 3 numbers more than 40 and less than 70.
There are 1 numbers less than 70.

不知道各位高手有没有更好的解决办法!
我看到我的同学有用[getchar()&&scanf(%d,&x)]这样的输入格式解决这个问题(具体代码我没记下来),但它的结果还有一个暂时未能解决的小错误。

衷心等待大家的回答!附件中为C原代码!
附件
0.rar
(380 Bytes) 下载 17 次
上次由 lintix 在 2007-11-19 11:23,总共编辑 1 次。
liway
帖子: 53
注册时间: 2006-03-01 11:07
送出感谢: 0
接收感谢: 0

#2

帖子 liway » 2007-11-18 18:53

我觉得你的答案有问题,,如果我没有理解错的话。
52 41 63 98 71
小于40的没有
40-70:52 41 63
>70:98 71
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#3

帖子 BigSnake.NET » 2007-11-18 19:03

代码: 全选

#include <stdio.h>

int main(void)
{
    char c;
    int x=0,y=0,z=0,t;
    printf("please input a number list:\n");
    while((c=getchar())!='\n')
    {
        t = (c - '0')*10 ;
        c = getchar();
        t += c - '0' ;
        if (t <= 40)
            x++;
        else if (t <= 70)
            y++;
        else
            z++;
    }
    printf("There are %d numbers less than 40.\nThere are %d numbers more than 40 and less than 70.\nThere are %d numbers less than 70.\n",x,y,z);
    getchar();
    return 0;
} 
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
lintix
帖子: 21
注册时间: 2007-10-17 10:18
送出感谢: 0
接收感谢: 0

#4

帖子 lintix » 2007-11-18 22:49

3楼强人,本人真的技术不到家!
但我还有问题,用两个getchar()是不是代表取了两个数啊?t+=c-'0';作用是什么?我总看不懂-'0'
还是解释一下吧,能力有限!才上了两个多月的课,哎!

嘿嘿,3楼概可唔可以加我QQ,我都系广州返学!
QQ:316690
加我请注明!
头像
tipfoo
帖子: 303
注册时间: 2007-07-12 16:30
来自: 桂林
送出感谢: 0
接收感谢: 2 次

#5

帖子 tipfoo » 2007-11-18 23:56

c 是字符ASCII值,如:‘5’的ASCII值是37,‘0’的是32,所以
c - ‘0’ = 5
相当于将c字符转换成整形(准确的应该是字节型byte)。
头像
stlxv
论坛版主
帖子: 8273
注册时间: 2006-05-03 0:39
来自: المريخ
送出感谢: 0
接收感谢: 1 次

#6

帖子 stlxv » 2007-11-19 1:35

lintix 写了:3楼强人,本人真的技术不到家!
但我还有问题,用两个getchar()是不是代表取了两个数啊?t+=c-'0';作用是什么?我总看不懂-'0'
还是解释一下吧,能力有限!才上了两个多月的课,哎!

嘿嘿,3楼概可唔可以加我QQ,我都系广州返学!
QQ:316690
加我请注明!
终于见到一个QQ号码比我小的了
PHP是最好的语言!不服来战!
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#7

帖子 BigSnake.NET » 2007-11-19 12:22

lintix 写了:3楼强人,本人真的技术不到家!
但我还有问题,用两个getchar()是不是代表取了两个数啊?t+=c-'0';作用是什么?我总看不懂-'0'
还是解释一下吧,能力有限!才上了两个多月的课,哎!

嘿嘿,3楼概可唔可以加我QQ,我都系广州返学!
QQ:316690
加我请注明!
业余...
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

#8

帖子 bones7456 » 2007-11-19 12:30

stlxv 写了:
lintix 写了:3楼强人,本人真的技术不到家!
但我还有问题,用两个getchar()是不是代表取了两个数啊?t+=c-'0';作用是什么?我总看不懂-'0'
还是解释一下吧,能力有限!才上了两个多月的课,哎!

嘿嘿,3楼概可唔可以加我QQ,我都系广州返学!
QQ:316690
加我请注明!
终于见到一个QQ号码比我小的了
难道你没见到马化腾的QQ号码? :lol:
关注我的blog: ε==3
lintix
帖子: 21
注册时间: 2007-10-17 10:18
送出感谢: 0
接收感谢: 0

#9

帖子 lintix » 2007-11-19 16:43

感谢各位,问题解决! :)
lintix
帖子: 21
注册时间: 2007-10-17 10:18
送出感谢: 0
接收感谢: 0

#10

帖子 lintix » 2007-11-19 16:46

BigSnake.NET
别这样说,业余也可以很牛!
回复

回到 “C/C++/Java”