C语言实训上机任务指导书.docx
《C语言实训上机任务指导书.docx》由会员分享,可在线阅读,更多相关《C语言实训上机任务指导书.docx(59页珍藏版)》请在冰豆网上搜索。

C语言实训上机任务指导书
《C语言程序设计》实训指导书
实训项目一:
儿童100以内的加减乘除法游戏训练1
一、目的和要求1
二、试验性质1
三、实验内容1
四、实验步骤1
五、分析与讨论2
实训项目二:
数制转换系统7
一、目的和要求7
二、试验性质7
三、实验内容7
四、实验步骤7
五、分析与讨论8
实训项目三:
倒计时10
一、目的和要求10
二、试验性质10
三、实验内容11
四、实验步骤11
五、分析与讨论11
六、程序清单12
实训项目四:
学生成绩管理系统13
一、目的和要求13
二、试验性质14
三、实验内容14
四、试验步骤14
五、分析讨论14
实训项目五:
通讯录18
一、目的和要求18
二、试验性质18
三、实验内容18
四、试验步骤18
五、分析与讨论19
实训项目六:
后缀表达式求值,表达式求值25
一、目的和要求25
二、试验性质25
三、实验内容25
四、实验步骤26
五、分析与讨论26
实训项目七:
迷宫33
一、目的和要求33
二、试验性质33
三、实验内容33
四、实验步骤34
五、分析与讨论
实训项目一:
儿童100以内的加减乘除法游戏训练
一、目的和要求
1、通过实训掌握本学期所学C语言知识。
2、编辑一个具有加减乘除基本功能的计算器程序。
3、对系统进行功能模块分析、控制模块分析,结论正确。
4、更加深入掌握C语言;
5、熟练的掌握函数的定义,调用,说明的方法;
二、试验性质
自主设计实验
三、实验内容
1)通过菜单选择加减乘除。
2)100(或10)以上的两个整数通过rand函数随即产生。
3)计算减法时,不能出现结果为负数。
4)答对提示恭喜,答错续答,答错三次给出正确答案等等。
四、实验步骤
1、划分程序功能模块;
2、写程序实现算法;
3、画出程序流程图;
4、定义结构体,预处理定义,加法函数,减法函数,乘法函数,除法函数。
5、编译,连接和运行程序。
五、分析与讨论
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
程序源代码:
#include"stdio.h"
#include"conio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
voidaddition();
voidsubtraction();
voidmultiplication();
voiddivision();
voidmain()
{
intchoice;
for(;;)
{
system("cls");
printf("\n-------------------------------------------------\n");
puts("儿童加减乘除算术游戏");
puts("1加法运算2减法运算");
puts("3乘法运算4除法运算");
puts("0退出");
printf("-------------------------------------------------");
printf("\n请选择(0-4):
");
scanf("%d",&choice);
puts("-------------------------------------------------");
switch(choice)
{case0:
exit
(1);
case1:
addition();
printf("\n按任一键继续!
");
getch();break;
case2:
subtraction();
printf("\n按任一键继续!
");
getch();break;
case3:
multiplication();
printf("\n按任一键继续!
");
getch();break;
case4:
division();
printf("\n按任一键继续!
");
getch();break;
default:
printf("输入错误!
按任一键请重新输入!
");getch();continue;
}
}
putchar('\n');
}
voidaddition()
{
intx,y,z,w,i,j=0,k=0;
intchoice;
charc;
system("cls");
printf("\n----------------------------------------------------------------\n");
puts("儿童加法算术游戏");
puts("110以内整数加法运算");
puts("2100以内整数加法运算");
puts("0退出");
printf("------------------------------------------------------------------");
printf("\n请选择(0-2):
");
scanf("%d",&choice);
puts("-------------------------------------------------");
switch(choice)
{case0:
exit
(1);
case1:
i=10;break;
case2:
i=50;break;
default:
printf("输入错误!
按任一键请重新输入!
");getch();
}
putchar('\n');
for(;;)
{system("cls");
x=rand()%i;
y=rand()%i;
if(x!
=0&&y!
=0)
{z=x+y;
printf("\n%d+%d=?
请回答:
",x,y);
scanf("%d",&w);
if(w==z)
{j++;printf("\n恭喜你!
答对了!
继续吗(Y/N)?
");}
else
{k++;printf("\n对不起!
你答错了!
正确答案是:
%d+%d=%d!
继续吗(Y/N)?
",x,y,z);}
scanf("%c",&c);scanf("%c",&c);
system("cls");
if(c=='n'||c=='N')
{printf("\n您的正确率是:
%.0f%",(float)j/(float)(j+k)*100);
break;}}
}
}
voidsubtraction()
{
intx,y,z,w,i,j=0,k=0;
intchoice;
charc;
system("cls");
printf("\n----------------------------------------------------------------\n");
puts("儿童减法算术游戏");
puts("110以内整数减法运算");
puts("2100以内整数减法运算");
puts("0退出");
printf("------------------------------------------------------------------");
printf("\n请选择(0-2):
");
scanf("%d",&choice);
puts("-------------------------------------------------");
switch(choice)
{case0:
exit
(1);
case1:
i=10;break;
case2:
i=50;break;
default:
printf("输入错误!
按任一键请重新输入!
");getch();
}
putchar('\n');
for(;;)
{system("cls");
x=rand()%i;
y=rand()%i;
if(x>y&&y!
=0)
{z=x-y;
printf("\n%d-%d=?
请回答:
",x,y);
scanf("%d",&w);
if(w==z)
{j++;printf("\n恭喜你!
答对了!
继续吗(Y/N)?
");}
else
{k++;printf("\n对不起!
你答错了!
正确答案是:
%d-%d=%d!
继续吗(Y/N)?
",x,y,z);}
scanf("%c",&c);scanf("%c",&c);
system("cls");
if(c=='n'||c=='N')
{printf("\n您的正确率是:
%.0f%",(float)j/(float)(j+k)*100);
break;}}
}
}
voidmultiplication()
{
intx,y,z,w,i,j=0,k=0;
intchoice;
charc;
system("cls");
printf("\n----------------------------------------------------------------\n");
puts("儿童乘法算术游戏");
puts("110以内整数乘法运算");
puts("2100以内整数乘法运算");
puts("0退出");
printf("------------------------------------------------------------------");
printf("\n请选择(0-2):
");
scanf("%d",&choice);
puts("-------------------------------------------------");
switch(choice)
{case0:
exit
(1);
case1:
i=10;break;
case2:
i=50;break;
default:
printf("输入错误!
按任一键请重新输入!
");getch();
}
putchar('\n');
for(;;)
{system("cls");
x=rand()%i;
y=rand()%i;
if(x!
=0&&x!
=1&&y!
=0&&y!
=1)
{z=x*y;
printf("\n%d×%d=?
请回答:
",x,y);
scanf("%d",&w);
if(w==z)
{j++;printf("\n恭喜你!
答对了!
继续吗(Y/N)?
");}
else
{k++;printf("\n对不起!
你答错了!
正确答案是:
%d×%d=%d!
继续吗(Y/N)?
",x,y,z);}
scanf("%c",&c);scanf("%c",&c);
system("cls");
if(c=='n'||c=='N')
{printf("\n您的正确率是:
%.0f%",(float)j/(float)(j+k)*100);
break;}}
}
}
voiddivision()
{
intx,y,z,w,i,j=0,k=0;
floats;
intchoice;
charc;
system("cls");
printf("\n----------------------------------------------------------------\n");
puts("儿童除法算术游戏");
puts("110以内整数除法运算");
puts("2100以内整数除法运算");
puts("0退出");
printf("------------------------------------------------------------------");
printf("\n请选择(0-2):
");
scanf("%d",&choice);
puts("-------------------------------------------------");
switch(choice)
{case0:
exit
(1);
case1:
i=10;break;
case2:
i=50;break;
default:
printf("输入错误!
按任一键请重新输入!
");getch();
}
putchar('\n');
for(;;)
{system("cls");
x=rand()%i;
y=rand()%i;
if(x!
=0&&y!
=0&&y!
=1)
if(
(float)x/(float)y==2||
(float)x/(float)y==3||
(float)x/(float)y==4||
(float)x/(float)y==5||
(float)x/(float)y==6||
(float)x/(float)y==7||
(float)x/(float)y==8||
(float)x/(float)y==9||
(float)x/(float)y==1)
{z=x/y;
printf("\n%d/%d=?
请回答:
",x,y);
scanf("%d",&w);
if(w==z)
{j++;printf("\n恭喜你!
答对了!
继续吗(Y/N)?
");}
else
{k++;printf("\n对不起!
你答错了!
正确答案是:
%d/%d=%d!
继续吗(Y/N)?
",x,y,z);}
scanf("%c",&c);scanf("%c",&c);
system("cls");
if(c=='n'||c=='N')
{printf("\n您的正确率是:
%.0f%",(float)j/(float)(j+k)*100);
break;}}
}
}
实训项目二:
数制转换系统
一、目的和要求
课程实训为学生们提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识与理论实践有机的相结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力。
二、试验性质
自主设计实验
三、实验内容
1.先将十进制数转换成八进制,二进制,十六进制。
2.再输入一个二进制数转换成十进制。
3.再将八进制转换成十进制.
4.输入十六进制转换成十进制.
四、实验步骤
1.划分程序功能模块
a)写程序实现算法;
b)画出程序流程图;
c)定义结构体,宏定义,菜单函数,输入函数,载入文件函数,编写主函数。
编译,连接和运行程序
五、分析与讨论
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
附录:
一、程序流程图
二、程序清单
#include"stdio.h"
#include"stdlib.h"
voidten_eight();
voidConversion();
voidten_sixteen();
voidsele();
#defineSTACKMAX100
typedefstructstacknode
{
intdata;
structstacknode*next;
}stacknode;
typedefstruct
{
stacknode*top;
}linkstack;
voidConversion()
{
linkstacks;
intx,n;
scanf("%d",&n);
s.top=NULL;
do
{
x=n%2;
n=n/2;
stacknode*p=newstacknode;
p->next=s.top;
s.top=p;
s.top->data=x;
}
while(n);
printf("\n\t\t转换后的二进制数值为:
");
while(s.top)
{
printf("%d",s.top->data);
stacknode*p=s.top;
s.top=s.top->next;
deletep;
}
getchar();system("cls");
sele();
}
voidmain()
{
linkstack*s=newlinkstack;
inti=1,j=1,n;
s->top=NULL;
while(i)
{
printf("\n\t\t数制转换:
");
//printf("\n\t\t请输入一个十进制正整数:
");
sele();
break;
}
}
voidten_eight()
{
inta;
scanf("%d",&a);
printf("\n%o",a);
getchar();system("cls");
sele();
}
voidten_sixteen()
{
inta;
scanf("%d",&a);
printf("\n%x",a);
getchar();getchar();system("cls");
sele();
}
voidsele()
{
inty;
printf("\n1------十到二");
printf("\n2------十到八");
printf("\n3------十到十六");
scanf("%d",&y);
switch(y)
{
case1:
Conversion();break;
case2:
ten_eight();break;
case3:
ten_sixteen();break;
default:
printf("输入错误!
\n");
}
}
实训项目三:
倒计时
一、目的和要求
锻炼动手和动脑能力,独立实践的能力,还有团队合作的能力,将课本上的理论知识与实践能力有机的的结合起来,锻炼分析解决实际问题的能力。
提高适应实际,实践编程的能力。
二、试验性质
自主设计实验
三、实验内容
1、通过实训掌握本学期所学C语言知识;
2、编写出一个具有计算功能的倒计时;
3、实现倒计时的输入,输出,计算,调用函数,循环等功能;
4、更加深入掌握C语言实际操作,使理论与实际很好结合;
5、熟练的掌握函数的定义,调用,说明的方法;
熟练掌握对文件的操作,通过printf和scanf函数对文件进行读写操作
四、实验步骤
1.划分程序功能模块;
2.写程序实现算法
例如:
输入考试时间:
2008年06月18日15时44分21秒
输入当日时间:
2008年05月10日24时26分28秒
2008不是闰年,故2008年有365天,6月有30天,5月有31天;
21<28;60+21-28=53;44-1=43;
43>26;43-26=17;
15<23;12+23-23=12;18-1=17;
17>10;17-10=7;
综上距离考试时间有7天17时17分43秒
3.画出程序流程图;
4.定义结构体,输入函数,菜单函数,载入文件函数,编写主函数,编译,连接和运行程序。
五、分析与讨论
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
程序功能模块示意图:
六、程序清单
/***********显示考试倒计时********/
/***************郭凯*************/
#include"stdio.h"
intpr(int,int,int);/*函数说明*/
voidmain()
{
intyear,month,day,hour,minute,second;/*定义变量*/
intgk_year,gk_month,gk_day,gk_hour,gk_minute,gk_second;
intj,h,k1,k2,k3=0;/*给变量赋初值*/
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("\n请输入您的考试时间(年,月,日,时,分,秒):
");
/*提示用户输入考试时间*/
scanf("%d%d%d%d%d%d",&year,&month,&day,&hour,&minute,&second);
/*接收分别输入到各个变量*/
printf("\n请输入您现在的时间(年,月,日,时,分,秒):
");
/*提示用户输入今日时间*/
scanf("%d%d%d%d%d%d",&gk_year,&gk_month,&gk_day,&gk_hour,&gk_minute,&gk_second);
/*接收输入到各个变量*/
k1=pr(year,month,day);/*调用函数*/
k2=pr(gk_year,gk_month,gk_day);/*调用函数*/
for(j=gk_year+1;jif(j%400==0||j%4==0&&j%100!
=0)/*判断是否是闰年*/
k3++;
h=k1-k2+k3+(year-gk_year)*365;
if(second>=gk_second)/*如果second大于或等于gk_second*/
second=second-gk_second;
else
{
second=60+second-gk_second;
minute=minute-1;
}
if(minute>=gk_minute)/*如果minute大于或等于gk_minute*/
minute=minute-gk_minute;
else
{
minute=60+minute-gk_minute;
hour=hour-1;
}
if(hour>=gk_hour)/*如果hour大于或等于gk_hour*/
{
hour=hour-gk_hour;
printf("\n距离您的考试时间还有:
%d天%d小时%d分%d秒!
\n",h,hour,minute,second);
printf("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$