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;
}