c语言课程设计设计报告Word文档下载推荐.docx
《c语言课程设计设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c语言课程设计设计报告Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
FindNum();
system("
pause"
);
break;
case2:
FindRoot();
case3:
Detective();
case4:
Monkey();
case5:
Diamond();
case6:
Calculator();
case0:
printf("
Goodbye!
\n"
exit(0);
}
}
intmenu_select()/*主函数菜单*/
charc;
do{
cls"
1.FindNum\n"
2.FindRoot\n"
3.Detective\n"
4.Monkey\n"
5.Diamond\n"
6.Calculator\n"
0.Goodbye!
c=getchar();
}while(c<
'
0'
||c>
6'
return(c-'
FindNum()/*找数字*/
inti;
for(i=1;
i<
=9;
i++)/*穷举*/
if((30+i)*6237==(10*i+3)*3564)
%d\n"
i);
FindRoot()/*找方程的根*/
floata[10],b[10],c[10],disc,x1,x2,real,image;
/*定义abc三个数组存放方程的系数*/
inti,k,j;
for(i=0;
10;
i++)/*循环输入方程的三个系数*/
pleaseinputthreerealnumbers:
scanf("
%f%f%f"
&
a[i],&
b[i],&
c[i]);
press'
1'
tocontinue\npress'
2'
tocalculate\n"
%d"
k);
if(k==2)break;
/*判断是否继续输入*/
for(j=0;
j<
=i;
j++)
Theequation%d"
j+1);
if(fabs(a[j])<
=1e-7)/*a=0的情况*/
isnotquadratic,solutionis%.2f\n"
-c[j]/b[j]);
else
disc=b[j]*b[j]-4*a[j]*c[j];
if(fabs(disc)<
=1e-7)/*有两个相等的实根的情况*/
isnotquadratic,solutionis:
%.2f\n"
-b[j]/(2*a[j]));
elseif(disc>
1e-7)/*有两个不等实根的情况*/
x1=(-b[j]+sqrt(disc))/(2*a[j]);
x2=(-b[j]-sqrt(disc))/(2*a[j]);
hasdistinctrealroots:
%.2fand%.2f\n"
x1,x2);
else/*有两个虚根的情况*/
real=-b[j]/(2*a[j]);
image=sqrt(-disc)/(2*a[j]);
hascomplexroots:
%.2f+%.2fi\n"
real,image);
%.2f-%.2fi\n"
Detective()/*找牌照*/
inti,a,b,c,d;
longm;
for(i=32;
=99;
i++)/*穷举找出后四位号码*/
m=i*i;
a=m%10;
b=m/10%10;
c=m/100%10;
d=m/1000;
if(a==b&
&
c==d)
%ld\n"
m+310000);
Monkey()/*猴子吃桃问题*/
intn,i;
longx;
n);
x=1;
for(i=n-1;
i>
=1;
i--)
x=(x+1)*2;
x);
voidprint_diamond(intline)
inti,j,k,m,n,p,q,a,b;
=(49-line)/2;
i++)/*输出(49-line)/2行的空格*/
for(j=1;
=(line+1)/2;
{for(m=1;
m<
=(80-line)/2;
m++)/*先输出(80-line)/2个空格*/
"
for(a=1;
a<
=(line-(2*j-1))/2;
a++)/*行数j从1到中间一行输出(line-(2*j-1))/2个空格*/
for(n=1;
n<
=2*j-1;
n++)/*中间行及上面每行输出2*j-1个"
*"
*/
for(k=1;
k<
=(line-1)/2;
k++)/*同理输出中间行下面的钻石图案*/
{for(p=1;
p<
p++)
for(b=1;
b<
=k;
b++)
for(q=1;
q<
=line-2*k;
q++)
Diamond()/*钻石*/
intline;
line);
print_diamond(line);
/*调用print_diamond输出钻石图案*/
Calculator()/*简单计算器*/
inta[4],b[4],c[4],i,j,k;
/*定义ab两个数组存放数*/
charch[4];
/*定义c存放运算符*/
FILE*fp1,*fp2;
fp1=fopen("
expres.txt"
"
r"
/*打开expres文件*/
if(fp1==NULL)/*判断打开成功*/
Cannotopenfileexpres\n"
exit
(1);
=3;
i++)
fscanf(fp1,"
%d%c%d"
ch[i],&
b[i]);
/*循环读入四道题*/
switch(ch[j])/*判断运算符*/
{case'
+'
:
c[j]=a[j]+b[j];
case'
-'
c[j]=a[j]-b[j];
*'
c[j]=a[j]*b[j];
/'
c[j]=a[j]/b[j];
fp2=fopen("
result.txt"
w"
/*打开文件result*/
if(fp2==NULL)/*判断打开文件是否成功*/
exit
(2);
for(k=0;
k++)/*循环向文件中输入结果*/
fprintf(fp2,"
%d%c%d=%d\n"
a[k],ch[k],b[k],c[k]);
succeed!
五、测试流程:
运行程序
屏幕显示:
1.FindNum
2.FindRoot
3.Detective
4.Monkey
5.Dismond
6.Calculator
0.Goodbye!
输入:
1回车
显示:
9
Pressanykeytocontinue…
按任意键返回菜单
2回车
pleaseinputthreerealnumber:
0回车1回车2回车
press‘1’tocontinue
press’2’tocalculate
(按照以上方法再输入三组数据:
1,2,1;
1,3,2;
1,0,4后选择2,回车)
Theequation1isnotquadratic,solutionis-2.00
Theequation2isnotquadratic,solutionis-1.00
Theequation3hasdistinctrealroots:
-1.00and-2.00
Theeauation4hascomplexroots:
-0.00+2.00i
-0.00-2.00i
Pressandkeytocontinue…
3回车
317744
4回车
10回车
1534
5回车
5回车
输出:
*
***
*****
6回车
0回车
按任意键结束程序
程序二:
学生成绩简单管理
一、程序功能简介:
用结构体数组结构实现简单的学生管理成绩管理功能,要求具有数据输入、数据输出、数组排序、元素插入、元素删除、查询等功能。
二、题目分析
完成与菜单项对应的功能设计
1、intInput(structstudentstu[],intn);
/*从键盘输入若干条纪录,依次存放到结构体数组stud中,n为数组原有纪录数,程序运行初始纪录数为0,函数返回纪录数.*/
2、Display(structstudentstu[],intn);
/*显示所有记录,每10个暂停一下,n为数组元素个数*/
3、Sort_by_Name(structstudentstu[],intn);
/*按姓名作升序排序,要求用选择排序法*/
4、intInsert_a_record(structstudentstu[],intn);
/*输入待插入的姓名和成绩,按姓名作有序插入,输出插入成功信息,返回纪录个数*/
5、intDelete_a_record(structstudentstu[],intn);
/*输入待删除的姓名,经确认后删除该姓名的纪录,输出删除成功与否的信息.返回数组中的纪录数*/
6、intQuery_a_recored(structstudentstu[],intn);
/*输入待查找的姓名,查找该姓名的纪录,输出查找成功与否的信息和该学生的信息*/
7、intAddfromText(structstudentstud[],intn);
/*从文件filename添加一批纪录到数组中,返回添加纪录后的新的纪录数*/
8、WritetoText(structstudentstu[],intn);
/*将数组中的纪录全部写入文件records.txt*/
三、函数调用关系图:
string.h>
typedefstructstudent/*定义结构体数组*/
charname[20];
floatscore;
};
structstudentInput_one_record()/*输入一个学生的成绩记录*/
structstudentstud;
pleaseinputthename:
%s"
stud.name);
pleaseinputthescore:
%f"
stud.score);
returnstud;
intInput(structstudentstu[],intn)/*输入学生成绩记录*/
for(n=0;
=39;
n++)
stu[n]=Input_one_record();
/*调用函数Input_ont_record输入学生成绩记录*/
doyouwanttocontinue:
('
Y'
or'
N'
)"
getchar();
if(toupper(getchar())=='
returnn+1;
voidDisplay(structstudentstu[],intn)/*输出所有学生的成绩记录*/
inti,j;
3;
i++)/*每屏显示十个记录然后暂停*/
for(j=10*i;
=10*i+9;
j++)/*循环输出十个记录*/
if(j>
n-1)break;
%s%20f\n"
stu[j].name,stu[j].score);
pressanykeytodisplaythenexttenrecords:
voidSort_by_Name(structstudentstu[],intn)/*排序*/
inti,j,p;
structstudentt;
=n-2;
i++)/*选择排序法*/
p=i;
for(j=i+1;
=n-1;
j++)/*找到最小数据的下标*/
if(strcmp(stu[j].name,stu[p].name)<
0)
p=j;
if(p!
=i)/*判断最小数据是否在第一个*/
t=stu[p];
stu[p]=stu[i];
stu[i]=t;
intInsert_a_record(structstudentstu[],intn)/*插入一个学生成绩记录*/
structstudentnew;
structstudent*s;
pleaseinputaname:
new.name);
new.score);
s=&
new;
n=Insert(stu,n,s);
/*调用函数Insert作有序插入*/
returnn;
intInsert(structstudentstu[],intn,structstudent*s)/*有序插入*/
if(strcmp(stu[i].name,s->
name)>
0)break;
for(j=n-1;
j>
j--)
stu[j+1]=stu[j];
stu[i]=*s;
intDelete_a_record(structstudentstu[],intn)/*删除一个学生的成绩记录*/
intk;
structstudentname_to_delete;
structstudent*name;
pleaseinputthenameyouwanttodelete:
name_to_delete.name);
name=&
name_to_delete;
Delete%s'
srecord('
):
name_to_delete.name);
k=Delete(stu,n,name);
/*调用函数Delete查找数据,若存在做删除*/
if(k==-1)/*判断是否存在*/
Therecorddoesnotexist!
elsen=k;
intDelete(structstudentstu[],intn,structstudent*name)
=n;
if(strcmp(stu[i].name,name->
name)==0)break;
/*找到需要删除的数据下标i*/
if(i==n+1)/*判断要删除的数据是否存在*/
return-1;
/*不存在,返回提示信息*/
else/*存在,做删除*/
for(j=i;
stu[j]=stu[j+1];
returnn-1;
voidQuery_a_record(structstudentstu[],intn)/*查找一个学生的成绩记录*/
structstudentname_to_query;
pleaseinputthenameyouwanttoquery:
name_to_query.name);
name_to_query;
if(Query(stu,n,name)==-1)/*调用函数Query判断要查找的记录是否存在*/
%sdoesnotexist!
/*不存在输出提示信息*/
else/*存在,输出记录*/
name_to_query=stu[Query(stu,n,name)];
\n%s\t%f\n"
name_to_query.name,name_to_query.score);
intQuery(structstudentstu[],intn,structstudent*name)/*查找记录*/
i++)/*找到需要查找的记录的下标*/
name)==0)
if(i<
=n-1)/*判断要查找的记录时候存在*/
returni;
/*存在,返回下标i*/
elsereturn-1;
intAddfromText(structstudentstu[],intn)/*从文件中整批输入*/
inti,num;
FILE*fp;
/*定义文件指针*/
charfilename[20];
Inputthefilename:
filename);
if((fp=fopen(filename,"
))==NULL)
cann'
topenthefile!
fscanf(fp,"
num);
num;
i++)/*循环读入文件内容*/
%s%f"
stu[n+i].name,&
stu[n+i].score);
n+=num;
fclose(fp);
Sort_by_Name(stu,n);
/*调用函数Sort_by_Name排序*/
voidWritetoText(s