c语言pat基础题改错8.5-2

img


我的答案如下


#include<stdio.h>
#include<math.h>
int main(){
    int N,arr[100],flag=0;
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf("%d\n",&arr[i]);
    }
    for(int i=0;i<N;i++){
        flag=0;
        for(int j=2;j<=sqrt(arr[i]);j++){
            if(arr[i]%j==0){
                flag=1;
            }
        }
        if(flag==0){
            printf("Yes\n");
        }else{
            printf("No\n");
        }
    }
}

img


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

第19行做了修改,改动处见注释,供参考:

#include <stdio.h>
#include <math.h>
int main()
{
    int N,arr[11],flag=0; // 修改
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf("%d",&arr[i]); //scanf("%d\n",&arr[i]);  修改
    }
    for(int i=0;i<N;i++){
        flag=0;
        for(int j=2;j<=sqrt(arr[i]);j++){
            if(arr[i]%j==0){
                flag=1;
                break;    // 修改
            }
        }
        if (i) printf("\n"); //修改
        if(flag==0 && arr[i] != 1){    // 修改,增加将 1 排除的代码
            printf("Yes");// 修改
        }else{
            printf("No"); // 修改
        }
    }
    return 0;
}

【以下回答由 GPT 生成】

首先,让我们来看看你的代码中有什么问题:

  1. 你在循环中使用了两次scanf函数,第一次是在接受N的值时,第二次是在接受数组元素的值时。然而,在第二次的scanf函数中,你使用了\n作为格式控制符,这会导致每次输入一个数字后需要按下回车键才能继续输入下一个数字。这不是你想要的行为,应该去掉\n

  2. 在第二个循环中,你使用了一个flag变量来标记是否找到了一个除了1和它本身以外的因子。然而,在每次循环开始时,你都将flag重置为0,这导致了flag始终为0的情况。你应该将flag定义在第一个循环的外面,并在每次循环开始之前将其重置为0。

下面是修改后的代码:

#include<stdio.h>
#include<math.h>
int main(){
    int N, arr[100];
    scanf("%d",&N);
    for(int i=0; i<N; i++){
        scanf("%d", &arr[i]);
    }
    for(int i=0; i<N; i++){
        int flag = 0;
        for(int j=2; j<=sqrt(arr[i]); j++){
            if(arr[i]%j==0){
                flag=1;
                break;
            }
        }
        if(flag==0){
            printf("Yes\n");
        }else{
            printf("No\n");
        }
    }
}

这样,你的代码应该可以正确运行了。希望这可以帮助到你!如果你还有任何问题,请随时提问。



【相关推荐】



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