大家有C++的练习吗?

woxiaoe 2008-03-21 08:37:00
大家有C++的练习吗?我是C++初学者,希望找些练习来做,大家有的话能否发给我一下,我的EMAIL是hgtc@163.com
或者给我下载地止,或网止
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oiliangliang 2008-03-22
  • 打赏
  • 举报
回复
题目是很多,可不好找啊.
4楼的题目收藏.
yeknight 2008-03-22
  • 打赏
  • 举报
回复
C++ Primer 习题,网上有下载
shc7478 2008-03-21
  • 打赏
  • 举报
回复

头文件三

//文章编辑****
#include<iostream.h>
#include<stdlib.h>
#include<fstream.h>
struct Row
{char * rbase;
int length;
};
struct Page
{Row * pbase;
int n;
};
//创建一页文章。
void CString(Row &R,int length)
{R.rbase=(char*)malloc(length*sizeof(char));R.length=length;
cout<<"请输入字符串: ";
for(int i=0;i<length;i++)
{char c;cin>>c;R.rbase=c;}
}
void CPage(Page &ye,int length,int n)
{ye.pbase=(Row *)malloc(n*sizeof(Row));ye.n=n;//还需附加分配不成功等条件
for(int j=0;j<n;j++)
{ ye.pbase[j].rbase=(char *)malloc(length*sizeof(char));//还需附加分配不成功等条件
if(!ye.pbase[j].rbase)cout<<"Allocation failed."<<endl;ye.pbase[j].length=length;}

cout<<"hua le."<<endl;//进行测试
for( j=0;j<n;j++)
for(int i=0;i<length;i++)
{char note; cin>>note;
ye.pbase[j].rbase=note;
if(note=='$') for(;i<length;i++)ye.pbase[j].rbase=' ';//这个地方还不行
if(note=='#') for(j++;j<n;j++)ye.pbase[j].rbase=' ';
}cout<<"hua le."<<endl;//测试
for(int p=0;p<ye.n;p++)
{cout<<"row"<<(p+1)<<" ";
for(int q=0;q<ye.pbase->length;q++)//为什么有的出现,有的不出现。
cout<<ye.pbase[p].rbase[q];
cout<<endl;}

}
void OPage(Page ye)
{
for(int j=0;j<ye.n;j++)
{cout<<"row:"<<(j+1)<<" ";
for(int i=0;i<ye.pbase->length;i++)//为什么有的出现,有的不出现。
cout<<ye.pbase[j].rbase;
cout<<endl;
}
}
void Stastics(Page ye)
{ int zm=0,sz=0,kg=0,az=0,i=0; char c;
for(int j=0;j<ye.n;j++)
{for(i=0;i<ye.pbase->length;i++)//为什么有的出现,有的不出现。
{c=ye.pbase[j].rbase;
if(c==' ') kg++;
else if((int)c>64&&(int)c<91||((int)c>96&&(int)c<123)) zm++;
else if((int)c>47&&(int)c<58) sz++;
}
}
az=i*j-kg;//为什么i 是未定义的,而j不是
cout<<"全部字母个数为: "<<zm<<endl
<<"全部数字个数为: "<<sz<<endl
<<"空格数 为: "<<kg<<endl
<<"总字数 为 "<<az<<endl;
}

