1. 程式人生 > >PAT|中國大學MOOC-翁愷-C語言程式設計習題集21-24

PAT|中國大學MOOC-翁愷-C語言程式設計習題集21-24

06-1. 簡單計算器(20)

模擬簡單運算器的工作。假設計算器只能進行加減乘除運算,運算數和結果都是整數,4種運算子的優先順序相同,按從左到右的順序計算。

輸入格式:

輸入在一行中給出一個四則運算算式,沒有空格,且至少有一個運算元。遇等號”=”說明輸入結束。

輸出格式:

在一行中輸出算式的運算結果,或者如果除法分母為0或有非法運算子,則輸出錯誤資訊“ERROR”。

輸入樣例:
1+2*10-10/2=
輸出樣例:
10

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int
len, i, j, a, sum, n,begin,flag; char sign[200]; float num[200]; char str[400]; gets(str); len=strlen(str); n = 0; begin = 0; flag = 0; for (i = 0; i < len; i++) { if (str[i] >= 48 && str[i] <= 57 || str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' || str[i] == '=')//如果字元是‘0’-‘9’‘+’‘-’‘*’‘/’‘=’則合法
{ if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' || str[i] == '=')//當遇到加減乘除的時候,計算出每一位的數字 { sum = 0; for (j = begin; j < i; j++) { a = (str[j] - '0')*pow(10.0, i - 1 -j); sum = sum + a; } num[n] = sum;//記錄數字 sign[n] = str[i];//記錄符號 begin = i + 1; n++; } } else//否則不合法,提示出錯 { printf("ERROR"
); flag = 1; break; } } if (flag == 0)//當全部字符合法,則進行計算 { for (i = 0; i <= n-1 ; i++)//將所有數字提出來計算,將計算好的數字放在下一位,方便後來的計算,最後一位則為結果 { if (sign[i] == '+') { num[i + 1] = num[i] + num[i + 1]; } else if (sign[i] == '-') { num[i + 1] = num[i] - num[i + 1]; } else if (sign[i] == '*') { num[i + 1] = num[i] * num[i + 1]; } else if (sign[i] == '/') { if (num[i + 1] == 0)//當被除數為0,提示錯誤 { printf("ERROR"); break; } num[i + 1] = num[i] / num[i + 1]; } else if (sign[i] == '=')//當看到‘=’算出結果 { printf("%.0f", num[i]); } } } return 0; }

06-2. 字串字母大小寫轉換(10)
輸入一個以#結束的字串,本題要求將小寫字母全部轉換成大寫字母,把大寫字母全部轉換成小寫字母,其它字元不變。

輸入格式:

輸入在一行中給出一個長度不超過40的、以#結束的非空字串。

輸出格式:

在一行中按照要求輸出轉換後的字串。

輸入樣例:
Hello World! 123#
輸出樣例:
hELLO wORLD! 123

#include <stdio.h>
#include <string.h>
int main()
{
    char str[1000];
    int len, i;
    gets(str);
    len = strlen(str);
    for (i = 0; i <= len - 2; i++)
    {
        if (str[i] >= 65 && str[i] <= 90)
        {
            str[i] = str[i] + 32;
        }
        else if (str[i]>=97&& str[i]<=122)
        {
            str[i] = str[i] - 32;
        }
    }
    for (i = 0; i <= len - 2; i++)
    {
        printf("%c", str[i]);
    }
    return 0;
}

06-3. 單詞長度(15)

你的程式要讀入一行文字,其中以空格分隔為若干個單詞,以‘.’結束。你要輸出每個單詞的長度。這裡的單詞與語言無關,可以包括各種符號,比如“it’s”算一個單詞,長度為4。注意,行中可能出現連續的空格;最後的‘.’不計算在內。

輸入格式:

輸入在一行中給出一行文字,以‘.’結束。

提示:用scanf(“%c”,…);來讀入一個字元,直到讀到‘.’為止。

輸出格式:

在一行中輸出這行文字對應的單詞的長度,每個長度之間以空格隔開,行末沒有最後的空格。

輸入樣例:

It’s great to see you here.
輸出樣例:

4 5 2 3 3 4

