C++语言题目2
//某软件需要把运行过程中的一些日志信息(发生时间,类型,内容)进行记录, //采用面向对象思想,实现了一个日志类Log, Log类中有saveLog方法存储日志 //信息,现在假设该软件支持日志信息的多种存储方式,例如可以将日志信息 //存储进文本文件,也可以放入某数据库中,Log类的设计尽量满足面向对象的 //开-闭原则(支持对新的存储方式的扩展,但Log类的代码不修改),请设计并实现。 #include"iostream" #include"string" using namespace std; class Log{ public: virtual void saveLog() = 0; }; class LogSaveToFile:public Log { private: string content; public: LogSaveToFile(string logcontent) { content = logcontent; } void saveLog() { cout<<"这是日志内容:"<<content<<endl; cout<<"已经把日志写到文本文件。"<<endl; } }; class LogSaveToSQLServer:public Log { private: string content; public: LogSaveToSQLServer(string logcontent) { content = logcontent; } void saveLog() { cout<<"这是日志内容:"<<content<<endl; cout<<"已经把日志写到SQL Server。"<<endl; } }; int main() { cout<<"1、把日志写到文本文件:"<<endl; LogSaveToFile lstf("abc"); lstf.saveLog(); cout<<"2、把日志写到SQL Server:"<<endl; LogSaveToSQLServer ltss("abc"); ltss.saveLog(); return 1; }
C语言题目6
//用C编写程序:输入一个字符串,将其中的数字字符移动到非数字字符之后, //并保持数字字符和非数字字符输入时的顺序。 #include"stdio.h" #include"stdlib.h" typedef struct node{ char x; struct node *next; }llnode; int main() { char c; llnode *head = (llnode *)malloc(sizeof(llnode)); llnode *p; llnode *n; head->next = NULL; //由于不知道用户会输入多少字符,所以要用链表 printf("请输入一个字符串,输入完成后敲击回车:"); while(1) { c = getchar(); if(c == '\n') { break; } n = (llnode *)malloc(sizeof(llnode)); n->x = c; n->next = NULL; if(head->next == NULL) { head->next = n; } else { p = head->next; if((n->x)>='0' && (n->x)<='9') { while(p->next != NULL) { p = p->next; } p->next = n; } else { while(p->next != NULL) { if((p->next->x)>='0' && (p->next->x)<='9') { n->next = p->next; p->next = n; break; } else { p = p->next; } } p->next = n; } } } //调整完毕,下面输出 p = head->next; while(p) { printf("%c", p->x); p = p->next; } printf("\n"); return 1; }
C语言题目5
//用C语言编写程序:今天是2012年4月12日星期四,编写程序, //输入今天开始到12月31日之间的任意日期,输出那一天是星期几。 #include"stdio.h" int getdays(int month, int day) { int months[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int i = 0; int days = 0; month = month-1; if(month>11) { printf("月份%d过大,请输入合法的日期!", month+1); return -1; } for(i=0; i<12; i++) { if(i!=month) { days = days+months[i]; } else { if(day > months[i]) { printf("日期%d过大,请输入合法的日期!", day); return -1; } days = days+day; break; } } return days; } int main() { int x; int start; int end; int endmonth; int endday; int dayspan; int weekday; int startweekday; int result; char week[7][10]={{'M','o','n','d','a','y','\0'}, {'T','u','e','s','d','a','y','\0'}, {'W','e','d','n','e','s','d','a','y','\0'}, {'T','h','u','r','s','d','a','y','\0'}, {'F','r','i','d','a','y','\0'}, {'S','a','t','u','r','d','a','y','\0'}, {'S','u','n','d','a','y','\0'}}; start = getdays(4,12);//初始日期 startweekday = 4;//初始星期 while(1) { printf("请输入终止月:"); scanf("%d", &endmonth); printf("请输入终止日:"); scanf("%d", &endday); end = getdays(endmonth, endday); if(end < start) { printf("终止日期要大于4月12日!请重新输入...\n"); } else { dayspan = end - start; weekday = dayspan%7; result = (startweekday+weekday-1)%7; puts(week[result]); break; } } return 1; }
C语言题目4
//用C语言编写程序:建立一个顺序排列环状链表,有一个header指针指向最小节点(整数5)。 //输入一个整数,如果该整数在链表中存在,则删除该节点,并且header指针仍然指向最小的节点; //若不存在,则不作任何操作,最后输出链表中的所有数据。 #include "stdio.h" #include "stdlib.h" typedef struct node{ int x; struct node *next; }llnode; void showList(llnode* head) { llnode* p=head; int i = 0; printf("一共有%d个元素,链表中的数据如下:",head->x); p = head->next; while(i < 3*(head->x)) { printf("%d ",p->x); p = p->next; i = i+1; if(i%(head->x)==0) { printf("---loop--- "); } } printf("...\n"); } int main() { int number=0; llnode* head = (llnode *)malloc(sizeof(llnode)); llnode* p=head; llnode* q=head; llnode* start=head; char buffer; int find=0; head->x = 0;//用来存储数据节点个数 head->next = NULL; printf("请输入初始化链表的整数,数字之间用空格隔开,以输入#并回车结束:"); while(scanf("%d",&number)) { llnode *n = (llnode *)malloc(sizeof(llnode)); n->x = number; n->next = NULL; //如果没有数据节点 if(head->next == NULL) { head->next = n; head->x ++; n->next = n; } //如果用修改head指向 else if((n->x) < (head->next->x)) { p = head->next; if(p->next == p)//只有一个数据节点 { p->next = n; head->next = n; n->next = p; } else { p = p->next; while(p->next != head->next) { p = p->next; } n->next = head->next; p->next = n; head->next = n; } head->x ++; } //如果不用修改head指向 else { find = 0; p = head->next->next; q = head->next; start = q; while(1) { if((n->x)>(p->x)) { p = p->next; q = q->next; } else { q->next = n; n->next = p; head->x ++; break; } if(q->next == start) { n->next = p; q->next = n; head->x ++; break; } } } } showList(head); while((buffer = getchar())!='\n' && buffer!=EOF);//具备可移植性的清空缓冲区方法 printf("顺序循环链表已经建立,请输入要删除的整数,输入#并回车退出程序:"); while(scanf("%d", &number)) { p = head->next; //用修改head指向 if(p->x == number) { if(p->next == p) { free(p); head->next = NULL; } else { p = p->next; while(p->next != head->next) { p = p->next; } q = head->next; p->next = q->next; head->next = q->next; free(q); } head->x --; } //后续数据节点 else { q = p; start = q; p = p->next; while(1) { if(p->x != number) { p = p->next; q = q->next; } else { q->next = p->next; free(p); head->x --; break; } if(p == start) { break; } } } showList(head); while((buffer = getchar())!='\n' && buffer!=EOF);//具备可移植性的清空缓冲区方法 printf("顺序循环链表已经建立,请输入要删除的整数,输入#并回车退出程序:"); } return 1; }
C++语言题目1
//为二元方程式ax**2+bx+c=0设计一个名为QuadraticEquation的类,这个类包括 //1、代表三个系数的私有域数据a、b、c //2、一个参数为a、b、c的构造方法 //3、a、b、c的三个get方法 //4、一个名为getDiscriminant()的方法返回判别式结果:b**2-4ac //5、一个名为getRoot1()和getRoot2()的方法返回等式的两个根 //这两个方法在判别式为非负数的时候返回计算结果,如果判别式为负数,这两个方法返回0. //实现该类,编写一个测试程序,任给a、b、c的值创建一个QuadraticEquation对象, //显示判别式结果。如果判别式为正数,输出该方程的两个根;如果判别式为0,输出一个根; //如果判别式为负数,输出“该方程无根”。 #include"iostream" #include"cmath" using namespace std; class QuadraticEquation { private: double a; double b; double c; public: QuadraticEquation(double tempa, double tempb, double tempc) { a = tempa; b = tempb; c = tempc; } double geta() { return a; } double getb() { return b; } double getc() { return c; } double getDiscriminant() { return getb()*getb()-4*geta()*getc(); } double getRoot1() { if(getDiscriminant()>=0) { return (-getb()+sqrt(getDiscriminant()))/(2*geta()); } else { return 0; } } double getRoot2() { if(getDiscriminant()>=0) { return (-getb()-sqrt(getDiscriminant()))/(2*geta()); } else { return 0; } } }; int main() { QuadraticEquation q(1,-8,15); cout<<"方程系数a为:"<<q.geta()<<endl; cout<<"方程系数b为:"<<q.getb()<<endl; cout<<"方程系数c为:"<<q.getc()<<endl; cout<<"判别式结果为:"<<q.getDiscriminant()<<endl; if(q.getDiscriminant()>0) { cout<<"方程的根为:x1="<<q.getRoot1()<<",x2="<<q.getRoot2()<<endl; } else if(q.getDiscriminant()==0) { cout<<"方程的根为:x1=x2="<<q.getRoot1()<<endl; } else { cout<<"该方程无根"<<endl; } return 0; }
C语言题目3
//用C编写程序:输入一系列整数,保存这些整数,将所有奇数放在所有偶数之前,并且奇数部分和偶数部分需要按从小到大顺序排列,最后输出。 #include "stdio.h" #include "stdlib.h" typedef struct node{ int x; struct node *next; }llnode; llnode* getNumberList()//此函数建立临时链表,用来接收用户输入 { int number = 0; llnode *head = (llnode *)malloc(sizeof(llnode)); llnode *p = head; p->x = 0; p->next = NULL; printf("请输入一列整数,数字之间用空格隔开,以输入#并回车结束:"); while(scanf("%d", &number)) { llnode *n = (llnode *)malloc(sizeof(llnode)); n->x = number; n->next = NULL; p->next = n; p = n; head->x ++; } return head; } int* getNumberArray(llnode *head)//此函数用来处理用户输入,把用户输入从链表转移到动态数组,以便后面的操作 { llnode *p = head; llnode *q = head; int *numberarray; int i; numberarray = (int *)malloc(sizeof(int)*(head->x)); p = head->next; while(p!=NULL) { numberarray[i] = p->x; i++; p = p->next; } return numberarray; } void removeNumberList(llnode *head)//此函数用于删除临时链表,释放空间 { llnode *p = head; llnode *q = head; while(p!=NULL) { q = p->next; free(p); p = q; } } void divideNumberArray(int *numberarray, int n)//此函数用于把奇数放到偶数的前面 { int start = 0; int end = n-1; int swap = 0; for(start=0; start<end; start++) { if(numberarray[start]%2 == 0) { for(; end>start; end--) { if(numberarray[end]%2 == 1) { swap = numberarray[start]; numberarray[start] = numberarray[end]; numberarray[end] = swap; break; } } } } } int getCut(int* numberarray, int n)//此函数用于得到奇数和偶数的划分点 { int i = 0; for(i=0; i<n; i++) { if(numberarray[i]%2 == 0) { return i; } } } void sortNumberArray(int* numberarray, int start, int end)//此函数用于对指定范围内的数据进行升序排序 { int i = 0; int j = 0; int min = 0; int swap = 0; for(i=start; i<=end; i++) { min = i; for(j=i+1; j<=end; j++) { if(numberarray[j] < numberarray[min]) { min = j; } } swap = numberarray[min]; numberarray[min] = numberarray[i]; numberarray[i] = swap; } } int main() { int i = 0; int nodecount = 0; int *numberarray; int cut = 0; llnode *head; head = getNumberList();//由于不确定用户输入数据的多少,所以要采用链表,这样就解决了不知道用户会输入多少个数字的情况 nodecount = head->x; //记录一下用户输入了多少数据 numberarray = getNumberArray(head);//把临时链表的数据放到动态数组以便后续的处理 removeNumberList(head);//至此numberarray存储了用户输入的所有数据,我们可以把之前的链表删除了,要不然会浪费内存资源 //至此我们可以专心处理数组numberarry了,nodecount是数组元素个数 divideNumberArray(numberarray, nodecount);//把奇数放到偶数的前面 cut = getCut(numberarray, nodecount);//得到奇数和偶数的划分点 sortNumberArray(numberarray, 0, cut-1);//对奇数排序 sortNumberArray(numberarray, cut, nodecount-1);//对偶数排序 for(i=0; i<nodecount; i++)//输出结果 { printf("%d ", numberarray[i]); } printf("\n"); return 0; }
C语言题目2
//用C编写程序:对任意整数n,求f(n)。 //f(n)=3n**2+2f(n-1)+f(n-2)-5, n>1 //f(1)=1, n=1 //f(0)=2, n=0 //f(n)=0, n<0 #include"stdio.h" int f(int n) { if(n>1) { return 3*n*n+2*f(n-1)+f(n-2)-5; } else if(n==1) { return 1; } else if(n==0) { return 2; } else { return 0; } } int main() { int n; int result; printf("请输入一个整数,输入完成后敲击回车:"); scanf("%d", &n); result = f(n); printf("f(%d)= %d\n", n, result); return 0; }
C语言题目1
//用C编写程序:输入一串字符,计算其中的字符、数字、其他字符的个数并输出。 #include<stdio.h> int main() { char c; int chars = 0; int numbers = 0; int others = 0; printf("请输入一个字符串,输入完成后敲击回车:"); while(1) { c = getchar(); if(c=='\n') { break; } else { if(c>='0' && c<='9') { numbers++; } else if((c>='a' && c<='z')||(c>='A' && c<='Z')) { chars++; } else { others++; } } } printf("char=%d\tnumber=%d\tother=%d\n", chars, numbers, others); return 0; }