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)2 :活用 商%和取余/
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;
}
}
}
三:核心
图书馆系统:

浙公网安备 33010602011771号