编写函数,调用随机函数产生0到19之间的随机数,在数组中存入15个互不重复的整数。要求在主函数中进

编写函数,调用随机函数产生0到19之间的随机数,在数组中存入15个互不重复的整数。要求在主函数中进行输出结果。若已定义x为int类型,调用随机函数步骤如下:
#include<stdio.h>
.
.
.
x=rand()%20;

#include<stdio.h>
#include<stdlib.h>
void f1(int *a, int nn);
int main(void)
{
 int ss[15] = {21}, i;  //将数组元素赋值为21,用于与产生的随机数比较
 f1(ss, 15);
 printf("随机输入后的数组为:");
 for (i = 0; i < 15; i++)
 {
  printf("%d ", ss[i]);
 }
 printf("\n");
 return 0;
}
void f1(int *a, int nn)
{
 int i = 0, j = 0, x;
 for ( ; ; )
 {
  x = rand() %20;
  j = 0;
  while (j < nn && x != a[j]) //用于判断x的值与数组元素的值是否重复
  {
   j++;
  }
  if (j == nn)  //说明无重复
  {
   a[i] = x;
   i++;
  }
  if (i == 15)
  {
   break;
  }
 }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-21
//最强最详细解答,最符合题意,没有超过本章知识点,最适合学生

#include <stdio.h>
#include <stdlib.h>
#define N 15
int db(int *,int);//函数声明,函数名叫对比
int db(int a[],int num)//函数开始
{int i=0,n=0,x;
while(n<num)//n小于15进入循环0,1
{x=rand()%20;//先产生一个随机数给x0,1
while((i<n)&&(x!=a[i]))//嵌套一个while循环两个条件都满足进入循环
{//用每次产生的x值,从数组0到已赋值的数组元素值比较是否重复,这步很重要
i++;//与x进行对比的数组下标前进一次,n是每次对比的数组下标上限
}
if(i==n)//如果数组前进对比下标i的值与数组上限下标n相等
{a[n]=x;//只要能到这一步说明前面所有值都不重复,把x的不重复值赋给当前数组上限元素a[n]
n++;//数组下标n可以放心前进一次
i=0;//同时把数组对比元素下标i置0返回大循环n<15继续判断,继续产生新的不重复数
}
else//如果if语句中数组对比下标i与数组对比上限n不相等,说明里面有重复值,不能满足x!=a[i],进不去jf,所以直接将数组对比下标置0,数组上限下标n也不前进,继续产生并不重复的值,与前面数组不重复的值进行比较,直到找到不重复的值,赋给a[n],然后下标上限n再前进再次循环。
{
i=0;//只要有重复就从新开始
}
}
}
int main()
{ int a[N],i;
db(a,N);//调用函数,使用数组a与参数N产生并找出不重复随机数
for(i=0;i<N;i++)//输出所有对比过的不重复值
printf("%d ", a[i]);
}
第2个回答  2015-12-04
#include<stdio.h>
#include<stdlib.h>
void fun(int *a,int n);
int main()
{
int a[16],i;
for(i=0;i<16;i++)
fun(a,i);
printf("产生的随机数是:");
for(i=0;i<16;i++)
printf("%d ",a[i]);
printf("\n");
}

void fun(int *a,int n)//
{
int i=0,x;
x = rand()%20;
while(i<n && x!=a[i])
i++;
if(i == n)
{
a[n] = x;
}
else
{
fun(a,n);
}
}
相似回答