前言
本篇文章记录的是对于2023年8月27日的
C语言
的入学考试的整理总结
成绩:220/240
题目:9/12
错题整理
首先先对于我没做出来的三道题做一个整理
错题1:7-4 分段函数PLUS
题干
以下是一个二元分段函数,请你根据所给的函数公式,输出对应的值。
输入格式: 输入两个实数x和y。
输出格式: 输出对应的函数值f(x,y),结果保留两位小数。
输入样例: 在这里给出一组输入。例如:
1 1
输出样例: 在这里给出相应的输出。例如:
2.00
答案
#include<stdio.h>
#include<math.h>
int main()
{
double x = 0;
double y = 0;
scanf("%lf %lf", &x, &y);
double sum = 0;
if (x + y > 0)
{
sum = pow(x, 3) + pow(y, 3);
}
else if (x > -5)
{
sum = sqrt(pow(x, 2) + pow(y, 2));
}
else if (x <= -5 && y - x + 1 > 0)
{
sum = x / (y - x + 1);
}
else
{
if (x == (int)x)
{
sum = -x;
}
else
{
sum = (double)((int)-x + 1);
}
}
printf("%.2f\n", sum);
return 0;
}
错因
这道题乍一看不是很常规的一道题吗,
但是里面有一个小的知识点,我刚好不会,就在这里丢了两分
知识点:向上取整⌊ ⌋和向下取整⌈ ⌉符号
向上取整:⌊ ⌋
含义是比自己大的最小的整数
在C语言中对应的是ceil()函数
向下取整:⌈ ⌉
含义是比自己小的最小的整数
在C语言中对应的是floor()函数
此处再复习一下round()函数
round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果,此处不做详细介绍,知道这个函数用于四舍五入即可
错题2:7-8 高塔塔高
题干
如下图,有一座高塔,现要测量其塔高CD。
塔附近有一观测平台,其高AB为h,一名观测员位于点A处,经测量得知∠DAE=α,∠CAE=β,请你求出塔高CD的长度。(取π=3.14,结果四舍五入,保留两位小数)
输入格式: 第一行,给出一个浮点数h,表示AB的高度,单位为米。 第二行,给出两个浮点数α、β,表示∠DAE、∠CAE的大小,单位为度。
输出格式: 如果α或β超过90,或无法根据已知条件计算出塔高CD(即h为0或∠DAE为0),请直接输出“That’s
impossible.” 否则,输出一个浮点数,表示塔高CD的大小,单位为米,结果四舍五入,保留两位小数。输入样例: 在这里给出一组输入。例如:
15.00
30.00 30.00 输出样例: 在这里给出相应的输出。例如:30.00
答案
#include<stdio.h>
#include<math.h>
int main()
{
double h = 0;
double a = 0;
double b = 0;
double a1 = 0;
double b1 = 0;
double pi = 3.14;
scanf("%lf %lf %lf", &h, &a, &b);
if (h == 0)
{
printf("That's impossible.\n");
return 0;
}
a1 = a * pi / 180;
b1 = b * pi / 180;
if (a >= 90 || b >= 90 || a <= 0 || b <= 0)
{
printf("That's impossible.\n");
return 0;
}
double num = 0;
num = h * tan(b1) / tan(a1);
printf("%.2f", num + h);
return 0;
}
错因
也是很简单的一道题
但是,我还是考虑的不够周到,题目给出提示当a或b>=90°时,输出不可能
而当a或b<=0°时,却是需要自己想到的,做题的时候还是不够细心
错题3:7-11 附加题-凯撒密码
题干
在密码学中,凯撒密码是一种简单而广为人知的加密技术。在加密过程中,由密码的设定者设置一个偏移量key,再将原始密码的每一位按字母表顺序周期性地向后偏移key个单位(若key为负值,则表示向前偏移),这样就得到了加密后的凯撒密码。译码过程便是加密过程的逆过程。
在这道题目中,请你根据所给的条件,编写凯撒密码的加密功能和译码功能。
输入格式:
第一行,输入一个字符串s,只由大小写字母和空格组成,表示待处理的密码。
第二行,两个整数opt和key,分别表示需要执行的操作选项及凯撒密码的偏移量。(−25<key<25)
其中,当opt值为1时,执行加密操作;当opt值为2时,执行译码操作;否则,不执行任何操作,直接输出字符串s。(不论opt值为多少,请在输出时将所有的英文字母转化为大写字母)
输出格式: 请按照要求输出加密或译码后的密码。
输入样例:
I love XATU
1 3
输出样例:
L ORYH ADWX
样例解释:
在英文字母表中,I的后三位是L,L的后两位是O,以此类推。其中,X周期性地后移三位,分别为X->Y->Z->A。
答案
#include <stdio.h>
#include <string.h>
int main()
{
char s[10010];
int opt, key;
scanf("%[^\n]%d%d", &s, &opt, &key);
int length = strlen(s);
for (int i = 0; i < length; i++)
{
if ('a' <= s[i] && s[i] <= 'z')
{
s[i] += 'A' - 'a';
}
}
if (opt == 1)
{
for (int i = 0; i < length; i++)
{
if (s[i] != ' ')
{
s[i] = 'A' + (s[i] - 'A' + key + 26) % 26;
}
}
}
else if (opt == 2)
{
for (int i = 0; i < length; i++)
{
if (s[i] != ' ')
{
s[i] = 'A' + (s[i] - 'A' - key + 26) % 26;
}
}
}
printf("%s", s);
return 0;
}
对于非字母的字符直接对26取余即可,不用做那么复杂,还是在写之前没想好
错因
这道题还是比较有意思的
是我想的太复杂了,还是在做题的时候没认真想,说有啥思维含量吧,看完答案一琢磨也没啥可出错的,还是着急了(捂脸
整体总结
这次测试不难,但对于基础知识还是掌握得不够牢固,
不熟练的知识点
对于C语言函数的掌握,比如取整函数、字母大小写转换函数,
需要提升的地方
基础知识里的一些小漏洞就在做题中去修补,
接下来需要去提升一下自己做题时的思维,以及可以去接触一些cpp的知识了
总结
还是需要多做一些练习,有时间我可能会整理一下这几天的刷题记录,但可能得很久之后了,因为要军训…
已经歇了很久了,继续努力吧,
加油! 学就完事了,冲!!!