您的位置:首页 > 编程语言 > C语言/C++

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

2015-02-05 19:53 501 查看
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
= 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
= 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 pat