C语言实训题目及要求.docx
- 文档编号:25151806
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:18
- 大小:25.83KB
C语言实训题目及要求.docx
《C语言实训题目及要求.docx》由会员分享,可在线阅读,更多相关《C语言实训题目及要求.docx(18页珍藏版)》请在冰豆网上搜索。
C语言实训题目及要求
C语言实训题目
第一题、每组从下面的5个题目中选择一个完成。
1、猜数游戏
涉及知识点:
循环、随机数操作。
计算机“想”一个数([1,100])请人猜,如果猜对了,提示正确信息;否则告诉所猜的数是大还是小,同时提示下一次猜数的范围,直到猜对结束,最后给出游戏者猜测的次数。
要求,程序以菜单方式工作。
2、显示万年历
涉及知识点:
循环、格式化输出。
设计一个程序实现万年历的显示,要求:
(1)输入一个年份(1900-2040),在屏幕上输出该年的日历。
(2)输出年历时,以月份和星期做表头。
(3)系统以菜单方式工作。
3、显示月历
涉及知识点:
循环、格式化输出。
设计一个程序实现月历的显示,要求:
(1)输入年月信息,在屏幕上输出该月的日历。
(2)输出日历时,以月份和星期做表头。
(3)系统以菜单方式工作。
4、英文单词统计助手
涉及知识点:
循环、字符串数组(二维字符数组)、一维字符数组、数组元素的排序。
设计一个程序实现英文短文单词的统计任务,要求:
(1)输入若干行英文,语句之间用逗号,句点分隔,单词之间用空格分隔。
(2)统计并输出单词的总数。
(3)统计各英文字符出现的次数(标点符号及空格不统计),并按出现的次数降序输出。
(4)系统以菜单方式工作。
5、简单文本编辑器
涉及知识点:
循环、字符串数组(二维字符数组)、一维字符数组、字符串处理函数。
设计一个程序实现英文文本的编辑,要求:
(1)输入若干行英文,语句之间用逗号,句点分隔,单词之间用空格分隔。
(2)单词的查找:
输入一个单词,查找该单词在短文中出现的次数及所在的行数和列数。
(3)单词的替换:
输入一个单词,在文中查找该单词,并将其替换为新单词。
(4)大小写转换:
将文中的所有单词转换为大写或小写。
(5)系统以菜单方式工作。
第二题、每组从下面的4个题目中选择一个完成。
(每个题目最多限选3次)
6、简单数学测验
涉及知识点:
循环、文本文件操作、格式化读写文件、随机数、全局变量。
设计程序实现一个数学测验,随机选择两个整数和加减法形成算式要求学生解答,要求:
(1)电脑随机出10道题,每题10分,程序结束时显示得分。
(2)只允许进行100以内的加减法,不允许两数的和或差超出0—100的范围。
(3)每道题有两次机会输入答案,第一次输入错误答案时,提醒重新输入,若两次输入
均错误,则给出正确答案。
(4)判分规则:
第一次回答正确得10分,第二次回答正确得5分,否则不得分。
(5)程序提供查看错题功能,能查看本次测验的错题。
(6)系统以菜单方式工作。
7、数学测验
涉及知识点:
循环、文本文件操作、格式化读写文件、随机数、全局变量。
设计程序实现一个数学测验,随机选择两个整数和乘除法形成算式要求学生解答,要求:
(1)电脑随机出5道题,每题20分,程序结束时显示得分。
(2)只允许进行100以内的乘法,不允许两数的积超出0—100的范围。
(3)做除法时,只允许做整除运算(即本次除法运算的余数为0)。
(4)每道题有两次机会输入答案,第一次输入错误答案时,提醒重新输入,若两次输入
均错误,则给出正确答案。
(5)判分规则:
第一次回答正确得20分,第二次回答正确得10分,否则不得分。
(6)程序提供查看错题功能,能查看本次测验的错题。
(7)系统以菜单方式工作。
8、简单计算器
涉及知识点:
循环、随机数、数学函数。
设计程序实现一个计算器,要求:
(1)能完成任意两个数的四则运算(加、减、乘、除)。
(2)能完成三角函数运算(sin(x),cos(x),tan(x),sin-1(x),cos-1(x),tan-1(x)。
(3)能完成对数运算(lnx,log10x)。
(4)其它运算(ex,平方分计算,xy)。
(5)系统以菜单方式工作,每个功能里的运算用二级菜单实现,例如:
加、减、乘、除
的选择需用二级菜单提示。
9、记忆力大挑战
涉及知识点:
循环、随机数、数组。
设计程序实现一个记忆力挑战游戏,要求:
(1)游戏分为5个等级,每个等级的游戏规则如下。
(2)入门级:
电脑随机出5个数字(1~20),每个数字上面显示其所在的位置序号(从1
开始),数字在屏幕上显示5秒钟,然后消失,要求游戏者凭借记忆按顺序答出5
个数字,答错一个即算挑战失败。
(3)修炼级:
电脑随机出5个数字(1~20),数字在屏幕上显示4秒钟,然后消失,要
求游戏者凭借记忆按顺序答出5个数字,答错一个即算挑战失败。
(4)大师级:
电脑随机出5个数字(1~20),数字在屏幕上显示3秒钟,然后消失,要
求游戏者凭借记忆按顺序答出5个数字,答错一个即算挑战失败。
(5)大仙级:
电脑随机出5个数字(1~20),数字在屏幕上显示2秒钟,然后消失,要
求游戏者凭借记忆按顺序答出5个数字,答错一个即算挑战失败。
(6)系统以菜单方式工作。
第三题、每组从下面的11个题目中选择一个完成。
(组与组之间题目不能重复)
10、学籍查询系统
涉及知识点:
循环、二进制文件操作、结构体数组、排序。
设计程序实现学生学籍的查询,具体要求如下:
(1)用二进制数据文件存放学生的学籍信息。
(2)学籍的添加:
根据输入的新生的学号、姓名、性别、出生日期、系别、专业信息,
注册该生的学籍。
(3)学籍的显示:
输出所有学籍。
(4)学籍的查询:
根据学号,查询并显示该生的学籍。
(5)学籍的查询:
根据系别,查新并显示该系的学籍。
(6)学籍的排序:
按学号降序输出所有学籍。
(7)系统以菜单方式工作。
11、学籍管理系统
涉及知识点:
循环、二进制文件操作、结构体数组、文件的随机读写。
设计程序实现学生学籍的管理,具体要求如下:
(1)用二进制数据文件存放学生的学籍信息。
(2)学籍的添加:
根据输入的新生的学号、姓名、性别、出生日期、系别、专业信息,
注册该生的学籍。
(3)学籍的修改:
根据学号,查找并修改该生的成绩,并显示修改后所有学生的成绩信
息。
(4)学籍的删除:
根除输入的学号,删除该生的学籍,并显示修改后所有学生的学籍。
(5)系统以菜单方式工作。
12、成绩查询系统
涉及知识点:
循环、二进制文件操作、结构体数组。
设计程序实现学生成绩的查询,具体要求如下:
(1)用二进制数据文件存放学生的成绩信息。
(2)成绩的添加:
根据输入的学生成绩信息(学号、姓名、班级、学期、英语成绩、高
数成绩、C语言成绩),添加该生的成绩。
(3)成绩的显示:
输出所有学生的成绩。
(4)成绩的查询:
根据学号,查询并显示该生的成绩。
(5)成绩的查询:
根据班级,查询并显示该班的成绩。
(6)成绩的查询:
根据课程名,查询并显示该课程所有不及格成绩。
(7)系统以菜单方式工作。
13、成绩管理系统
涉及知识点:
循环、二进制文件操作、结构体数组、文件的随机读写、排序。
设计程序实现学生成绩的管理,具体要求如下:
(1)用二进制数据文件存放学生的成绩信息。
(2)成绩的添加:
根据输入的学生成绩信息(学号、姓名、班级、学期、英语成绩、高
数成绩、C语言成绩),添加该生的成绩。
(3)成绩的修改:
根据学号,查找并修改该生的成绩,并显示修改后所有学生的成绩。
(4)成绩的删除:
根除输入的学号,删除该生的成绩,并显示修改后所有学生的成绩。
(5)成绩的排序:
降序输出某班某课程的成绩。
(6)系统以菜单方式工作。
14、宿舍查询系统
涉及知识点:
循环、二进制文件操作、结构体数组。
设计程序实现学生宿舍信息的查询,具体要求如下:
(1)用二进制数据文件存放学生的宿舍信息。
(2)每个房间最多住4人。
(3)宿舍信息的添加:
根据输入的宿舍信息(楼号、房间号、实际入住人数、入住学生
姓名),添加该宿舍的信息。
(4)宿舍信息的显示:
输出所有宿舍的信息。
(5)宿舍信息的查询:
根据楼号与房间号,查询并显示该宿舍的信息。
(6)宿舍信息的查询:
根据楼号,查询并显示该宿舍楼的实际入住人数。
(7)宿舍信息的查询:
根据楼号,查询并显示该宿舍楼中尚有空床位的宿舍信息。
(8)系统以菜单方式工作。
15、宿舍管理系统
涉及知识点:
循环、二进制文件操作、结构体数组、文件的随机读写。
设计程序实现学生宿舍信息的管理,具体要求如下:
(1)用二进制数据文件存放学生的宿舍信息。
(2)每个房间最多住6人。
(3)宿舍信息的添加:
根据输入的宿舍信息(楼号、房间号、实际入住人数、入住学生
姓名),添加该宿舍的信息。
(4)宿舍信息的修改:
根据楼号及房间号,查找并修改该宿舍的信息,并显示修改后该
楼的所有宿舍信息。
(5)宿舍信息的删除:
根除输入的楼号及房间号,删除该宿舍的信息,并显示修改后该
楼的所有宿舍信息。
(6)系统以菜单方式工作。
16、火车信息查询系统
涉及知识点:
循环、二进制文件操作、结构体数组、排序。
设计程序实现火车信息的查询,具体要求如下:
(1)用二进制数据文件存放学生的宿舍信息。
(2)车票信息的添加:
根据输入的车票信息(车次、始发地、目的地、出发时间、到达
时间、票价、余票数、总票数),添加该车次信息。
(3)车次查询:
根据输入的车次,查询并输出该车次的列车信息。
(4)始发地查询:
根据输入的始发地,查询并输出相应的列车信息。
(5)目的地查询:
根据输入的目的地,查询并输出相应的列车信息。
(6)按票价降序输出所有的列车信息。
(7)系统以菜单方式工作。
17、火车信息管理系统
涉及知识点:
循环、二进制文件操作、结构体数组、文件的随机读写。
设计程序实现火车票信息的查询,具体要求如下:
(1)用二进制数据文件存放学生的宿舍信息。
(2)车票信息的追加:
根据输入的车票信息(车次、始发地、目的地、出发时间、到达
时间、票价、余票数、总票数),添加该车次信息。
(3)订购车票:
根据输入的车次及票数,订购车票,并显示订票后该次列车的余票信息。
(4)查询并输出票已售罄的列车信息。
(5)退票:
根据输入的车次及票数,进行退票,并显示退票后该次列车的余票信息。
(6)系统以菜单方式工作。
18、短信模拟管理器
涉及知识点:
循环、二进制文件操作、结构体数组、文件的随机读写。
设计程序实现手机短信的模拟管理,具体要求如下:
(1)用二进制数据文件存放短信信息。
(2)短信的保存:
编辑一条短信(日期、发送者、接收者、短信内容),保存该短信。
(3)短信查询:
根据输入的发送者姓名,查找并显示其所发的所有短信。
(4)短信删除:
根据输入的发送者姓名,删除其所发的所有短信。
(5)短信删除:
根据输入的接收者姓名,删除发送给该用户的所有短信。
(6)系统以菜单方式工作。
19、员工工资查询系统
涉及知识点:
循环、二进制文件操作、结构体数组、排序。
设计程序实现员工工资的查询,具体要求如下:
(1)用二进制数据文件存放员工工资信息。
(2)工资信息的追加:
根据输入的员工工资信息(工号、姓名、性别、月份、基本工资、
奖金、应扣额、实发工资),添加该员工工资信息。
(3)每月应扣额计算方法:
应扣额=基本工资*0.1+奖金*0.15
每月实发工资计算方法:
实发工资=基本工资+奖金-应扣额。
(4)按月查询工资:
输入一个月份,查询并输出该月所有员工的工资信息。
(5)按工号查询工资:
输入一个工号,查询并输出该员工每月的工资信息及全年的工资
总额。
(6)工资排序:
降序输出所有员工的全年工资总和。
(7)系统以菜单方式工作。
20、员工工资管理系统
涉及知识点:
循环、二进制文件操作、结构体数组、文件的随机读写。
设计程序实现员工工资的管理,具体要求如下:
(1)用二进制数据文件存放员工工资信息。
(2)工资信息的追加:
根据输入的员工工资信息(工号、姓名、性别、月份、基本工资、
奖金、应扣额、实发工资),添加该员工工资信息。
(3)每月应扣额计算方法:
应扣额=基本工资*0.1+奖金*0.15
每月实发工资计算方法:
实发工资=基本工资+奖金-应扣额。
(4)工资信息修改:
输入一个工号,修改该员工的工资信息,并保存修改结果。
(5)工资信息删除:
输入一个工号及月份,删除该员工该月份的工资信息,并输出删除
操作后该员工全年的工资信息。
(6)系统以菜单方式工作。
时间安排
周一:
第一题,进行题目分析,完成设计,画出程序流程图,编写代码并完成程序测试,撰写实验报告。
周二:
第二题,进行题目分析,完成设计,画出程序流程图,编写代码并完成程序测试,撰写实验报告。
周三:
第三题,进行题目分析,完成设计,画出程序流程图,编写代码并完成程序测试,撰写实验报告。
周四:
第三题,进行题目分析,完成设计,画出程序流程图,编写代码并完成程序测试,撰写实验报告。
周五:
验收、考核、答辩、提交实训报告。
附录1:
随机数的生成:
下面示例代码生成10个1~100范围内的随机整数,存入数组array中。
#include
voidtest()
{
intarray[10],i;
srand(time(0));//设置随机数种子,必须要有
for(i=0;i<10;i++)
{
array[i]=rand()%100+1;//生成1~100范围内的随机整数,赋值给数组
//元素array[i],生成a~b之间的一个随机整数公式为:
rand()%(b-a+1)+a;
}
}
附录2:
万年历制作要点提示:
*系统中的时间从1900-1-1日开始计算,设置一个变量sumday,用来保存从1900-1-1起经过的天数。
sumday初值为0,每经过一天sumday加1。
*注意:
闰年全年有366天,非闰年全年有365天。
*判断某天为周几的方法:
*1900年1月1日,该天的sumday值为1,当天是周一
*2015年6月24日:
先计算该天的sumday值,然后判断sumday%7的结果,如果sumday%7==1,则该天为周一,若值为2,则该天为周二,……若sumday%7==0,则该天为周日。
附录3:
菜单界面制作效果,以简单数学测验为例:
主函数示例代码:
voidmain()
{
voidshowmenu();
intn;
do
{
showmenu();
printf(“请选择一个序号:
\n”);
scanf(“%d”,&n);
switch(n)
{
case1:
start();break;//调用函数start(),开始测验
case2:
showgrade();break;//调用函数showgrade(),显示成绩
case3:
break;
default:
printf(“请输入正确的操作序号!
\n”);break;
}
}while(n!
=3);//循环显示菜单,直到用户输入3结束程序
printf(“谢谢使用本系统,下次再见!
\n”);
}
//菜单显示函数示例代码:
voidshowmenu()
{
printf("***********************************************\n");
printf("欢迎使用数学测试系统\n");
printf("1.开始测试\n");
printf("2.查看分数\n");
printf("3.退出系统\n");
printf("***********************************************\n");
}
附录4:
清除输出窗口的内容及计时。
(记忆力挑战题目涉及此知识)
以下示例代码完成输出两个随机整数,显示3秒后清除输出窗口中的内容:
#include
#include
#include
voidtest()
{
intm,n;
doubledur;//计时变量
clock_tstart,end;//定义两个clock_t类型的变量start,end
srand(time(0));//设置随机数种子
m=rand()%10;//生成0-10之间的一个随机整数,赋值给变量m
n=rand()%10;
printf("%d,%d\n",m,n);//在输出窗口输出m,n的值
start=clock();//开始计时,clock()函数每隔0.001秒增加1
while(dur<3)//当计时不到3秒时,执行循环体
{
end=clock();
dur=(double)(end-start)/CLOCKS_PER_SEC;//计算到此处经过的秒数
}
system("cls");//若超过3秒,则清除输出窗口中的m,n值
printf("请猜测!
\n");//在输出窗口输出新内容
}
附录5:
二进制数据文件操作要点:
二进制文件操作流程:
*打开文件fopen(文件名,打开方式)
*对文件进行读或写
*从文件中读数据块:
fread(buffer,字节数,count,文件指针)
*向文件写数据块:
fwrite(buffer,字节数,count,文件指针)
*关闭文件fclose(文件指针)
以学籍管理系统为例:
*学籍的添加:
(打开文件à逐条写学籍信息->关闭文件)
*一次可以添加一条或多条学籍信息,新添加的学籍信息放在文件的尾部。
*fwrite(&xj,sizeof(structxueji),1,fp);
*说明:
xj为structxueji类型的变量,上句完成将保存在xj中的一条学籍信息写入fp所指的文件中。
*学籍的查询:
(打开文件à逐条读学籍信息->关闭文件)
*fread(&xj,sizeof(structxueji),1,fp);
*上句完成从fp所指文件中读出一条学籍信息,保存至变量xj中。
然后判断xj中的学号是否等于要查询的学号,是就输出该生学籍信息。
以下示例代码完成学籍信息的添加:
voidinsert_xueji()//向文件c:
\stu.dat中追加一条学籍信息,学籍信息可以分多次录入
{
inti=0;
charch;
FILE*fp;
structxuejixj;//structxueji为自己声明的结构体类型,可以表示学籍信息
fp=fopen("c:
\\stu.dat","ab+");//以ab+的方式打开数据文件c:
\stu.dat
if(fp==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
do
{
printf("请输入第%d个学生的学籍:
学号,姓名,性别,出生日期,系别,专业\n",i+1);
scanf("%d%s%s%d%d%d%s%s",&xj.num,xj.name,xj.sex,&xj.birthday.year,&xj.birthday.month,&xj.birthday.day,xj.depa,xj.major);
fwrite(&xj,sizeof(structxueji),1,fp);
count++;//全局变量,用来统计学籍总数
printf("继续输入吗?
继续输入请按y,结束输入请按n\n");
ch=getchar();
i++;
}
while(ch=='y');
fclose(fp);
}
以下示例代码完成输出全部学籍信息(二进制数据文件的逐条读操作)
voidshow_info()//逐条输出二进制数据文件c:
\stu.dat中的学籍信息
{
FILE*fp;
structxuejixj;
fp=fopen("c:
\\stu.dat","rb");//打开保存学籍信息的数据文件c:
\stu.dat,打开方式为rb
if(fp==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
printf("全体学生的学籍为:
\n");
fread(&xj,sizeof(structxueji),1,fp);//先读一条学籍信息,保存到结构体变量xj中
while(!
feof(fp))//判断文件是否结束
{
//若文件没结束,则输出刚读到的学籍信息
printf("%d\t%s\t%s\t%d-%d-%d\t%s\t%s\n",xj.num,xj.name,xj.sex,xj.birthday.year,xj.birthday.month,xj.birthday.day,xj.depa,xj.major);
fread(&xj,sizeof(structxueji),1,fp);//继续读下一条学籍信息
}
fclose(fp);
}
*改变文件位置指针相关函数:
*rewind:
把文件位置指针移到文件头
*fseek:
重定位文件位置指针
*ftell:
返回文件位置指针
*修改学籍时,若遍历学籍文件找到了某学生的学籍信息,此时,文件位置指针并没有指向该生学籍信息,而是指向下一个学生的学籍信息位置。
所以,需要使用fseek函数重新让位置指针指向要修改的学籍位置,这一点一定要注意。
删除学籍信息时,也是如此。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 题目 要求
![提示](https://static.bdocx.com/images/bang_tan.gif)