| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1109 人关注过本帖
标题:请各位高手帮小妹看下编程哪里出错了??自学碰壁很头疼!!拜托了~~~
只看楼主 加入收藏
北辰烟云
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:20 
请各位高手帮小妹看下编程哪里出错了??自学碰壁很头疼!!拜托了~~~
小妹是C初学者,望各位高手多多帮忙!!


题一:
由键盘输入一个字符,若为大写字母则输出“A”,若为小写字母则输出“a”,若为数字符号则输出“0”,若为其他字符则输出“#”。
这是我的编程:
#include<stdio.h>
main()
{
int n;
printf("请输入一个字符:");
scanf("%d",&n);
if(n>=65&&n<=90)
   printf("A\n");
else
   if(n>=97&&n<=122)
      printf("a\n");
   else
      if(n>=48&&n<=57)
         printf("0\n");
      else
         printf("#\n");
}
这是个可运行的程序,但不论输入的是字符还是数字、字母,出来的结果都是“#”,哪里出错了???


题二

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
要求用if 和 switch两种语句编写程序。

我写的if程序:

#include<stdio.h>
main()
{
long int I,s;
printf("当月利润:");
scanf("%d",&I);
if(I<=100000)
  s=0.1*100000;
else
   if(100000<I<=200000);
     s=0.1*100000+0.75*(I-100000);
   else
      if(200000<I<=400000)
        s=0.1*200000+0.05*(I-200000);
      else
         if(400000<I<=600000)
           s=0.1*400000+0.03*(I-400000);
         else
            if(600000<I<=1000000)
              s=0.1*600000+0.015*(I-600000);
            else
              s=0.1*1000000+0.001*(I-1000000);
printf("s=%d\n",s);
}

这道题运行不了,错误提示是这样的:
--------------------Configuration: 16 - Win32 Debug--------------------
Compiling...
16.c
c:\users\dell\desktop\练习\16.c(8) : warning C4244: '=' : conversion from 'const double ' to 'long ', possible loss of data
c:\users\dell\desktop\练习\16.c(11) : warning C4244: '=' : conversion from 'double ' to 'long ', possible loss of data
c:\users\dell\desktop\练习\16.c(12) : error C2181: illegal else without matching if
c:\users\dell\desktop\练习\16.c(14) : warning C4244: '=' : conversion from 'double ' to 'long ', possible loss of data
c:\users\dell\desktop\练习\16.c(17) : warning C4244: '=' : conversion from 'double ' to 'long ', possible loss of data
c:\users\dell\desktop\练习\16.c(20) : warning C4244: '=' : conversion from 'double ' to 'long ', possible loss of data
c:\users\dell\desktop\练习\16.c(22) : warning C4244: '=' : conversion from 'double ' to 'long ', possible loss of data
执行 cl.exe 时出错.

16.obj - 1 error(s), 0 warning(s)



我写的switch程序:

#include<stdio.h>
main()
{
int I,s;
printf("当月利润:");
scanf("%d",&I);
switch(I)
{
case 0:s=0.1*I;break;
case 1:s=0.1*100000+0.075*(I-100000);break;
case 2:
case 3:s=0.1*200000+0.05*(I-200000);break;
case 4:
case 5:s=0.1*400000+0.03*(I-400000);break;
case 6:s=0.1*600000+0.015*(I-600000);break;
case 7:
case 8:
case 9:s=0.1*600000+0.015*(I-600000);break;
default:s=0.1*1000000+0.001*(I-1000000);break;
}
printf("s=%d\n",s);
}
这个可以运行,但算出的结果和实际答案不符。
关于switch,我有个不理解的地方,题目中给出的范围,如200000<=I<400000,应该写到case2还是case4后面??
我是自学C,糊涂的地方望大家指导,谢谢各位大侠了!!!
搜索更多相关主题的帖子: 编程 字母 include 
2011-08-17 20:32
北辰烟云
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-17
收藏
得分:0 
在线等。。。

嘴要甜   心要狠  ~
2011-08-17 20:32
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
1. scanf("%d",&n);    改成 %c
   还要给 n 赋初值 0,或者直接定义 char n;

[ 本帖最后由 voidx 于 2011-8-17 20:38 编辑 ]
2011-08-17 20:34
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:10 
第一题:变量定义错误
程序代码:
#include<stdio.h>
main()
{
    char n;
    printf("请输入一个字符:");
    scanf("%c",&n);
    if(n>=65&&n<=90)
        printf("A\n");
    else
        if(n>=97&&n<=122)
            printf("a\n");
    else if(n>=48&&n<=57)
         printf("0\n");
     else
         printf("#\n");
}

A real warrior never quits.
2011-08-17 20:36
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 3楼 voidx
为什么你突然出现了?

My life is brilliant
2011-08-17 20:39
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
程序代码:
#include<stdio.h>
main()
{
    long double I,s;
    printf("当月利润:");
    scanf("%lf",&I);
    if(I<=100000)
            s=0.1*100000;
    else if(I>100000&&I<=200000)
            s=0.1*100000+0.75*(I-100000);
    else if(I>200000&&I<=400000)
            s=0.1*200000+0.05*(I-200000);
    else if(I>400000&&I<=600000)
            s=0.1*400000+0.03*(I-400000);
    else if(I>600000&&I<=1000000)
            s=0.1*600000+0.015*(I-600000);
    else
         s=0.1*1000000+0.001*(I-1000000);
printf("s=%lf\n",s);
}

A real warrior never quits.
2011-08-17 20:44
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
if(100000<I<=200000);    问题在这

而且 if 的条件不能这么些,要写成 I > 100000 && I <= 200000。
另外,long int I,s; 要改成 double I, s;

还有,楼主这个计算的方法不对,你用笔算算就知道了。
2011-08-17 20:47
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 5楼 lz1091914999
呵呵,就是突然出现了,前两天在玩游戏~
然后又试了下 emacs, 发现果然有它的优点,蛮不错的~
2011-08-17 20:48
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
最后一个别用switch()语句,switch(I),case 后的值与I相等才会执行后面的语句。你给的是范围,最好别用switch,if else就行~

A real warrior never quits.
2011-08-17 20:51
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 8楼 voidx
哦,我想以后等我英语好点后去试试,现在暂时用Notepad++。

My life is brilliant
2011-08-17 20:54
快速回复:请各位高手帮小妹看下编程哪里出错了??自学碰壁很头疼!!拜托了~~~
数据加载中...
 
   



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

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