C语言问题两则求解答

  1. 随机生成一组(20个)两位整数,完成如下功能:
    (1)分别统计输出奇偶数的个数,求出偶数和、奇数平均值;
    (2)从小到大排序并输出结果;
    (3)不重新排序的前提下(前后对调),把数组改为从大到小排序并输出结果

  2. 如下程序是随机生成三位整数num,拆分出百位数num1和个位数num2,若百位数与个位数之差为5则结束生成随机数,统计并输出共执行了多少次,最终生成的数是多少。该程序有四个空白处,请阅读程序,将空白处补充完整
    代码

img

请把程序空缺的内容(1)-(4)填写完整,并调试通过输出正确的结果。

先说说第2个:

  1. rand()%900+100;
  2. num/100;
  3. num%10
  4. break;

第1个空因为 rand()%900 可生成0-899,这样加上100后,就是100-999,为三位随机数。
第2个与第3个就是分别求百位和个位。
第4个,因为满足了差为5,退出循环。

第1个:

#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int a[25];

int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    srand((unsigned int)(time(NULL)));
    for (int i=1;i<=20;i++) a[i]=rand()%90+10; //生成随机数
    int se=0,s1=0,s2=0;
    double so=0; //奇数和
    for (int i=1;i<=20;i++)
    {
        if (a[i]%2==1) s1++,so+=a[i];
        else s2++,se+=a[i];
    }
    so+=0.0; //变成小数运算    
    cout<<"奇数个数: "<<s1<<"\n偶数个数: "<<s2<<endl;
    cout<<"偶数和: "<<se<<"\n奇数平均数: "<<so/s1<<endl;
    sort(a+1,a+21); //排序
    cout<<"从小到大排序结果: ";
    for (int i=1;i<=20;i++)
        cout<<a[i]<<" ";
    for (int i=1;i<20;i++)
        for (int j=i+1;j<=20;j++)
            if (a[i]<a[j]) swap(a[i],a[j]); //交换
    cout<<"\n从大到小排序结果: ";
    for (int i=1;i<=20;i++)
        cout<<a[i]<<" ";
    return 0;
}

运行结果

奇数个数: 11
偶数个数: 9
偶数和: 394
奇数平均数: 49.9091
从小到大排序结果: 11 13 16 19 20 26 27 28 29 39 40 42 47 56 68 81 91 93 98 99 
从大到小排序结果: 99 98 93 91 81 68 56 47 42 40 39 29 28 27 26 20 19 16 13 11 

有用点个采纳,谢谢了!