整理之前写过的小代码,测试代码
来源:互联网 发布:国际版淘宝学校哪里有 编辑:程序博客网 时间:2024/05/01 20:15
1.对于这个程序测试环境是redhat7.0,编译器用的是gcc,主要是熟悉一下如何使用linux下的这些函数,如何使用man自己查阅
#include <stdio.h>#include <unistd.h>#include <time.h>#include <sys/time.h>void print_week(int ); //输出周void print_annimal_year(int); // 输出生肖年void print_week(int num){ switch(num){ case 1 : printf(" Mon"); break; case 2 : printf(" Tus"); break; case 3 : printf(" Wes"); break; case 4 : printf(" Tue"); break; case 5 : printf(" Fri"); break; case 6 : printf(" Sau"); break; case 7 : printf(" Sun"); break; }}void print_annimal_year (int num){ int annimal = (num - 1970)%12; switch(annimal){ case 0:printf(" 狗"); break; case 1:printf(" 猪"); break; case 2:printf(" 鼠"); break; case 3:printf(" 牛"); break; case 4:printf(" 虎"); break; case 5:printf(" 兔"); break; case 6:printf(" 龙"); break; case 7:printf(" 蛇"); break; case 8:printf(" 马"); break; case 9:printf(" 羊"); break; case 10:printf(" 猴"); break; case 11:printf(" 鸡"); break; } printf("\n");}int main(int argc,char *argv[]){ struct timespec tp; struct tm *my_tm = NULL; clock_gettime(CLOCK_REALTIME,&tp);// printf("tv_sec = %ld\n",tp.tv_sec);// printf("tv_nsec = %ld\n",tp.tv_nsec); my_tm = gmtime(&(tp.tv_sec)); printf("%d-%d-%d ",my_tm->tm_year + 1900,my_tm->tm_mon + 1,my_tm->tm_mday + 1); printf("%d-%d-%d.%d(%d) ",my_tm->tm_hour + 8,my_tm->tm_min,my_tm->tm_sec,tp.tv_nsec/1000,tp.tv_nsec); //调用周函数 print_week(my_tm->tm_wday); //调用生肖年函数 print_annimal_year(my_tm->tm_year + 1900); return 0;}运行结果
2.对于大小端的问题,这个很好测试,共用体里面一个int 和 char数组,然后分别打印出他们的值运行结果,低位存储的是低位因此是小端
3.在redhat 7.0下gcc编译器中C++中的引用是占用8个字节的
4.处理大数的思路
#include <stdio.h>#include <string.h>#define MAXLEN 500int flag = 0; //标志数组应该从哪里开始计算int a[MAXLEN]; int b[MAXLEN];int c[2*MAXLEN]; //将每一位的计算结果都保存在里面// 翻转过来好处理void reverse_str(char *str,int *array,int len){ int i = 0; for(i = 0; i < len; i++){ array[len - i - 1] = str[i] - '0'; //刚开始忘记'0' }//end for}void multiply(int *a,int *b,int *c,int sa_len,int sb_len){ int i = 0; int j = 0; int sum_len = sa_len + sb_len - 1; for(i = 0; i < sa_len; i++){ for(j = 0; j < sb_len; j++){ c[i + j] += a[i] * b[j]; printf("c[%d]= %d ",i+j,c[i+j]); }//end for 2 printf("\n"); }//end for 1 for(i = 0; i < sum_len - 1; i++){ c[i+1] += c[i] / 10; c[i] %= 10; }//end for if(c[i] != 0){ flag = i; }else{ flag = i - 1; }//end if else}void print_c_array(int *c,int sa_len,int sb_len){ int i = 0; int sum_len = sa_len + sb_len; for(i = flag; i >= 0; i--){ printf("%d",c[i]); }//end for printf("\n");}int main(int argc,char *argv[]){ char sa[MAXLEN]; char sb[MAXLEN]; int sa_len = 0; int sb_len = 0; memset(sa,0x00,sizeof(sa)); memset(sb,0x00,sizeof(sb)); gets(sa); gets(sb); sa_len = strlen(sa); sb_len = strlen(sb); printf("%s %d\n",sa,sa_len); printf("%s %d\n",sb,sb_len); reverse_str(sa,a,sa_len); reverse_str(sb,b,sb_len); multiply(a,b,c,sa_len,sb_len); print_c_array(c,sa_len,sb_len); return 0;}#include <stdio.h>#include <string.h>#define MAXLEN 100int flag; //标志数组应该从哪里开始计算int a[MAXLEN]; int b[MAXLEN];int c[MAXLEN+1]; //将每一位的计算结果都保存在里面// 翻转过来好处理void reverse_str(char *str,int *array,int len){ int i = 0; int j = MAXLEN - 1; // 1 2 3 4 5 6 // 4 5 6 for(i = len - 1; i >= 0; i--){ array[j--] = str[i] - '0'; }//end for}void large_number_add(int *a,int *b,int *c,int sa_len,int sb_len){ int i = 0; int j = MAXLEN - 1; int m = sa_len>sb_len?sa_len:sb_len; for(i = 0; i < m; i++,j--){ c[j] += a[j] + b[j]; if(c[j] >= 10){ c[j-1] += c[j] / 10; c[j] = c[j] % 10; } printf("c[%d]=%d,c[%d]=%d\n",j,c[j],j-1,c[j-1]); } if(c[j] != 0){ flag = j; }else{ flag = j + 1; }}void print_c_array(int *c,int sa_len,int sb_len){ int i = 0; int sum_len = sa_len + sb_len; for(i = flag; i < MAXLEN; i++){ printf("%d",c[i]); }//end for printf("\n");}int main(int argc,char *argv[]){ char sa[MAXLEN]; char sb[MAXLEN]; int sa_len = 0; int sb_len = 0; memset(sa,0x00,sizeof(sa)); memset(sb,0x00,sizeof(sb)); gets(sa); gets(sb); sa_len = strlen(sa); sb_len = strlen(sb); printf("%s %d\n",sa,sa_len); printf("%s %d\n",sb,sb_len); reverse_str(sa,a,sa_len); reverse_str(sb,b,sb_len); large_number_add(a,b,c,sa_len,sb_len); print_c_array(c,sa_len,sb_len); return 0;}
5.对于的define和typedef
include <stdio.h>#define max(a,b) ((a)>(b)?a:b)//int max(int a,int b);//double max(double a,double b);int main(int argc,char *argv[]){printf("max(5,6)=%d\n",max(5,6));printf("max(2.8,3.2) = %lf\n",max(2.8,3.2));return 0;}#include <stdio.h>#define print_zero_n(num) do { \ printf("%d\n",num); \num--; \}while(num)int main(int argc,char *argv[]){int num = 10; print_zero_n(num);return 0;}不会出现硬类型,typedef 也可以屏蔽类型
6.对于windows下的VC编译器中的可重入读写函数
freopen("data.in","r",stdin)freopen("data.out","w",stdout)
7.malloc是不可重入但是线程安全的函数,因为malloc函数在用户空间要自己管理各进程共享的内存链表,由于有共享资源访问,本身会造成线程不安全。malloc并不是用于大量内存分配操作(容易产生碎片,速度问题),并且在多线程下也不太适合(malloc是不可重入但是线程安全的函数)
8.tcmalloc尝试使用粒度较好和有效的自旋锁,redis用jemalloc来解决内存碎片问题,jemalloc因为Facebook火起来的,FreeBSD很有名的开发人员,现在用在火狐上,tcmalloc是google的
9.在C语言中的struct中不可以写函数,但是C++里面可以写函数
struct node{ int x; int y; int max(){ return x>y?x:y; }}a[10];
10.if 和 for的嵌套问题,其实if 包含for效率更高,寄存器不用来回的切换,if 判断之后,一直执行for语句,肯定效率高。
11.函数指针的简单使用
#include <stdio.h>void (*print)(void *,int);void print_int(void *array,int n){ int i = 0; for(i = 0; i < n; i++){ printf("%d ",((int*)array)[i]); } printf("\n");}void print_double(void *array,int n){ int i = 0; for(i = 0; i < n; i++){ printf("%.2f ",((double*)array)[i]); } printf("\n");}void print_num(void *array,int n,void (*print)(void *,int)){ print(array,n);}int main(int argc,char *argv[]){ int array_int[5] = {1,2,3,4,5}; double array_double[5] ={1.2,2.5,3.6,4.7,5.8}; print_num(array_int,5,print_int); print_num(array_double,5,print_double); return 0; }
0 0
- 整理之前写过的小代码,测试代码
- 以前写过的C代码整理
- 写代码之前的思考
- 写代码之前的工作
- 写过的代码笔记
- 之前的java测试代码 性能测试
- 写代码之前要做的准备
- 之前写的CMPP3.0未完成代码
- 我写过代码
- 测试小故事45:学写代码
- iOS 一些整理过的常用代码
- 写在整理代码积累之前
- 数据结构实验-写过的最长代码
- 那些年,写过的代码
- 写过的代码---------------------个人记录
- 那些年我写过的代码
- 收录自己写过的代码
- 这一年我写过的代码
- ADB源码分析(一)
- android AsyncTask 模拟异步任务 下载方法过程解析
- android沉浸式状态栏
- HDU 1285 确定比赛名次 拓扑排序
- 谷歌市场项目代码详解(四)
- 整理之前写过的小代码,测试代码
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 设计模式基础知识
- 开关电源基础(一)
- ksvd字典学习
- Maven依赖jar包冲突常见的解决方法
- Linux-2.6.21.1 网络函数调用流程
- 简单ARM指令集介绍
- genymotion无法直接拖拽到窗口安装解决方案