个人博客
个人博客

  • 首页

  • 技术

  • 故事

  • 网络

  • 音乐

  • 经历

  • 关于

标题:8个小时8个小时的上机课!!

《《《菜单在左边,触摸一下{3D效果哦!!!}
10月
10
我有故事,你有酒吗?

8个小时8个小时的上机课!!

Post modified: 2019-10-10 14:01 • In 我有故事,你有酒吗? • • 阅读次数: 59
字数统计: 3,718 • 阅读时长 ≈ 14 min

    今天经历了惨无人道的上机课,整整八个小时,面对着C语言,老泪纵横……

    一个寒假没写C了。

    记录一下今天大概弄了这么几件事:

    1.大数的乘法:

    两个数组lin1[100],lin2[100]保存两个大数,结果保存在lout[201]中。公式是lout[i+j] = lin1[i] * lin2[j]; a、b的实际长度保存在lin1[0],lin2[0]中。

for (i = 0 ; i < lin1[0] ; i++){//注意i和j要从0开始,否则不能用公式了for (j = 0 ; j < lin2[0] ; j++){//因为i,j从0开始,而lin1/lin2[0]不是第一个数字,所以要进行处理lout[i+j] += lin1[lin1[0] - i] * lin2[lin2[0] - j];lout[i+j+1] += lout[i+j]/10;lout[i+j] %= 10;}//后两个表达式表示进位,保证每位都只有一个数字}

   

    2.大数整除普通数(我这里是2,因为我做的题目是进制转换)

    将大数a[]整除2后保存在b[]中,这里以一个函数给出。如果除以其他数将2更换即可。

void div2(int a[] , int b[]) //大数除法(除以2){//a[0]中保存大数a的长度int i,n,mod = 0;for (i = 1 ; i <= a[0] ; i++ ){n = a[i] + mod * 10;b[i] = n / 2;mod = n % 2;}b[0] = a[0];return ;}

    思路跟小学在草稿纸上算除法一样(实际上我就是拿着笔在草稿纸上边算边想的程序)。

    点击查看原图

 

    3.重定向函数freopen

    以前用过这个函数,函数原型是:

    FILE *freopen(const char *filename,const char *type, FILE *stream);

    用法:freopen("01.in","w",stdin); 将标准输入流重定向到01.in。意思是将以前从命令提示符输入的东西改用文件01.in输入。同理输出则第三个参数为stdout。好处:输入输出时用printf、scanf就可以向文件中读、写东西了,不用再用文件操作fprintf..

    这里讲一下把它改回来的用法(把标准输入输出流改回命令提示符):

    freopen("CON","r",stdin); 和 freopen("CON","w",stdout);

 

    4.Linux下文件复制(即不用API)

    每次拷贝1024字节,直到文件拷贝完成。使用的I/O文件流。

#include <stdio.h>#include <fcntl.h> #include <io.h>#include <string.h>//文件复制,未使用Windows API,即可以在不同平台下使用int main(int argc, char *argv[]){char buffer[1024];char * ptr;int rlen,wlen;if (4 != argc || strcmp(argv[1],"HCOPY") != 0){printf("正确格式为:HCOPY filename1 filename2\n");return 0;}int hin = open(argv[2],O_RDONLY);if(hin < 0){printf("打开来源文件错误,请检查输入\n");return 0;}int hout = open(argv[3],O_WRONLY | O_CREAT);if(hin < 0){printf("打开目标文件错误,请检查输入\n");return 0;}while(rlen = read(hin,buffer,sizeof(buffer))) //循环读取来源文件,每次读取1024字节{if (rlen == -1){printf("读取文件出错\n");return 0;}else if(rlen > 0) //得到的结果大于0则进行复制{ptr = buffer;while(wlen = write(hout,ptr,rlen)){if(wlen == -1){printf("写入文件错误\n");return 0;}else if (wlen == rlen) //如果写入的和读出的字节相同,则说明全部写完了,就跳出本循环{break;}else if(wlen > 0) //没有全部写完,继续写{ptr += wlen;rlen -= wlen;}}}}printf("操作成功\n");close(hin); //勿忘关闭文件close(hout);return 0;}

 

AB一个伪青年博客

  • Post author: AB一个伪青年博客
  • Post link: https://shsh.abboke.com//rz/2019/1010/7008.html
  • 可下方留言哦!!!
上一篇:VC++下使用SQLite数据库 下一篇:php遍历目录&amp;删除指定文件中指定内容
AB一个伪青年博客
AB一个伪青年博客 WeChat Pay

WeChat Pay

AB一个伪青年博客 Alipay

Alipay

悬笔e绝

AB一个伪青年博客

it程序猿_阿八博客,是一个记录生活与分享资讯的个人博客网站。『Www.AbboKe.Com』 程序猿👨‍💻‍~

64 技术
0 分类
36 标签
全站字数统计: 38.8k
友链
  • 阿八博客
  • 更多

✽-(ˆ▽ˆ)/✽✽\(ˆ▽ˆ)-✽

网站已运行:525天14小时24分14秒

粤ICP备18146903号

© 2018 阿八个人博客. 一个伪青年的个人博客,技术分享,本人经历过的坑;生活分享,分享有趣的程序生活

Made with by 阿八个人博客

4896 130208
  • 首页
  • 技术
  • 故事
  • 网络
  • 音乐
  • 经历
  • 关于
  • 留言板[ABboke.com]