C++练习集合(一)

实战题目练习:

一、基础

1.求一个整数x任意y次方后的后三位。

#include <iostream>
using namespace std;
void main()
{
  int i,x,y,z=1;
  cout<<"请输入两个数x和y:";
  cin>>x>>y;
  for(i=1;i<=y;i++)
     z=z*x%1000;
  if(z>=100)
    cout<<"x^y的最后三位xyz是:"<<z<<endl;
  else
    cout<<"x^y的最后三位xyz是:"<<0<<z<<endl;
}

2.A.B.C三位新娘为X.Y.Z  :  A说他和X结婚,X说他和 C结婚,C说他和Z结婚,他们说的全是假话,问究竟谁和谁结婚?(穷举法)

#include <iostream>
using namespace std;
void main()
{
char *p[]={"X","Y","Z"}; //char *p=new char[3]; strcpy(p,"XYZ");
for(int a=0;a<3;a++)
  for(int b=0;b<3;b++)
    for(int c=0;c<3;c++)
if(a!=0&&c!=0&&c!=2&&a!=b&&a!=c&&b!=c)
  {
     cout<<"abc分别为:"<<a<<b<<c<<endl;
     cout<<"A的未婚夫是"<<*(p+a) <<endl;
	 cout<<"B的未婚夫是"<<*(p+b) <<endl;
	 cout<<"C的未婚夫是"<<*(p+c) <<endl;
   }
}

  a.阿姆斯特朗数 b.满足abcd=(ab+cd):活用 商%和取余/ 

3.简单计算器

#include <iostream>
using namespace std;
void main()
{
float a,c;
char b;
cout<<"a+(-*/)"<<endl;
cin>>a>>b>>c;
switch(b)
	{  case'+':
		cout<<a<<"+"<<c<<"="<<a+c<<endl;break;
	   case'-':
		cout<<a<<"-"<<c<<"="<<a-c<<endl;break;
	   case'*':
		cout<<a<<"*"<<c<<"="<<a*c<<endl;break;
	   case'/':
		 if(!c)
			 cout<<"除数不能为0"<<endl;
		 else
			 cout<<a<<"/"<<c<<"="<<a/c<<endl;
		 break;
	   default:
		   cout<<"输入有误"<<endl;
	}
}

4.小结 

模糊ATM自动提款机,实现用户登录及取款等功能。

功能包括:用户输入密码登录界面、取款功能、取款后显示取款金额和剩余金额、退出功能等。

界面包括:输入密码进入主目录界面、执行取款界面、显示取款金额和剩余金额功能、退出系统界面。

 二、提高

1、有趣的魔方阵(最经典的填数是罗伯法)

规律如下:将1放在第一行的中间列;

     从2开始直到n×n止按以下规律存放,每一行存放的位置比前一行减1,列数加1(或减1);

     如果遇到列数为1,则下一个数在n行;

     如果遇到列数为1,则下个数列数为n;

     如果上面的规则位置已经有数,则下个数放在上一个数的下面。

void main()
{
	int i,j,x=0,y=1,a[3][3]={0};
	for(i=1;i<=9;i++)
	{
	 a[x][y]=i;
	 if(x==0&&y==2)
	 {
	 x=x+1;
	 continue;
	 }
	 if(x==0)
		 x=2;
	 else
		 x--;
	 if(y==2)
		 y=0;
	 else
		 y++;
	 if(a[x][y]!=0)
	 {
	 x=x+2;
	 y=y-1;
	 }
	}
	for(i=0;i<=2;i++)
	{
	 for(j=0;j<=2;j++)
		 printf("%4d",a[i][j]);
		 printf("\n");
	}
}

2、简单的直接插入排序

	int s[5]={1,5,8,4,7};
	int i,j,a;
	for(i=1;i<=4;i++)
	{
		  if(s[i]<s[i-1])
		  {
			j=i-1;
			a=s[i];  
		   for(j=i-1;j>0&&s[j]>a;j--)
				 {
				  s[j+1]=s[j];
				 }
		      s[j+1]=a;
		  }
	}

