#include"stdio.h"
#include "string.h"
#include "time.h"
#include "stdlib.h"
#include "windows.h"
#define N 50
//定义最大信息量
struct Course
{
char CourseName[20];
int flag;
};
int CreateCourse(Course My_Course[])
{
int i,sum=0;
printf("输入#表示输入结束!\n");
printf("输入题目名称:");
for(i=0;i<N;i++)
{
scanf("%s",My_Course[i].CourseName);
My_Course[i].flag=0;
sum++;
if(strcmp(My_Course[i].CourseName,"#")==0)
{
sum--;
break;
}
}
return sum;
}
//添加记录
int AddCourse(Course My_Course[],int n)
{
if(n>=N)
{
printf("已经达到最大的题目数!");
return n;
}
else
{
printf("输入题目名称:");
scanf("%s",My_Course[n].CourseName);
My_Course[n].flag=0;
n++;
}
return n;
}
//重命名
void Reneme(Course My_Course[],int n)
{
int i;
char OldName[20],NewName[20];
printf("输入原名:");
scanf("%s",OldName);
printf("输入新名:");
scanf("%s",NewName);
for(i=0;i<n;i++)
{
if(strcmp(My_Course[i].CourseName,OldName)==0)
{
strcpy(My_Course[i].CourseName,NewName);
printf("修改成功!\n");
return;
}
}
printf("你的输入有误,重命名失败!\n");
return;
}
//随机查看
void SJChoise(Course My_Course[],int n,int m)
{
int b[N],i,k,j,flag;
if(m>n)
{
printf("要查看的记录数大于当前的记录总数!\n");
return;
}
for(i=0;i<N;i++) b[i]=-1;
i=0;
flag=0;
while(i<m)
{
while(flag==0)
{
//调用Sleep函数使srand生成不同的种子
Sleep(50);
flag=1;
srand(time(0));
k=rand()%n;
for(j=0;j<i;j++)
if(k==b[j])
{
flag=0;
break;
}
}
My_Course[k].flag=1;
printf("%s\n",My_Course[k].CourseName);
b[i]=k;
i++;
flag=0;
}
}
void main()
{
int n,i,sum,m;
Course My_Course[N];
n=CreateCourse(My_Course);
for(i=0;i<n;i++)
printf("%s ",My_Course[i].CourseName);
printf("\n");
printf("**************简单菜单选择**************\n");
printf("0 推出系统\n");
printf("1 添加题目\n");
printf("2 重命名\n");
printf("3 随机查看记录\n");
printf("****************************************\n");
while(1)
{
printf("输入操作编号:");
scanf("%d",&m);
switch(m)
{
case 0: return;
case 1: n=AddCourse(My_Course,n);
printf("当前记录为:\n");
for(i=0;i<n;i++)
printf("%s ",My_Course[i].CourseName);
printf("\n");
break;
case 2: Reneme(My_Course,n);
printf("当前记录为:\n");
for(i=0;i<n;i++)
printf("%s ",My_Course[i].CourseName);
printf("\n");
break;
case 3: printf("输入你要随机查看的记录数:");
scanf("%d",&sum);
SJChoise(My_Course,n,sum);
break;
}
}
}
注:1.程序是在VC++6.0下编写并调试通过。
2.程序中允许输入汉字。
不是不能解决,你把#define N 50改成#define N 150 或者更大,在把参数sum初始化成100 就成了 你说的“随机选择在100次内不重复的问题”。
在程序调试中,不可能先输入100 数据后再来验证。#define N 就是用来灵活处理问题规模的一个宏。写程序对输入的限制越少越好,程序要能解决一类问题,而不是一个问题。
温馨提示:答案为网友推荐,仅供参考