/* //对具有student类型的结构数组a的n个记录进行选择排序,输出排序后的结果 #include<iostream> #include<iomanip> #include<string.h> using namespace std;
struct student { char num[8]; char name[10]; short grade; }; student a[5] = { {"cs102","zp",78}, {"cs103","ha",69}, {"cs104","ls",82}, {"cs105","gm",72}, {"cs106","zwy",65} //注意最后没有";" }; void output(int n) { cout<<"显示具有student结构的"<<n<<"个记录:"<<endl; cout.setf(ios::left);
for(int i=0;i<n;i++) { cout<<setw(8)<<a[i].num<<setw(12)<<a[i].name; cout<<setw(5)<<a[i].grade<<endl; } cout<<endl; }
void range(int n) { int min; for(int i=0;i<n-1;i++) { min = i; for(int j=i+1;j<n;j++) if(strcmp(a[j].name,a[min].name) < 0)//以名字排序 min = j; if(min != i) { student x = a[i]; a[i] = a[min]; a[min] = x; } } }
void main() { output(5); range(5); output(5); } */ /* //查找 #include<iostream> #include<iomanip> #include<string.h> using namespace std;
struct student { char num[8]; char name[10]; short grade; }; student a[5] = { {"cs102","zp",78}, {"cs103","ha",69}, {"cs104","ls",82}, {"cs105","gm",72}, {"cs106","zwy",65} //注意最后没有";" }; int search(student s[],int n,student x) { for(int i=0;i<n;i++) if(strcmp(s[i].num,x.num) == 0) return i; return -1; } void main() { student x={"cs104"}; int k; k = search(a,5,x); if(k >= 0) cout<<a[k].num<<' '<<a[k].name<<' '<<a[k].grade<<endl; else cout<<"学号为"<<x.num<<"的记录不存在!"<<endl; } */ /* //从student结构数组中更新某一给定学号的记录,若更新成功返回1,否则将新记录插入到数组末尾,并 //修改数组长度为已有长度加1,同时返回0表示完成插入。 #include<iostream> #include<iomanip> #include<string.h> using namespace std;
struct student { char num[8]; char name[10]; short grade; }; student a[9] = { {"cs102","zp",78}, {"cs103","ha",69}, {"cs104","ls",82}, {"cs105","gm",72}, {"cs106","zwy",65} //注意最后没有";" }; int update(student s[],int& n,const student& x) { for(int i=0;i<n;i++) if(strcmp(s[i].num,x.num) == 0) { s[i] = x;//用x值更新s[i] return 1; } s[n++] = x;//将x值插入到s数组最后一个记录后面 return 0; } void output(student *s, int n) { cout.setf(ios::left); for(int i=0;i<n;i++) { cout<<i<<' '<<setw(8)<<s[i].num<<setw(12)<<s[i].name; cout<<setw(5)<<s[i].grade<<endl; } cout<<endl; } void main() { student x={"cs102","zp",68},y={"cs112","zzp",88}; int n=5;
cout<<"学生记录为:"<<endl; output(a,n);
if(update(a,n,x) == 1) cout<<"完成更新操作!"<<endl; else cout<<"完成插入操作!"<<endl;
if(update(a,n,y) == 1) cout<<"完成更新操作!"<<endl; else cout<<"完成插入操作!"<<endl; cout<<"学生记录为:"<<endl; output(a,n); } */ /* //查找学生学号,修改成绩 #include<iostream> #include<iomanip> #include<string.h> using namespace std;
struct student { char num[8]; char name[10]; short grade; }; student a[9] = { {"cs102","zp",78}, {"cs103","ha",69}, {"cs104","ls",82}, {"cs105","gm",72}, {"cs106","zwy",65} //注意最后没有";" }; student *search(student s[],int n,const student& x) { for(int i=0;i<n;i++) if(strcmp(s[i].num,x.num) == 0) return &s[i];//返回元素的地址 return 0; } void output(student *s, int n) { cout.setf(ios::left); for(int i=0;i<n;i++) { cout<<i<<' '<<setw(8)<<s[i].num<<setw(12)<<s[i].name; cout<<setw(5)<<s[i].grade<<endl; } cout<<endl; }
void main() { int n=5; student x,*p; cout<<"请输入一个待查学生的学号:"; cin>>x.num; p = search(a,n,x); if(p !=NULL) { cout<<p->num<<' '<<p->name<<' '<<p->grade<<endl; cout<<"请输入学号为"<<x.num<<"学生的新成绩:"; cin>>p->grade; } else cout<<"没有找到学号"<<x.num<<"的记录"<<endl; output(a,n); } */ /* #include<iostream> #include<iomanip> #include<string.h> using namespace std; //下面的函数可以根据从键盘上输入的n个整数建立一个具有n个结点、每个结点为intnode类型的链表 //结点的次序与键盘上输入数值的次序相同,因为每次都是向表尾插入结点的。 struct IntNode { int data; IntNode *next; }; void create(IntNode *& f,int n) { if(n<0) { cerr<<"n的值无效!"<<endl; exit(1); } if(n == 0) { f = NULL; return; } cout<<"从键盘上输入"<<n<<"个整数:"<<endl; int x; cin>>x; f = new IntNode;//产生一个动态结点作为表头结点 f->data = x;f->next = NULL;//建立表头结点 if(n == 1) return; IntNode *p=f;//给p赋初值,使之指向刚建立的表头结点 for(int i=1;i<=n-1;i++) { cin>>x; p->next = new IntNode;//向表尾添加一个结点 p = p->next;//使p指向新添加的表尾结点 p->data = x;//把x的值赋给表尾结点 } p->next = NULL;//把整个链表的表尾结点的指针置空 } //每次向表头插入一个新结点,所以链表中结点的次序正好与键盘上输入的次序相反。 void create1(IntNode *& f, int n) { if(n < 0) { cerr<<"n的值无效!"<<endl; exit(1); } if(n==0) { f=NULL;return; } cout<<"从键盘上输入"<<n<<"个整数:"<<endl; int x; cin >> x; f=new IntNode; f->data = x;f->next = NULL; if(n == 1) return; IntNode *p; for(int i=1;i<n;i++) { cin>>x; p = new IntNode; p->data = x; p->next = f;//把f所指向的链表链接到p结点的指针域,相当于把p结点插入到f链表的表头。 f = p;//是f表头指针指向刚刚插入的p结点 }
} void traverse(IntNode *f)//遍历由表头指针f所指向的链表 { while(f) { cout<<f->data<<' '; f = f->next; } cout<<endl; } void main() { IntNode *head1 = NULL,*head2 = 0; int n; cout<<"输入结点数:"; cin>>n; create(head1,n); traverse(head1); create1(head2,n); traverse(head2); } */ /* //联合使用实例 //利用数组保存单位的职工记录,职工包含编号、姓名、性别、类别(1干部,2教师,3工人)和职级。 // 职工记录简表 //编号 姓名 性别 类别 职级 //001 liuminzhu m 1 chuji //002 zhaoyang f 1 keji #include<iostream> #include<iomanip> //#include<string.h> using namespace std; struct workers { char num[6]; char name[12]; char sex; short kind; union{ char cadre[8]; char teacher[12]; short worker; }; }; void Input(workers a[],int n) { for(int i=0;i<n;i++) { cout<<"请输入第"<<i+1<<"条记录:"<<endl; cin>>a[i].num>>a[i].name>>a[i].sex; cin>>a[i].kind; switch(a[i].kind) { case 1: cin>>a[i].cadre; break; case 2: cin>>a[i].teacher; break; case 3: cin>>a[i].worker; break; default: break; } } } void Output(workers a[], int n) { cout.setf(ios::left);
cout<<setw(6)<<"num"; cout<<setw(12)<<"name"; cout<<setw(5)<<"sex"; cout<<setw(12)<<"duty"<<endl;
for(int i=0;i<n;i++) { cout<<setw(6)<<a[i].num; cout<<setw(12)<<a[i].name; cout<<setw(5)<<a[i].sex; cout<<setw(12); switch(a[i].kind) { case 1: cout<<a[i].cadre; break; case 2: cout<<a[i].teacher; break; case 3: cout<<a[i].worker; break; default: break; } cout<<endl; } } void Count(workers a[],int n) { int c1,c2,c3; c1 = c2 = c3 = 0; for(int i=0;i<n;i++) { switch(a[i].kind) { case 1: c1++;break; case 2: c2++;break; case 3: c3++;break; } } cout<<"cadres:"<<c1<<endl; cout<<"teachers:"<<c2<<endl; cout<<"workers:"<<c3<<endl; } void main() { int n=8; workers *a=new workers[n]; Input(a,n); cout<<endl; Output(a,n); cout<<endl; Output(a,n); delete []a; } */ //链表 #include<iostream> //#include<iomanip> #include<string.h> #include<stdlib.h>
using namespace std;
struct MixNode { short mark; union{ float f; char *r; }; MixNode *next; }; void Create(MixNode *&,int); void Traverse(MixNode *);
void main() { MixNode *f; int n=6; Create(f,n); Traverse(f); } void Create(MixNode *& head,int n) { if(n<0) { cerr<<"n的值无效!"<<endl; exit(1); } MixNode *p=new MixNode; head=p; for(int i=0;i<n;i++) { p=p->next = new MixNode; cout<<"输入结点值类型的标记(1:浮点,2:字符串):"; cin>>p->mark; if(p->mark == 1) { cout<<"输入一个浮点数:"; cin>>p->f; } else { cout<<"输入一个字符串:"; char a[20]; cin>>a; p->r = new char[strlen(a)+1]; strcpy(p->r,a); } } p->next = NULL; head = head->next; } void Traverse(MixNode *head) { MixNode *p=head; while(p!=NULL) { if(p->mark == 1) cout<<p->f<<' '; else cout<<p->r<<' '; p = p->next; } cout<<endl; }
|