3.为二维数组动态分配内存并释放

int main()
{	
        int **p;
	int x,y;
	p=new int *[3]; //指向指针的指针
	for(x=0;x<3;x++)
	{
	   *(p+x)=new int[3];
	   for(y=0;y<3;y++)
	   {
	   *(*(p+x)+y)=x+y;
	   }
	}
	for(x=0;x<3;x++)
   {
	   for(y=0;y<3;y++)
	   {
	     cout<<*(*(p+x)+y)<<" ";
	   }
	   cout<<endl;
	}
}

4.使用右值引用转化二进制为十进制

int bin_dec(int &x,int &&n)
{
	if(n==0)
		return 1;
	return x*bin_dec(x,n-1);
}
void main()   //C++方式
{
	int i,ip=0,b=2;
	char a[8];
	for(i=0;i<8;i++)
	{
		cin>>a[i];
	}
	for(i=0;i<8;i++)
	{
		if(a[i]=='1')
			ip+=bin_dec(b,7-i);
	}
	cout<<ip;
}

void main()  //C方式
{
int i,b=2,ip=0;
char a[9];
scanf("%s",a);
for(i=0;i<8;i++)
{
	if(a[i]=='1')
		ip+=bin_dec(b,7-i);
}
printf("%d",ip);
}

5.小结

猜数字游戏 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<Windows.h>
void gotoxy(int &&x,int &&y) //光标定位
{
	COORD coord={x,y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void guess(int n)
{
	int i,j,k=0,acount,bcount,flag,a[10],b[10];
	do
	{
	flag=0;
	srand((unsigned)time(NULL));  //利用系统时钟设定种子
	for(i=0;i<n;i++)
			a[i]=rand()%10;
	for(i=0;i<n-1;i++)
		{
		for(j=i+1;j<n;j++)
			if(a[i]==a[j])
			{
				flag=1;
				break;
			}
		}
	 }while(flag==1);
	do
	{
		k++;
		acount=0;bcount=0;
		printf("Guess:");
		for(i=0;i<n;i++)
			scanf("%d",&b[i]);  //输入猜测的数据在b中
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)	
			{
			   if(a[i]==b[j])    //数据和位置都相同
			   {
				 acount++;
				 break;
			   }
			   if(a[i]==b[j]&&i!=j) //数据相同位置不同
			   {
				 bcount++;
				 break;
			   }
			}
			   printf("clue on:%dA%dB\n\n",acount,bcount);
			   if(acount==n)
			   {
				if(k==1)
					printf("you are the topmost rung of Fortune`s ladder!!\n\n");
				else if(k<=5)
					printf("you are genius!!\n\n");
				else if(k<=10)
					printf("you are clever!!\n\n");
				else 
					printf("you need try hard!!\n\n");
				getchar();
				printf("按任意键继续");
				getchar();
				break;
			   }
	}while(1);

}

void main()
{
	int i,n;
	while(1)
	{
		system("cls");
		gotoxy(15,6);
		printf("1.Star game");
		gotoxy(15,8);
		printf("2.Rule");
		gotoxy(15,10);
		printf("3.Exit");
		gotoxy(25,15);
		printf("Please choose:");
		scanf("%d",&i);
		switch(i)
		{
		case 1:
			system("cls");
			printf("please input n:");
			scanf("%d",&n);
			guess(n);
			Sleep(5);   //程序停止5s
			break;
		case 2:
			system("cls");
			printf("\tThe Rule Of The Game\n");
			printf("\ttep1:input the number of digits\n");
			printf("\tstep2:input the number,separated by a space between two mumbers\n");
			printf("\tstep3:A represend location and data are correct\n");
			printf("\tB represent location is correct but data is wrong\n");
			Sleep(8000);
			break;
		case 3:
			exit(0);
		default:
			break;
		}
	}
}  

 三:核心

图书馆系统:

 

  

 

posted @ 2018-09-11 20:20  小猪利琦  阅读(312)  评论(0)    收藏  举报