3-9. Print the exclusive multiple of two numbers

输入两个数字后,打印出从1到100的所有数字,这些数字仅是这两个数字中的一个的倍数.也就是说,不应输出这两个数字的公倍数.

例如,如果输入15和20,则输出"15、20、30、40、45、75、80、90、100".(60不在输出中)

对于循环,请使用‘for’语句,并按如下方式使用变量.

int num1, num2; // two numbers entered
int i; // variable for iteration

Example of execution)

Enter 2 numbers 15 20
15
20
30
40
45
75
80
90
100

我最近开始学习c编程,这是我试图解决的问题,但我的代码不能正常工作,有人能帮我解决这个问题吗?非常感谢

这是我试过的代码

enter code here
#include <stdio.h>

int main(void) {
  int num1,num2;
  int i=1;
  int result1;
  int result2;
  printf("Enter 2 numbers \n");
  scanf("%d %d",&num1,&num2);
  for(i=1;i>0;i++){
    if(num1*i<=100&&num2*i<=100){
      if((num1*i%num2!=0)&&(num2*i%num1!=0)){
        printf("%d\n",num1*i);
        printf("%d\n",num2*i);
        }
      else if((num2*i%num1==0)&&(num1*i%num2!=0))
        printf("%d\n",num1*i);
      else if((num1*i%num2==0)&&(num2*i%num1!=0))
        printf("%d\n",num2*i);
      
      }
    else if((num1*i>100&&num2*i<=100)&& (num2*i%num1!=0&&num1*i%num2==0))
        printf("%d\n",num2*i);
    else if((num2*i>100&&num1*i<=100)&&(num1*i%num2!=0&&num2*i%num1==0))
        printf("%d\n",num1*i);
      

推荐答案

您的代码中存在多个问题:

  • 缺少main函数的结尾
  • 循环for(i=1;i>0;i++)是无限循环.相反,您应该从1循环到for(i=1;i>0;i++),并判断该数字是否是num1,num2的倍数,但不是两者都是.
  • 在关键字、逗号和分号之后以及二元运算符的两侧使用空格可以使代码更具可读性.

以下是修改后的版本:

#include <stdio.h>

int main(void) {
    int i, num1, num2;
    printf("Enter 2 numbers: ");
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("invalid input\n");
        return 1;
    }
    if (num1 <= 0 || num2 <= 0) {
        printf("invalid numbers\n");
        return 1;
    }
    for (i = 1; i <= 100; i++) {
        if (i % num1 == 0 || i % num2 == 0) {
            /* i is a multiple of num1 or num2 */
            if (!(i % num1 == 0 && i % num2 == 0)) {
                /* i is a not a multiple of both num1 and num2 */
                printf("%d\n", i);
            }
        }
    }
    return 0;
}

以下是Gerhardh人建议的更紧凑的版本:

#include <stdio.h>

int main(void) {
    int i, num1, num2;
    printf("Enter 2 numbers: ");
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("invalid input\n");
        return 1;
    }
    if (num1 <= 0 || num2 <= 0) {
        printf("invalid numbers\n");
        return 1;
    }
    for (i = 1; i <= 100; i++) {
        if ((i % num1 == 0) != (i % num2 == 0)) {
            /* i is a multiple of num1 or num2 but not both */
            printf("%d\n", i);
        }
    }
    return 0;
}

C++相关问答推荐

是否可以在C中进行D3 D12申请?

Ebpf内核代码:permission denied:invalid access to map value

如何在C宏中确定Windows主目录?

在#include中使用C宏变量

为什么即使在强制转换时,此代码也会溢出?

在C++中通过空指针隐式访问常量变量的值

`#if`条件中是否允许`sizeof`?

等同于铁 rust 的纯C语言S未实现!()宏

如何使用C++在控制台中以彩色打印被阻止的客户端

如何在提取的索引中分配空值?

这段代码用于在C中以相反的顺序打印数组,但它不起作用

pthread_create的用法

将数字的每一位数平方,并使用C将它们连接为一个数字(程序不能正确处理0)

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

将不同类型的指针传递给函数(C)

我错误地修复了一个错误,想了解原因

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

Makefile - 将 .o 文件放入子文件夹中

无法在线程内用 C 打印?

`void foo(int a[static 0]);` 有效吗?