zoukankan      html  css  js  c++  java
  • PTA C语言作业

    6-1 使用函数输出一个整数的逆序数 (20 分)

     

    本题要求实现一个求整数的逆序数的简单函数。

    函数接口定义:

    int reverse( int number ); 

    其中函数reverse须返回用户传入的整型number的逆序数。

    裁判测试程序样例:

    #include <stdio.h>
    
    int reverse( int number );
    
    int main()
    {
        int n;
    
        scanf("%d", &n);
        printf("%d
    ", reverse(n));
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
     

     

    输入样例:

    -12340
     
    结尾无空行

    输出样例:

    -4321
     
    结尾无空行
     
    解题思路: 循环取余获得 余数 + temp值,temp变量用来保存x变量的值,number/10 一直到0循环即结束

    下面是代码实现:

    #include <stdio.h>
    
    int reverse( int number );
    
    
    int main()
    {
        int n;
    
        scanf("%d", &n);
        printf("%d
    ", reverse(n));
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    int reverse( int number )
    {
        int temp, x, i;
        temp = 0;
        do{
            x = (temp * 10) + (number % 10);
            temp = x;
            number /= 10;
        }while(number != 0);
        return x;
    }

     

     

    7-1 逆序的三位数 (10 分)

     

    程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

    输入格式:

    每个测试是一个3位的正整数。

    输出格式:

    输出按位逆序的数。

    输入样例:

    123
     
    结尾无空行

    输出样例:

    321
     
    结尾无空行

     

    解题思路:这题和上一题一样,不过多了一个输入正数的条件,对输入值n添加判断即可

        scanf("%d", &n);
        if(n < 0)
        {
            return 0;
        }

     

     

    7-2 查询水果价格 (15 分)

     

    给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

    首先在屏幕上显示以下菜单:

    [1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
     

    用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

    输入格式:

    输入在一行中给出用户连续输入的若干个编号。

    输出格式:

    首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

    输入样例1:

    3 -1 0 2
     
    结尾无空行

    输出样例1:

    [1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    price = 4.10
    price = 0.00
     
    结尾无空行

    输入样例2:

    1 2 3 3 4 4 5 6 7 8
     

    输出样例2:

    [1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    price = 3.00
    price = 2.50
    price = 4.10
    price = 4.10
    price = 10.20

    解题思路:根据题目要求用float数组存放水果价格,再通过for循环进行数值判断输出水果价格,需要注意 price[v[i]] 这句是先获取v下标对应的水果序号,然后再通过该序号获取price的价格

    #include <stdio.h>
    
    
    void show_info();
    void show_price(float price[], int v[]);
    
    
    int main()
    {
        show_info();
        
        float price[5] = {0.00, 3.00, 2.50, 4.10, 10.20};
        int v[5];
        
        for(int i=0; i<5; i++)
        {
            scanf("%d", &v[i]);
            if(getchar() == '
    ')
            {
                break;
            }
            
        }
        show_price(price, v);
    
        return 0;
    }
    
    
    void show_price(float price[], int v[])
    {
        for(int i=0; i<5; i++)
        {
            if(v[i] >= 1 && v[i] <= 4)
            {
                printf("price = %.2f
    ", price[v[i]]);
                continue;
            }
            else if(v[i] == 0)
            {
                break;
            }
            printf("price = %.2f
    ", price[0]);
            
        }
    }
    
    
    void show_info()
    {
        printf("[1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    ");
    }

     

     

    7-3 简单计算器 (20 分)

     

    模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

    输入格式:

    输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

    输出格式:

    在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

    输入样例:

    1+2*10-10/2=
     
    结尾无空行

    输出样例:

    10
     
    结尾无空行
    解题思路:字符串存放计算内容,先判断一组数字,遇到运算符结束并返回下标,再通过循环里switch分支计算数值
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int func(char *n)
    {
        int i;
        
        for(i=0; *(n+i)!='='; i++)
        {
            if( !((n[i] >= '0' && n[i] <= '9') || n[i] == '.') )
            {
                break;
            }
        }
        
        return i;
    }
    
    int calulator(char *n)
    {
        char temp[20];
        int x = 0;
        int y = 0;
        
        x = func(n);
        y = atoi(strncpy(temp, n, x));
    
        do{
            n += ++x;
            char temp[20] = "";
            switch((n-1)[0])
            {
                case '+':
                    x = func(n);
                    y += atoi(strncpy(temp, n, x));
                    break;
                case '-':
                    x = func(n);
                    y -= atoi(strncpy(temp, n, x));
                    break;
                case '*':
                    x = func(n);
                    y *= atoi(strncpy(temp, n, x));
                    break;
                case '/':
                    if(n[0] == '0')
                    {
                        printf("ERROR
    ");
                        exit(0);
                    }
                    x = func(n);
                    y /= atoi(strncpy(temp, n, x));
                    break;
                case '=':
                    return y;
                    break;
                default:
                    printf("ERROR
    ");
                    exit(0);
            }
        }while(1);
    }
    
    
    int main()
    {
        char s[100];
        gets(s);
        fflush(stdin);
         
        printf("%d
    ", calulator(s));
        
        return 0;
    }
     

    7-4 英文字母替换加密(大小写转换+后移1位) (15 分)

     

    本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。

    输入格式:

    输入一行字符,以回车符 ' '作为 结束符。

    输出格式:

    将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。

    输入样例:

    在这里给出一组输入。例如:

    Reold  Z123?
    
     

    输出样例:

    在这里给出相应的输出。例如:

    sFPME  a123?
     
    结尾无空行
    解题思路:据题意将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。
         根据ASCII表循环替换 大转小写+33,小转大写-31,注意‘z’ -57 而 ‘Z’+7
    #include <stdio.h>
    #include <string.h>
    
    
    int main()
    {
        char s[100];
        gets(s);
        fflush(stdin);
         
        for(int i=0; i<strlen(s); i++)
        {
            if(s[i] >= 'a' && s[i] <= 'y')
            {
                s[i] -= 31;
            }
            else if(s[i] == 'z')
            {
                s[i] -= 57;
            }
            else if(s[i] >= 'A' && s[i] <= 'Y')
            {
                s[i] += 33;
            }
            else if(s[i] == 'Z')
            {
                s[i] += 7;
            }
        } 
        printf("%s", s);
        
        return 0;
    }

     

    7-5 单词首字母大写 (15 分)

     

    本题目要求编写程序,输入一行字符,将每个单词的首字母改为大写后输出。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

    输入格式:

    输入给出一行字符。

    输出格式:

    在一行中输出已输入的字符,其中所有单词的首字母已改为大写。

    输入样例:

    How are you?
     
    结尾无空行

    输出样例:

    How Are You?
     
    结尾无空行

    解题思路:据题意设置标记变量,循环判断首字母大写状态

    #include <stdio.h>
    #include <string.h>
    
    
    int main()
    {
        char s[100];
        int flag = 1;
        gets(s);
        fflush(stdin);
         
        for(int i=0; i<strlen(s); i++)
        {
            if(s[i] >= 'a' && s[i] <= 'z' && flag)
            {
                s[i] -= 32;
                flag = 0;
            }
            if(s[i] >= 'A' && s[i] <= 'Z' && flag)
            {
                flag = 0;
            }
            else if(s[i] == ' ')
            {
                flag = 1;
            }
        } 
        printf("%s", s);
        
        return 0;
    }
  • 相关阅读:
    解决MyBatis的Mapper XML错误,系统起不来,也不报错问题
    tomcat启动卡在“INFO com.alibaba.druid.pool.DruidDataSource
    加速github访问速度
    LAN、WAN和WLAN的区别
    面试记录一
    C++纯虚函数(接口类)的使用
    CentOS 安装 Docker CE
    通过 plsql 连接远程 Oracle
    Yum 软件仓库配置
    qW3xT.2,解决挖矿病毒
  • 原文地址:https://www.cnblogs.com/1314h/p/15363993.html
Copyright © 2011-2022 走看看