一道c语言编程题,求教

26 二年级小学生的题目
成绩: 10 / 折扣: 0.8
两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。

输入:
用逗号分隔的不超过两位的正整数序列,及其运算符和等号

输出:
最大数 op 最小数=结果
例:
输入:1,2,3,4,5,+,=
输出:5+1=6

思路分析:首先建立一个缓冲数组,由于题目要求输入的数据个数不超过两位,所以,数据的位数设为100即可,即BUF[100]; 当检测到输入,(+,-,*,/)的时候,停止输入,并将前面的树,用求最大最小的算法(查找法)找出其最大值和最小值(这个算法也可以在输入的时候同时操作!),当输入“=”的时候,调用根据前面的输入的符合并进行相应的运算,打印出结果即可。

高级:上述程序完成,可以考虑,在数据数据加入些判断,如果输入错误可以输出些异常。

good luck.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-12
#define NULL 0
swap(char *b,char *max,char *min)
{
int i;
char j;

for(i=1;b[i]!='\0';i++)
{
if(*min>b[i])
{
j=*min;
*min=b[i];
b[i]=j;
}
if(*max<b[i])
{
j=*max;
*max=b[i];
b[i]=*max;
}
}
}
main()
{
char *a=NULL;
char sign=NULL; /*利用指针形式定义数组a存放输入数据,sign存放运算符*/
char m=NULL,max=NULL,min=NULL,*b=NULL; /*同理定义出数组b存放非符号数据*/
int i=0,j=0;
printf("请先输入正整数序列再输入运算符:\n");
while(1)
{
scanf("%c",&a[i]);
if(a[i]!=',') /*排除 ,符号*/
{
switch(a[i])
{
case '+':sign=a[i];break;
case '-':sign=a[i];break;
case '*':sign=a[i];break;
case '/':sign=a[i];break;
case '%':sign=a[i];break;
}
if(a[i]==sign) break;
/* 在这里我要感谢201007031324是他的回答给了我灵感
让我想到将字符型数字减'0'后可以得到
将ASCII运算转变为阿拉伯数字运算的数字字符
再将这些字符(ASCII值为阿拉伯数字的字符)赋值给字符型数组b
*/
b[j++]=a[i]-'0';
}
i++;
}
b[j]='\0';
max=min=b[0];
swap(b,&max,&min); /*调用函数swap找到最大值和最小值*/
switch(sign)
{
case '+':m=max+min;break;
case '-':m=max-min;break;
case '*':m=max*min;break;
case '/':m=max/min;break;
case '%':m=max%min;break;
default:printf("符号输入错误!\n");
}
if(min<=0) printf("由于min非正整数所以除或求模会出错\n");
/*使用%d的目的是为了将字符(ASCII值为阿拉伯数字的字符)隐含转换为ASCII值*/
printf("%d %c %d = %d\n",max,sign,min,m);
getch();
}

/*
联想:
这让我联想到了数学里的数形结合,
由于坐标的出现才有了将数字转换图形的解题方法。

反思:
本程序表面上是使用字符实际上采用ASCII为0~9的数值运算,
再将字符转为ASCII值。实现了字符运算转为数字运算。

不足之处:
没有使用数据结构进行简化代码。
有兴趣的可以采用数据结构书写代码。
*/
第2个回答  2012-04-13
#include<stdio.h>
void main()
{
int a[10]={1};
int min,max;
int i;
char c;
char op;
printf("请输入一堆不超过两位的正整数和运算要求(+、-、*、/、%%):\n");
do
{
c=getchar();
if(c<='9' && c>='0')
a[c-'0']=c-'0';
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='%')
op=c;
}while(getchar()!='\n');
//寻找最大数和最小数
for(i=0;i<=9;i++)
if(a[i]==i)
{
min=a[i];
break;
}
for(i=9;i>=0;i--)
if(a[i]==i)
{
max=a[i];
break;
}
switch(op)
{
case '+':printf("%d+%d=%d\n",max,min,max+min);break;
case '-':printf("%d-%d=%d\n",max,min,max-min);break;
case '*':printf("%d*%d=%d\n",max,min,max*min);break;
case '/':printf("%d/%d=%g\n",max,min,(float)max/min);break;
case '%':printf("%d%%%d=%d\n",max,min,max%min);break;
}
}
//程序我已经调试好了,VC++6.0可运行,你试试!不懂的可追问哦!本回答被提问者采纳
第3个回答  2018-06-26
关于C语言的编程题。嵌套循环题请把实际的题贴出来,才好帮助解决根本问题本回答被网友采纳
相似回答