C++面向对象程序设计试题
- 格式:doc
- 大小:59.50 KB
- 文档页数:7
《面向对象程序设计》操作题说明:C++实现一、假定一般居民的基本数据包括身份证号、姓名、性别和出生日期,而居民中的成年人又多两项数据:最高学历和职业,成人中的党员又多一项数据:党派类别。
现要求建立三个类,让成人类继承居民类,而党员类又继承成人类,并要求在每个类中都提供有数据输入和输出的功能。
20分class People { //居民类char num[19]; //身份证号char name[11]; //姓名int sex; //性别char birth[11]; //出生日期public:void Input() {cout<<"Input People data: "<<endl;cin>>num>>name>>sex>>birth;}void Output() {cout<<num<<' '<<name<<' ';cout<<sex<<' '<<birth<<endl;}};class Adult: public People { //成人类char sch[11]; //最高学历char prof[11]; //从事职业public:void Input() {People::Input();cout<<"Input sch & prof data:"<<endl;cin>>sch>>prof;}void Output() {People::Output();cout<<sch<<' '<<prof<<endl;}};class Party: public Adult { //党员类char parties[15]; //党派类别public:void Input() {Adult::Input();cout<<"Input parties data: "<<endl;cin>>parties;}void Output() {Adult::Output();cout<<parties<<endl;}};二、向字符文件”d:\\user\\wr1.dat”中存入100以内的所有奇数。
10分public class Class33{public static void main(String args[]){for(int i=0;i<100;i++){if(i%2!=0){System.out.println(i);}}}}三、铁路进行列车调度时,常把站台设计成栈式结构的的站台,试问如果有编号为1、2、3、4、5、6的六辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?10分#define MAX_LENGTH 9#include <stdio.h>char tmp[MAX_LENGTH];int g_nTotal = 0;voidFillPos(int pos, int nFixLength, char s[]){int i, j, nIndex = 0;char c, t[MAX_LENGTH];if (nFixLength == strlen(s)-1){nIndex = nFixLength - 1;tmp[pos] = s[nFixLength];for (j=1;j<nFixLength+1;j++){tmp[pos+j] = s[nIndex];nIndex--;}printf("%s\n", tmp);g_nTotal++;return;}tmp[pos] = s[nFixLength];memset(t, 0, sizeof(t));for(i=0;i<strlen(s);i++){if (i!=nFixLength){t[nIndex] = s[i];nIndex++;}}if (nFixLength>0) nFixLength--;for(i=nFixLength;i<strlen(t);i++){FillPos(pos+1, i, t);}return;}main(){int i = 0, n = 0;char s[MAX_LENGTH];memset(s, 0, sizeof(s));printf("input length:\n");scanf("%d", &n);for(i=0;i<n;i++)s[i] = i + '1' ;printf("\nStack string is: %s\n", s);printf("Result is:\n\n");for(i=0;i<n;i++){FillPos(0, i, s);printf("\n");}printf("\nTotal: %d\n", g_nTotal);}四、用选择法对10个整数排序10分#include <iostream>#include <iomanip>using namespace std;int main(){void order(int *p,int n);int a[10],i;cout<<"enter 10 numbers:"<<endl; for(i=0;i<10;i++)cin>>*(a+i);order(a,10);cout<<"Now the order:"<<endl;for(i=0;i<10;i++)cout<<setw(5)<<a[i];cout<<endl;}void order(int *p,int n){int j,k,t,m;for(m=0;m<n-1;m++){j=m;for(k=m+1;k<n;k++)if(*(p+m)>*(p+k)){t=*(p+m);*(p+m)=*(p+k);*(p+k)=t;}}}五、建立采用递归求和的函数20分#include <stdio.h>#define N 100int sum(unsigned int n){if ( n == 0) //递归出口{return 0;}else{return n + sum( n -1 );}}int main(int argc, char *argv[]){printf("sum is: %d \n", sum(N));return 0;}六、建立一个链表,每个节点包括:学号、姓名、性别、年龄。
输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,将此节点删除。
30分#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct student)struct student/*定义结构体*/{ char num[6];char name[8];char sex[2];int age;struct student*next;}stu[10];void main(){ struct student*p,*pt,*head;FILE *fp;int i,length,iage,flag=1;int find=0;charfilename[10],numone[][10]={"first","second","third","fourth","fifth","sixth","senvent h","eighth","ninth","tenth"};printf("\t\t");for(i=20;i<71;i++)printf("\003");printf("\n");while(flag==1)/*输入链表长度*/{printf("\t\t\tinput length of list(<10):");scanf("%d",&length);if(length<10)flag=0;}printf("\t\t");for(i=20;i<71;i++)printf("\003");printf("\n");for(i=0;i<length;i++)/*对链表的每个结点赋值*/{p=(struct student * ) malloc(LEN);if (i==0)head=pt=p;elsept->next=p;pt=p;printf("\n\t\tinput score of student %s:",numone[i]);printf("\tNo. :");scanf("%s",p->num);printf("\t\t\t\t\t\tname:");scanf("%s",p->name);printf("\t\t\t\t\t\tsex :");scanf("%s",p->sex);printf("\t\t\t\t\t\tage :");scanf("%d",&p->age);}p->next=NULL;printf("\t\t");for(i=20;i<71;i++)printf("\003");printf("\n");printf("\n\t\tplease scanf filename:\t");/*输入文件名*/scanf("%s",filename);printf("\n");fp=fopen(filename,"w");/*建立文件并将数据写入磁盘上*/for(i=0;i<length;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1);printf("\t\t\t\tfile srite errov\n");fclose(fp);p=head;i=0;printf("\t\t");for(i=20;i<71;i++)printf("\003");printf("\n");printf("\t\t\t INFORMATTION TABLE OF STUDENTS\n");printf("\n\t\tNo.\t\tname\t\tsex\t\tage\n");fp=fopen(filename,"rb");while(p!=NULL)/*将写入磁盘的数据读出并输出*/{fread(&stu[i++],sizeof(struct student),1,fp);printf("\t\t%3s\t%12s\t%10s\t%11d\n",p->num,p->name,p->sex,p->age); p=p->next;}fclose(fp);printf("\t\t");for(i=20;i<71;i++)printf("\003");printf("\n");printf("\t\tPlease input age: ");/*输入删除学生的年龄*/scanf("%d",&iage);pt=head;p=pt;if(pt->age==iage)/*链表头是待删元素*/{p=pt->next;head=pt=p;find=1;}else/*链表头不是待删元素*/pt=pt->next;while(pt!=NULL){if(pt->age==iage){p->next=pt->next;find=1;}else/*中间结点不是待删元素*/p=pt;pt=pt->next;}p=head;printf("\t\t");for(i=20;i<71;i++)printf("\003");printf("\n");printf("\n\t\tNo.\t\tname\t\tsex\t\tage\n"); while(p!=NULL)/*显示结果*/{printf("\t\t%3s\t%12s\t",p->num,p->name); printf("%10s\t%11d\n",p->sex,p->age);p=p->next;}printf("\t\t");for(i=20;i<71;i++)printf("\003");if(!find)printf("\t\t\t Not found %d.",iage);getch();}。