#include <stdio.h>
#include <string.h>
int main()
{
    char str[100];
    int count, i,len,n,m;
    int num[100];
    int num1[100];
    n = 0;
    count = 0;
    m = 0;
    gets(str);
    len=strlen(str);
    for (i = 0; i <= len - 1; i++)
    {
        if (str[i] == ' ' || str[i] == '.')
        {
            num[n] = count;
            count = 0;
            n++;
        }
        else
        {
            count++;
        }
    }
    for (i = 0; i <= n - 1; i++)
    {
        if (num[i] != 0)
        {
            num1[m] = num[i];
            m++;
        }

    }
    for (i = 0; i <= m - 1; i++)
    {
        if (i < m - 1)
        {
            printf("%d ", num1[i]);
        }
        else
        {
            printf("%d", num1[i]);
        }
    }
    return 0;
}

07-0. 寫出這個數 (20)

讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。

輸出格式:在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後一個拼音數字後沒有空格。

輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu

#include <stdio.h>
#include <string.h>
#include <math.h>
int readnumber(int x);
int main()
{
    char str[1000000];
    int num,len,sum,i;
    sum = 0;
    gets(str);
    len = strlen(str);
    for (i = 0; i <= len - 1; i++)
    {
        num= str[i] - 48;
        sum = sum + num;
    }
    readnumber(sum);
}
int readnumber(int x)
{
    int n, num, len, i, j, a, b;
    int m[10];
    num = x;
    n = 1;
    if (num > 0)
    {
        for (i = 0; i <= 9; i++)
        {
            if (num >= pow(10.0, i) && num <= pow(10.0, i + 1) - 1)
            {
                len = i + 1;
                break;
            }
        }
        m[0] = num / pow(10.0, len - 1);
        for (i = len - 1; i >= 1; i--)
        {
            a = num % (int)pow(10.0, i) / (int)pow(10.0, i - 1);
            m[n] = a;
            n++;
        }
        for (j = 0; j <= n - 1; j++)
        {
            b = m[j];
            if (j < n - 1)
            {
                switch (b)
                {
                case 0:printf("ling "); break;
                case 1:printf("yi "); break;
                case 2:printf("er "); break;
                case 3:printf("san "); break;
                case 4:printf("si "); break;
                case 5:printf("wu "); break;
                case 6:printf("liu "); break;
                case 7:printf("qi "); break;
                case 8:printf("ba "); break;
                case 9:printf("jiu "); break;
                }
            }
            else
            {
                switch (b)
                {
                case 0:printf("ling"); break;
                case 1:printf("yi"); break;
                case 2:printf("er"); break;
                case 3:printf("san"); break;
                case 4:printf("si"); break;
                case 5:printf("wu"); break;
                case 6:printf("liu"); break;
                case 7:printf("qi"); break;
                case 8:printf("ba"); break;
                case 9:printf("jiu"); break;
                }
            }
        }

    }
    else if (num == 0)
    {
        printf("ling");
    }
    else
    {
        num = -num;
        for (i = 0; i <= 9; i++)
        {
            if (num >= pow(10.0, i) && num <= pow(10.0, i + 1) - 1)
            {
                len = i + 1;
                break;
            }
        }
        m[0] = num / pow(10.0, len - 1);
        for (i = len - 1; i >= 1; i--)
        {
            a = num % (int)pow(10.0, i) / (int)pow(10.0, i - 1);
            m[n] = a;
            n++;
        }
        printf("fu ");
        for (j = 0; j <= n - 1; j++)
        {
            b = m[j];
            if (j < n - 1)
            {
                switch (b)
                {
                case 0:printf("ling "); break;
                case 1:printf("yi "); break;
                case 2:printf("er "); break;
                case 3:printf("san "); break;
                case 4:printf("si "); break;
                case 5:printf("wu "); break;
                case 6:printf("liu "); break;
                case 7:printf("qi "); break;
                case 8:printf("ba "); break;
                case 9:printf("jiu "); break;
                }
            }
            else
            {
                switch (b)
                {
                case 0:printf("ling"); break;
                case 1:printf("yi"); break;
                case 2:printf("er"); break;
                case 3:printf("san"); break;
                case 4:printf("si"); break;
                case 5:printf("wu"); break;
                case 6:printf("liu"); break;
                case 7:printf("qi"); break;
                case 8:printf("ba"); break;
                case 9:printf("jiu"); break;
                }
            }
        }
    }
    return 0;
}