吉大考研复试准备-PTA习题6-7 简单计算器

文章讲述了对代码进行优化,将原来的do-while循环替换为while循环,以解决1=1这类最小表达式导致的问题,确保正确接收两个输入变量并执行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目叙述

1. 修改前代码

无法通过“最小表达式”这个用例,比如输入“1=”会错误。

#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a,b;
    char ch;
    int flag=0;
    int sum=0;
    scanf("%d",&a);///左操作数
    scanf("%c",&ch);///运算符
    scanf("%d",&b);///右操作数

///原来这里写的do-while循环,这种写法会让"1="用例过不去
///所以循环外只能写两个scanf语句
    do
    {


        switch(ch)
        {
            case '+' :sum=a+b;break;
            case '-' :sum=a-b;break;
            case '*' :sum=a*b;break;
            case '/' :
                {
                    if(b==0)
                    {
                        flag=1;
                        break;
                    }
                    else
                    {
                        sum=a/b;
                        break;
                    }
                }
            default :flag=1;break;
        }

        if(flag==1)
        {
            printf("ERROR");
            break;
        }
        a=sum;
        scanf("%c",&ch);

        if(ch!='=')
            scanf("%d",&b);
    }while(ch!='=');
    if(flag==0)
        printf("%d",a);
    return 0;
}

2. 修改后代码

#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a,b;
    char ch;
    int flag=0;
    int sum=0;
    scanf("%d",&a);///左操作数
    scanf("%c",&ch);///运算符

/将这里改成while循环,只接收两个变量就可以避免最短语句过不去情况
    while(ch!='='){
        scanf("%d",&b);///右操作数
        switch(ch)
        {
            case '+' :sum=a+b;break;
            case '-' :sum=a-b;break;
            case '*' :sum=a*b;break;
            case '/' :
                {
                    if(b==0)
                    {
                        flag=1;
                        break;
                    }
                    else
                    {
                        sum=a/b;
                        break;
                    }
                }
            default :flag=1;break;
        }

        if(flag==1)
        {
            printf("ERROR");
            break;
        }
        a=sum;
        scanf("%c",&ch);///操作符

    }
    if(flag==0)
        printf("%d",a);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值