通过该实验把C语言中的几个主要知识(如:顺序结构、选择结构、循环结构、数组、函数等)得到综合应用。

通过该实验把C语言中的几个主要知识(如:顺序结构、选择结构、循环结构、数组、函数等)得到综合应用。
1, 实验设备及环境:
硬件:多媒体计算机
软件:Windows系列或DOS系列的操作系统、C语言
2、 实验内容及要求:
1.设计主函数,在主函中应该有正确输入或调用每个学生的学号及各科成绩(输入可以根据不同的情况采用不同的输入方法)。
要求:输入时有必要的提示信息。
2.设计子函数,可以求每个学生的平均成绩,每门课的平均成绩、成绩的最大值、最小值等、并保存在数组中;
要求:每个学生至少设计两个子函数。
3.最后结果输出。要求:输出格式要界面直观、清晰大方、格式规范。

#include <stdio.h>
#include <math.h>
#include <String.h>
#include <Bios.h>
#define ESC 27
#define ENTER 20
#define YES 'Y'
#define NO 'N'

/*********全局变量区********/
int volatile key=0,low=0; //用于键盘识别
char volatile search_name[5],search_flag=0; //用于寻找字符串
char volatile R=0,All=0,Error=0; //用于识别是否计算线路电阻,All用于识别是否一次计算完所有的短路点,寻找错误次数
char volatile Short[2]={0}; //用于记录电路点名称,如K1
char volatile Line_flag=0; //寻找线路位置标志
char volatile table1[20]={0}; //用于记录串联的位置数
char volatile table2[20]={0}; //用于记录并联的位置数
char volatile record[2]={0} ; //用于记录短路点的元件存储号
char volatile found=0; //记录已经找到的串联,为下一个首端做标记
float volatile Kim[5]={0}; //冲击电流系数
char volatile kim1=0; //用于冲击电流系数数组
float volatile VH=121; //变压器高压侧平均电压
struct para //结构体数组,用于存储元件参数
{char Class; // 元件类型,0-表示线路,1表示电源,2表示电抗,3表示变压器
char name[5]; // 元件所在名称
float paras[4]; // 元件参数
};
/**************************/

/*******函数声明********/
char Data_process(void);
char input(char number1,char number2,struct para *data,char type);
void Data_Dir(char num1,char num2,struct para *temp,char type2);
float find_short(char *pp,unsigned int sum,char dir0,struct para *data1);
void Line_ID(char *string1,char *string2,char dir);
char find_fun(char sum2,char dir2,char or,char head[] ,struct para *data);
/**********************/