void StasString(Page p,Row s)
{ int m=0;int k=0;char c;
for(int j=0;j<p.n;j++)
for(int i=0;i<p.pbase->length;i++)
{c=p.pbase[j].rbase;
if(c!=s.rbase[k])k=0;
else k++;
if(k==s.length){m++;}//考虑重叠情况for(k--;k!=0;k--,j--);
}
cout<<"所给串在文章中出现的次数为: "<<m<<endl;
}
void DelString(Page &p,int m,Row s)
{if(s.length<1||s.length>p.pbase->length||m<1||m>p.n)cout<<"你的输入有误,请仔细看提示."<<endl;//你的输入有误,请仔细看提示
else
{ int k=0, temp;char c;cout<<"jin xing ce shi."<<endl;
for(int j=0;j<p.pbase[0].length;j++)//for(int j=0;j<p.pbase->length;j++)
{ c=p.pbase[m-1].rbase[j];//m-1才是正确的行
if(c!=s.rbase[k])k=0;
else k++;cout<<"k值:"<<s.rbase[k-1]<<endl;
if(k==s.length)
{cout<<"确实存在此字符串."<<endl;
temp=j+1-k;break;//int temp=j-k;break;同样错误1
}
}
cout<<"I'm here;"<<endl;
Row a;a.rbase=(char*)malloc((p.n-m+1)*(p.pbase->length-temp)*sizeof(char));a.length=(p.n-m+1)*(p.pbase->length-temp);//weizhi是a的长度,同样错误1
k=0;
cout<<"I'm here;"<<endl;
for(int i=m-1;i<p.n;i++)//从删除位置开始赋值到数组a
{
for(j=temp;j<p.pbase->length;j++,k++)
a.rbase[k]=p.pbase.rbase[j];
j=0;
}cout<<"I'm here;"<<endl;
for(k=0;k<a.length-s.length;k++)a.rbase[k]=a.rbase[k+s.length];//
for(;k<a.length;k++)a.rbase[k]=' ';
for(i=m-1,k=0;i<p.n;i++)
{for(j=temp;j<p.pbase->length;j++,k++)
p.pbase.rbase[j]=a.rbase[k];j=0;}cout<<"I'm here;"<<endl;
OPage(p);//可以调用函数0page(p);
}
}
void Save(Page P)//new
{fstream outfile;
outfile.open("information.dat",ios::out|ios::binary);
if(!outfile)
{cout<<"information.dat can't open.\n";
abort();
}
for(int i=0;i<P.n;i++)
outfile.write(P.pbase.rbase,sizeof(P.pbase.rbase));
outfile.close();
}
void Read(Page &P)
{ fstream infile,outfile;
infile.open("information.dat",ios::in|ios::binary);
if(!infile)
{cout<<"information.dat can't open.\n";
abort();
}
for(int i=0;i<P.n;i++)
infile.read(P.pbase.rbase,sizeof(P.pbase.rbase));
infile.close();
OPage(P);
}
void Choose(Page &Ye,int h,int n)
{ int c;cout<<"请选择: ";cin>>c;cout<<endl;
switch(c)
{
case 1:{cout<<"创建文本 :"<<endl;CPage(Ye,h,n);break;}
case 2:{cout<<"统计字符 :"<<endl;Stastics(Ye);break;}
case 3:{cout<<"统计字符串 :"<<endl;int l;Row s;cout<<"请输入字符串长度: ";
cin>>l;CString(s,l);StasString(Ye,s);break;}
case 4:{cout<<"删除字符串 :"<<endl;int hang;int l1;Row s1;cout<<"输入所删除的字符串所在行:";cin>>hang;cout<<endl;
cout<<"请输入字符串长度: ";cin>>l1;cout<<endl;CString(s1,l1);cout<<"对的。"<<endl;DelString(Ye,hang,s1);break;}
case 5:{cout<<"输出字符串"<<endl;OPage(Ye);break;}
case 6:{cout<<"真的要退出吗?(Y/N) :"<<endl;char x;cin>>x;if(x=='Y')exit(1);break;}
case 7:{cout<<"保存文本:"<<endl;Save(Ye);break;}//new
case 8:{cout<<"阅读文本:"<<endl;Read(Ye);break;}
}
Choose(Ye,h,n);
}
void wenzbianji()
{
Page Ye;int hs;int ns;
cout<<"****** 本程序应用于文本编辑 ****** "<<endl;
cout<<"****** 1.文本行数,请输入: ";cin>>hs;
cout<<"****** 2.文本列数,请输入: ";cin>>ns;
cout<<" 1.创建文本 2.统计字符 "<<endl
<<" 3.统计字符串 4.删除字符串"<<endl
<<" 5.输出字符串 6.退出程序 "<<endl
<<" 7.保存文本 8.阅读文本 "<<endl;
Choose(Ye,hs,ns);
}
//为什么会出现这种错误,难道是因为没有敲回车键 .

