本节内容
1.#define 宏定义
2.排序:冒泡排序,选择排序,插入排序
3.用排序写个逻辑游戏
4.函数
5.ATM函数版
6.python脚本,让你不动脑,轻松玩转逻辑游戏
1.#define 宏定义
语法:#define 标识符 带定义内容
宏定义的作用就是用标识符代替带定义内容,以后需要使用带定义内容的时候可直接用标识符代替带定义内容。带定义内容过于复杂或实际意义难懂时,可以用宏定义给它取个别名,简化代码或增强可读性。
2.排序
冒泡排序:
int main(){
int array[10]={3,4,5,6,8,7,1,2,0,9};
for(int i=1;i<10;i++){
for(int j=0;j<10-i;j++){
if (array[j]>array[j+1]){//相两个数比较,小的排前面,大的排后面邻
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}//一轮比较结束可将最大的数排到最后
}
for(int i=0;i<10;i++){
printf("%d ",array[i]);
}
return 0;
}
选择排序
#include
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){//每次将数组中第i个元素选出
for(int j = i+1; j < 10; j++){
if(num[j] < num[i]){//依次与后面的元素比较,若大于相比较的元素,则交换两数的值,继续与后面的比较
int temp = num[j];
num[j] = num[i];
num[i] = temp;
}
}//每轮可选出最小的元素
}
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
插入排序
#include
int main(){
int num[10] = {3,0,1,8,7,2,5,4,9,6};
for(int i = 0; i < 10-1; i++){
if(num[i] > num[i+1]){
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
for (int j = i; j > 0; j--){
if(num[j] > num[j-1]){
break;
} else{
int temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
}
}//将数组中第i+1个元素依次与前面的每一个数比较,小于则向前排,大于则不动,并进入下一轮排序
for(int i = 0; i < 10; i++){
printf("%d ", num[i]);
}
return 0;
}
用排序写个逻辑游戏
游戏规则:程序会随机生成四个已经从小到大排好序的0~9数字,用户输入四个数字,用户输入数字,程序自动比对,返回一个提示,如:2A1B,代表有两个数字正确并且位置正确,一个数字正确但位置不正确;又如0A2B,代表没有一个位置和数字都正确的数,有两个数数字正确但位置不正确。
#include
int main(){
printf("**********************************\n");
printf("欢迎来到猜数游戏,回车开始游戏!\n");
printf("**********************************\n");
//生成随机数
int array[4];
int temp;
srand(time(NULL));
for(int i=0;i<4;i++){
temp = rand() % 10;
if (i==0){
array[0]=temp;
}else{
for(int j=0;j<=i;j++){
if (temp == array[j]){
i--;
break;
}else{
if (j == i){
array[i] = temp;
break;
}
}
}
}
}
//排序,看看这是什么排序,你也可以用其他排序方法
for(int i = 0;i<3;i++){
for(int j = i+1;j<4;j++){
if (array[i]>=array[j]){
temp = array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
//程序自动对比
int counter=5;
while(counter--){
int guessNum[4];
int countA=0;
int countB=0;
printf("请输入你猜的数字:");
for(int i = 0;i<4;i++){
scanf("%1d",&guessNum[i]);
}
for(int i=0;i<4;i++){
if (array[i]==guessNum[i]){
countA++;
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(array[i]==guessNum[j]){
countB++;
}
}
}
if (countA==4 && countB==4){
printf("你猜对了!\n");
return 0;
}else{
printf("你输入的数字中%dA%dB\n",countA,countB-countA);//返还提示
}
}
printf("正确答案是:");
for(int i = 0;i<4;i++){
printf("%d ",array[i]);
}
gechar();
return 0;
}
实现结果:
4.函数
函数:一组执行同一个任务的语句块。
函数声明:告诉编译器函数的名称及返回类型和函数参数。
函数的定义:告诉编译器函数名称并提供一个主体,改主体能实现某种功能。
下面将以ATM的例子讲解函数。
ATM函数版
#include
#include
//1.部分为函数的声明
/*********************************************1.********************************************/
void login(void);//声明了一个登录函数,用于验证登录密码void表示该函数没有参数
int Choice(void);//声明了一个选择操作函数,用于记录选择的操作
void straw(int *pacBlance,char yN);//声明了一个存款函数,函数有两个参数
void store(int *pacBlance,char yN);//声明了一个取款函数
int check(int *pacBlance,char yN);//声明了一个查询余额的函数
void change(int *pacBlance,int *ppassword);//声明了一个更改密码的函数
/*****************************************************************************************/
//2.部分是函数要用到的参数声明
/********************************************2.*******************************************/
int acBlance;
int password;
int *pacBlance = &acBlance;
int *ppassword = &password;
/****************************************************************************************/
//3.部分是整个ATM的主体
/****************************************3.*********************************************/
int main(){
printf("**********************\n");
printf(" 欢迎使用建设银行系统\n");
printf("**********************\n");
char yN;//声明常用的yes和no
int choice;
login();//登录函数
while(1){
choice = Choice();//选择操作函数
/*执行操作*/
switch(choice){
case 1:
straw(&acBlance,yN);break;//传参并调用函数
case 2:
store(&acBlance,yN);break;
case 3:
check(&acBlance,yN);break;
case 4:
change(&acBlance,&password);break;
case 5:
exit(EXIT_SUCCESS);
default:
printf("输入有误!\n");break;
}
}
return 0;
}
/*******************************************************************************/
//4.部分是函数的定义
/************************************4.*****************************************/
void login(){//这是一个函数,里面包含了实现该函数功能的语句块
acBlance=100000;
password=123;
int input;
int wrongTime = 3;
printf("请输入密码:");
for(int i = 1;i <= wrongTime; i++){
scanf("%d", &input);
if(input == *ppassword){
break;
}
else if(i == wrongTime){
printf("错误次数过多!\n");
exit(EXIT_SUCCESS);
}
printf("密码不正确,请重新输入密码:");
}
}
int Choice(){
int choice = 0;
printf("*****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.查询\n");
printf("4.更改密码\n");
printf("5.退出\n");
printf("*****************************\n");
printf("请选择操作:");
scanf("%d",&choice);
getchar();
return choice;
}
void straw(int *pacBlance,char yN){
printf("请输入存款金额:");
while(1){
int storeMoney=0;
scanf("%d",&storeMoney);
getchar();
*pacBlance += storeMoney;
printf("存款成功,余额为%d\n",*pacBlance);
printf("是否继续存款(Y/N):");
scanf("%c",&yN);
getchar();
if (yN == 'n'||yN == 'N'){
break;
}
printf("请输入存款的金额:");
}
}
void store(int *pacBlance,char yN){
printf("请输入取款金额:");
while(1){
int drawMoney=0;
scanf("%d",&drawMoney);
getchar();
if (*pacBlance >= drawMoney){
*pacBlance -= drawMoney;
printf("取款成功,余额为%d\n",*pacBlance);
}else{
printf("余额不足!请重新输入:");
continue;
}
printf("是否继续取款(Y/N):");
scanf("%c",&yN);
getchar();
if (yN == 'n'||yN == 'N'){
break;
}
printf("请输入你要取款的金额:");
}
}
int check(int *pacBlance,char yN){
printf("你的余额为%d\n是否继续操作(Y/N):",*pacBlance);
scanf("%c",&yN);
if (yN == 'n'||yN == 'N'){
exit(EXIT_SUCCESS);
}else{
return 0;
}
}
void change(int *pacBlance,int *ppassword){
int old;
printf("请输入你的原密码:");
int count=3;
while(count){
scanf("%d",&old);
if(old == password){
break;
}else{
printf("密码错误!请重新输入:");
}
count--;
}
printf("请输入你的新密码:");
while(count){
int pword;
scanf("%d",ppassword);
printf("请再次输入你的密码:");
scanf("%d",&pword);
if (pword == *ppassword){
printf("密码更改成功!\n");
break;
}else{
printf("两次密码不一致!请重新输入:");
}
}
}
/*********************************************************************************/
实现结结果:
大蟒蛇脚本,让你不动脑,轻松玩转逻辑游戏
python“客串”,不多说,大佬勿喷!
def builtdict():
i = 0
j = i + 1
k = j + 1
l = k + 1
m = 0
n = 0
count = 0
num = []
while i < 7:
while j < 8:
while k < 9:
while l<10:
number=str(i)+str(j)+str(k)+str(l)
num.append(number)
count += 1
l += 1
k += 1
l = k + 1
j += 1
k = j + 1
l = k + 1
i += 1
j = i + 1
k = j + 1
l = k + 1
print(count)
return num,count
#对比函数
def CompareNumber(guessNumber,tips,num,count):
j = 0
guess = list(guessNumber)
newcount = 0
newnum = []
while j < count:
string = num[j]
number = list(string)
i = 0
counterA = 0
counterB = 0
while i != 4:
if guess[i] in number:
if guess[i] == number[i]:
counterA += 1
else:
counterB += 1
i += 1
if (str(counterA) == tips[0]) and (str(counterB == tips[2]):
newnum.append(string)
newcount += 1
j += 1
return newnum,newcount
result = builtdict()
num = result[0]
count = result[1]
thecounter = 0
while count != 1:
if thecounter == 0:
guessNumber = '0123'
print("请输入: 0123")
elif thecounter == 1:
guessNumber = '5678'
print("请输入: 5678")
else:
guessNumber = num[0]
print("请输入:",num[0])
tips = input("请输入提示:")
result = CompareNumber(guessNumber,tips,num,count)
count = result[1]
num = result[0]
thecounter += 1
print("答案就是",num[0])
input()
实现如下: