会C语言或者考二级的朋友们过来交流一下啊

来源:百度知道 编辑:UC知道 时间:2024/06/22 09:14:19
请看下面一道上机题目,目的是找出1到1000中能被5或者13整除的,但不能同时被5和13整除的数。我的问题在程序中,请问处
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

void fun(int *a,int *n)
{
int i,j=0;
for(i=1;i<=1000;i++) /*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数,并放入数组a中*/
if((i%5==0||i%13==0)&&(i%65!=0))
请问这句中的i%65!=0能否写成(i%5!=0)&&(i%13!=0)?我改成后者好象无法运行。这是一道编程题目,只看函数fun部分即可,主函数main()不用看。谢谢各位了!

a[j++]=i;
*n=j; /*传回满足条件的数的个数*/
}
void main( )
{
FILE *wf;
int aa[1000], n, k;
system("CLS");
fun(aa,&n);
for(k=0;k<n;k++)
if((k+1)%10==0)
{
printf("%5d ",aa[k]);
printf("\n "); /*一行写10个数*/
}
else
printf("%5d ",aa[k]);
/******************************/
wf=fopen("out.dat","w");
for(k=0;k<n;k++)

void fun(int *a,int *n)
{
int i,j=0;
for(i=1;i<=1000;i++)
if((i%5==0||i%13==0)&&(i%65!=0))
/*这句中的i%65!=0不能写成(i%5!=0)&&(i%13!=0),这会与前面的条件以及题目的要求背道而驰*/
a[j++]=i;
*n=j;
}

i%65!=0这句不能改成(i%5!=0)&&(i%13!=0)
因为,这会造成短路操作.比如说i=5的话,(i%5==0||i%13==0)这条语句执行下来为1,(i%5!=0)&&(i%13!=0)可是这条语句就为0为什么呢?i%5的结果是0,所以(i%5!=0)&&(i%13!=0)这条语句就为0了,所以不行.

很明显不行,他是将可以被5整除和被13整除交集的那部分去掉,你用(i%5!=0)&&(i%13!=0)虽然除去了上述部分,但也将其他的数也排除了,(i%5!=0)&&(i%13!=0)这个条件和前面的i%5==0||i%13==0矛盾了

if((n%5==0||n%13==0)&&(n%5!=0&&n&13!=0))可以在我机子上运行,运行环境Microsoft Visual C++ 6.0