user-0 提问: C语言代码求助

回复:
user: user-1
content: calval函数的y没有赋值，虽然用y做加减乘除

user: user-2
content: 仅供参考：//运用C语言开发一个“小学生算术四则运算测试系统”。该系统是让计算机充当一位给小学生布置作业的算术老师，为学生出题并阅卷。该系统要求实现下列功能： //①为小学生出题（分别进行+、-、*、/等不同运算）。 //②学生做题后，进行评阅。学生每做一题后，评阅给出“答题正确，很好”或“答题错误，重做”等信息。 //③加、减、乘、除运算功能可以自由选择实现。 //④运算数值可控制在两位数的四则运算范围内。 #include <stdio.h> #include <stdlib.h> #include <time.h> int c,a,b,r,ri; void main() {     srand( (unsigned)time( NULL ) );     system("cls");     printf("小学生算术四则运算测试系统\n");     while (1) {         printf("1加法 2减法 3乘法 4除法 0退出:");fflush(stdout);         rewind(stdin);         scanf("%d",&c);         if (0==c) break;         switch (c) {         case 1:             a=rand()%100;             b=rand()%100;             r=a+b;             while (1) {                 printf("%d+%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         case 2:             a=1+rand()%99;             b=rand()%a;             r=a-b;             while (1) {                 printf("%d-%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         case 3:             a=rand()%99;             b=rand()%99;             r=a*b;             while (1) {                 printf("%d*%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         case 4:             a=2+rand()%998;             b=1+rand()%(a/2);             while (1) {                 if (0==a%b) break;                 b--;             }             r=a/b;             while (1) {                 printf("%d/%d=?",a,b);fflush(stdout);                 rewind(stdin);                 scanf("%d",&ri);                 if (ri==r) {                     printf("答题正确，很好！\n");                     break;                 } else {                     printf("答题错误，请重做。\n");                 }             }         break;         }     } }

user: user-0
content: 我的代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 30 //定义最大30个测试用例 char a[N][50]; //定义每个测试用例可以有50个字符 char comp[10][6] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; int  val[N];  void StringBracket(char *str)//删除空格 { 	int i,j,len;  	len=strlen(str); 	j=0; 	for(i=0; i<len; i++) 	{ 		if(str[i]!=' ') 		{ 			str[j]=str[i]; 			j=j+1; 		} 	} 	str[j]='\0'; }  char calval(char *str)  //计算每个表达式的值 { 	int i,j,len,y; 	int a1=0,a2=-1,b1=0,b2=-1;//每个表达式最多有4个整数 	char str1[20],str2[20];//分解为两个字符串 	char stra1[10],stra2[10]={0},strb1[10],strb2[10]={0};//每个字符串最多分解为两个子串  	len=strlen(str); 	for(i=0; i<len; i++) 	{ 		str1[i]=str[i]; 		if(str[i]=='+'|| str[i]=='-'|| str[i]=='*'|| str[i]=='/'|| str[i]=='%') 		{ 			str1[i]='\0'; 			for(j=i+1; j<len; j++)  				str2[j-i-1]=str[j]; 				str2[len-i-2]='\0'; 				break;  		} 	}    	len=strlen(str1); 	for(i=0; i<len; i++) 	{ 		stra1[i]=str1[i]; 		if(i>1 && str1[i]==' ') 		{ 			stra1[i]='\0'; 			for(j=i+1; j<len; j++)  				stra2[j-i-1]=str1[j]; 				stra2[len-i-1]='\0'; 				break;  		} 	} 	len=strlen(str2); 	for(i=0; i<len; i++) 	{ 		strb1[i]=str2[i]; 		if(i>1 && str2[i]==' ') //i>1表示不考虑前面的空格 		{ 			strb1[i]='\0'; 			for(j=i+1; j<len; j++)  				strb2[j-i-1]=str2[j]; 				strb2[len-i-1]='\0'; 				break;  		} 	}     StringBracket(stra1);     StringBracket(stra2);     StringBracket(strb1);     StringBracket(strb2);     for(i=0; i<10; i++)     {     	if(strcmp(stra1,comp[i])==0)	a1=i;     	if(strcmp(stra2,comp[i])==0)	a2=i;     	if(strcmp(strb1,comp[i])==0)	b1=i;     	if(strcmp(strb2,comp[i])==0)	b2=i;      }      if(a2>=0) a1=a1*10+a2; //a2初始化为-1，>=0表示为两位数      if(b2>=0) b1=b1*10+b2; 	switch(y) 	{ 		case 1: 			return a1+b1;             break; 		case 2:              return a1-b1;             break; 		case 3:              return a1*b1;             break; 		case 4:              return a1/b1;             break;   		case 0:             return a1%b1; 			break; 		default:             printf("    输入错误,请重新输入\n"); 	} }    int main()  {     	int i,j,n=0; 	int y; 	char str[10]; 	printf("|--------------------------------|\n"); 	printf("|         英文算数计算系统       |\n"); 	printf("|                1--加法运算     |\n"); 	printf("|                2--减法运算     |\n"); 	printf("|                3--乘法运算     |\n"); 	printf("|                4--除法运算     |\n"); 	printf("|                0--相除取余运算 |\n"); 	printf("|--------------------------------|\n\n"); 	printf("|你想要进行哪一种运算（0-4）     |\n");          	scanf("%d",&y); 	system("pause"); 	system("cls");    	printf("Please input numbers:\n"); 	while(1) 	{ 		gets(a[n]); 		val[n]=calval(a[n]); 		if(val[n]==0)   			break; 			n++;  		if(n>=N)  			break;  	} 	printf("Output:\n"); 	for(i=0;i<n;i++) 	{ 		if (val[i]>0) 		{ 			itoa(val[i], str, 10);//整数转换为字符串 			printf("%s ",a[i]);//输出原表达式 			for(j=0;j<strlen(str);j++) 			{ 				printf("%s ",comp[str[j]-0x30]); 			} 		} 		printf("\n"); 	}  	return 0; }

