注册 登录
编程论坛 C语言论坛

for和while的区别?

c392 发布于 2020-01-05 11:01, 2214 次点击
    小白求大佬指点,下面有这道题目的两个解法,本人认为一样但运行结果不一样,
抱拳了
【问题描述】输入N个整数,剔除其中能被3或者5整除的元素,输出最后的数组
【输入形式】整数N,和N个整数
【输出形式】剔除数据后的结果,如果结果为空,则输出字符串NULL
【样例输入】5 1 2 3 4 5
【样例输出】1 2 4
【样例输入】5 12 6 3 9 5
【样例输出】NULL

#include<stdio.h>

int main()
{
    int a[100]= {0},b[100]= {0},i,j,k=0,n,sum=0,x,y;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0; j<n; j++)
    {
        x=a[j]%5;
        y=a[j]%3;
        if(x==0||y==0)
        {
        continue;
        }
        if(x!=0&&y!=0)
        {
            b[k]=a[j];
            k++;
        }
    }
    for(int p=0; p<=k; p++)
    {
        sum+=a[p];
    }
    if(sum!=0)
    {
        for(int o=0; o<=k; o++)
        {
            printf("%d ",a[o]);
        }
    }
    if(sum==0)
    {
        printf("NULL");
    }
    return 0;
}

#include<stdio.h>

int main()
{
    int a[100]= {0},b[100]= {0},i,j,k=0,n,sum=0,x,y;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0; j<n; j++)
    {
        x=a[j]%5;
        y=a[j]%3;
        if(x==0||y==0)
        {
        continue;
        }
        if(x!=0&&y!=0)
        {
            b[k]=a[j];
            k++;
        }
    }
    for(int p=0; p<=k; p++)
    {
        sum+=a[p];
    }
    if(sum!=0)
    {
        for(int o=0; o<=k; o++)
        {
            printf("%d ",a[o]);
        }
    }
    if(sum==0)
    {
        printf("NULL");
    }
    return 0;
}
10 回复
#2
forever742020-01-05 12:04
没细看,至少有几个问题:
你需要输出的是b数组也就是剩下的数据,你输出a数组干啥?
b数组里有效数据就是k个,下标从0到k-1,直接根据k干活就是,求和干啥?
你已经把要去掉的数据continue了,下面就没必要if(x!=0&&y!=0)了,当然,不是错误,只是有添足之憾。
两段的区别在哪儿?

[此贴子已经被作者于2020-1-5 12:06编辑过]

#3
叶纤2020-01-05 14:21
楼主的问题提的很是时候,我刚刚被什么lrw什么次幂里的for  while  if循环搞的懵掉了,你又来一个,正好这一楼就当我的备忘录,以我现有的知识库,我认为for和while没有什么区别都是满足条件继续循环,否则跳出循环,continue  相当于一个break不过break是跳出整个循环,continue是跳出本次循环,不过面对你这题我也出错!!!!!!!!打不出NULL来!!!!
#include<iostream>
using namespace std;
int main()
{   int n;
    int a[n];
    int count=0;
    cin >> n;
    for(int i=0; i<n; ++i)
    {
        cin >> a[i];
    }
    for(int i=0; i<n; ++i)
    {   if(a[i]%3==0||a[i]%5==0)
        {   continue;
        }
        cout<< a[i]<<" ";
        count+=a[i];
        if(count=0)
        {   cout << "没有"<< endl;
        }
    }

}
。。。我只会用C++打C,凑合着看吧备注cin相当于scanf    其他的地方估计楼主能看懂
#4
叶纤2020-01-05 14:37
楼主咱们俩小白齐心协力看能把这题解决不,天呐!能打印出NULL的都是大神啊
#5
forever742020-01-05 16:27

if(count==0)

忙中出错,道理都懂,就是用你的话说跟头摔得还少
这个问题有个偏方,就是写if的时候把常量写前面,这样忘记一个等号就会报错。
if(0==count)酱紫

[此贴子已经被作者于2020-1-5 17:16编辑过]

#6
叶纤2020-01-05 16:56
回复 5楼 forever74
我确实栽了跟头,但你改为的跟头干嘛哩,我的是count+=a[i];你的是count+=a;
现在的问题不是一个==号的问题了,是continue这个熊孩子的问题,以本例题来看如果是5 1 2 3 4 5这个熊孩子会吧3 5给吃了,然后把1 2 4留给你,但是如果你输入5 5 5 5 5 5这个熊孩子是把所有的5都给你吃了,你就呆≡ ̄﹏ ̄≡看着熊孩子把糖吃完,渣都没给你留,所以count+=a[i];这个压根就没意义,因为a[i]被熊孩子给吃了,没办法知道a[i]是什么,所以count+=a[i];后面的几句话是我写着玩玩意思意思需要有个NULL
#7
forever742020-01-05 17:16
我没有改过代码
应该是我的浏览器的问题
#8
叶纤2020-01-05 17:29
回复 7楼 forever74
我的基础太差了,以我现有知识储备,我没有更完美的解决方法,唉,啥时候我能像你一样啊
#9
forever742020-01-05 18:00
把最后的if块挪到for块外面嘛。
#10
纯蓝之刃2020-01-05 18:17
程序代码:
#include<stdio.h>

int main()
{
    int a[100]= {0},b[100]= {0},i,j,k=0,n,x,y;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0; j<n; j++)
    {
        x=a[j]%5;
        y=a[j]%3;

        if(x!=0&&y!=0)
        {
            b[k]=a[j];
            k++;
        }
    }
    if(k!=0)
    {
        for(i=0; i<k; i++)
        {
            printf("%d ",b[i]);
        }
    }
    else
        printf("NULL");
    return 0;
}
#11
bcbbcclbbc2020-01-06 07:14
回复 楼主 c392
好神奇的问题,看标题说for与while的区别,看了半天就是没有找着while语句,这是什么情况?
for与while都是循环结构,基本上可以互通,硬要说区别,感觉for语句用的比较流畅,结构比较清晰,循环体,自变量,判断条件。
而while语句用起来稍微复杂,首先有些变量需要在while之前初始化,然后就是while语句的循环体相对于for语句内容多,情况复杂了些。
1