PAT|中国大学MOOC-翁恺-C语言程序设计习题集17-20

来源:互联网 发布:iphone同步软件2017 编辑:程序博客网 时间:2024/05/20 21:23

05-1. 约分最简分式(15)

分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。

输入格式:

输入在一行中给出一个分数,分子和分母中间以斜杠“/”分隔,如: 12/34 表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。

提示:在scanf的格式字符串中加入“/”,让scanf来处理这个斜杠。

输出格式:

在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用“分子/分母”的形式表示分数。如 5/6表示6分之5。

输入样例:
60/120
输出样例:
1/2

#include <stdio.h>int main(){    int num1, num2, t, s, mod,r;    scanf("%d/%d", &num1, &num2);    s = num1;    r = num2;    if (num1 < num2)    {        t = num1;        num1 = num2;        num2 = t;    }    while (num1%num2!=0)               {        mod = num1%num2;        num1 = num2;                      num2 = mod;    }    s = s / num2;    r = r / num2;    printf("%d/%d", s, r);    return 0;}

05-2. 念数字(15)

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:

输入在一行中给出一个整数,如: 1234 。

提示:整数包括负数、零和正数。

输出格式:

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。

输入样例:
-600
输出样例:
fu liu ling ling

#include <stdio.h>#include <math.h>int main(){    int n, num, len, i, j,a,b;    int m[10];    scanf("%d", &num);    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;}

05-3. 求a的连续和(15)

输入两个整数a和n,a的范围是[0,9],n的范围是[1,8],求数列之和S = a+aa+aaa+…+aaa…a(n个a)。 如a为2、n为8时输出的是2+22+222+…+22222222的和。

输入格式:

输入在一行中给出两个整数,先后表示a和n。

输出格式:

在一行中输出要求的数列之和。

输入样例:
2 4
输出样例:
2468

#include <stdio.h>#include <math.h>int main(){    int num1, num2, i, k, a, sum1, sum2;    sum2 = 0;    scanf("%d%d", &num1, &num2);    for (k = 1; k <= num2; k++)    {        sum1 = 0;        for (i = 0; i <= k-1; i++)        {            a = num1 * pow(10.0, i);            sum1 = sum1 + a;        }        sum2 = sum2 + sum1;    }    printf("%d", sum2);    return 0;}

06-0. 混合类型数据格式化输入(5)

本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

输入格式:

输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

输出格式:

在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

输入样例:
2.12 88 c 4.7
输出样例:
c 88 2.12 4.70

#include <stdio.h>int main(){    float a, d;    char c;    int b;    scanf("%f%d %c%f",&a,&b,&c,&d);    printf("%c %d %.2f %.2f",c, b, a, d);    return 0;}
0 0
原创粉丝点击