6-1 使用函数输出一个整数的逆序数 (20 分)
本题要求实现一个求整数的逆序数的简单函数。
函数接口定义:
int reverse( int number );
其中函数reverse
须返回用户传入的整型number
的逆序数。
裁判测试程序样例:
#include <stdio.h>
int reverse( int number ); int main() { int n; scanf("%d", &n); printf("%d\n", reverse(n)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
-12340
输出样例:
-4321
下面是代码实现:
#include <stdio.h>
int reverse( int number ); int main() { int n; scanf("%d", &n); printf("%d\n", reverse(n)); return 0; } /* 你的代码将被嵌在这里 */
int reverse( int number ) { int temp, x, i; temp = 0; do{ x = (temp * 10) + (number % 10); temp = x; number /= 10; }while(number != 0); return x; }
7-1 逆序的三位数 (10 分)
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
解题思路:这题和上一题一样,不过多了一个输入正数的条件,对输入值n添加判断即可
scanf("%d", &n); if(n < 0) { return 0; }
7-2 查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在屏幕上显示以下菜单:
[1] apple [2] pear [3] orange [4] grape [0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
输入格式:
输入在一行中给出用户连续输入的若干个编号。
输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。
输入样例1:
3 -1 0 2
输出样例1:
[1] apple [2] pear [3] orange [4] grape [0] exit price = 4.10 price = 0.00
输入样例2:
1 2 3 3 4 4 5 6 7 8
输出样例2:
[1] apple [2] pear [3] orange [4] grape [0] exit price = 3.00 price = 2.50 price = 4.10 price = 4.10 price = 10.20
解题思路:根据题目要求用float数组存放水果价格,再通过for循环进行数值判断输出水果价格,需要注意 price[v[i]] 这句是先获取v下标对应的水果序号,然后再通过该序号获取price的价格
#include <stdio.h>
void show_info(); void show_price(float price[], int v[]); int main() { show_info(); float price[5] = {0.00, 3.00, 2.50, 4.10, 10.20}; int v[5]; for(int i=0; i<5; i++) { scanf("%d", &v[i]); if(getchar() == '\n') { break; } } show_price(price, v); return 0; } void show_price(float price[], int v[]) { for(int i=0; i<5; i++) { if(v[i] >= 1 && v[i] <= 4) { printf("price = %.2f\n", price[v[i]]); continue; } else if(v[i] == 0) { break; } printf("price = %.2f\n", price[0]); } } void show_info() { printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n"); }
7-3 简单计算器 (20 分)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例:
1+2*10-10/2=
输出样例:
10
#include <stdio.h> #include <stdlib.h> #include <string.h>
int func(char *n) { int i; for(i=0; *(n+i)!='='; i++) { if( !((n[i] >= '0' && n[i] <= '9') || n[i] == '.') ) { break; } } return i; } int calulator(char *n) { char temp[20]; int x = 0; int y = 0; x = func(n); y = atoi(strncpy(temp, n, x)); do{ n += ++x; char temp[20] = ""; switch((n-1)[0]) { case '+': x = func(n); y += atoi(strncpy(temp, n, x)); break; case '-': x = func(n); y -= atoi(strncpy(temp, n, x)); break; case '*': x = func(n); y *= atoi(strncpy(temp, n, x)); break; case '/': if(n[0] == '0') { printf("ERROR\n"); exit(0); } x = func(n); y /= atoi(strncpy(temp, n, x)); break; case '=': return y; break; default: printf("ERROR\n"); exit(0); } }while(1); } int main() { char s[100]; gets(s); fflush(stdin); printf("%d\n", calulator(s)); return 0; }
7-4 英文字母替换加密(大小写转换+后移1位) (15 分)
本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。
输入格式:
输入一行字符,以回车符 '\n'作为 结束符。
输出格式:
将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。
输入样例:
在这里给出一组输入。例如:
Reold Z123?
输出样例:
在这里给出相应的输出。例如:
sFPME a123?
#include <stdio.h> #include <string.h>
int main() { char s[100]; gets(s); fflush(stdin); for(int i=0; i<strlen(s); i++) { if(s[i] >= 'a' && s[i] <= 'y') { s[i] -= 31; } else if(s[i] == 'z') { s[i] -= 57; } else if(s[i] >= 'A' && s[i] <= 'Y') { s[i] += 33; } else if(s[i] == 'Z') { s[i] += 7; } } printf("%s", s); return 0; }
7-5 单词首字母大写 (15 分)
本题目要求编写程序,输入一行字符,将每个单词的首字母改为大写后输出。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出已输入的字符,其中所有单词的首字母已改为大写。
输入样例:
How are you?
输出样例:
How Are You?
解题思路:据题意设置标记变量,循环判断首字母大写状态
#include <stdio.h> #include <string.h>
int main() { char s[100]; int flag = 1; gets(s); fflush(stdin); for(int i=0; i<strlen(s); i++) { if(s[i] >= 'a' && s[i] <= 'z' && flag) { s[i] -= 32; flag = 0; } if(s[i] >= 'A' && s[i] <= 'Z' && flag) { flag = 0; } else if(s[i] == ' ') { flag = 1; } } printf("%s", s); return 0; }