Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 可以或不能被整除为某个数的排序数组_C - Fatal编程技术网

C 可以或不能被整除为某个数的排序数组

C 可以或不能被整除为某个数的排序数组,c,C,我必须这么做。 说明: 编写一个C程序,从用户处按降序读取数字n 打印1到n(包括)之间的数字,并同时除以3 不被2和5除。也打印他们的总结。 如果n是100 预期产出: 我必须把它们加起来。嘿,看看这段代码可能会对你有所帮助 intmain(void){inti,j;printf(“输入一个数字:”);scanf(“%d”,&i);for(j=i;j>0;j--) 如果(j%3==0 | | j%2!=0 | | j%5!=0)printf(“%d”,j); 返回0;}您的代码生成正确的输出

我必须这么做。 说明: 编写一个C程序,从用户处按降序读取数字n 打印1到n(包括)之间的数字,并同时除以3 不被2和5除。也打印他们的总结。 如果n是100 预期产出:


我必须把它们加起来。

嘿,看看这段代码可能会对你有所帮助

intmain(void){inti,j;printf(“输入一个数字:”);scanf(“%d”,&i);for(j=i;j>0;j--) 如果(j%3==0 | | j%2!=0 | | j%5!=0)printf(“%d”,j);
返回0;}

您的代码生成正确的输出,但不计算总和

这样做很容易:添加一个初始化为
0
的变量
sum
,并按打印的数字递增

以下是修改后的版本:

#包括
内部主(空){
int i,j;
long sum=0;//使用long类型可避免大值溢出。
printf(“输入一个数字:”);
如果(scanf(“%d”,&i)==1){
对于(j=i;j>0;j--){
如果(j%3==0){
如果(j%2!=0){
如果(j%5!=0){
printf(“%d”,j);
总和+=j;
}
}
}
}
printf(“\n\n总和是%ld\n”,总和);
}
返回0;
}
输出:

Enter a number: 100 99 93 87 81 69 63 57 51 39 33 27 21 9 3 the sum is 732 这是一个更为晦涩的版本,每次迭代只使用一个模运算符,但使用的模运算符要少得多:

#包括
内部主(空){
int i,j;
long sum=0;//使用long类型可避免大值溢出。
printf(“输入一个数字:”);
如果(scanf(“%d”,&i)==1){
对于(j=i/3;j>0;j--){
如果(650>>j%10和1){
printf(“%d”,j*3);
总和+=j*3;
}
}
printf(“\n\n总和是%ld\n”,总和);
}
返回0;
}

我的代码运行正常谢谢你的所有答案。我保证在提问之前我会更加努力。谢谢你的每一点帮助

#include <stdio.h>
int main(void)
{
  int i, j;
  long sum = 0;
  printf("Enter a number: ");
  scanf("%d", &i);

  for(j =i; j >0; j--)
    if (j % 3 == 0)
    if (j % 2 != 0)
    if (j % 5 != 0)
    {
    printf("%d ", j);sum += j;
    }
    printf ("\n\nthe sum is: %ld\n", sum);
  return 0;
}
#包括
内部主(空)
{
int i,j;
长和=0;
printf(“输入一个数字:”);
scanf(“%d”、&i);
对于(j=i;j>0;j--)
如果(j%3==0)
如果(j%2!=0)
如果(j%5!=0)
{
printf(“%d”,j);和+=j;
}
printf(“\n\n总和为:%ld\n”,总和);
返回0;
}

首先编写一个程序,从用户那里读取数字,然后打印数字。排序。。。?看起来你应该按降序迭代。我必须用这样的方法来降序(j=i;j>0;j--),当然可以。只需将
%2
==0
%5
更改为
!=0
。您需要跟踪用户输入的值的数量。如果添加
long sum=0向上,然后在循环中按编写的方式执行:
如果(j%5!=0){printf(“%d”,j);sum+=j;}
?然后在循环之后,只需
printf(“\n\n总和是:%ld\n”,总和)?与OP不同,你的代码不会输出预期的数字,也不会计算总和。出于同情,当你给代码使用几行并缩进它们时,@chqrlie有勇气阅读它。你能解释一下这个晦涩难懂的版本是如何产生的吗?@bruno:650是
512+128+8+2
,即:
(1这让我想起了一些事情,我想你在过去也做过类似的回答,不是吗?@bruno:是的,在一次测试中,如果已知在小范围内的数字在一个集合中是a,而不需要内存访问,那么这是一个有用的模式。如果(650&1您的代码严重缩进。请花一些时间改进演示文稿,它有助于防止错误,使其他程序员能够阅读和理解您的代码,迟早,下一位读者将是您自己。是的,您是对的。我将用您的示例来做这件事
    if (j % 3 == 0 && j % 2 != 0 && j % 5 != 0)
#include <stdio.h>
int main(void)
{
  int i, j;
  long sum = 0;
  printf("Enter a number: ");
  scanf("%d", &i);

  for(j =i; j >0; j--)
    if (j % 3 == 0)
    if (j % 2 != 0)
    if (j % 5 != 0)
    {
    printf("%d ", j);sum += j;
    }
    printf ("\n\nthe sum is: %ld\n", sum);
  return 0;
}