小狼狼头 发表于 2015-6-25 16:18:36

这是我用if语句编的,但是运行以后感觉else if根本没有起到作用,不管我输入多少,...

#include <stdio.h>

void main()

{
        intscore;
        printf("输入成绩:");
        scanf("score=%d",&score);
        if (score<60)
        {
                printf("E\n");
        }
        else if((score>60||score==60) && score < 70)
        {
                printf("D\n");
        }
        else if(score<80)
        {
          printf("C\n");
        }
}

zhangbin_hunan 发表于 2015-6-25 16:18:37

这题运行不出来是因为scanf函数参数给错了,建议楼主理解一下if.... else if ...else ...的用法。这段代码可以写得更简洁些。当然如果score分段是确定的,建议使用switchcase 语句写。
首先scanff函数
scanf的函数申明是:int scanf(const char *format,...);
其调用形式为: scanf("<格式说明字符串>",<变量地址>);变量地址要求有效,并且与格式说明的次序一致。
格式化说明字符串包括%d 十进制整数,%s字符串等
应该是scanf("%d",&score)
程序的修改版本一:
//使用ifelse if    else
/*
使用if else if语句时,程序顺序执行,当遇到一个条件判断成功后,其他的语句不在进行判断直接跳出if else语句结构。如果前面的条件判断为假,则将顺序判断,直到遇到一个条件为真的分支或者到了 最后一个分支 (分支也为假),如果有符合条件的分支,则执行该分支,否则,执行到最后一个判断分支判断后,退出if else if结构。
*/
#include <stdio.h>

void main()

{
      intscore;
      printf("输入成绩:");
      scanf("%d",&score);
switc
      if (score<60)
      {
                printf("E\n");
      }
      else if( score < 70)//程序能运行到第二句说明if 后面的语句的结果为false表明:score>=60
      {
                printf("D\n");
      }
      else if(score<80)
      {
            printf("C\n");
      }
}
使用switch case 语句
#include <stdio.h>
void main()
{
      intscore;
      printf("输入成绩:");
      scanf("%d",&score);
       swtich (score)
   {
      case score <60:    printf("E\n");   break;
      case score<70:    printf("D\n");    break;
      case score<80:    printf("C\n");    break;
      default :    break;
      }
}


ljd884497 发表于 2015-6-25 19:00:53

正确答案
#include <stdio.h>

void main()

{
      intscore;
      printf("输入成绩:");
      scanf("%d",&score);
      if (score<60)
      {
                printf("E\n");
      }
      else if((score>=60) && score < 70)
      {
                printf("D\n");
      }
      else if(score>=70)
      {
            printf("C\n");
      }
}

哥斯拉不说话 发表于 2015-6-25 19:44:17

(score>60||score==60) && score < 70 改成 score < 70 就行, 前边的重复了但没错。

x15810803158 发表于 2015-6-26 09:07:02

最后的else if应该直接 写成 else

tmmjmi 发表于 2015-6-26 11:40:00

最后个else if 把前面的包括了,逻辑有问题

jishuzhain 发表于 2015-6-27 13:13:52

#include <stdio.h>

int main()

{
      intscore;
      printf("输入成绩:");
      scanf("%d",&score);
      if (score<60)
      {
                printf("E\n");
      }
      else if((score>60||score==60) && score < 70)
      {
                printf("D\n");
      }
      else if(score<80)
      {
            printf("C\n");
      }
}就改了下scanf 就行了。功能是行的。

lark 发表于 2015-6-27 20:14:52

//:lol:蹭个位置;
#include<stdio.h>
int fun(int score);
int fun(int score){
        printf("接收数据 %d;\t",score);
        if (score<60){
                printf("score<60; E\n\n");
                                return 0;      
                }
      else if((score>=60)&&(score < 70)){
                printf("score>=60 && score <70 ;D\n\n");
                return 0;
      }
      else if(score<80){
            printf("score <80 C\n\n");
            return 0;
      }
      else {
              printf("没有复合条件的的数据; \n\n\n");
              return -1;
      }
}
int main(void) {
        /*intscore;
        printf("输入成绩:score=");
        scanf("%d",&score);
      */
      int ret;
    fun(59);
        fun(60);
        fun(67);
        fun(79);
        ret=fun(100);
        return ret;
}

