• 扩大
    缩小

    编程注意点

    C/C++

    全局数组。

    当我们试图在函数中开一个大数组时,很容易使程序报错退出,这是因为在函数(包括主函数)中定义变量时,变量会存放在“栈”区,栈区可以分配的内存较小,所以在开大数组的时候会因为申请不到内存而报错退出。而如果我们把数组开在函数外面,那么将会存放在“堆”区,堆区可以分配的内存较大,适合开大数组。

    #include <stdio.h>
    
    const int MAXN = 1000010;
    int a[MAXN];
    
    int main() {
        int n;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        for (int i = 0; i < n; i++) {
            printf("%d", a[i]);
            if (i < n - 1) {
                printf(" ");
            }
        }
        return 0;
    }

     

     

    比较很小的两个浮点数时,不能直接比较

    要相减后和EPS比较,以保证精度

    因为double类型或float类型都是有精度的,其实都是取的近似值,所以有个误差。和一个很小的数比如0.00000001 (1e-8)比较就是为了在这个误差范围内进行比较。 (blog.csdn.net) 举个例子如double b = 0.123456可能是0.1234561的四舍五入后得到的结果。最后的0.0000001就表示误差范围了。 (blog.csdn.net)

    如果不加这个误差范围,可能会出现一些不可预知的错误,比如两个数明明相等,但是却因为精度问题而无法判断相等。 (blog.csdn.net)

    在这段代码中,result1和result2都是double类型的变量,而double类型的变量有精度限制。因此,为了在这个误差范围内进行比较,需要和一个很小的数比如0.00000001 (1e-8)比较大小。 (blog.csdn.net)

    #include<iostream>
    #include<math.h>
    #define EPS 1e-8
    using namespace std;
    int main() {
      double a, b, c, d;
      cin >> a >> b >> c >> d;
      if (a * asin(sqrt(b) / 2) - c * asin(sqrt(d) / 2)>EPS)
          cout << "1";
      else if (a * asin(sqrt(b) / 2) - c * asin(sqrt(d) / 2)<-EPS)
          cout << "2";
      else   cout << "0";
      return 0;
    }

     

     

    不知道有多少输入时可以用  while (scanf("%d%d", &a, &b) != EOF) 

    #include <cstdio>
    int main() {
        int a, b;
        while (scanf("%d%d", &a, &b) != EOF) {
            printf("%d\n", a + b);
        }
        return 0;
    }

     

    posted on 2023-03-26 22:43  Ancientea  阅读(22)  评论(0)    收藏  举报

    导航