蓝桥杯备战(3)做题总结
1-1 数据类型范围
1-2 判断闰年算法
四年一闰,百年不闰,四百年再闰。
if((n%4 == 0 && n%100 != 0) || n %400 == 0)
1-3 题目出现 多组测试数据,请处理到文件结束 如何处理
#include<iostream>
using namespace std;
int main(){
int s;
while(cin>>s){
cout<<s<<"1"; //已经有cin了!
}
return 0;
}//使用ctrl+z+回车终止输入,其中z会留在键盘区 不会储存
在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键,即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束输入。
1-4 pi的精确赋值方法
#include <math.h>
const double pi = acos(-1);)
1- 5完全平方数的判断
int x;
int m = float(sqrt(x)+0.5);
浮点运算可能存在误差。在进行浮点数比较时,应考虑到浮点误差。
可不可以这样写?if(sqrt(n)==floor(sqrt(n)))printf("%d\n",n),即直接判断sqrt(n)是否为整数。理论上当然没问题,但这样写不保险,因为浮点数的运算(和函数)有可能存在误差。
假设在经过大量计算后,由于误差的影响,整数1变成了0.9999999999,floor的结果会是0而不是1。为了减小误差的影响,一般改成四舍五入,即floor(x+0.5)(2)。如果难以理
解,可以想象成在数轴上把一个单位区间往左移动0.5个单位的距离。floor(x)等于1的区间为[ 1, 2),而floor(x+0.5)等于1的区间为[0.5,1.5)。
1-6 精确到小数点n位
习题2-5 分数化小数(decimal)
输入正整数a, b, c,输出a/b的小数形式,精确到小数点后c位。a, b <= 10^6,c <= 100。例如a=1, b=6, c=4时应输出0.1667。
printf有特殊的用法
printf("%* . * f",8,4,a);//会输出8个字宽保留4位小数的浮点数运算结果
* 代替了前面整数符号 可以控制输出位数
1-7 数组声明的技巧
- 简单地说,只有在放外面时,数组a才可以开得很大;放在main函数内时,数组稍大就会异常退出。
- 在声明数组之前一定要记住不要将数组的空间设置得过大,不然程序将无法运行。
1-8 输出要求(收尾无空格 输出数据间间隔空格)
int first = 1;
if(a[i]) { if(first) first = 0; else printf(" "); printf("%d", i); }
另一个技巧在输出:为了避免输出多余空格,设置了一个标志变量first,可以表示当前要输出的变量是否为第一个。第一个变量前不应有空格,但其他变量都有.
或者说是:
这里有一个小问题:一般要求输出的行首行尾均无空格,相邻两个数据间用单个空格隔开。这样,一共要输出n个整数,但只有n-1个空格,所以只好分两条语句输出。
strchr用法
strchr和strrchr函数及用法,C语言strchr和strrchr函数详解
在“scanf("%s", s)”中,不要在s前面加上“&”符号。如果是字符串数组chars[maxn] [maxl],可以用“scanf("%s", s[i])”读取第i个字符串。注意,“scanf("%s", s)”遇到空白字符会停下来。
函数的使用小方法
- 将数组作为参数传递到函数中时,不能够通过sizeof来求取数组的大小,出入的数组其实是函数的首地址,sizeof不能通过首地址来求出数组大小。