7-2 说反话-增强版
给定一句英语,要求你编写程序,将句中全部单词的顺序颠倒输出。git
定义数组 a[500001]; 定义 flag=0,len 字符串长度i,j,ret,count=0 单词长度 gets(a); len=strlen(a); for i=len-1 To 0 //倒序判断 if a[i]!=' ' ret=1;count++; end if if a[i]=' '&&ret=1 //一个单词结束 if flag=1 已输出过单词 先空格 end if for j=i+1 To i+count 逐个输出字符 flag=1; end for 所有初始化 end if if i=0&&ret=1 //第一个单词单独判断 同理输出 end if end for
#include<stdio.h> #include<string.h> int main() { char a[100][100]; int i,j; int flag=0; char sentense[10000]; gets(sentense); int m=0,n=0; for(i=0;sentense[i];i++) { if(sentense[i]!=' ') { a[m][n]=sentense[i]; m++; //单词长度累加 } if(m!=0&&sentense[i]==' ') { a[m][n]='\0'; n++;m=0; //有单词累计,遇到空格 } } for(i=n;i>0;i--) { for(j=0;a[j][i];j++) { printf("%c",a[j][i]);flag=1; } if(flag==1) printf(" "); } for(j=0;a[j][0];j++) printf("%c",a[j][i]); return 0; }
int computerExp(char grade,int *gradeNum) 定义i,j=0,step,n //控制生成的随即位数&计算步数 定义exp[30], op[5]={'+','-','*','/'}; //枚举 switch(grade) A:一位两步 B:两位一步 C:三位一步 for j=0 To step-1 for j To (i+1)*n-1 exp[j]=rand()%10+'0'; //生成随机数转字符录入 end for exp[j]=op[rand()%*gradeNum]; //对应加减/加减乘除 end for; exp[i]='\0'; 输出表达式
定义 former latter i,j,pos; for j=0 To j<n-1 former=10*former+exp[pos]-'0'; //转数字 pos++; end for; for i=0 To i<step-1 for j=0;j<n-1 latter=10*latter+exp[pos]-'0'; //转数字 pos++; end for end for switch op //运算 case +: case -: case *: case /: if latter=0,跳过此题 return latter;
void Calculation(char x) { switch(x) { case 'A': while(correctNum<10)//若是想一直答下去,就把它修改为while(1),而后输入6666照样能够退出循环w { printf("当前挑战等级:青铜\n"); printf("当前答对题数:%d\n",correctNum); printf("tips:输入6666提早结束游戏\n\n\n"); x = rand() % 10; /* generate 1-digit random number */ y = rand() % 10; /* generate another 1-digit random number */ kind=rand()%4; randomOperation(kind,x,y); } break; case 'B': while(correctNum<10) { printf("当前挑战等级:钻石\n"); printf("当前答对题数:%d\n",correctNum); printf("tips:输入6666提早结束游戏\n\n\n"); x = rand() % 90+10; /* generate 1-digit random number */ y = rand() % 90+10; /* generate another 1-digit random number */ kind=rand()%2; randomOperation(kind,x,y); } break; case 'C': while(correctNum<10) { printf("当前挑战等级:王者\n"); printf("当前答对题数:%d\n",correctNum); printf("tips:输入6666提早结束游戏\n\n\n"); x = rand() % 900+100; /* generate 1-digit random number */ y = rand() % 900+100; /* generate another 1-digit random number */ kind=rand()%2;//decide to minus or plus randomOperation(kind,x,y); } break; } }
void Choice(char x,int *correctNum,int *incorrectNum,int *gradeNum)//选择 { int answer,end; while(*correctNum<10)//若是想一直答下去,就把它修改为while(1),而后添加一个跳出循环条件就好啦w { again: switch(x) { case 'A':printf("当前挑战等级:青铜\n");*gradeNum=4;break; case 'B':printf("当前挑战等级:钻石\n");*gradeNum=2;break; case 'C':printf("当前挑战等级:王者\n");*gradeNum=2;break; } printf("当前答对题数:%d\n",*correctNum); printf("tips:输入任意大于6666可直接结束游戏\n\n\n"); answer=computerExp(x,gradeNum); if(answer==5555)//除数为0 { fflush(stdin);//清空输入缓冲区 system("cls");//empty goto again; } end=Judgement(answer,correctNum,incorrectNum); if(end)break; Pause(); }
#include <stdio.h> #include <stdlib.h> #include <time.h> int kind;//choose to minus or plus etc. int flag=0;//控制是否输出正确提示语 int END=0;//控制跳出循环 int Num=0;//sum char grade;//choose one to play int wrongTimes=0;//the number of wrong times int correctNum=0;//the number of correct times int incorrectNum=0;//the number of incorrect times int x,y; void Calculation(char x); void Menu(void) ; void plus(int x,int y); void divide(int x,int y); void minus(int x,int y); void multiply(int x,int y); void correctMessage( void ); void incorrectMessage( void ); int randomOperation(int kind,int x,int y); void Ending(void);//ending message
#include <stdio.h> #include <stdlib.h> #include <time.h> void Pause(void); char Menu(void) ; int Calculation(char exp[],int step,int n); int Judgement(int answer,int *correctNum,int *incorrectNum); int computerExp(char grade,int *gradeNum); void Ending(int *correctNum,int *incorrectNum);//ending message void correctMessage( int *correctNum ); void incorrectMessage(int *wrongTimes,int *incorrectNum,int answer); void Choice(char x,int *correctNum,int *incorrectNum,int *gradeNum);
int Calculation(char exp[],int step,int n) { int former=0,latter=0; int i,j,pos=0; for(j=0;j<n-1;j++) { former=10*former+exp[pos]-'0'; pos++; } pos++; //jump the op position for(i=0;i<step-1;i++) { for(j=0;j<n-1;j++) { latter=10*latter+exp[pos]-'0';//change into number pos++; } switch(exp[i*n+n-1]) { case '+':former+=latter;latter=0,pos++;break; case '-':former-=latter;latter=0;pos++;break; case '*':former*=latter;latter=0;pos++;break; case '/':if(latter==0) return former=5555; former/=latter;latter=0;pos++;break; } } return former; }
switch (grade)//等级 { case 'A':n=1;break; case 'B':n=2;break; case 'C':n=3;break; } for(i=0; i<3*n; i++)num[i]=rand()%10; //生成随机数 for(i=0; i<n; i++)x=10*x+num[i]; //生成第一个随机数 for(i=n; i<2*n; i++)y=10*y+num[i]; //生成第二个随机数 for(i=2*n; i<3*n; i++)z=10*z+num[i]; //生成第三个随机数 for(i=0;i<3*n+3;i++) //录入字符数组 { if (i==n) { exp[i]=randomOp(); if(exp[i]=='/'&&y==0) { do { for(i=n;i<2*n;i++) { num[i]=rand()%10; y=10*y+num[i]; } }while(y); } else if(exp[i]=='*'||exp[i]=='/') { mark1=1; } } else if(i==2*n+1) { exp[i]=randomOp(); if(exp[i]=='/'&&z==0) { do { for(i=2*n;i<3*n;i++) { num[i]=rand()%10; z=10*z+num[i]; } }while(!z); } else if(exp[i]=='*'||exp[i]=='/') { mark2=1; } } else if (i==3*n+2)exp[i]='='; else { exp[i]=num[j]+'0'; j++; } } exp[i]='\0';//加上终止符
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { if (grade=='A')gradeNum=4;else gradeNum=2; int i,step,j=0,n; printf("你想挑战的位数:");scanf("%d",&n);n++; printf("你想挑战的步数:");scanf("%d",&step);step++; char exp[30]; char op[5]={'+','-','*','/'}; for(i=0;i<step;i++) { for(j;j<(i+1)*n-1;j++) exp[j]=rand()%10+'0'; if(i!=step-1)exp[j]=op[rand()%gradeNum]; else exp[j]='=';j++; } exp[j]='\0'; printf("%s",exp); }