主函数

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>
#include"BiTreeTraverse.h"
#include"Monkeyking.h"
#include"wenzbianji.h"
void BiTreeTraverse();
void Monkeyking();
void wenzbianji();
void main ()
{
char j;
int flag=1;
cout<<"**************** 欢迎进入本系统***************"<<endl;
cout<<endl;
while(flag)
{
cout<<endl;
cout <<" 请选择: "<<endl
<<" ┌──────────┐"<<endl
<<" │ 1.猴子选大王 │"<<endl
<<" │ 2.二叉树遍历 │"<<endl
<<" │ 3.文章的编辑 │"<<endl
<<" │ 0.退出程序 │"<<endl
<<" └──────────┘"<<endl;
cin>>j;
switch(j)
{
case '1':Monkeyking(); break;
case '2':BiTreeTraverse();break;
case '3':wenzbianji();break;
default:flag=0;cout<<"程序系统就要退出了,按任意键退出!"<<endl;
}
}
}

shc7478 2008-03-21
  • 打赏
  • 举报
回复
  6、 joseph环
  任务:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
  要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据:
  m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
  要求:
输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。
  输出形式:建立一个输出函数,将正确的输出序列

  7、 猴子选大王**
  任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
  要求:
  输入数据:输入m,n m,n 为整数,n<m
  输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能

  8、 建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)**
  任务:
  要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;

  9、 赫夫曼树的建立
  任务 :建立建立最优二叉树函数
  要求:可以建立函数输入二叉树,并输出其赫夫曼树
在上交资料中请写明:存储结构、 基本算法(可以使用程序流程图) 、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
  10、 纸牌游戏**
  任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?
  11、图的建立及输出
  任务:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
  要求:头文件一
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
struct BiTnode
{char data;
BiTnode *lchild,*rchild;
};
struct Queue
{BiTnode* *data0;
int max;
int front,rear,size;
};
void SetQueue(Queue *Q,int n)
{Q->data0=(BiTnode**)malloc(n*sizeof(BiTnode*));
if(Q->data0==NULL)
{cout<<"overfilow.";exit(1);
}
Q->max=n;Q->front=0;
Q->rear=0;Q->size=0;
}
void FreeQueue(Queue *Q)
{free(Q->data0);}

void QInsert(Queue *Q,BiTnode* item)
{if(Q->size==Q->max){cout<<"Queue is full."<<endl;exit(1);}
Q->data0[Q->rear]=item;
Q->rear=(Q->rear+1)%Q->max;
Q->size++;
}
BiTnode* QDelete(Queue *Q)
{BiTnode* item;
if(Q->size==0)
{cout<<"Deleting from an empty queue!"<<endl;exit(1);}
item=Q->data0 [Q->front];
Q->front=(Q->front+1)%Q->max;
Q->size--;
return item;
}
int QEmpty(Queue *Q)
{if(Q->size==0)return(1);return(0);
}

