又是这种类似于课程设计的课,并且要求收集50份问卷
出于觉得50份样本数量太小,于是用随机数打了个样本10000的进行实验(恩就是懒得去收表子)
因为只设置了6个问题,就随便弄了分数据
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
FILE *w=fopen("A.txt","w");
for(int i=0;i<10000;i++)
{
int a[7];
a[0]=rand()%4;
a[1]=rand()%4;
a[2]=rand()%2;
a[3]=rand()%4;
a[4]=rand()%6;
a[5]=rand()%7;
fprintf(w,"%d %d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
}
fprintf(w,"^Z\n");
}
然后就是保留一下正文代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void pricemenu(char a,char b,char c); //选取价格范围目录
void perfmenu(char a,char b,char c); //选取手机性能目录
void brandsmenu(char a,char b,char c); //选取手机品牌目录
void submenu(); // 子目录
void subsonmenu(char a,char b); //子子目录
void headmenu(); //首页
void w_between_w(char a,char b,char c,char d); //计算相关性
void f1(); //计算身份比例
void f2(); //计算年龄比例
void f3(); //计算性别比例
void f4(); //计算价格范围比例
void f5(); //计算计算手机性能比例
void f6(); //计算手机品牌期望比例
void ff1(char a); //身份内部选择
void ff2(char a); //年龄内部选择
void ff3(char a); //性别内部选择
int search(int a,int b,int c,int d); //查找函数 简单的链表搜索
void createdate(); //创建链表 读取txt格式
double num_people,num_sub[20][20]; //记录总人数,和各项人数
struct tree
{
int node[10]; //记录各项选择
tree * next; //下一个地址
};
tree * head; //头指针
char f[20][20][20]={{"学生","体力劳动者","脑力劳动者","无工作者"},
{"小于18岁","18到30岁","30到50岁","大于50岁"},
{"男","女"},
{"小于2000元","2000到3000元","3000到4000元","大于4000元"},
{"屏幕大小","颜色","待机时间","拍照像素","音响效果","不在意"},
{"苹果","小米","华为","三星","魅族","OPPO","其他"}};
int search(int a,int b,int c,int d)
{
tree *p=head;
int ans=0;
while(p!=NULL)
{
//t++;
if(p->node[a]==b&&p->node[c]==d)
ans++;
p=p->next;
}
return ans;
}
void w_between_w(char a,char b,char c,char d)
{
c+=3;
printf("%s与%s的关系比例为:%.2lf%%\n",f[a-'1'][b-'0'],f[c-'1'][d-'0'],100*search(a-'1',b-'0',c-'1',d-'0')/num_sub[c-'1'][d-'0']);
headmenu();
}
void pricemenu(char a,char b,char c)
{
printf("0.小于2000 1.2000到3000 2.3000到4000 3.大于4000\n");
printf("4.返回上一层\n");
char d=getchar();getchar();
switch(d)
{
case '0':
case '1':
case '2':
case '3': w_between_w(a,b,c,d);break;
case '4': subsonmenu(a,b);break;
default:printf("无效操作\n");pricemenu(a,b,c);break;
}
}
void perfmenu(char a,char b,char c)
{
printf("0.屏幕大小 1.颜色 2.待机时间 3.拍照像素 4.音响效果 5.不在意\n");
printf("6.返回上一层\n");
char d=getchar();getchar();
switch(d)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5': w_between_w(a,b,c,d);break;
case '6': subsonmenu(a,b);break;
default:printf("无效操作\n");perfmenu(a,b,c);break;
}
}
void brandsmenu(char a,char b,char c)
{
printf("0.苹果 1.小米 2.华为 3.三星 4.魅族 5.OPPO 6.其他\n");
printf("7.返回上一层\n");
char d=getchar();getchar();
switch(d)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6': w_between_w(a,b,c,d);break;
case '7': subsonmenu(a,b);break;
default:printf("无效操作\n");brandsmenu(a,b,c);break;
}
}
void ff1(char a)
{
printf("0.学生\n");
printf("1.体力劳动者\n");
printf("2.脑力劳动者\n");
printf("3.无工作者\n");
printf("4.返回上层\n");
char b=getchar();getchar();
switch(b)
{
case '0':
case '1':
case '2':
case '3':subsonmenu(a,b);break;
case '4':submenu();
default:printf("无效操作\n");
}
}
void ff2(char a)
{
printf("0.小于18岁\n");
printf("1.18岁到30岁\n");
printf("2.30岁到50岁\n");
printf("3.大于50岁\n");
printf("4.返回上层\n");
char b=getchar();getchar();
switch(b)
{
case '0':
case '1':
case '2':
case '3':subsonmenu(a,b);break;
case '4':submenu();
default:printf("无效操作\n");
}
}
void ff3(char a)
{
printf("0.男\n");
printf("1.女\n");
printf("2.返回上层\n");
char b=getchar();getchar();
switch(b)
{
case '0':
case '1':subsonmenu(a,b);break;
case '2':submenu();
default:printf("无效操作\n");
}
}
void submenu()
{
printf("1.查询身份关系\n");
printf("2.查询年龄关系\n");
printf("3.查询性别关系\n");
printf("4.返回主界面\n");
char a=getchar();getchar();
switch(a)
{
case '1':ff1(a);break;
case '2':ff2(a);break;
case '3':ff3(a);break;
case '4':headmenu();break;
default: printf("无效操作\n");submenu();break;
}
}
void subsonmenu(char a,char b)
{
printf("1. 查询与价格范围的关系\n");
printf("2. 查询与手机性能的关系\n");
printf("3. 查询与手机品牌的关系\n");
printf("4. 返回上一层\n");
printf("5. 返回主界面\n");
char c=getchar();getchar();
switch(c)
{
case '1':pricemenu(a,b,c);break;
case '2':perfmenu(a,b,c);break;
case '3': brandsmenu(a,b,c);break;
case '4':submenu();break;
case '5':headmenu();break;
default:printf("无效操作\n");subsonmenu(a,b);break;
}
}
void f1()
{
printf("学生:%.2lf%% 体力工作者:%.2lf%% 脑力劳动者:%.2lf%% 无工作:%.2lf%%\n",100.0*num_sub[0][0]/num_people,100.0*num_sub[0][1]/num_people,100.0*num_sub[0][2]/num_people,100*num_sub[0][3]/num_people);
headmenu();
}
void f2()
{
printf("小于18岁:%.2lf%% 2.18到30岁:%.2lf%% 30到50岁:%.2lf%% 大于50岁:%.2lf%%\n",100.0*num_sub[1][0]/num_people,100.0*num_sub[1][1]/num_people,100.0*num_sub[1][2]/num_people,100.0*num_sub[1][3]/num_people);
headmenu();
}
void f3()
{
printf("男:%.2lf%% 女:%.2lf%%\n",100.0*num_sub[2][0]/num_people,100.0*num_sub[2][1]/num_people);
headmenu();
}
void f4()
{
printf("小于2000:%.2lf%% 2000到3000:%.2lf%% 3000到4000:%.2lf%% 大于4000:%.2lf%%\n",100.0*num_sub[3][0]/num_people,100.0*num_sub[3][1]/num_people,100.0*num_sub[3][2]/num_people,100.0*num_sub[3][3]/num_people);
headmenu();
}
void f5()
{
printf("屏幕大小:%.2lf%% 颜色:%.2lf%% 待机时间:%.2lf%% 拍照像素:%.2lf%% 音响效果:%.2lf%% 不在意:%.2lf%%\n",100.0*num_sub[4][0]/num_people,100.0*num_sub[4][1]/num_people,100.0*num_sub[4][2]/num_people,100.0*num_sub[4][3]/num_people,100.0*num_sub[4][4]/num_people,100.0*num_sub[4][5]/num_people);
headmenu();
}
void f6()
{
printf("苹果:%.2lf%% 小米:%.2lf%% 华为:%.2lf%% 三星:%.2lf%% 魅族:%.2lf%% OPPO:%.2lf%% 其他:%.2lf%%\n",100.0*num_sub[5][0]/num_people,100.0*num_sub[5][1]/num_people,100.0*num_sub[5][2]/num_people,100.0*num_sub[5][3]/num_people,100.0*num_sub[5][4]/num_people,100.0*num_sub[5][5]/num_people,100.0*num_sub[5][6]/num_people);
headmenu();
}
void headmenu()
{
printf("手机意向调查表\n");
printf("1. 查询调查表身份比例\n");
printf("2. 查询调查表年龄分布\n");
printf("3. 查询调查表性别比例\n");
printf("4. 查询调查表可接受价格范围比例\n");
printf("5. 查询调查表看重性能比例\n");
printf("6. 查询调查表各手机品牌受众比例\n");
printf("7. 查询指标与年龄,性别,身份的关系\n");
printf("输入'q'退出\n");
char a=getchar();getchar();
switch(a)
{
case '1': f1();break;
case '2': f2();break;
case '3': f3();break;
case '4': f4();break;
case '5': f5();break;
case '6': f6();break;
case '7': submenu();break;
case 'Q':
case 'q':break;
default: printf("无效操作\n");headmenu();break;
}
}
void createdate()
{
head=new tree;
head=NULL;
int a[10];
tree *q=head;
memset(num_sub,0,sizeof(num_sub));
num_people=0;
FILE * r=fopen("A.txt","r");
while(fscanf(r,"%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5])==6)
{
tree * p;
p=new tree;
for(int i=0;i<6;i++)
{
p->node[i]=a[i];
num_sub[i][a[i]]++;
}
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
num_people++;
}
}
int main()
{
createdate();
headmenu();
}