webwhd 2022-11-02 12:58 采纳率: 25%
浏览 37
已结题

为什么输出结果错误捏

问题遇到的现象和发生背景 1: 教授的课(程序设计基础第9周编程1)

描述
教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。

从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。

假设教授在时刻0开始上课。

①如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。

②如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。

③如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。

假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。

已知函数原型:

//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0

int IsCancel(int a[], int n, int k);
输入
包括两行数据:

第1行是n,k的值。
第2行是学生的到达时间。

输出
课程被取消,输出"YES"
课程不取消,输出"NO"

样例
输入

20 10
-8 -5 3 6 0 0 -7 -4 -5 7 -4 -1 1 1 2 -6 -2 2 -9 3
输出
NO
提示
输入提示:“Input n,k:\n”

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
int IsCancel(int a[],int n,int k);
int main()
{
    int n,k,b;
    printf("n,k:\n");
    scanf("%d",&n);
    scanf("%d",&k);
    int a[1000];
    b=IsCancel(a,n,k);
    if(n>=0&&n<=1000&&k>1&&n>=k){
        if(b==1){
            printf("YES\n");
        }else if(b==0){
            printf("NO\n");
        }
    }
    return 0;
    
    
}
int IsCancel(int a[1000],int n,int k)
{
    int i;
    int cnt=0;
    int ret=0;
    for(i=0;i<1000;i++){
        a[i]=0;
    }
    i=0;
    int x,y=0;
    do{
        scanf("%d",&x);
        a[i++]=x;
        y++;
    }while(getchar()!='\n');
    if(a[i]>=-100&&a[i]<=100){
        for(i=0;i<y;i++){
                if(a[i]<=0){
            cnt++;
        }
    }
        } 
    if(cnt>=k){
        ret=0;
    }else{
        ret=1;
    }
    return ret;
    
}

运行结果及报错内容

输出结果错误: 第1行
输出结果错误: 第1行
输出结果错误: 第1行
输出结果错误: 第1行
输出结果错误: 第1行

我的解答思路和尝试过的方法

试了几组数据都没问题,不知道哪里出了问题

我想要达到的结果

输出结果正确

  • 写回答

2条回答 默认 最新

  • honestman_ 2022-11-02 13:22
    关注
    
    #include<stdio.h>
    int IsCancel(int a[],int n,int k);
    int main(void){
        int result;
        int n,k;
        int i;
     
        scanf("%d %d",&n,&k);              //输入共有多少学生:n,以及来上课的最小人数k
        
        if(k<1000){
            int a[n];
            i = 0;
            for( ;i < n;i ++){
                scanf("%d",&a[i]);         //输入到达时间
                if(a[i]>100||a[i]<-100){
                    continue;
                }
            }
        
            //printf("k=%d\n",k);
            result = IsCancel(a,n,k);      //注意调用函数时数组的写法
            switch(result){                //如果写成a[n]会显示warning;写成a[]会显示error
                case 1:printf("YES");
                break;
                case 0:printf("NO");
                break;
            }
        }
        
            return 0;
    }
     
        
        
    int IsCancel(int a[],int n,int k)
    {
        int i,late=0,before=0,ret;
    //    scanf("%d,%d",&n,&k);
        
        for(i = 0;i < n;i++)
        {
            if(a[i]>0){
                late ++;
            }
            else{
                before ++;
            }
        }
        //printf("late=%d\nbefore=%d\n",late,before);
            switch(before < k){
            case 1: ret = 1;
            break;
            case 0: ret = 0;
            break;
            }
            
            return ret;
            
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 创建了问题 11月2日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题