C++习题.docx

上传人:b****7 文档编号:8805340 上传时间:2023-02-01 格式:DOCX 页数:38 大小:268.84KB
下载 相关 举报
C++习题.docx_第1页
第1页 / 共38页
C++习题.docx_第2页
第2页 / 共38页
C++习题.docx_第3页
第3页 / 共38页
C++习题.docx_第4页
第4页 / 共38页
C++习题.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

C++习题.docx

《C++习题.docx》由会员分享,可在线阅读,更多相关《C++习题.docx(38页珍藏版)》请在冰豆网上搜索。

C++习题.docx

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;i

if((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;i

if(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;i

if(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;j

if(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;n

tmp[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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1