今天经历了惨无人道的上机课,整整八个小时,面对着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 filename2n"); 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; }
标题不知道这么说好不好,感觉很乱。 我以前就很纳闷,为什么我一个木马的客户端,能配置好各种选项以后生成一个服务端。一个exe文件怎么生出另一个exe文件? 一般的木马生成、木马…
请登录后发表评论
注册