将40个数按4个一组随机分成10组打印出来:
实现的方法应该有很多,这里就介绍一种利用数组元素的交换来实现的方法。可以利用一个随机函数获取一个40以内的随机数作为下标,将它的值与末尾值交换,再获取一个39以内的随机数,再将它的值与倒数第二个数交换,依次交换后就可以得到一个随机数组了。
#include <time.h>
#include <stdio.h>
#include <string.h>
#define LEN 40
void swap(int *a, int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
void printA(int *a, int len)
{
int i;
for (i = 0; i < len; i++)
{
if (i % 4 == 0)
printf ("\n");
printf ("%4d ",a[i]);
}
printf ("\n");
}
int main1()
{
srand((unsigned int)time(NULL));
int name[LEN] = {0};
int i = 0;
for (i = 0; i < LEN; i++)
{
name[i] = i+1;
}
for (i = LEN-1; i >= 0; i--)
{
int index = rand()%(LEN); // 获取一个i以内的随机下标
swap(name, index, i); // 交换该下标与末尾的值
}
printA (name,LEN);
return 0;
}
这里如果是一个随机的字符串数组就很难交换了,但,我们可以简化的思路,不用交换,直接使用 strcpy 函数进行字符串的赋值:
int main()
{
srand((unsigned int)time(NULL));
char name[][6] = {
"张1","张2","张3","张4", "张5","张6","张7","张8","张9","张10",
"张11","张12","张13","张14","张15","张16","张17","张18","张19","张20",
"张21","张22","张23","张24","张25","张26","张27","张28","张29","张30",
"张31","张32","张33","张34","张35","张36","张37","张38","张39","张40"
};
int i;
for (i = LEN-1; i > 0; i--)
{
int index = rand()%(i);
printf ("%-8s ",name[index]);
strcpy (name[index], name[i]);
if (i % 4 == 0)
printf ("\n");
}
printf ("%s",name[0]);
putchar ('\n');
return 0;
}