C++习题.docx
《C++习题.docx》由会员分享,可在线阅读,更多相关《C++习题.docx(38页珍藏版)》请在冰豆网上搜索。
![C++习题.docx](https://file1.bdocx.com/fileroot1/2023-2/1/1de84ff0-0d18-4d8d-911d-1efa9c842791/1de84ff0-0d18-4d8d-911d-1efa9c8427911.gif)
C++习题
模拟实习报告
实习内容:
综合模拟实习
相关课程:
C程序设计、数据结构
学期:
2009-2010学年第2学期
学时学分:
32学时2学分
专业班级:
信管0822班
学 号:
080310671
姓 名:
余十全
指导老师:
罗毅辉
提交日期:
2010年12月2日
一、实习目的
通过模拟实习,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。
信管08级学生的模拟实习主要是复杂程序和简单软件的实现。
通过该模拟实习,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。
二、实习环境(如软硬件)
操作系统:
WindowsXP
处理器:
英特尔Pentium双核T2370@1.73GHz笔记本处理器
主板:
联想IHLOO
内存:
1GB
主硬盘:
西数WDCWD1600BEVS-22RSTO
显卡:
NvidiaGeForce8400MG
三、实习内容
内容一:
纸牌游戏
任务:
编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:
这时正面向上的牌有哪些?
内容二:
文章编辑
功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
内容三:
1.设计学生成绩管理系统。
该系统中存储学生的学号、姓名、性别、年龄、课程成绩等信息。
要求:
1)浏览学生信息
2)添加学生信息
3)删除学生信息
4)查找学生信息
5)修改学生信息
6)对成绩的处理
求出每个学生各门课程的总成绩、平均成绩、最高分和最低分。
求出某一门课程所有学生的总成绩、平均成绩、最高分和最低分。
7)按照学生某门课程的成绩对学生排序
四、算法分析、设计与描述
1.算法分析和设计
内容一:
按题目要求相当于从第一张牌算起,若这张牌是二的倍数,则翻面,是三的倍数则再翻一次,是四的倍数则再翻一次,循环直到52为止,则此张牌结算完成。
翻完第一张牌后,再继续算第二张牌,直到52张牌都结算完成。
内容二:
文章编辑程序的主要功能是统计文章中的全部字母数、数字个数、空格个数和文章总字数,并且能准确的查找、删除字符串。
主要应用的函数和语句有循环,查找,删除等。
内容三:
根据本系统的模块划分及流程,分别从学生学籍管理,成绩管理,和用户管理等主要功能模块进行分析。
用户管理模块如图1-1所示。
图1-2学生信息管理功能管理模块图
图1-3成绩管理模块
该系统的设计完成遵从上述流程图进行设计,使得程序有了很强的实用性。
同时在按照流程图设计时,可以清晰的规划好界面所有需要的功能模块,以友好和美观的操作界面带给使用者不错的实用性和方便性。
2.算法描述(可插入流程图)
内容一:
按题目要求相当于从第一张牌算起,若这张牌是二的倍数,则翻面,是三的倍数则再翻一次,是四的倍数则再翻一次,循环直到52为止,则此张牌结算完成。
翻完第一张牌后,再继续算第二张牌,直到52张牌都结算完成。
内容二:
内容三:
学生学籍管理系统
该系统流程如下图所示:
图1-5学生学籍管理系统的流程图
该系统由以下功能模块组成:
1.登录模块:
输入相应的信息登陆该系统。
2.系统维护模块:
Ø课程设置子模块:
在每学期开始需要进行本学期需要开设课程的设置。
在某一课程发生变动时可以进行课程的维护。
3.学生信息管理模块:
Ø新生信息录入子模块:
在每学年开始或中间可以进行学生信息的录入,包括学生的基本信息等。
Ø学生信息查询子模块:
方便教务管理人员快速的查找某一学生。
分为按照学生的姓名进行查找和按照学生的所在班级名进行查找。
利于管理人员随时掌握学生信息。
Ø更新学生信息子模块:
教务管理人员可以随时更改学生的某些信息,包括学生姓名、身份证号、班级等信息的更改。
4.学生成绩管理模块:
Ø学生成绩录入子模块:
按照学生考试的时间和课程录入学生的考试成绩。
Ø学生成绩查询子模块:
方便教务管理人员快速的查找某一学生的成绩。
分为按照学生的姓名进行查找和按照学生的所在班级名进行查找。
利于管理人员随时掌握学生考试信息。
该系统的所有模块的设计均采用VC++6.0为开发环境,在各个模块的设计中都使用主要应用的函数和语句有循环,查找,删除等。
五、程序设计
1.程序设计的基本思路
内容一:
主要算法是两次for循环
for(i=1;i<=52;i++)
{
a=1;
for(j=2;j<=52;j++)
{
if(i%j==0)
a=-a;
}
if(a==1)
printf("%d\n",i);
}
内容二:
文章编辑程序的主要功能是统计文章中的全部字母数、数字个数、空格个数和文章总字数,并且能准确的查找、删除字符串。
主要应用的函数和语句有循环,查找,删除等。
由程序开始运行后进行字符串的录入,之后进行字符的输出,然后是利用循环和查找,进行字符的统计并输出已经找到的字符(包括字母、数字、空格)出现的次数以及总共的字符数。
在这些运行完之后,根据要求还有一项功能--删除,对指定的字符进行删除,同样,这里也需应用到循环,查找和删除。
内容三:
学生信息管理系统是对学生信息的基本管理,它包括:
浏览学生信息、添加学生信息、删除学生信息、查找学生信息、修改学生信息、对成绩的处理、按照学生某门课程的成绩对学生排序
使用模块化编程的方法每项功能有一个函数来完成,对应如下:
(1)浏览学生信息以及读取数据voidprint(ID*head)
(2)添加学生信息以及对成绩的处理ID*insert(ID*head)
(3)删除学生信息ID*delet(ID*head)
(4)查找学生信息ID*search(ID*head)
(5)修改信息ID*amend(ID*head)
(6)按照学生某门课程的成绩对学生排序ID*sort(ID*head)
(7)存储数据以及退出系统ID*breaksys(ID*head)
为了把数据封装起来更方便使用,创建了表示学生信息的结构体structid
structid
{
charname[20];
intnum;
inta;
intb;
intc;
doubleave;
ID*next;
};
2.程序代码
内容一:
#include
#include
#include
#include
usingnamespacestd;
structL
{
intnum;
intindex;
boolderection;
L*Next;
};
L*Create()
{
inta=52;
L*Head;
L*Pb;
L*Pe;
Pb=newL;
Head=NULL;
if(!
Head)
{
Pb->num=1;
Pb->derection=true;
Pb->index=1;
Head=Pb;
Head->Next=NULL;
}
intgroup=1,value=1;
for(inti=2;i<=52;i++)
{
Pe=newL;
if(group==4)
{
value++;
group=0;
}
Pe->num=value;
Pe->index=i;
Pe->Next=NULL;
if(i==0)
{
Head->Next=Pe;
}
else
{
Pb->Next=Pe;
}
Pb=Pe;
group++;
}
returnHead;
}
voidMove(L*Head,intindex)
{
if(Head)
{
for(L*P=Head;P->Next;P=P->Next)
{
if(P->index==index||P->num%index==0)
{
P->derection?
P->derection=false:
P->derection=true;
}
}
}
}
voidListAll(L*Head)
{
if(Head)
{
cout<"<while(Head)
{
cout<<"第"<index<<"张纸牌"<<",纸牌大小:
"<num<<",纸牌方向:
"<<(Head->derection?
"上":
"下")<Head=Head->Next;
}
cout<}
}
voidListAll(L*Head,boolderection)
{
if(Head)
{
cout<"向上":
"向下")<<"的如下:
"<intsum=0;
while(Head)
{
if(Head->derection==derection)
{
cout<<"第"<index<<"张纸牌"<<",纸牌大小:
"<num<<",纸牌方向:
"<<(Head->derection?
"上":
"下")<sum++;
}
Head=Head->Next;
}
cout<"向上":
"向下")<<"的一共"<"<cout<}
}
voidPointer()
{
L*Head=Create();
ListAll(Head);
for(inti=2;i<=52;i++)
{
Move(Head,i);
}
ListAll(Head,true);
ListAll(Head,false);
}
voidmain()
{
Pointer();
printf("pressanykeytocontinue...\n");
getch();
}
内容二:
#include
#include
#include
#defineLENsizeof(structline)
typedefstructline
{
char*data;
structline*next;
}LINE;
voidCreate(LINE*&head)
{
chartmp[100];
LINE*p;
p=(structline*)malloc(LEN);
head=p;
printf("请输入文本,以Ctrl+E(^E)为结尾,每行最多输入80字符!
\n");
while
(1)
{
gets(tmp);
if(strlen(tmp)>80)
{
printf("每行最多输入80字符");
break;
}
if(tmp[0]==5)
break;
p=p->next=(structline*)malloc(LEN);
p->data=(char*)malloc(strlen(tmp));
strcpy(p->data,tmp);
if(tmp[strlen(tmp)-1]==5)
{
p->data[strlen(tmp)-1]='\0';
break;
}
}
p->next=NULL;
head=head->next;
}
intCountLetter(LINE*&head)
{
LINE*p=head;
intcount=0;
do
{
intLen=strlen(p->data);
for(inti=0;iif((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z'))
count++;
}
while((p=p->next)!
=NULL);
returncount;
}
intCountNumber(LINE*&head)
{
LINE*p=head;
intcount=0;
do
{
intLen=strlen(p->data);
for(inti=0;iif(p->data[i]>=48&&p->data[i]<=57)
count++;
}
while((p=p->next)!
=NULL);
returncount;
}
intCountSpace(LINE*&head)
{
LINE*p=head;
intcount=0;
do
{
intLen=strlen(p->data);
for(inti=0;iif(p->data[i]==32)
count++;
}
while((p=p->next)!
=NULL);
returncount;
}
intCountAll(LINE*&head)
{
LINE*p=head;
intcount=0;
do
{
count=count+strlen(p->data);
}
while((p=p->next)!
=NULL);
returncount;
}
intFindString(LINE*&head,char*str)
{
LINE*p=head;
intcount=0;
inth=0;
intlen1=0;
intlen2=strlen(str);
inti,j,k;
do
{
len1=strlen(p->data);
for(i=0;i{
if(p->data[i]==str[0])
{
k=0;
for(j=0;jif(p->data[i+j]==str[j])
k++;
if(k==len2)
{
count++;
i=i+k-1;
}
}
}
}
while((p=p->next)!
=NULL);
returncount;
}
voiddelstringword(char*s,char*str)
{
char*p=strstr(s,str);
chartmp[80];
intlen=strlen(s);
inti=len-strlen(p);
intj=i+strlen(str);
intcount=0,m,n;
for(m=0;m
tmp[count++]=s[m];
for(n=j;ntmp[count++]=s[n];
tmp[count]='\0';
strcpy(s,tmp);
}
voidDelString(LINE*&head,char*str)
{
LINE*p=head;
do
{
if(strstr(p->data,str)!
=NULL)
delstringword(p->data,str);
}
while((p=p->next)!
=NULL);
}
voidOutPut(LINE*&head)
{
LINE*p=head;
do
{
printf("%s\n",p->data);
}
while((p=p->next)!
=NULL);
}
intmain()
{
LINE*head;
charstr1[20],str2[20];
intletter,number,space,all,countstr1;
Create(head);
printf("文章为:
\n");
OutPut(head);
letter=CountLetter(head);
printf("\n全部字母数:
%d",letter);
number=CountNumber(head);
printf("\n数字个数:
%d",number);
space=CountSpace(head);
printf("\n空格个数:
%d",space);
all=CountAll(head);
printf("\n文章总字数:
%d",all);
printf("\n请输入要统计的字符串:
");
scanf("%s",str1);
countstr1=FindString(head,str1);
printf("%s出现的次数为:
%d",str1,countstr1);
printf("\n请输入要删除的某一字符串:
");
scanf("%s",str2);
DelString(head,str2);
printf("删除%s后的文章为:
\n",str2);
OutPut(head);
printf("\n谢谢使用!
\n");
}
内容三:
#include
#include
#include
#include
#defineIDstructid
structid
{
charname[20];
intnum;
charsex[2];
intage;
inta;
intb;
intc;
intsum;
doubleave;
intmin;
intmax;
ID*next;
}stu[100];
intpc=1;
FILE*fp;
intasum=0,bsum=0,csum=0;
intamax=0,bmax=0,cmax=0;
intamin=100,bmin=100,cmin=100;
floataave,bave,cave;
voidprint(ID*head)//显示记录
{
ID*p;
p=head;
inttemp;
printf("显示结果是:
\n");
printf("学号姓名性别年龄语文数学英语总成绩平均成绩最高分最低分\n");
if(head!
=NULL)
{
do
{
printf("%3d%5s%5s%5d%5d%5d%5d%6d%9.2f%7d%7d\n",p->num,p->name,p->sex,p->age,p->a,p->b,p->c,p->sum,p->ave,p->max,p->min);
p=p->next;
}
while(p!
=NULL);
}
printf("总体成绩:
\n");
printf("语文的总成绩是%4d\t平均成绩是%5.2f\t最高分是%3d\t最低分是%3d\n",asum,aave,amax,amin);
printf("数学的总成绩是%4d\t平均成绩是%5.2f\t最高分是%3d\t最低分是%3d\n",bsum,bave,bmax,bmin);
printf("英语的总成绩是%4d\t平均成绩是%5.2f\t最高分是%3d\t最低分是%3d\n",csum,cave,cmax,cmin);
}
ID*insert(ID*head)//添加记录
{
ID*sort(ID*head);
ID*temp,*p1,*p2,*p;
intt;
p=head;
printf("插入操作开始!
!
!
\n");
temp=(ID*)malloc(sizeof(ID));
printf("请输入学生的学号:
\n");scanf("%d",&temp->num);
printf("请输入学生的姓名:
\n");scanf("%s",&temp->name);
printf("请输入学生的性别:
\n");scanf("%s",&temp->sex);
printf("请输入学生的年龄:
\n");scanf("%d",&temp->age);
printf("请输入学生的语文成绩:
\n");scanf("%d",&temp->a);
printf("请输入学生的数学成绩:
\n");scanf("%d",&temp->b);
printf("请输入学生的英语成绩:
\n");scanf("%d",&temp->c);
temp->sum=temp->a+temp->b+temp->c;
temp->ave=(temp->sum)/3.0;
temp->min=((temp->ab)?
temp->a:
temp->b)c?
((temp->ab)?
temp->a:
temp->b):
temp->c;
temp->max=((temp->a>temp->b)?
temp->a:
temp->b)>temp->c?
((temp->a>temp->b)?
temp->a:
temp->b):
temp->c;