Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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 打印大于或等于N1且小于或等于N2的11的倍数_C - Fatal编程技术网

C 打印大于或等于N1且小于或等于N2的11的倍数

C 打印大于或等于N1且小于或等于N2的11的倍数,c,C,编写一个执行以下操作的程序: 要求用户输入一个整数N1 要求用户输入一个整数N2 打印大于或等于N1且小于或等于N2的11的倍数 我已经这样做了,但是程序要求打印出多少个数字可以与11相乘,但必须大于N1,小于N2,这就是我遇到的问题 #include <stdio.h> int main () { int N1; printf("Enter an integer N1: "); scanf("%d", &

编写一个执行以下操作的程序:

  • 要求用户输入一个整数N1
  • 要求用户输入一个整数N2
  • 打印大于或等于N1且小于或等于N2的11的倍数
我已经这样做了,但是程序要求打印出多少个数字可以与11相乘,但必须大于N1,小于N2,这就是我遇到的问题

#include <stdio.h>

int main () {
    int N1;
    printf("Enter an integer N1: ");
    scanf("%d", &N1);

    int N2;
    printf("Enter an integer N2: ");
    scanf("%d", &N2);

    int i = N1;
    while (i <= N2)
    {
        if (i % 11 == 0)
        {
            printf("%d\n", i);
        }
        i = i + 1;
    }
    printf("Exiting...");
    return 0;
}
#包括
int main(){
int-N1;
printf(“输入一个整数N1:”);
scanf(“%d”&N1);
int N2;
printf(“输入一个整数N2:”);
扫描频率(“%d”和“N2”);
int i=N1;

而(i你可以使用一个额外的计数器变量来跟踪这一点。一些额外的改进:

  • 使用
    scanf
    时,最好始终在输入格式前加一个空格,这样缓冲区中的任何前导空格都会被使用,但不会被格式化为输出变量,还可以检查其返回值是否成功(它返回一个
    int
    ,表示从字符串中成功读取的格式说明符的数量)

  • 您不需要一次迭代一个。您可以将
    N1
    增加到11的下一个倍数,然后继续增加11,直到它达到
    N2
    的值

     #include <stdio.h>
    
     int main() 
     {
         int N1;
         printf("Enter an integer N1: ");
         if (scanf(" %d", &N1) != 1)
         {
             // Handle scanf failure
         }
    
         int N2;
         printf("Enter an integer N2: ");
         if (scanf(" %d", &N2) != 1)
         {
             // Handle scanf failure
         }
    
         while (N1 % 11 != 0)
         {
             N1++;
         }
    
         int count = 0;
    
         while (N1 < N2)
         {
             printf("%d\n", N1);
    
             N1 += 11;
             count++;
         }
    
         printf("Saw %d multiples of 11 in this range.\n", count);
    
         printf("Exiting...");
         return 0;
     }
    
    #包括
    int main()
    {
    int-N1;
    printf(“输入一个整数N1:”);
    如果(扫描频率(“%d”,&N1)!=1)
    {
    //处理扫描失败
    }
    int N2;
    printf(“输入一个整数N2:”);
    如果(扫描频率(“%d”,&N2)!=1)
    {
    //处理扫描失败
    }
    而(N1%11!=0)
    {
    N1++;
    }
    整数计数=0;
    而(N1

  • 对于这个答案,我首先复制了您的代码,从Govind Parmar的答案中添加了
    scanf
    改进,并添加了一个计数器变量

    现在,我想在Eugene Sh.的评论的基础上,完全去掉循环。这意味着我的答案不会打印出11的每一个倍数,但你也不需要这样做

    首先,我们需要检查
    N2>=N1
    是否为真。当我们使用循环时,如果此条件为假,则循环不会执行,但当我们摆脱循环时,我们需要手动检查此条件

    对于问题的主要部分,可以这样想:您有一个数字范围,从
    N1
    开始,到
    N2
    结束。您需要确定11的倍数在该范围内。为此,请找到该范围内11的最小倍数,找到该范围内11的最大倍数,并找出有多少倍数他们中间有11人

    要查找大于或等于
    N1
    的11的最小倍数,请首先查找小于或等于11的最大倍数(
    N1/11
    ),然后根据需要添加11

    要找到11中小于或等于
    N2
    的最大倍数,只需执行
    N2/11

    分别调用这些倍数
    最小倍数
    最大倍数
    。现在,要找到总共有多少倍数,请执行
    (最大倍数-最小倍数)/11+1

    总而言之:

    #include <stdio.h>
    
    int main () {
        int N1;
        printf("Enter an integer N1: ");
        if (scanf(" %d", &N1) != 1) {
            // Handle scanf failure
        }
    
        int N2;
        printf("Enter an integer N2: ");
        if (scanf(" %d", &N2) != 1) {
            // Handle scanf failure
        }
    
        int count;
    
        if (N2 >= N1) {
            int smallest_multiple;
            int largest_multiple;
    
            smallest_multiple = N1 / 11;
            if (smallest_multiple < N1) {
                smallest_multiple += 11;
            }
    
            largest_multiple = N2 / 11;
    
            if (largest_multiple >= smallest_multiple) {
                count = (largest_multiple - smallest_multiple) / 11 + 1;
            } else {
                count = 0;
            }
        } else {
            count = 0;
        }
    
        printf("Saw %d multiples of 11 in this range.\n", count);
    
        printf("Exiting...");
        return 0;
    }
    
    #包括
    int main(){
    int-N1;
    printf(“输入一个整数N1:”);
    如果(扫描频率(“%d”,&N1)!=1){
    //处理扫描失败
    }
    int N2;
    printf(“输入一个整数N2:”);
    如果(扫描频率(“%d”,&N2)!=1){
    //处理扫描失败
    }
    整数计数;
    如果(N2>=N1){
    整数倍;
    整数倍;
    最小_倍数=N1/11;
    if(最小_倍数=最小\u倍数){
    计数=(最大倍数-最小倍数)/11+1;
    }否则{
    计数=0;
    }
    }否则{
    计数=0;
    }
    printf(“在此范围内看到了11的%d倍。\n”,计数);
    printf(“退出…”);
    返回0;
    }
    
    这个答案可能有一个问题:如果
    N1<0
    ,它可能无法正常工作。不幸的是,大多数C算术运算符指南在谈到除法时似乎忽略了负数。到目前为止,我发现最好的答案是:

    商按实现定义的方向四舍五入。(直到C++11)

    商被截断为零(小数部分被丢弃)

    当我知道更多时,我会更新这个答案



    编辑:我发现我的原始答案有问题。如果范围内没有11的倍数,则
    最小倍数
    将大于
    N2
    (超出范围),
    最大倍数
    将小于
    N1
    (超出范围)和
    最大\u倍数-最小\u倍数==-11
    。我已经编辑了我的答案来测试这一点。

    这里真的不需要循环。想想你用纸和笔怎么说。我太累了,写不出正确的答案,但基本上:在顶部声明一个变量
    j
    ,初始化为零,每次递增de>i%11==0
    (在你现有的
    if
    块中),并在最后打印出来。是的,我完全同意你刚才所做的,但问题是确定有多少个数字可以与小于N2、大于N1的11相乘!@watushi我的错误;重新阅读你的帖子并更新我的答案。:)真的很感激,老板!我正在学习成为一名软件工程师,这是我第一次学习C语言,所以即使是一个简单的问题也能解决