/*函数:input(数目,参数,类型)
功能;完成电力系统元件参数的输入
返回:是否修改值
问题:结构体不能应用浮点型数据!!输入输出出错,原来是编译器的问题!!改变内核即可
*/
char input(char number1,char number2,struct para *data,char type)
{char i=0,answer=0;
switch(type)
{case 0: //第一次输入线路参数
{ for(i=number1;i<number2;i++)
{ data[i].Class=0;
scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name);
printf("\n");
}
if(number1!=number2)
{ printf("The Line parameters are:\n");
printf("[Name Class Legth Rate, Res,Un(KV)]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%4d,%9.2f,%6.2f,%3.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
}
} break;
case 1: //输入电源参数
{for(i=number1;i<number2;i++)
{ data[i].Class=1;
scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name);
printf("\n");
}
if(number1!=number2)
{ printf("\nThe Power parameters are:\n");
printf("[Name Class Capability Xd' E'' Style]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%4d,%8.2f,%6.2f,%7.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
}
} break;
case 2: //输入电抗器参数
{ for(i=number1;i<number2;i++)
{data[i].Class=2;
scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name);
printf("\n");
}
if(number1!=number2)
{ printf("\nThe Reactance parameters are:\n");
printf("[Name Class VR(KV) IR(KA) XR Un(KV)]\n ");//(名称,位置,额定电压,额定电流,所在平均电压)
for(i=number1;i<number2;i++)
{printf("%s,%2d,%10.2f,%6.2f,%6.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
}
} break;
case 3: //第一次输入变压器参数
{ for(i=number1;i<number2;i++)
{data[i].Class=3;
scanf("%f,%f,%f,%f,%s",&data[i].paras[0],&data[i].paras[1],&data[i].paras[2],&data[i].paras[3],data[i].name);
printf("\n");
}
if(number1!=number2)
{ printf("\nThe Transformer parameters are:\n");
printf("[Name Class Capability UH(KV) UL(KV) Uk(%)]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%2d,%12.2f,%8.2f,%8.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
}
answer=1; //完成元件的输入
} break;
default:break;
}

printf("\nDo you sure all the parameters are right?\n");
AAA: printf("\nEnter (Y) to continue,(N) to modify,(ESC) to exit.\n");
while(bioskey(1)==0); /*检测键盘是否有击健*/
key=bioskey(0); /*读取键盘输入的扫描码*/
low=key & 0x00ff; /*提取低8位*/
if(low==NO)
{answer=0;
printf("\nPlease input the name of the data\n");
FIND:
scanf("%s",search_name);
for(i=number1;i<number2;i++) /*寻找需要修改的线路*/
{if(strcmp(search_name,data[i].name)==0)
{search_flag=i;break;} /*找到就强制跳出循环*/
else
{search_flag=127;}
}
if(search_flag==127) /*没有找到*/
{printf("\nInput Error! Please Check and Input again!\n");
printf("Warning:you have only ten times chances!\n");
Error++;
if(Error>10) //10次出错
{ printf("\nTimes up! Enter anykey to exit!\n");
while(bioskey(1)==0); /*检测键盘是否有击健*/
exit(0);
Error=0;
}
else
{goto FIND;} /*继续回去寻找*/
}

printf("Please input the new paras of the data\n");
switch(type) //修改时输入的参数
{ case 0:{ printf("Format(Leghth(Km),Rate(@/Km),Res,Un(KV), Name)\n");

scanf("%f,%f,%f,%f,%s",&data[search_flag].paras[0],&data[search_flag].paras[1],&data[search_flag].paras[2],&data[search_flag].paras[3],data[search_flag].name);
printf("\n");

}break;
case 1:{ printf("Format(Capability(MVA),Xd',E'',Style,Name)\n");

scanf("%f,%f,%f,%f,%s",&data[search_flag].paras[0],&data[search_flag].paras[1],&data[search_flag].paras[2],&data[search_flag].paras[3],data[search_flag].name);
printf("\n");

}break;
case 2:{ printf("Format(UR(KV),IR(kA),XR(%),Un(KV),Name)\n");

scanf("%f,%f,%f,%f,%s",&data[search_flag].paras[0],&data[search_flag].paras[1],&data[search_flag].paras[2],&data[search_flag].paras[3],data[search_flag].name);
printf("\n");

}break;
case 3:{ printf("Format(Capability UH(KV),UL(KV), Uk(%),Name)\n");

scanf("%f,%f,%f,%f,%s",&data[search_flag].paras[0],&data[search_flag].paras[1],&data[search_flag].paras[2],&data[search_flag].paras[3],data[search_flag].name);
printf("\n");

}break;
default:break;
}

printf("\nThe new parameters are:\n");
switch(type)
{case 0:
{printf("The Line parameters are:\n");
printf("[Name Class Legth Rate, Res,Un(KV)]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%4d,%9.2f,%5.2f,%6.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
} break;
case 1:
{printf("The Power parameters are:\n");
printf("[Name Class Capability Xd' E'' Style]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%10d,%4.2f,%6.2f,%6.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
} break;
case 2:
{printf("The Reactance parameters are:\n");
printf("[Name Class VR(N) IR(N) XR Un(KV)]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%5d,%6.2f,%6.2f,%6.2f,%6.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
} break;
case 3:
{printf("The Transformer parameters are:\n");
printf("[Name Class Capability UH(KV) UL(KV) Uk(%)]\n ");
for(i=number1;i<number2;i++)
{printf("%s,%2d,%8.2f,%5.2f,%6.2f,%4.2f\n",data[i].name,data[i].Class,data[i].paras[0],data[i].paras[1],data[i].paras[2],data[i].paras[3]);
printf(" ");
}
} break;
default:break;
}
printf("\nThe paras of a component has been save!\n");
answer=1;
}
else if(low==YES)
{answer=1;}
else if(low==ESC)
{exit(0);}
else goto AAA; /*以上三个按键都不是就回去继续等待*/

getch();
return(answer);
}
/***寻找与短路点串联的线路元件***/
/**元件类型,0-表示线路,1表示电源,2表示电抗,3表示变压器**/
printf("Short Name=");
printf("%s\n",data1[record[0]].name); //打印与短路点的第一个元件名称 如,K1AD
printf("%s\n",data1[record[1]].name); //打印与短路点的第二个元件名称 如,ACK1

count1=find_fun(sum2,dir0,0,data1[record[0]].name,data1);//以短路点为首端,找出顺向串联,如K1AD

/***find_fun()函数用于保存串联的元件序号在table1[]中***/
for(i=0;i<count1;i++) //计算短路点到顺向串联的阻抗
{switch(data1[table1[i]].Class)
{case 0:{value1=data1[table1[i]].paras[0]; //0-线路,线路标么值
if(table2[i]!=0) //说明有并联
{parallel1=data1[table2[i]].paras[0];
value1=value1*parallel1/(value1+parallel1);
}
aa=value1+aa;
}break;
case 1:{value2=data1[table1[i]].paras[0];
source=data1[table1[i]].paras[2]; //电源参数
Kim[kim1]=data1[table1[i]].paras[3];
kim1++;
bb=value2+bb;
}break; //1-电源
case 2:{value3=data1[table1[i]].paras[0]; //电抗,标么值
if(table2[i]!=0) //说明有并联
{parallel2=data1[table2[i]].paras[0];
value1=value1*parallel2/(value1+parallel2);
}
cc=value3+cc;
}break; //2-电抗
case 3:{ value4=data1[table1[i]].paras[0]; //变压器标么值,已经保存在paras[0]
if(table2[i]!=0) //说明有并联
{parallel3=data1[table2[i]].paras[0];
value1=value1*parallel3/(value1+parallel3);
}
dd=dd+value4;
}break; //变压器
default:break;
}
}
value=source/(aa+bb+cc+dd); //顺向电流

printf("\nshort return value="); //错误原因,没有找到电源!
printf("%5.3f\n",value);
return(value);

}

main()
{printf("===========================Welcome To Use This Program=====================\n");
printf("==============================Statement==================================\n");
printf("\n 1 You must predigest the circuit first.\n");
printf("\n 2 You must name to every node by two letter,such as 'AB'\n");
printf("\n 3 You must follow the input format.\n");
printf("\n 4 Class [Line-0,Power sourse-1,Resistance-2,Transformer-3] \n");
printf("\n Now you can use the program if you have read the staement carefully!\n");
printf("\n\n");
Data_process();
}

估计你还是学计算机的,这么简单的问题,自己多琢磨一下吧,C语言可是很经典的东西,以上仅供参考。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-10
怎么都是这玩意,什么成绩管理啊?
相似回答