北京交通大学C语言综合程序设计.docx
《北京交通大学C语言综合程序设计.docx》由会员分享,可在线阅读,更多相关《北京交通大学C语言综合程序设计.docx(15页珍藏版)》请在冰豆网上搜索。
北京交通大学C语言综合程序设计
综合程序设计
一、实验目的
(1)培养和锻炼对具有一定复杂度和规模的问题的分析与求解能力。
(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较复杂数据的存储。
(3)培养良好的C程序设计风格与代码规意识。
二、课程设计容
(一)设计一个菜单程序:
1、寻找肇事汽车车牌号
2、形成的新数
3、替换后的新字符串
4、狗熊吃包谷
5、学生的平均分
6、再见
(二)具体容如下:
1.寻找肇事汽车车牌号
一辆汽车撞人后逃跑,4个目击者提供如下线索:
甲:
牌照3、4位相同。
乙:
牌号为31XXXX。
丙:
牌照5、6位相同。
丁:
3~6位是一个整数的平方。
请根据4个目击者的话,找出肇事汽车车牌号。
Inta,b;
for
2.形成的新数
将长整型数s中各位上为偶数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
、
例如,当s中的数为87653129时,t中的数为862。
3.替换后的新字符串
将s所指字符串中出现的与t1所指字符串相同的子串,全部替换为t2所指字符串,所形成的新串放在w所指的数组中,要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的容为“abcdabfab”,t1所指子串中的容为“ab”,t2所指子串中的容为“99”时,在w所指的数组中的容应为“99cd99f99”
4.狗熊吃包谷
狗熊到玉米地吃包谷,第一天吃了一半又拿走一个回去喂小狗熊。
第二天又去吃了剩下的一半,走时仍然带一个回去。
以后每天都吃前一天剩下的一半,拿走一个。
到第十天时,狗熊到地里一看,只剩下一个包谷了。
求地里一共有多少包谷?
5.学生的平均分
链表也是一种结构,我们把它单独作为一个知识点学习,最后为检查一下同学们学习能力,请同学们在自己阅读完链表的相应知识点以后,做以下题目:
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,它的功能是求出平均分,并由函数值返回。
请在{}中填写相应的程序。
例如,假定学生的成绩为85、76、69、85、91、72、64、87,则平均分应为78.625。
#include
#include
#defineN8
structslist
{doubles;
structslist*next;
};
typedefstructslistSTREC;
doublefun(STREC*h)
{
doubleaver=0.0;
while(h!
=NULL)
{
aver+=h->s;
h=h->next;
}
aver/=N;
returnaver;
}
STREC*creat(double*s)
{STREC*h,*p,*q;
inti=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i{q=(STREC*)malloc(sizeof(STREC));
q->s=s[i];i++;p->next=q;p=q;
}
p->next=0;
returnh;
}
outlist(STREC*h)
{STREC*p;
p=h->next;printf("head");
do
{printf("->%4.1f",p->s);p=p->next;
}
while(p!
=0);
printf("\n\n");
}
intmain()
{doubles[N]={85,76,69,85,91,72,64,87},ave;
STREC*h;
h=creat(s);outlist(h);
ave=fun(h);
printf("ave=%6.3lf\n",ave);
return0;
}
参考答案:
doubleaver=0.0;
while(h!
=NULL)
{
aver+=h->s;
h=h->next;
}
aver/=N;
returnaver;
程序:
#include
#include
#include
#include
#include
#defineN8
structslist
{
doubles;
structslist*next;
};
typedefstructslistSTREC;
voiddraw();
voidlink();
voidcorn();
voidaverage();
intmenu_select();
intmain()
{
for(;;)
{
switch(menu_select())
{
case1:
draw();break;
case2:
link();break;
case3:
bored();break;
case4:
corn();break;
case5:
average();break;
case6:
printf("Goodbye!
\n");
exit(0);
}
}
return0;
}
intmenu_select()
{
chars;
int;
printf("1、寻找肇事汽车车牌号\n");
printf("2、形成的新数\n");
printf("3、替换后的新字符串\n");
printf("4、狗熊吃包谷\n");
printf("5、求学生的平均分\n");
printf("6、Goodbye!
\n");
printf("\n\n请输入想要执行的程序编号:
");
do
{
s=getchar();
=(int)s-48;
}
while(<0||>6);
return;
}
voiddraw()
{
inti,j,x,y;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
{x=i*1100+j*11;
for(y=31;y<99;y++)
{
if(x==y*y)
printf("车牌号为31%d\n",x);}
}
}
voidhayate(longg,long*h)
{intd;
longs1=1;
*h=0;
while(g>0)
{d=g%10;
if(d%2==0)
{*h=*h+d*s1;
s1*=10;
}
g/=10;}
}
voidlink()
{
longg,h;
printf("请输入一个数");
scanf("%ld",&g);
hayate(g,&h);
printf("结果是%ld\n",h);
}
voidreinforce(char*s,char*t1,char*t2,char*w)
{char*p,*r,*a;
strcpy(w,s);
while(*w)
{p=w;r=t1;
while(*r)
if(*r==*p)
{r++;p++;}
else
break;
if(*r=='\0')
{a=w;r=t2;
while(*r)
{*a=*r;a++;r++;}
w+=strlen(t2);
}
elsew++;
}
}
intbored()
{chars[100],t1[100],t2[100],w[100];
printf("\n请输入字符串s:
");
scanf("%s",s);
printf("\n请输入字符串t1:
");
scanf("%s",t1);
printf("\n请输入与t1等长字符串t2:
");
scanf("%s",t2);
if(strlen(t1)==strlen(t2))
{reinforce(s,t1,t2,w);
printf("\n结果是:
%s\n",w);
}
else
printf("Error\n");
}
voidcorn()
{
intc=1,i,b,a,e=0;
printf("狗熊到玉米地吃包谷,第一天吃了一半又拿走一个回去喂小狗熊。
\n第二天又去吃了剩下的一半,走时仍然带一个回去。
\n以后每天都吃前一天剩下的一半,拿走一个。
\n到第十天时,狗熊到地里一看,只剩下一个包谷了。
\n求地里一共有多少包谷?
\n");
for(i=1;i<10;i++)
{
c=2*(c+1);b=c;
}
printf("\n");
printf("请输入你计算的结果:
");
scanf("%d",&a);
if(b!
=a)
printf("结果错误!
正确结果应该是%d\n\n\n",b);
else
printf("正确!
结果是:
%d\n\n\n",b);
}
doublefun(STREC*h)
{
intn=0;
doublesum=0;
doubleave;
STREC*p;
p=h->next;
while(p)
{
n++;
sum+=p->s;
p=p->next;
}
ave=sum/n;
returnave;
}
STREC*creat(double*s)
{
STREC*h,*p,*q;
inti=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i{
q=(STREC*)malloc(sizeof(STREC));
q->s=s[i];i++;p->next=q;p=q;
}
p->next=0;
returnh;
}
outlist(STREC*h)
{
STREC*p;
p=h->next;printf("head");
do
{
printf("->%4.1f",p->s);p=p->next;
}
while(p!
=0);
printf("\n\n");
}
voidaverage()
{
doubles[N]={85,76,69,85,91,72,64,87},ave;
STREC*h;
h=creat(s);outlist(h);
ave=fun(h);
printf("ave=%6.3f\n\n",ave);
}
结果:
编号1
编号2
编号3
编号4
编号5
编号6