无情修罗 发表于 2015-6-30 23:09:53

scanf("%d",&score);

把输入语句改了就OK了!

nin98 发表于 2015-7-1 09:41:25

建议用switch语句 我觉得后面还会有b和a

阔怀 发表于 2015-8-5 11:42:49

逻辑没错,但表达方面有点问题

小伪 发表于 2015-8-5 15:28:18

lark 发表于 2015-6-27 20:14
//蹭个位置;

有个问题。score 是你在函数中定义的局部变量,可以拿到MAIN 中来用么?

lark 发表于 2015-8-15 22:28:37

楼主,这个是我修改过的;
#include <stdio.h>
#include <stdlib.h>
intmain(void){
      intscore=0;
      printf(";输入你的成绩(score):_");
      scanf("%d",&score);
      if (score<60){
                printf("你的得分是:E\n");
                getchar();
      }
      else if(score>=60 && score <70){
                printf("你的得分是:D\n");
                getchar();
      }
      else if(score>=70 && score<80){
            printf("你的得分是:C\n");
            getchar();
      }
      else {
              printf("\n数据异常 或,输入数值超出验证范围\n请重式查询;\n");
              getchar();
              exit(0);
      }
      return 0;
}

这个是你原本的,我只做了注释:
#include <stdio.h>
/*if..else if...elsef if..else 格式
*她和if..if..else语句的差别在于:

*if..else if..else如果前面的执行了后面的就算符合条件也不会再执行
*if..if..else 就算前面的执行了后面的if只要符合条件还是会执行;
*共同点呢,都是如果上面的都不符合条件,才用else;
*/
void main()//建议使用 int main(void)格式;
{
      intscore;
      printf("输入成绩:");
      scanf("score=%d",&score);//这个在下面的一处解释;
      printf("score=%d ;\n",score);

      if (score<60)
      {
                printf("E\n");
      }
      else if((score>60||score==60) && score < 70)
      //(score>60 || sore==60)有些繁琐了。直接(socre>=60);
      //修改后的 if(score>=60 && socre <70){...}
      {
                printf("D\n");
      }
      else if(score<80)
      //楼主这里永远不会执行的,看我给你的else if语句的解释;
      //修改后的 if(score>=70 && score <80)
      {
            printf("C\n");
      }
      
//建议楼主加个 return 0;如果是int main(void)的话;      
}

//最后呢,楼主应该学会使用网络,可以去 各种百科查询下各种语句和函数的解释;
//如果楼主英语不错的话,可以去msdn看看或者某些开源的论坛;


然后是关于你的scanf();
#include <stdio.h>
void main(){
      intscore=0;
      printf("输入成绩:");
      scanf("score=%d",&score);
      
      
      printf("score的值是:%d ;\n",score);
      return 0;
}

//[截图]对于楼主的scanf()函数;楼主在控制台应该这么写才行,额,似乎有些麻烦!

好吧,这个运行结果看这里
http://bbs.fishc.com/home.php?mod=space&uid=271302&do=album&picid=6571

lark 发表于 2015-8-15 22:58:14

lark 发表于 2015-6-27 20:14
//蹭个位置;

哦,你好。我以为是楼主回复,然后又答给楼主了。后来发现是你回复的,==
我也不清楚是啥时候回复的这个主题,不过我将代码重写了一遍,你可以看一下,还有我今天给楼主修改的;
#include<stdio.h>

void fun(int score){
                printf("接收数据是 %d;\t",score);
                  if (score<60){
                          printf("score<60; \n\t成绩等级:E \t");
        }
        else if(score>=60&&score < 70){
          printf("score>=60 && score <70");
                printf("score>=60&&score < 70; \n\t成绩等级:D\t");
        }
        else if(score>=70&& score <80){
                printf("score>=70&& score <80; \n\t成绩等级:C \t");
                }
        else {
        printf("没有复合条件的的数据; \t");
        }
        printf("运行结束;\n\n");
}

