C基础经典问题

  • switch实现简单计算器功能

写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),

计算表达式data1 op data2 的值.其中op可以为+、-、*、/四个符号中的任一种

(用switch语句实现)

  • 思路一:使用scanf输入数字和字符,使用单引号‘’进行接收,使之转化为ascII码并且输出。

#include<stdio.h>
int main()
{
    int a,b;
    char op;
    scanf("%d %c %d",&a,&op,&b);
    switch (op)
    {
    case '+':printf("%d\n",a+b);break;
    case '-':printf("%d\n",a+b);break;
    case '*':printf("%d\n",a+b);break;
    case '/':printf("%d\n",a+b);break;
    default:printf("请重新输入\n");
        break;
    }
    return 0;
}

输出结果:

  • 思路二: 将case的常量换成“+-*/”的ascII码,美化一下输出,改成如下结构。

#include<stdio.h>
int main()
{
    int a,b;
    char op;
    scanf("%d %c %d",&a,&op,&b);

    switch (op)
    {
    case 43:printf("%d + %d = %d\n",a,b,a+b);break;
    case 45:printf("%d - %d = %d\n",a,b,a-b);break;
    case 42:printf("%d * %d = %d\n",a,b,a*b);break;
    case 47:printf("%d / %d = %d\n",a,b,a/b);break;
    default:printf("请重新输入\n");
        break;
    }
    return 0;
}

输出结果:

  • 思路三:使用getchar用来接收相应的数据

#include<stdio.h>
int main()
{
    int a,b;
    char op;
    scanf("%d",&a);
    op = getchar();
    scanf("%d",&b);
 
    switch (op)
    {
    case 43:printf("%d + %d = %d\n",a,b,a+b);break;
    case 45:printf("%d - %d = %d\n",a,b,a-b);break;
    case 42:printf("%d * %d = %d\n",a,b,a*b);break;
    case 47:printf("%d / %d = %d\n",a,b,a/b);break;
    default:printf("请重新输入\n");
        break;
    }
    return 0;
}

本代码由于使用了getchar,要注意垃圾字符污染缓冲区,若像上图输入的方法,则会出现如下结果:

本结果是因为getchar获取了空格键,并且输出了空格的asc值,故使用getchar时要特别注意此种情况。

正确输出的结果:

  • 从终端输入三个整数,并从大到小排序

  • 思路一:终极摆烂做法之,无敌if嵌套

#include<stdio.h>
int main()
{
    int a,b,c;
    printf("请输入需要排序的数:");
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)
    {
        if (a>c)
        {
            if (b>c)
            {
                printf("%d %d %d\n",a,b,c);
            }
            else
            {
                printf("%d %d %d\n",a,c,b);
            }   
        }
        else
        {
           printf("%d %d %d\n",c,a,b);
        }
    }
    else
    {
        if (a>c)
        {
            printf("%d %d %d\n",b,a,c);
        }
        else
        {
            if(b>c)
            {
                printf("%d %d %d\n",b,c,a);
            }
            else
            {
                printf("%d %d %d\n",c,b,a);
            }
            
        }
        
        
    }
    
       
    return 0;
}

输出结果如下:

将输入的三个数,分别比较,分别罗列可能出现的情况,要注意每个if之间的逻辑关系。

  • 思路二,引入第四个“变量”,作为这3个数的中间存储空间进行转换

#include<stdio.h>
int main()
{
    int a,b,c,temp;      //temp作为中间值
    printf("请分别输入a,b,c的值:\n");
    scanf("%d%d%d",&a,&b,&c);
    if(a < b)
    {
        temp = a;      //先把a赋值给temp 这样才能实现转换
        a = b;         //若没有temp这个变量,把a赋值给b,那么b=a,如果再把b赋值给a,
                       //那么a依旧是原本的a,依旧<b,达不到咱们转换的效果。
        b = temp;      //最后把temp的值赋给b  达到 a与b两个值互换的结果
    }
    if(a < c)
    {
        temp = a;
        a = c;
        c = temp;
    }
    if(b < c)
    {
        temp = b;
        b = c;
        c = temp;
    }
 
    printf("%d,%d,%d\n",a,b,c);
    return 0;
 
}

使用中间值的方法,将较大的数换出来挨个比较,达到找出最大值的效果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值