void CreateBitree(BiTnode *&T)
{char ch;
cin>>ch;
if(ch=='/')T=NULL;
else
{
if(!(T=(BiTnode*)malloc(sizeof(BiTnode))))
{cout<<"Allocation failed."<<endl;exit(1);}
T->data=ch;
CreateBitree(T->lchild);
CreateBitree(T->rchild);
}
}
void PreOrder(BiTnode*T)
{
if(T!=NULL)
{cout<<T->data<<"->";
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTnode*T)
{
if(T!=NULL)
{
InOrder(T->lchild);
cout<<T->data<<"->";
InOrder(T->rchild);
}
}
void PostOrder(BiTnode*T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<<T->data<<"->";
}
}
void LevelOrder(BiTnode *T)
{BiTnode *ptr;
Queue Q;
if(T==NULL)return;
SetQueue(&Q,50);
QInsert(&Q,T);
while(!QEmpty(&Q))
{ptr=QDelete(&Q);
cout<<ptr->data<<"->";
if(ptr->lchild!=NULL)
QInsert(&Q,ptr->lchild);
if(ptr->rchild!=NULL)
QInsert(&Q,ptr->rchild );
}
FreeQueue(&Q);
}
void BiTreeTraverse()
{
BiTnode * T;
char j;
int flag=1;
cout<<"***************本程序实现二叉树遍历的操作***************"<<endl;
cout<<endl;
cout<<"按先序遍历来构造二叉树:"<<endl;
printf("例如:a/b/c/d//(回车)\n"); CreateBitree(T); //初始化队列
while(flag)
{
cout<<endl;
cout <<" 请选择: "<<endl
<<" ┌──────────┐"<<endl
<<" │ 1.递归先序遍历 │"<<endl
<<" │ 2.递归中序遍历 │"<<endl
<<" │ 3.递归后序遍历 │"<<endl
<<" │ 4.非递归层序遍历 │"<<endl
<<" │ 0.退出程序 │"<<endl
<<" └──────────┘"<<endl;
cin>>j;
switch(j)
{
case '1':if(T)
{
cout<<"递归先序遍历二叉树:"<<endl;

PreOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
case '2':if(T)
{
cout<<"递归中序遍历二叉树:"<<endl;
InOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
case '3':if(T)
{
cout<<"递归后序遍历二叉树:"<<endl;
PostOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;

case '4':if(T)
{
cout<<"非递归层序遍历二叉树:"<<endl;
LevelOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
default:flag=0;cout<<"程序运行结束,按任意键退出!"<<endl;
}
}
}
头文件二

//猴子选大王
#include<stdio.h>
#include<stdlib.h>
void Josephus(int n,int m)
{int i,j,*p;
p=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
p=i+1;
i=0;
while(n>1)
{i=(i+m-1)%n;
printf("del %d\n",p);
for(j=i+1;j<n;j++)
p[j-1]=p[j];
n--;
if(i==n)i=0;
}
printf("King! %d\n",p[0]);
}
void Monkeyking()
{int n,count;
printf("请问您,这个猴子群有多少只: ");
scanf("%d",&n);
printf("\n猴子们随机抽取的数为: ");
scanf("%d",&count);
printf("\n猴子选大王开始了:\n");
Josephus(n,count);
}
shc7478 2008-03-21
  • 打赏
  • 举报
回复
1、 运动会分数统计**
  任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
  功能要求:1).可以输入各个项目的前三名或前五名的成绩;
  2).能统计各学校总分,
  3).可以按学校编号、学校总分、男女团体总分排序输出;
  4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
  规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
  输出形式:有中文提示,各学校分数为整形
  界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
  存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
  2、 订票系统
  任务:通过此系统可以实现如下功能:
  录入:
  可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
  查询:
  可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
  可以输入起飞抵达城市,查询飞机航班情况;
  订票:(订票情况可以存在一个数据文件中,结构自己设定)
  可以订票,如果该航班已经无票,可以提供相关可选择航班;
  退票: 可退票,退票后修改相关数据文件;
  客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
  修改航班信息:
  当航班信息改变可以修改航班数据文件
  要求:
  根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;

3、拓扑排序
  任务:编写函数实现图的拓扑排序。

  4、 迷宫求解
  任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;
  要求:
  在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
  5、 文章编辑**
  功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
  静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
  存储结构使用线性表,分别用几个子函数实现相应的功能;
  输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
  输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;

HelloDan 2008-03-21
  • 打赏
  • 举报
回复
没有。你自己上网找一下吧。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