用C语言和数据结构编写一个简单的程序(求源代码)

用C语言和数据结构编写一个简单的程序(求源代码),第1张

/使用递归,理论上说可以对任意多位数组合,但位数太多了,可能发生堆栈溢出
以下程序在VC++60中编译通过.
/
#include <stdioh>
#include <stringh>
#define MAX_NUMBER 6 //修改这个参数来允许最大的位数,现设为6位
void GetZhe (const char preStr,const char strNum)
{
char newPreStr[MAX_NUMBER];
char tmpStr[MAX_NUMBER];
int i,j,k,iCnt;
k = strlen(strNum);
if (k>MAX_NUMBER) {
printf("超过最大允许的位数:%d!",MAX_NUMBER);
return ;
}
switch(k)
{
case 0:
return;
case 1:
strcpy(tmpStr,preStr);
strcat(tmpStr,strNum);
printf("%s\r\n",tmpStr);
break;
default:
tmpStr[0] = 0;
for (i=0;i<k;i++)
{
strcpy(newPreStr,preStr);
j = strlen(newPreStr);
newPreStr[j] = strNum[i];
newPreStr[j+1] = 0;

iCnt = 0;
for (j=0;j<k;j++)
{
if(j != i)
{
tmpStr[iCnt] = strNum[j];
iCnt ++ ;
}
}
tmpStr[iCnt] = 0;
GetZhe(newPreStr,tmpStr);
}
}
}
int main(int argc, char argv[])
{
GetZhe("","123456");
return 0;
}

//strc

#include"stdioh"

#include"strh"

void main()

{

int n,flag=0;

int i=4,j=6;

char str,sub;

str=(char)malloc(sizeof(char)100);

sub=(char)malloc(sizeof(char)100);

printf("                      串子系统                          \n");

printf("\n");

printf("             1---------输入字串                       \n");

printf("             2---------连接字串                       \n");

printf("             3---------取出字串                       \n");

printf("             4---------删除字串                       \n");

printf("             5---------插入字串                       \n");

printf("             6---------查找字串                       \n");

printf("             7---------比较字串                       \n");

printf("             8---------显示字串                       \n");

printf("             0---------返回                           \n");

printf("\n");

while(!flag){

printf("请选择菜单号(0--8):  ");

scanf("%d",&n);

switch(n){

case 1:printf("please input your string : ");scanf("%s",str);break;

case 2:strcat(str,sub);break;

case 3:sub=getsubstr(str,i,j);break;

case 4:delsubstr(str,i,j);break;

case 5:inssubstr(str,sub,i);break;

case 6:i=findsubstr(str,sub);break;

case 7:strcmp(str,sub);break;

case 8:printf("%s\n",str);break;

case 0:flag=1;break;

}

}

}

//strh;

#include"stringh"

#include"stdlibh"

char getsubstr(char str,int begin,int end)

{

char tmp;

int i=0,k=0;

tmp=(char)malloc(sizeof(char)100);

for(i=begin;i<=end;i++){

tmp[k++]=str[i];

}

tmp[k]='\0';

return tmp;

}

char  delsubstr(char str,int begin ,int end)

{

char tmp;

tmp=&str[end+1];

str[begin]='\0';

strcat(str,tmp);

return str;

}

char inssubstr(char str,char sub,int index)

{

char tmp;

tmp=(char)malloc(sizeof(char)100);

strcpy(tmp,&str[index]);

str[index]='\0';

strcat(str,sub);

strcat(str,tmp);

return str;

}

int findsubstr(char str,char sub)

{

int i,j,k;

for(i=0;i<strlen(str);i++){

k=i;

for(j=0;j<strlen(sub);j++){

if(str[k++]!=sub[j])

break;

}

if(j==strlen(sub))

return i;

}

return -1;

}

只能按照你的意思大致做做了~~~细节很不足~~~~~

#include<stdioh>
#include<stdlibh>
typedef struct List
{
int data;
struct List next;
}list;

int main()
{
list L = (list)calloc(1, sizeof(list)); //头结点
L->next = NULL;
int n, k, i;
scanf("%d%d", &n, &k);

list s, q = L;
for (i=0; i<n; ++i) //赋初值
{
s = (list)calloc(1, sizeof(list));
s->data = i+1;
s->next = NULL;
q->next = s;
q = s;
}

q->next = L->next; //让尾结点指向头结点的下一个,即第一个人的位置,单向循环链表创建完成
q = L->next; //让q指向头结点的下一个

while (q->next != q) //只剩一个元素时,退出循环
{
for (i=1; i<k-1; ++i)
{q = q->next;} //q指向删除节点的前一个
s = q->next; //s指向删除节点
q->next = s->next; //将去除s后的链表重新连接起来
q = q->next; //让q指向下次循环的起始位置
//printf("%d ", s->data);
free(s);
s = NULL;
}

printf ("%d\n", q->data);
free(q);
q = NULL;
free(L);
L = NULL;
return 0;
}

