c语言pat基础题0901L1076

img

img


#include<stdio.h>
int main(){
    int N,M;
    scanf("%d %d\n",&N,&M);
    float P[N];
    for(int i=0;i<N;i++){
        scanf("%f\n",&P[i]);
    }
    for(int i=0;i<N;i++){
        if(P[i]<M){
            printf("On sale! %.1f\n",P[i]);
        }
    }
}

我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!

修改如下,改动处见注释,供参考:

#include<stdio.h>
#define N  101      // 修改
int main() {
    int n, M;
    scanf("%d %d", &n, &M); //scanf("%d %d\n", &N, &M);  修改
    double  P[N];           //float P[N];                修改
    for (int i = 0; i < n; i++) {  //for (int i = 0; i < N; i++) 修改
        scanf("%lf", &P[i]);   //scanf("%f\n", &P[i]);   修改
    }
    for (int i = 0; i < n; i++) { //for (int i = 0; i < N; i++)  修改
        if (P[i] < M) {
            printf(i ? "\nOn sale! %.1f" : "On sale! %.1f", P[i]); // 修改
        }
    }
}

删除scanf里的\n

【以下回答由 GPT 生成】

在您提供的代码中,并没有明确说明输入的N和M的数值范围。所以在解决问题之前需要先确认输入的合法性。

除此之外,代码中有一些小问题需要修正,下面是修正后的代码:

#include <stdio.h>

int main() {
    int N, M;
    scanf("%d %d", &N, &M); // 去掉末尾的换行符

    if (N <= 0 || M <= 0) {
        printf("输入的N和M必须大于0\n");
        return 0;
    }

    float P[N];
    for (int i = 0; i < N; i++) {
        scanf("%f", &P[i]); // 去掉末尾的换行符
    }

    for (int i = 0; i < N; i++) {
        if (P[i] < M) {
            printf("On sale! %.1f\n", P[i]);
        }
    }

    return 0;
}

修正的地方包括: 1. 去掉输入的末尾换行符以避免产生错误; 2. 添加输入的合法性检查,确保输入的N和M大于0; 3. 在输出小于M的商品价格时,使用保留一位小数的形式进行输出; 4. 添加主函数的返回值。

希望这些修正可以解决您的问题!如果还有其他问题,请随时提问!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^