12.9《 算法入门》 循环 文件操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.9《 算法入门》 循环 文件操作相关的知识,希望对你有一定的参考价值。

  1. 循环
    1.7744 问题
    1. <math.h>中的floor()函数 表示向下取整。

      Floor(0.5) == 0 , Floor(-1.1) == -2

       

      | floor(x+0.5) 表示对x四舍五入 (变为整数)|

       

      因为

      1<= x <2 时 floor(x) == 1

      1<=x+0.5<2 即 0.5<= x <1.5 时 floor(x + 0.5) == 1.

       

      由此知 floor(x+0.5)起到的作用是四舍五入

 

  1. A.整数 不同位数的数字求法、前几位数求法、最后几位数求法

    Eg:int n =123456789

    5位数求法:n /10000 (9-5)

    最后5位数求法:n % 100000(5)

    不同位数的数字求法:可以结合上面的两种方法算出来

     

    B.补充:要计算只包含加法、减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之后取对应n的余数,结果不变。(这么做可以防止乘法溢出)

    Eg: 阶乘之和

 

未使用上述方法

  1. #include "stdafx.h"  
  2. #include <time.h>  
  3. int main(void)  
  4. {  
  5.     const int MOD = 1000000;  
  6.     int i, j, n, S = 0;  
  7.     scanf("%d", &n);  
  8.     for (int i = i; i <= n; i + _ + )  
  9.     {  
  10.         int factorial = 1;  
  11.         for (int j = 1; j <= i; j++)  
  12.         {  
  13.             factorial = factorial * j ;  
  14.         }  
  15.         S = S + factorial;  
  16.     
  17.         printf("%d\n", S%MOD);  
  18.         printf("Time used = %.2lf\n", (double)clock() / CLOCKS_PER_SEC);  
  19.         return 0;  
  20.     }  

    使用上述方法

  21. #include "stdafx.h"  
  22. #include <time.h>  
  23. int main(void)  
  24. {  
  25.     const int MOD = 1000000;  
  26.     int i, j, n, S = 0;  
  27.     scanf("%d", &n);  
  28.     for (int i = i; i <= n; i + _ + )  
  29.     {  
  30.         int factorial = 1;  
  31.         for (int j = 1; j <= i; j++)  
  32.         {  
  33.             factorial = (factorial * j %MOD);  
  34.         }  
  35.         S = (S + factorial) % MOD;  
  36.     
  37.         printf("%d\n", S);  
  38.         printf("Time used = %.2lf\n", (double)clock() / CLOCKS_PER_SEC);  
  39.         return 0;  
  40.     }  

     

对于clock() 和 CLOCKS_PER_SEC

 printf("Time used = %.2lf\n", (double)clock() / CLOCKS_PER_SEC);  

 

<time.h>中的 clock() 计时函数 :该程序从启动到函数调用占用CPU的时间 (输入时间、停顿时间等等都包括在内)

然后用clock()除以CLOCKS_PER_SEC 代表以"秒"为单位的时间。

 

可以使用echo(管道)去除输入所占时间

 

  1. 文件操作

①当把输入是否等于EOF作为判断条件时 需要人工输入EOF,而这个时候EOF 就是CTRL + Z (F6)

将输入、输出数据保存在文件中(freopen fopen)

A:在main()函数的入口添加:

freopen("input.txt,","r",stdin) 键盘读入函数( 比如scanf() )从 input.txt 读入

freopen("output.txt","w",stdout) 屏幕输出函数( 比如printf() )写入output.txt

 

 

函数名:freopen

函数,以指定模式重新指定到另一个文件。模式用于指定新文件的访问方式。

头文件:stdio.h

C89函数声明:

1

FILE *freopenconst char *filename, const char *mode, FILE *stream );

C99函数声明:

1

FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);

形参说明:

filename:需要重定向到的文件名或文件路径。

mode:代表文件访问权限的字符串。例如,"r"表示"只读访问""w"表示"只写访问""a"表示"追加写入"

stream:需要被重定向的文件流。

返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL

 

#include<stdio.h>

int main()

{

    int a, b;

    freopen("in.txt","r",stdin);

    /* 如果in.txt不在连接后的exe的目录,需要指定路径如D:\in.txt */

    freopen("out.txt","w",stdout); /*同上*/

    while (scanf("%d%d", &a, &b) != EOF)

        printf("%d\n",a+b);

    fclose(stdin);

    fclose(stdout);

    return 0;

}

 

 

 

freopen中的路径 (可以是相对路径也可以是绝对路径)

当.exe和.txt在同一位置是 则是相对路径

如果不是则需要像上面那样添加指定的绝对路径

绝对路径
:是从盘符开始的路径,形如
C:\windows\system32\cmd.exe
相对路径:是从当前路径开始的路径,假如当前路径为C:\windows
要描述上述路径,只需输入
system32\cmd.exe
实际上,严格的相对路径写法应为
.\system32\cmd.exe
其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。

B:fopen 待更

 

 

 

以上是关于12.9《 算法入门》 循环 文件操作的主要内容,如果未能解决你的问题,请参考以下文章

Python 入门经典必背的 18 个程序,学完就入门 Python 了

12.9团队工作总结

算法竞赛入门 语言篇 循环结构

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

常用python日期日志获取内容循环的代码片段

循环冗余校验(CRC)算法入门