一定的功能。
2存储不定个数的数值用可变数组存储或链表实现。
一直输入数据,然后当输入一个特定的值后停止输入。
例:
cin>>i;
while(i!=-1)//当输入-1停止输入
{
把数据加入链表或可变数组;
cin>>i;
}
3求N个数的最大公约数相当于先求俩个数的最大公约数,再用这个最大公约数与第三个数求最大公约数,一直求到最后一个数。

编程思路:从头到尾读出该链表数据并存入数组中,然后倒序输出数组元素
源代码:
void dao_visit(Link l)
{
Link rcv=l;
Link rcv2=rcv;
int a;
int lenth=0;
int i=0;
//获得单链表长度
while(rcv)
{
lenth++;
rcv=rcv->next;
}
//为指针a分配lenth个空间
a=(int )malloc(lenthsizeof(int));
//将单链表的数据写入a中
while(rcv2)
{
a[i]=rcv2->data;
rcv2=rcv2->next;
i++;
}
//倒序输出
for(i=0;i<lenth;i++)
printf("%d\n",a[lenth-1-i]);
free(a);
}

你看这个应该满足要求吧。我把三种循环方式都用上了:
#include<stdioh>
#include<mathh>
int isprime(int n)
{
int i,t;
if(n==2)
return 1;
if(n%2==0 || n<2)
return 0;
for(i=3,t=(int)sqrt(n);i<=t;i+=2)
{
if(n%i==0)
return 0;
}
return 1;
}
void main()
{
int i,a,n;
i=0;
do
{
printf("Input an integer (>=1):");
scanf("%d",&a);
if(a>=1)
break;
}while(++i<3);
if(i==3) exit(0);
printf("prime submultiples:\n");
i=1;
n=0;
while(i<=a)
{
if(a%i==0)
if(isprime(i))
{
printf("%d ",i);
n++;
if(n%10==0)
printf("\n");
}
i++;
}

你说的差不多就是个学生管理系统吗
看看下面的代码把
#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
using namespace std;
#define max 100;
class student
{
public:
student next;
public:
string name;//姓名
long num;//学号
int x,y,z;//数学,语文,英语
int AA;//总分
void play(){cout<<name<<"学生的学号是"<<num<<",数学:"<<x<<",语文:"<<y<<",英语:"<<z<<",总分:"<<AA<<endl;};
student(string sname,long snum,int sx,int sy,int sz)
{
name=sname;
num=snum;
x=sx;
y=sy;
z=sz;
}
};
class cla
{
public:
cla()//构造函数
{
stu=0;
sload();
}
~cla()//析构函数
{
student p;
p=stu;
while(p)
{
p=p->next;
delete stu;
stu=p;
}
stu=0;
}
void sadd(); //添加
void sremove(); //删除
void samend(); //修改
void ssearch(); //查询
void staxis(); //排序
void ssave(); //保存
void sload(); //读取
//排序函数
void pxh();
void psx();
void pyw();
void pyy();
void pAA();
private:
student stu; //头接点
};
void cla::sadd()//添加
{
student q;
string name1;
long num1;
int x1,y1,z1;
system("cls");
cout<<"\n 增加的学生 \n"<<endl;
cout<<"请输入学生的(中间用空格间隔) "<<endl;
cout<<"姓名 学号 数学成绩 语文成绩 英语成绩:"<<endl;
cin>>name1>>num1>>x1>>y1>>z1;
q=new student(name1,num1,x1,y1,z1);
q->next=0;
q->AA=x1+y1+z1;
if(stu)
{
student t;
t=stu;
if(t->num==num1)
{
cout<<"学号已存在,请重新输入"<<endl;
return;
}
while(t->next)
{
if(t->num==num1)
{
cout<<"学号已存在,请重新输入"<<endl;
return;
}
t=t->next;
}
t->next=q;
}
else
{
stu=q;
}
cout<<"输入完毕"<<endl;
}
void cla::sremove()//删除
{
system("cls");
int num1;
cout<<"\n 删除学生信息 \n";
cout<<"请输入想要删除学生的学号:";
cin>>num1;
//查找要删除的结点
student p1,p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//删除结点
if(p1!=NULL)//若找到结点,则删除
{
p1->play();
cout<<"确定删除吗[Y/N]"<<endl;
char c;cin>>c;
if(toupper(c)!='Y') return;
if(p1==stu) //若要删除的结点是第一个结点
{
stu=p1->next;
delete p1;
}
else //若要删除的结点是后续结点
{
p2->next=p1->next;
delete p1;
}
cout<<"找到学号为"<<num1<<"的学生,并删除\n";
}
else //未找到结点
cout<<"未找到想要删除的学生!\n";
}
void cla::samend()//修改
{
system("cls");
long num1;
cout<<"\n 修改学生信息 \n";
cout<<"输入要修改学生的学号";
cin>>num1;
//查找要修改的结点
student p1,p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"学号是"<<num1<<"的学生的信息"<<endl;
cout<<"姓名 "<<p1->name<<"数学"<<p1->x<<"语文"<<p1->y<<"英语"<<p1->z<<endl;
cout<<"请输入修改后的信息:姓名 数学成绩 语文成绩 英语成绩"<<endl;
cin>>p1->name>>p1->x>>p1->y>>p1->z;
p1->AA=p1->x+p1->y+p1->z;
cout<<"修改成功"<<endl;
}
else //未找到接点
cout<<"未找到!\n";
}
void cla::ssearch()//查询
{
system("cls");
cout<<"\n 查询学生信息 \n"<<endl;
cout<<"请输入查询方式:"<<endl;
cout<<"1按学号查询"<<endl;
cout<<"2按姓名查询"<<endl;
cout<<"3返回"<<endl;
char c; cin>>c;
switch (c)
{
case '1':
{
long num1;
cout<<"要查询的学号"<<endl;
cin>>num1;
//查找要查询的结点
student p1,p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"学号是"<<num1<<"的学生的信息"<<endl;
cout<<"姓名:"<<p1->name<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl;
cout<<"查询完毕";
}
else //未找到接点
cout<<"未找到!\n";
break;
}
case '2':
{
string name1;
cout<<"要查询的学生姓名"<<endl;
cin>>name1;
//查找要查询的结点
student p1,p2;
p1=stu;
while(p1)
{
if(p1->name==name1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<name1<<"的学生的信息"<<endl;
cout<<"学号:"<<p1->num<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl;
cout<<"查询完毕";
}
else //未找到接点
cout<<"未找到!\n";
break;
}
case '3': return;
}
}
void cla::pxh() //按学号排序
{
student p1,p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息"<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->num>p1->next->num) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{
p1->play();
p1=p1->next;
}while(p1);
}
void cla::psx()//按数学成绩排序
{
student p1,p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息"<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->x>p1->next->x) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->x>p1->next->x)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::pyw()//按语文成绩排序
{
student p1,p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息"<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->y>p1->next->y) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->y>p1->next->y)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::pyy()//按英语成绩排序
{
student p1,p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息"<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->z>p1->next->z) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->z>p1->next->z)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::pAA()//按总分排序
{
student p1,p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息"<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->AA>p1->next->AA) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->AA>p1->next->AA)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::staxis()//排序
{
system("cls");
char c;
cout<<"请选择以何种方式排序:"<<endl;
cout<<"1……以学号排序"<<endl;
cout<<"2……以数学成绩排序"<<endl;
cout<<"3……以语文成绩排序"<<endl;
cout<<"4……以英语成绩排序"<<endl;
cout<<"5……以总分排序"<<endl;
cout<<"6……返回"<<endl;
cout<<"请选择(1-6)"<<endl;
cin>>c;
switch (c)
{
case '1':pxh(); break;
case '2':psx(); break;
case '3':pyw(); break;
case '4':pyy(); break;
case '5':pAA(); break;
case '6':return;
}
}
void cla::ssave() //保存到文件
{
system("cls");
char c;
cout<<"\n保存学生信息(将覆盖原文件),是否继续[Y/N]:"; cin>>c;
if(toupper(c)!='Y') return;
ofstream tfile("datetxt",ios_base::binary);
student p=stu;
while(p)// 写入文件
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;
tfile<<endl;
p=p->next;
}
tfileclose();
cout<<"保存完毕"<<endl;
}
void cla::sload() //读取
{
student p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;
}
ifstream tfile("datetxt",ios_base::binary);
string name1;
long num1;
int x1,y1,z1;
tfile>>name1>>num1>>x1>>y1>>z1;
while(tfilegood())
{
//创建学生接点
student s;
s=stu;
s=new student(name1,num1,x1,y1,z1);
s->next=0;
s->AA=x1+y1+z1;
if(stu) //若已经存在结点
{
student p2;
p2=stu;
while(p2->next) //查找尾结点
{
p2=p2->next;
}
p2->next=s; //连接
}
else //若不存在结点(表空)
{
stu=s; //连接
}
tfile>>name1>>num1>>x1>>y1>>z1;
}
tfileclose();
cout<<"\n学生信息已经装入\n";
}
void main()
{
char c;
cla a;
do
{
cout<<"\n 学 生 成 绩 管 理 系 统 \n";
cout<<"\n";
cout<<" 作者:软件工程06110119:zgjxwl \n";
cout<<" 1……增加学生 \n";
cout<<" 2……删除学生 \n";
cout<<" 3……修改学生 \n";
cout<<" 4……查询学生信息 \n";
cout<<" 5……排序 \n";
cout<<" 6……保存信息 \n";
cout<<" 7……读取信息 \n";
cout<<" 8……退出 \n";
cout<<"\n";
cout<<"请选择(1-8):";
cin>>c;
switch(c)
{
case '1': asadd();break;
case '2': asremove();break;
case '3': asamend();break;
case '4': assearch();break;
case '5': astaxis();break;
case '6': assave();break;
case '7': asload();break;
}
}while(c!='8');
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13043887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存