mapleplus 2023-03-02 20:53 采纳率: 87.5%
浏览 137
已结题

c语言算法解决输入输出控制

编写程序,最多可读入5个数,它们依次是:字符,无符号短整数,整数,单精度浮点数和双精度浮点数,值均在它们的许可范围内,但数据间的分隔符可能有:空格,分号,逗号,换行符等等,然后,在第一行输出成功读取到的数的数量(正确读取到多少个数),第二行依次输出上述五个数(逗号分隔,浮点数均保留三位小数),第三行输出在上行的输出中共占用多少个字符位置。第四行输出前述读入五个变量占用的字节数。
输入格式:最多五个数,它们依次是:字符,无符号短整数,整数,单精度浮点数和双精度浮点数,值均在它们的许可范围内,但数据间的分隔符可能有:空格,分号,逗号,换行符等等,你可以假设,若数据数量不够读取,缺少的一般是后边的几个。
输出格式:第一行输出成功读取到的数的数量(正确读取到多少个数)。第二行依次输出上述五个数(逗号分隔,浮点数均保留三位小数)。第三行输出在上一行的输出中共占用多少个字符位置。第四行输出前述读入五个变量占用的字节数。
输入样例:a,34567;-3999993.1415926
输出样例:本例中成功读入四个数据,第二行输出占27个字符宽度。字符占1个字节,无符号短整数占2个字节,两种浮点数均占8个字节(PTA使用的系统),共19个字节。

4
a,34567,-399999,3.142,0.000
27
19
  • 写回答

10条回答 默认 最新

  • 「已注销」 2023-03-02 22:12
    关注

    参考GPT和自己的思路,以下是用C语言编写的算法解决输入输出控制的代码实现:

    #include <stdio.h>
    
    int main()
    {
        char c;
        unsigned short us;
        int i;
        float f;
        double d;
        int num = 0;
        int char_num, us_num, i_num, f_num, d_num;
        char separators[] = " ,;\n"; // 可能的分隔符
    
        // 读入数据
        while (scanf("%c", &c) == 1 && num < 5) {
            if (c == '\n') {
                break;
            }
            if (scanf("%hu%c%d%c%f%c%lf", &us, &c, &i, &c, &f, &c, &d) == 7) {
                num++;
            } else {
                break;
            }
        }
    
        // 计算字符数和字节数
        char_num = 1 + (num > 1) + (num > 2) + (num > 3) + (num > 4);
        us_num = (num > 1) ? sizeof(us) : 0;
        i_num = (num > 2) ? sizeof(i) : 0;
        f_num = (num > 3) ? sizeof(f) : 0;
        d_num = (num > 4) ? sizeof(d) : 0;
    
        // 输出结果
        printf("%d\n", num);
        if (num > 0) {
            printf("%c", c);
        }
        if (num > 1) {
            printf(",%hu", us);
        }
        if (num > 2) {
            printf(",%d", i);
        }
        if (num > 3) {
            printf(",%.3f", f);
        }
        if (num > 4) {
            printf(",%.3lf", d);
        }
        printf("\n%d\n", char_num + us_num + i_num + f_num + d_num);
        printf("%d", char_num + us_num + i_num + f_num + d_num);
    
        return 0;
    }
    
    
    

    算法思路:

    定义变量c、us、i、f和d,分别表示字符、无符号短整数、整数、单精度浮点数和双精度浮点数。
    定义变量num,表示成功读取到的数的数量,初始化为0。
    定义变量char_num、us_num、i_num、f_num和d_num,分别表示字符、无符号短整数、整数、单精度浮点数和双精度浮点数在输出结果中占用的字符数和字节数,初始化为0。
    使用scanf函数循环读入数据,每次读入一个字符,如果字符是换行符,则结束循环;否则,使用scanf函数尝试读入5个数据,如果成功读入5个数据,则num加1;否则,结束循环。
    根据num的值计算char_num、us_num、i_num、f_num和d_num。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月9日
  • 已采纳回答 3月9日
  • 创建了问题 3月2日