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

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

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