int main(void){
/*intscore;
printf("输入成绩:score=");
scanf("%d",&score);*/

                fun(59);
                fun(60);
                fun(67);
                fun(79);
                fun(199);
                getchar();
return 0;

}

lark 发表于 2015-8-15 22:59:30

小伪 发表于 2015-8-5 15:28
有个问题。score 是你在函数中定义的局部变量,可以拿到MAIN 中来用么?

哦,你好。我以为是楼主回复,然后又答给楼主了。后来发现是你回复的,==
我也不清楚是啥时候回复的这个主题,不过我将代码重写了一遍,你可以看一下,还有我今天给楼主修改的;
#include<stdio.h>

void fun(int score){
                printf("接收数据是 %d;\t",score);
                  if (score<60){
                          printf("score<60; \n\t成绩等级:E \t");
        }
        else if(score>=60&&score < 70){
          printf("score>=60 && score <70");
                printf("score>=60&&score < 70; \n\t成绩等级:D\t");
        }
        else if(score>=70&& score <80){
                printf("score>=70&& score <80; \n\t成绩等级:C \t");
                }
        else {
        printf("没有复合条件的的数据; \t");
        }
        printf("运行结束;\n\n");
}

int main(void){
/*intscore;
printf("输入成绩:score=");
scanf("%d",&score);*/

                fun(59);
                fun(60);
                fun(67);
                fun(79);
                fun(199);
                getchar();
return 0;

}

lark 发表于 2015-8-15 23:16:32

小伪 发表于 2015-8-5 15:28
有个问题。score 是你在函数中定义的局部变量,可以拿到MAIN 中来用么?

你问的是函数 fun(int score)吧,这个,要肿么解释呢,
好吧,这个问题在C语言的这函数一节,涉及函数的数值的传递;

在int fun(int score){..}中,其实socre就是一个int类型的局部变量;除了数据类型声明符号int外,score你可以改成任何自定义的标识符; 改成cat也行,dog也行,people也行,反正它是代表从其他函数(比如main)传递过来的值,

看fun(79);或者fun(33);fun(110);
fun();括号里面可以是任何数值,但是记得,声明的时候是int,所以只能是int,当然char和浮点也可以,但是不建议的;

fun(119);的意思就是将119这个数值传递到fun函数里面;

int fun(int score){//没错,就是将119这个数值传递到fun这个函数里面;然后呢使用score代表119这个数值
   ...         //在这里,socre就是119,如果是int fun(int num){.....} ;那么num就是119;
} //返回值是int ,因为 int fun(int score),在fun之前是int哦; int main(void )的返回值就是int;char character(void);返回值就是char;

我并没有在main()函数中定义过变量标识符score;socre是我利用fun()函数在main()函数中 ,将数值119传递到fun函数中的代表119的标识符;

fun(119)   -> int fun(int score){}-> score ==119;//因为是局部的score只在fun()函数内表示119;
而119你可以替换成任何数字;120,8888,123; fun(120);fun(234)

你可以看看 函数传递 相关的知识点;

桃花飞舞 发表于 2015-8-15 23:42:39

楼主的scanf("score=%d",&score);可以改为scanf("%d",&score);其实我也不知道为什么不能有score=

barry_2012 发表于 2015-8-16 12:57:10

zhangbin_hunan 发表于 2015-7-1 10:53
这题运行不出来是因为scanf函数参数给错了,建议楼主理解一下if.... else if ...else ...的用法。这段代 ...

想问一下,你这switch语句能运行吗

zhangbin_hunan 发表于 2015-12-7 23:57:39

barry_2012 发表于 2015-8-16 12:57
想问一下,你这switch语句能运行吗

你试试就知道了呀 .   如果由问题欢迎指正。

千亩计者 发表于 2016-8-16 02:06:18

#include <stdio.h>

int main()

{
      intscore;
      printf("输入成绩:");
      scanf("%d",&score);
      if (score<60)
      {
                printf("E\n");
      }
      else if((score>=60) && score < 70)
      {
                printf("D\n");
      }
      else if(score>=70)
      {
            printf("C\n");
      }
return 0;
}
页: [1]
查看完整版本: 这是我用if语句编的,但是运行以后感觉else if根本没有起到作用,不管我输入多少,...