本人计算机专业大一,写了一个C语言大作业代码,题目要求如图
编译没有问题,是errors 0 warnings 0
但是每次运行都会在第一次调用函数后中断,退出运行窗口。
单步调试在中断时弹出一个弹窗,如下图:
这个真的超出我大脑营业范围了,希望各位大神帮着改一改,感谢感谢,deadline就在这几天,救我一命吧!!!!!!
(为了方便查看我写了菜单,错误在part 6开头,“新增确诊数据”那个,被调函数是part 9第一个)
再次感谢大神!!!
//————数据处理部分代码内容菜单————//
//part 1:头文件及宏定义//
//part 2:定义链表结构//
//part 3:函数声明//
//part 4:定义数据//
//part 5:由文件获取昨日累计//
//part 6:数据处理//
//part 7:链表调用//
//part 8:创建文件储存累计数据//
//part 9:被调函数——求值部分//
//part 10:被调函数——链表部分//
//——————————————part 1:头文件及宏定义————————————//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>
#include<wchar.h>
#define D 34
#define I 222
//——————————————part 2:定义链表结构——————————————//
struct node_domestic //我国//
{
int did_d[D]; //省今日新增确诊//
int dia_d[D]; //省累计确诊人数//
int dis_d[D]; //省确诊总数排序//
int cud_d[D]; //省今日新增治愈//
int cua_d[D]; //省累计治愈人数//
int cus_d[D]; //省治愈总数排序//
int ded_d[D]; //省今日新增死亡//
int dea_d[D]; //省累计死亡人数//
int des_d[D]; //省死亡总数排序//
int drs_d[D]; //省病死率排序//
double dr_d[D]; //省病死率//
struct node_domestic *next;
};
typedef struct node_domestic DO;
struct node_international //世界//
{
int did_i[I]; //国今日新增确诊//
int dia_i[I]; //国累计确诊人数//
int dis_i[I]; //国确诊总数排序//
int cud_i[I]; //国今日新增治愈//
int cua_i[I]; //国累计治愈人数//
int cus_i[I]; //国治愈总数排序//
int ded_i[I]; //国今日新增死亡//
int dea_i[I]; //国累计死亡人数//
int des_i[I]; //国死亡总数排序//
int drs_i[I]; //国病死率排序//
double dr_i[I]; //国病死率//
struct node_international *next;
};
typedef struct node_international IN;
//————————————————part 3:函数声明——————————————//
int assign_d(); //省新增数据录入函数//
int assign_i(); //国新增数据录入函数//
int accumulated_d(int[],int[]); //省累计人数计算并输出//
int accumulated_i(int[],int[]); //国累计人数计算并输出//
int sort_d(double[]); //省排序输出并序号//
int sort_i(double[]); //国排序输出并序号//
double rate_d(int[],int[]); //省病死率//
double rate_i(int[],int[]); //国病死率//
DO *creat(DO *head0); //建立链表(我国)的声明//
IN *creat(IN *head1); //建立链表(世界)的声明//
//————————————————part 4:定义数据——————————————//
int main()
{
int i,n,t;
int did_d[D]; //省今日新增确诊//
int did_i[I]; //国今日新增确诊//
int dis_d[D]; //省确诊总数排序//
int dis_i[I]; //国确诊总数排序//
int cud_d[D]; //省今日新增治愈//
int cud_i[I]; //省今日新增治愈//
int cus_d[D]; //省治愈总数排序//
int cus_i[I]; //国治愈总数排序//
int ded_d[D]; //省今日新增死亡//
int ded_i[I]; //国今日新增死亡//
int des_d[D]; //省死亡总数排序//
int des_i[I]; //国死亡总数排序//
int drs_d[D]; //省病死率排序//
int drs_i[I]; //国病死率排序//
double dr_d[D]; //省病死率//
double dr_i[I]; //国病死率//
int dia_d[D]={0}; //省累计确诊人数//
int dia_i[I]={0}; //国累计确诊人数//
int cua_d[D]={0}; //省累计治愈人数//
int cua_i[I]={0}; //国累计治愈人数//
int dea_d[D]={0}; //省累计死亡人数//
int dea_i[I]={0}; //国累计死亡人数//
//排除特殊情况:第一次录入数据——直接赋值昨日累计为0//
printf("欢迎进入数据录入系统! \n");
printf("首次录入请输入 0 ,非首次录入请输入 1 : \n");
scanf("%d",&n);
//————————————part 5:由文件获取昨日累计—————————————//
if(n!=0)
{
//省//
FILE *fp0;
if((fp0=fopen("D:\\do_past.txt","r"))==NULL) //以只读形式创建//
{
exit(0);
}
for(i=0;i<D;i++)
fscanf(fp0,"%d %d %d",dia_d[i],cua_d[i],dea_d[i]);
fclose(fp0);
//国//
FILE *fp1;
if((fp1=fopen("D:\\in_past.txt","r"))==NULL) //以只读形式创建//
{
exit(0);
} //特殊情况:第一次录入数据//
for(i=0;i<I;i++)
fscanf(fp1,"%d %d %d",dia_i[i],cua_i[i],dea_i[i]);
fclose(fp1);
}
printf("请准备开始输入今日数据! \n");
//——————————————part 6:数据处理————————————————//
printf("即将开始录入我国疫情相关数据! \n");
//调用省新增数据录入函数//
printf("请录入各省新增确诊数据: \n");
did_d[i]=assign_d();
printf("请录入各省新增治愈数据: \n");
cud_d[i]=assign_d();
printf("请录入各省新增死亡数据: \n");
ded_d[i]=assign_d();
printf("我国新增数据已全部录入完成! \n");
//调用省累计函数//
dia_d[i]=accumulated_d(did_d,dia_d);
printf("已生成累计确诊数据!\n");
cua_d[i]=accumulated_d(cud_d,cua_d);
printf("已生成累计治愈数据!\n");
dea_d[i]=accumulated_d(ded_d,dea_d);
printf("已生成累计死亡数据!\n");
printf("我国累计数据已全部生成! \n");
dr_d[i]=rate_d(dia_d,dea_d); //调用省病死率函数//
printf("我国病死率数据已全部生成! \n");
//调用省排序函数//
dis_d[i]= sort_d((double*)dia_d);
printf("已生成确诊排序!\n");
cus_d[i]= sort_d((double*)cua_d);
printf("已生成治愈排序!\n");
des_d[i]= sort_d((double*)dea_d);
printf("已生成死亡排序!\n");
drs_d[i]= sort_d(dr_d);
printf("已生成死亡率排序!\n");
//实参类型强制转换,实现int、 double两种实参共用一个函数//
printf("我国排序数据已全部生成! \n");
printf("今日我国全部疫情相关数据均已生成! \n");
printf("即将开始录入世界疫情相关数据! \n");
//调用国新增数据录入函数//
printf("请录入各国新增确诊数据: \n");
did_i[i]=assign_i();
printf("请录入各国新增治愈数据: \n");
cud_i[i]=assign_i();
printf("请录入各国新增死亡数据: \n");
ded_i[i]=assign_i();
printf("世界新增数据已全部录入完成! \n");
//调用国累计函数//
dia_i[i]=accumulated_i(did_i,dia_i);
printf("已生成累计确诊数据!\n");
cua_i[i]=accumulated_i(cud_i,cua_i);
printf("已生成累计治愈数据!\n");
dea_i[i]=accumulated_i(ded_i,dea_i);
printf("已生成累计死亡数据!\n");
printf("世界累计数据已全部生成! \n");
dr_i[i]=rate_i(dia_i,dea_i); //调用国病死率函数//
printf("世界病死率数据已全部生成! \n");
//调用国排序函数//
dis_i[i]= sort_i((double*)dia_i);
printf("已生成确诊排序!\n");
cus_i[i]= sort_i((double*)cua_i);
printf("已生成治愈排序!\n");
des_i[i]= sort_i((double*)dea_i);
printf("已生成死亡排序!\n");
drs_i[i]= sort_i(dr_i);
printf("已生成死亡率排序!\n");
//实参类型强制转换,实现int、 double两种实参共用一个函数//
printf("世界排序数据已全部生成! \n");
printf("今日世界全部疫情相关数据均已生成! \n");
//———————————————part 7:链表调用——————————————//
printf("正在储存今日我国各省全部疫情相关数据! \n");
DO *head0;
head0=NULL;
head0=creat(head0); //调用我国链表//
printf("正在储存今日世界各国全部疫情相关数据! \n");
IN *head1;
head1=NULL;
head1=creat(head1); //调用世界链表//
//—————————————part 8:创建文件储存累计数据——————————//
printf("正在进行最后整理,请您稍候片刻! \n");
//省累计数据文件//
FILE *fp0;
FILE *fp1;
if((fp0=fopen("D:\\do_past.txt","w"))==NULL) //用只写方式打开文件,若文件不存在则创建一个文件便于次日调取//
{
printf("Can not open the file!\n");
exit(0);
}
for(t=0;t<D;t++);
fprintf(fp0," %d %d %d\n",dia_d[t],cua_d[t],dea_d[t]); //分行输入各个省份对应的累计确诊、治愈、死亡//
fclose(fp0);
//国累计数据文件//
if((fp1=fopen("D:\\in_past.txt","w"))==NULL) //用只写方式打开文件,若文件不存在则创建一个文件便于次日调取//
{
printf("Can not open the file!\n");
exit(0);
}
for(t=0;t<I;t++);
fprintf(fp1," %d %d %d\n",dia_i[t],cua_i[t],dea_i[t]); //分行输入各个国家对应的累计确诊、治愈、死亡//
fclose(fp1);
printf("今日所有疫情数据相关操作已完成,感谢您的配合,再见! \n");
return 0;
}
//———————————part 9:被调函数——求值部分————————————//
int assign_d() //省新增数据录入函数//
{
int i;
int m[D];
for(i=0;i<D;i++)
{
printf("省份编号:%d \n",i+1);
scanf("%d",m);
}
printf("完成! \n");
return *m;
}
int assign_i() //国新增数据录入函数//
{
int i;
int m[I];
for(i=0;i<I;i++)
{
printf("国家编号:%d \n",i+1);
scanf("%d",m);
}
printf("完成! \n");
return *m;
}
int accumulated_d(int *x,int *s) //省累计人数计算并输出//
{
int i;
for(i=0;i<D;i++)
{ scanf("%d",x); //今日新增人数//
s[i]=s[i]+x[i];
}
return *s;
}
int accumulated_i(int *x,int *s) //国累计人数计算并输出//
{
int i;
for(i=0;i<I;i++)
{
scanf("%d",&x); //今日新增人数//
s[i]=s[i]+x[i];
}
return *s;
}
int sort_d(double *a) //省排序输出并序号//
{
int i,j,temp;
int b[D];
for(i=0;i<D;i++)
b[i]=i+1;
for(i=1;i<D;i++)
for(j=0;j<i;j++)
if(a[i]>a[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
return *b;
}
int sort_i(double *a) //国排序输出并序号//
{
int i,j,temp;
int b[I];
for(i=0;i<I;i++)
b[i]=i+1;
for(i=1;i<I;i++)
for(j=0;j<i;j++)
if(a[i]>a[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
return *b;
}
double rate_d(int *dia_d,int *dea_d) //省病死率//
{
int a;
double dr_d[D];
for(a=0;a<D;a++)
dr_d[a]=dia_d[a]/dea_d[a];
return *dr_d;
}
double rate_i(int *dia_i,int *dea_i) //国病死率//
{
int a;
double dr_i[I];
for(a=0;a<I;a++)
dr_i[a]=dia_i[a]/dea_i[a];
return *dr_i;
}
//————————————part 10:被调函数——链表部分———————————//
DO *creat(DO *head0) //创建链表(我国),并返回头指针//
{
int did_d[D]; //省今日新增确诊//
int dia_d[D]; //省累计确诊人数//
int dis_d[D]; //省确诊总数排序//
int cud_d[D]; //省今日新增治愈//
int cua_d[D]; //省累计治愈人数//
int cus_d[D]; //省治愈总数排序//
int ded_d[D]; //省今日新增死亡//
int dea_d[D]; //省累计死亡人数//
int des_d[D]; //省死亡总数排序//
double dr_d[D]; //省病死率//
int drs_d[D]; //省病死率排序//
DO *s; //每次指向结点的指针//
DO *r; //指向结点的前面一个结点的指针//
int i;
head0=(DO*)malloc(sizeof(DO));
r=head0;
for(i=0;i<D;i++)
{
s=(DO*)malloc(sizeof(DO)); //申请一个新结点//
s->did_d[i]=did_d[i]; //省今日新增确诊//
s->dia_d[i]=dia_d[i]; //省累计确诊人数//
s->dis_d[i]=dis_d[i]; //省确诊总数排序//
s->cud_d[i]=cud_d[i]; //省今日新增治愈//
s->cua_d[i]=cua_d[i]; //省累计治愈人数//
s->cus_d[i]=cus_d[i]; //省治愈总数排序//
s->ded_d[i]=ded_d[i]; //省今日新增死亡//
s->dea_d[i]=dea_d[i]; //省累计死亡人数//
s->des_d[i]=des_d[i]; //省死亡总数排序//
s->dr_d[i]=dr_d[i]; //省病死率//
s->drs_d[i]=drs_d[i]; //省病死率排序//
//将数据存放到新结点中//
r->next=s;
r=s; //将新结点插入链表//
}
r->next='\0'; //置链表结束标志//
printf("我国数据储存完成! \n");
return head0; // 返回表头指针//
}
IN *creat(IN *head1) //创建链表(世界),并返回头指针//
{
int did_i[I]; //国今日新增确诊//
int dia_i[I]; //国累计确诊人数//
int dis_i[I]; //国确诊总数排序//
int cud_i[I]; //国今日新增治愈//
int cua_i[I]; //国累计治愈人数//
int cus_i[I]; //国治愈总数排序//
int ded_i[I]; //国今日新增死亡//
int dea_i[I]; //国累计死亡人数//
int des_i[I]; //国死亡总数排序//
double dr_i[I]; //国病死率//
int drs_i[I]; //国病死率排序//
IN *s; //每次指向结点的指针//
IN *r; //指向结点的前面一个结点的指针//
int i;
head1=(IN*)malloc(sizeof(IN));
r=head1;
for(i=0;i<I;i++)
{
s=(IN*)malloc(sizeof(IN)); //申请一个新结点//
s->did_i[i]=did_i[i]; //国今日新增确诊//
s->dia_i[i]=dia_i[i]; //国累计确诊人数//
s->dis_i[i]=dis_i[i]; //国确诊总数排序//
s->cud_i[i]=cud_i[i]; //国今日新增治愈//
s->cua_i[i]=cua_i[i]; //国累计治愈人数//
s->cus_i[i]=cus_i[i]; //国治愈总数排序//
s->ded_i[i]=ded_i[i]; //国今日新增死亡//
s->dea_i[i]=dea_i[i]; //国累计死亡人数//
s->des_i[i]=des_i[i]; //国死亡总数排序//
s->dr_i[i]=dr_i[i]; //国病死率//
s->drs_i[i]=drs_i[i]; //国病死率排序//
//将数据存放到新结点中//
r->next=s;
r=s; //将新结点插入链表//
}
r->next='\0'; //置链表结束标志//
printf("世界数据储存完成! \n");
return head1; // 返回表头指针//
}