文章目录
- 1.简单计算器
- 2.获得月份天数
- 3.HTTP状态码
- 4. 图像相似度
- 5.有序序列插入一个数
1.简单计算器
题目描述:
KK实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalidoperation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”
输入描述:
多组输入,一行,操作数1运算符操作数2(其中运算符号包括四种:+、-、*、/)。
输出描述:
针对每组输入,输出为一行。如果操作数和运算符号均合法,则输出一个表达式,操作数1运算符操作数2=运算结果,各数小数点后均保留4位,数和符号之间没有空格。如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”。
输入:
1.0+3.0
1.0;4.0
44.0/0.0
输出:
1.0000+3.0000=4.0000
Invalid operation!
Wrong!Division by zero!
参考代码:
#include <stdio.h>
int main()
{
double x1 = 0;
double x2 = 0;
char ch = 0;
while (scanf("%lf%c%lf", &x1, &ch, &x2) != EOF)
{
switch (ch)
{
case '+':
printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1+x2);
break;
case '-':
printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1- x2);
break;
case '*':
printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1 * x2);
break;
case '/':
if (x2 == 0.0)
{
printf("Wrong!Division by zero!\n");
break;
}
printf("%.4lf%c%.4lf=%.4lf\n", x1, ch, x2, x1 / x2);
break;
default:
printf("Invalid operation!\n");
break;
}
}
return 0;
}
2.获得月份天数
题目描述:
KK想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
输入:
2008 2
输出:
29
参考代码:
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31};
while (scanf("%d %d", &year, &month) != EOF)
{
int day = days[month - 1];
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
if (month == 2)
{
day += 1;
}
}
printf("%d\n", day);
}
return 0;
}
3.HTTP状态码
题目描述:
KK访问网站,得到HTTP状态码,但他不知道什么含义,BoBo老师告诉他常见HTTP状态码:
200(OK,请求已成功),202(Accepted,服务器已接受请求,但尚未处理。)400(Bad
Request,请求参数有误),403(Forbidden,被禁止),404(Not Found,请求失败),
500(Internal Server Error,服务器内部错误),502(Bad Gateway,错误网关)。
输入描述:
多组输入,一行,一个整数(100~600),表示HTTP状态码。
输出描述:
针对每组输入的HTTP状态,输出该状态码对应的含义,具体对应如下:
200-OK
202-Accepted
400-Bad Request
403-Forbidden
404-Not Found
500-Internal Server Error
502-Bad Gateway
输入:
200
输出:
OK
参考代码:
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
switch (n)
{
case 200:
printf("OK\n");
break;
case 202:
printf("Accepted\n");
break;
case 400:
printf("Bad Request\n");
break;
case 403:
printf("Forbidden\n");
break;
case 404:
printf("Not Found\n");
break;
case 500:
printf("Internal Server Error\n");
break;
case 502:
printf("Bad Gateway\n");
break;
default:
break;
}
}
}
4. 图像相似度
题目描述:
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素
点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。
输入描述:
第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。
输出描述:
一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。
输入:
3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1
输出:
44.44
参考代码:
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
int a[100][100] = { 0 };
int b[100][100] = { 0 };
float count = 0.0;
int i = 0;
int j = 0;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (a[i][j] == b[i][j])
{
count++;
}
}
}
printf("%.2f\n", 100.0 * count / (m*n));
return 0;
}
5.有序序列插入一个数
题目描述:
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
输入描述:
第一行输入一个整数(0≤N≤50)。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第三行输入想要进行插入的一个整数。
输出描述:
输出为一行,N+1个有序排列的整数。
输入:
5
1 6 9 22 30
8
输出:
1 6 8 9 22 30
参考代码:
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
int arr[50] = { 0 };
int i = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &m);
for (i = n; i > 0; i--)
{
if (arr[i-1] > m)
{
arr[i] = arr[i - 1];
}
else
{
arr[i] = m;
break;
}
}
if (i == 0)
{
arr[0] = m;
}
for (i = 0; i < n + 1; i++)
{
printf("%d ", arr[i]);
}
return 0;
}