user: user-0
content: /* 英文算数计算系统 从键盘输入两个小于100的整数A和B，计算A与B两数的基本算数运算。需要注意的是：A和B的每一位数位上的数字由对应的英文单词给出。 系统要求： （1）系统由菜单做导航，给出输入数据功能、退出程序功能、数据输入功能并能够循环输入执行运算等。 （2）在数据运算输入功能菜单下分别给出A与B的相加运算、A与B的相乘运算、A与B的相减运算、A与B的相除运算、A与B的相除取于运算等功能。 （3）当A输入为zero，同时B输入为zero时自动返回菜单上一级。 输入样例： one + two = three four + five six = zero seven + eight nine = zero + zero = 输出样例： one + two = three three four + five six = nine zero zero seven + eight nine = nine six  */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 30 //定义最大30个测试用例 char a[N][50]; //定义每个测试用例可以有50个字符 char comp[10][6] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; int  val[N];  void StringBracket(char *str)//删除空格 { 	int i,j,len;  	len=strlen(str); 	j=0; 	for(i=0; i<len; i++) 	{ 		if(str[i]!=' ') 		{ 			str[j]=str[i]; 			j=j+1; 		} 	} 	str[j]='\0'; }  char calval(char *str)  //计算每个表达式的值 { 	int i,j,len,y; 	int a1=0,a2=-1,b1=0,b2=-1;//每个表达式最多有4个整数 	char str1[20],str2[20];//分解为两个字符串 	char stra1[10],stra2[10]={0},strb1[10],strb2[10]={0};//每个字符串最多分解为两个子串  	len=strlen(str); 	for(i=0; i<len; i++) 	{ 		str1[i]=str[i]; 		if(str[i]=='+'|| str[i]=='-'|| str[i]=='*'|| str[i]=='/'|| str[i]=='%') 		{ 			str1[i]='\0'; 			for(j=i+1; j<len; j++)  				str2[j-i-1]=str[j]; 				str2[len-i-2]='\0'; 				break;  		} 	}    	len=strlen(str1); 	for(i=0; i<len; i++) 	{ 		stra1[i]=str1[i]; 		if(i>1 && str1[i]==' ') 		{ 			stra1[i]='\0'; 			for(j=i+1; j<len; j++)  				stra2[j-i-1]=str1[j]; 				stra2[len-i-1]='\0'; 				break;  		} 	} 	len=strlen(str2); 	for(i=0; i<len; i++) 	{ 		strb1[i]=str2[i]; 		if(i>1 && str2[i]==' ') //i>1表示不考虑前面的空格 		{ 			strb1[i]='\0'; 			for(j=i+1; j<len; j++)  				strb2[j-i-1]=str2[j]; 				strb2[len-i-1]='\0'; 				break;  		} 	}     StringBracket(stra1);     StringBracket(stra2);     StringBracket(strb1);     StringBracket(strb2);     for(i=0; i<10; i++)     {     	if(strcmp(stra1,comp[i])==0)	a1=i;     	if(strcmp(stra2,comp[i])==0)	a2=i;     	if(strcmp(strb1,comp[i])==0)	b1=i;     	if(strcmp(strb2,comp[i])==0)	b2=i;      }      if(a2>=0) a1=a1*10+a2; //a2初始化为-1，>=0表示为两位数      if(b2>=0) b1=b1*10+b2; 	switch(y) 	{ 		case 1: 			return a1+b1;             break; 		case 2:              return a1-b1;             break; 		case 3:              return a1*b1;             break; 		case 4:              return a1/b1;             break;   		case 0:             return a1%b1; 			break; 		default:             printf("    输入错误,请重新输入\n"); 	} }    int main()  {     	int i,j,n=0; 	int y; 	char str[10]; 	printf("|--------------------------------|\n"); 	printf("|         英文算数计算系统       |\n"); 	printf("|                1--加法运算     |\n"); 	printf("|                2--减法运算     |\n"); 	printf("|                3--乘法运算     |\n"); 	printf("|                4--除法运算     |\n"); 	printf("|                0--相除取余运算 |\n"); 	printf("|--------------------------------|\n\n"); 	printf("|你想要进行哪一种运算（0-4）     |\n");          	scanf("%d",&y); 	system("pause"); 	system("cls");    	printf("Please input numbers:\n"); 	while(1) 	{ 		gets(a[n]); 		val[n]=calval(a[n]); 		if(val[n]==0)   			break; 			n++;  		if(n>=N)  			break;  	} 	printf("Output:\n"); 	for(i=0;i<n;i++) 	{ 		if (val[i]>0) 		{ 			itoa(val[i], str, 10);//整数转换为字符串 			printf("%s ",a[i]);//输出原表达式 			for(j=0;j<strlen(str);j++) 			{ 				printf("%s ",comp[str[j]-0x30]); 			} 		} 		printf("\n"); 	}  	return 0; }