从键盘输入5个整数,输出能被了整除的数。

img


从键盘输入5个整数,输出能被了整除的数。
C语言,希望有人解答

参考如下:

#include <stdio.h>

int main()
{
    int a, i;
    for (i = 0; i < 5; i++)
    {
        scanf("%d", &a);
        if (a % 3 == 0)
            printf("%d ", a);
    }
    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7601437
  • 这篇博客也不错, 你可以看下【c语言】输入两个数,交换这两个数后,再输出
  • 除此之外, 这篇博客: C语言带知识点的代码&C语言经典代码&每个程序含一个知识点中的 5、 完善程序,实现将输入的字符串反序输出:逆序输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 方法1:

    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
    	char c[200], c1;
    	int i, j, k;
    	printf("Enter a string: ");
    	scanf("%s", c);
    	k = strlen(c);
    	for (i = 0, j = k - 1; i<k/2;i++,j--)
    		{
    		c1 = c[i]; 
    		c[i] = c[j];
    		c[j] = c1; 
    		}
    	printf("%s\n", c);
    	return 0;
    }

    运行结果:

    存在的问题:如果输入:hello world,情况是啥?

    答案:gets()和getchar()的用法

    方法2和方法3:

    //字符串逆序
    #include <stdio.h>
    #include <string.h>
    
    //实现方式1:数组方式
    void str_reverse(char *str) {
    
    	int low=0, high;
    	char temp;
    	high = strlen(str) - 1;
    	while(low < high) {
    		temp = str[low];
    		str[low] = str[high];
    		str[high] = temp;
    		low++;
    		high--;
    	}
    }
    //实现方式2;指针方式
    void str_reverse1(char *str) {
    
    	char temp;
    	char *p, *q;
    	int n;
    	p = str; //指向数组首地址
    	n = strlen(str);
    	q = &str[n-1]; //指向数组末地址
    	while (p < q) {
    		temp = *p;
    		*p = *q;
    		*q = temp;
    		p++;
    		q--;
    	}
    }
    int main() {
    	char a[] = {"abcdefg"};
    	printf("逆序前的字符串:%s\n", a);
    	str_reverse(a);
    	printf("逆序后的字符串:%s\n",a);
    	str_reverse1(a);
    	printf("逆序后的字符串:%s\n", a);
    	return 0;
    }

    输出结果:

  • 您还可以看一下 王健伟老师的C语言入门篇课程中的 关系运算符、关系表达式,逻辑运算符、逻辑表达式小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    题目难度尚可,实现就比较麻烦了,以下就是代码——

    #include <cstdio>
    
    // Gcd是求[项-数对],含义如下
    // Input: 5, 2
    // Ouput: {3, 5}
    void Gcd(const int n, const int m, int& gcd, int* gcd_list) {
        gcd = n;
        int tmp = 0;  // 余数
        while (m != 0) {
            tmp = gcd % m;
            gcd = m;
            m = tmp;
        }
        if (1 == gcd) {
            return;
        }
    
        int* p = gcd_list;
        // “求[项-数对]” 的过程
        // 其中对于同一个gcd,它有多个对应的列表项
        // 用 *p = (xi,yi) 表示下标为i的项
        // 如 { (x1,y1), (x2,y2), (x3,y3) }
        // 对应的 gcd 则为 n
        // 例如 x1,x2,x3 本身是关于 n 区域内均匀分布的
        // 而在同一 项-数 对中,它们对应的 y 值是有规律的
        // 详见中间的print
        for (int i = 1; i < gcd; ++i) {
            if (gcd % i == 0) {
                // 因为 x 是 y 的唯一值,所以在[1,n)范围内只会有一个x对应i
                *p++ = i;
                *p++ = (n - i);
            }
        }
    }
    
    void RotateArray(int n, int m, int* a) {
        if (m > n) {
            // 该情况下只需要将m对n取余即可
            m %= n;
        }
    
        int gcd = 0;
        int gcd_list[n] = { 0 };
        // n,m,gcd,gcd_list均为输出参数
        // 形参n表示原始数组a中元素个数
        // 形参m表示右移的位数
        // gcd和gcd_list是“项-数 对应表”
        Gcd(n, m, gcd, gcd_list);
    
        // 遍历“项-数 对应表”,更新数组 a
        // 如此遍历的目的是尽可能不遗漏地移动所有元素
        int* p = gcd_list;
        for (; *p != 0; ++p) {
            const int gi = *p;     // gcd_list[n] 中下标
            const int delta = n / gcd; // 子区间中的数目
            const int round = gcd - 1;  // 需要轮换交换的轮数
            for (int i = 0; i < round; ++i) {
                int tmp = a[delta * i + gi];
                for (int j = 0; j < gcd - 1; ++j) {
                    int pos = delta * ((i + 1) * j % round) + gi;
                    int tmp2 = a[pos];
                    a[pos] = tmp;
                    tmp = tmp2;
                }
            }
        }
    }
    
    int main() {
        int n, m;
        scanf("%d%d", &n, &m);
    
        int a[n] = { 0 };
        for (int i = 0; i < n; ++i) {
            scanf("%d", &a[i]);
        }
    
        RotateArray(n, m, a);
    
        printf("%d", a[0]);
        for (int i = 1; i < n; ++i) {
            printf(" %d", a[i]);
        }
        printf("\n");
    
        return 0;
    }