[原创] 好久没来了,发个最近刚写的小程序,抛砖引玉

gaoyang9992006   2014-5-17 13:03 楼主
呵呵,今天刚进行代码第一次测试,相当凑合,更多功能正在完善。
程序内容是实现从一个文本文件读取桩号内容,然后自动识别判断,进行路桩设定。打印到一个文本文件里,该文本文件采用逗号分隔符的方式存储,这样就可以直接使用Excel读取和编辑了。
  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. #include"string.h"
  4. #include"math.h"
  5. #define TAN(angle) tan(M_PI*(angle/180))
  6. #define SIN(angle) sin(M_PI*(angle/180))
  7. #define mid_number(X,H,angle) (X+(H/TAN(angle))/2)
  8. #define f_2_MAX(x)         ((x)<0?-2+2*(int)((x)/2):2*(int)((x)/2))   
  9. #define f_4_MAX(x)         ((x)<0?-4+4*(int)((x)/4):4*(int)((x)/4))
  10. void get_an_han(float,float,float,float,float *,int * );
  11. void get_ming_han(float,float,float,float,float *,int * );
  12. void get_da_zhong_qiao(float,float,float,float,float *,int * );
  13. FILE *fp_source , *fp_result;
  14. float line_1[100]={0};
  15. char str[7],str_1[]="暗涵",str_2[]="明涵",str_3[]="大中桥";

  16. void main(void)
  17. {


  18. int i=0,line_num=0,j=0;
  19. char culvert_type=0;     //涵洞类型标记符号,用于switch case分支语句
  20. char str[20];            //存储涵洞类型名,
  21. float angle,O,H,y,X;

  22. /////////////////////////////////////////////////////////////////////////
  23. // FILE *fp_source , *fp_result;
  24. int ch=0;
  25. float mubiao[5]={0.0};

  26. if((fp_source=fopen("source.csv","r"))==NULL)
  27. {
  28. printf("can not open file\n");
  29. exit(0);
  30. }

  31. if((fp_result=fopen("result.csv","w+"))==NULL)
  32. {
  33. printf("can not open file\n");
  34. exit(0);
  35. }

  36. while(ch!=EOF)
  37. {
  38. //////////////////////////////////////////////////////////////////////
  39. /*

  40. printf("请输入桥涵类型:");
  41. scanf("%s",str);
  42. printf("\n  %s  \n\n",str);

  43. printf("请输入中心桩号、路宽、倾角、桥长四个参数:\n");

  44. printf("原点O=");
  45. scanf("%f",&O);

  46. printf("路宽H=");
  47. scanf("%f",&H);

  48. printf("倾角angle=");
  49. scanf("%f",&angle);

  50. printf("桥长X=");
  51. scanf("%f",&X);
  52. */


  53. ////////////////////////////////////////////////////////////////////
  54.     i=0;
  55.   while((ch=fgetc(fp_source))!=',')
  56.      {
  57.     // printf("%c", ch);
  58.      str[i++]=ch;
  59.          }
  60.          str[i]='\0';
  61.          
  62. ///////////////////////////////////////////////////////  
  63.   for(i=0;i<4;i++)
  64.   {

  65.    fscanf(fp_source,"%f",  &mubiao[i]);
  66.    printf( "%.2f",          mubiao[i]);

  67.    ch=fgetc(fp_source);                      //读取数字后面的符号,如果是逗号打印出来并跟着两个空格
  68.    if(ch==',')   printf("%c  ", ch);
  69.    else          printf("%c",ch);            //如果后面不是跟的逗号而是换行符直接打印出来,显示上保持一致
  70.   }

  71. O=    mubiao[0];
  72. H=    mubiao[1];
  73. angle=mubiao[2];
  74. X=    mubiao[3];
  75. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  76. /////////////////////////////////////////////////////////////////////////////////////////

  77.        if(strcmp(str,str_1)==0)   culvert_type=1; //暗涵
  78. else  if(strcmp(str,str_2)==0)   culvert_type=2; //明涵
  79. else  if(strcmp(str,str_3)==0)   culvert_type=3; //大中桥


  80. switch(culvert_type)
  81. {
  82. case 1:printf("                   这个目标为暗涵"); culvert_type=0; get_an_han(O,H,angle,X,line_1,&line_num);
  83. break;
  84. case 2:printf("                   这个目标为明涵"); culvert_type=0; get_ming_han(O,H,angle,X,line_1,&line_num);
  85. break;
  86. case 3:printf("                 这个目标为大中桥"); culvert_type=0; get_da_zhong_qiao(O,H,angle,X,line_1,&line_num);
  87. break;
  88. default:printf("ERROR");       
  89.        
  90. }
  91. printf("\n\n");

  92. ///////////////////////////////////////////////////////////////////////////////////////////////////////       
  93. }
  94. for(i=0;i<100;i++)
  95. {
  96. printf("line_1[%d]=%f\n",i,line_1[i]);
  97. if(line_1[i+1]==0) break;
  98. }

  99. printf("line_num=%d",line_num);


  100.   fclose(fp_source);
  101.   fclose(fp_result);
  102. getch();       
  103.        
  104.        
  105. }
  106. /****************************计算子函数*********************************/
  107. void get_an_han(float O,float H,float angle,float X,float * line_1,int * line_num)
  108. {
  109.   float  an_han[2],y;

  110.   
  111.    printf("\n这是咋了??");
  112.   /****涵洞2个桩号求解****/
  113. y=mid_number(O,H,angle);           printf("\ny= %f",y);
  114. X=(X/SIN(angle))-1;           
  115. an_han[0]=y-(f_4_MAX(X)/2);
  116. an_han[1]=y+(f_4_MAX(X)/2);

  117. /*************/
  118. *(line_1+(*line_num))=an_han[0];  (*line_num)++;
  119. *(line_1+(*line_num))=an_han[1];  (*line_num)++;

  120. /*下面这一段是将数组an_han[]的前四个字符以逗号分隔符的形式写入到 fp_result所打开的文件中去。写完一行后写入换行符*/

  121. {
  122.     fprintf(fp_result,"%.2f ", *(line_1+(*line_num)-3));
  123.    fputc(',',fp_result);
  124.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  125.    fprintf(fp_result,"%.2f",an_han[0]);  fputc(',',fp_result);
  126.    fprintf(fp_result,"%s,%.2f","Gr-A-4E",an_han[0]-*(line_1+(*line_num)-3));
  127.    fputc('\n',fp_result);
  128.   
  129.    fprintf(fp_result,"%.2f",an_han[0]);  fputc(',',fp_result);
  130.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  131.    fprintf(fp_result,"%.2f",an_han[1]);  fputc(',',fp_result);
  132.    fprintf(fp_result,"%s,%.2f","Gr-A-4C",an_han[1]-an_han[0]);
  133.    fputc('\n',fp_result);
  134. }




  135. }

  136. void get_ming_han(float O,float H,float angle,float X,float * line_1,int * line_num)
  137. {
  138.   float  ming_han[4],y;       
  139.   int k=0;
  140.   /****明涵洞四个桩号求解****/
  141. y=mid_number(O,H,angle);       
  142. X=(X/SIN(angle))-1;
  143. ming_han[0]=y-24-(f_2_MAX(X)/2);
  144. ming_han[1]=y-(f_2_MAX(X)/2);
  145. ming_han[2]=y+(f_2_MAX(X)/2);
  146. ming_han[3]=y+24+(f_2_MAX(X)/2);
  147. /*************/
  148.   *(line_1+(*line_num))=ming_han[0];(*line_num)++;
  149.   *(line_1+(*line_num))=ming_han[1];(*line_num)++;
  150.   *(line_1+(*line_num))=ming_han[2];(*line_num)++;
  151.   *(line_1+(*line_num))=ming_han[3];(*line_num)++;       

  152. /*下面这一段是将数组ming_han[]的前四个字符以逗号分隔符的形式写入到 fp_result所打开的文件中去。写完一行后写入换行符*/

  153. {
  154.     fprintf(fp_result,"%.2f ", *(line_1+(*line_num)-5));
  155.    fputc(',',fp_result);
  156.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  157.    fprintf(fp_result,"%.2f",ming_han[0]);  fputc(',',fp_result);
  158.      fprintf(fp_result,"%s,%.2f","Gr-A-4E",ming_han[0]-*(line_1+(*line_num)-5));  
  159.         fputc('\n',fp_result);
  160.   
  161.    fprintf(fp_result,"%.2f",ming_han[0]);  fputc(',',fp_result);
  162.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  163.    fprintf(fp_result,"%.2f",ming_han[1]);  fputc(',',fp_result);
  164.    fprintf(fp_result,"%s,%.0f","Gr-A-2E",24.0);
  165.    fputc('\n',fp_result);
  166.    
  167.    fprintf(fp_result,"%.2f",ming_han[1]);  fputc(',',fp_result);
  168.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  169.    fprintf(fp_result,"%.2f",ming_han[2]);  fputc(',',fp_result);
  170.       fprintf(fp_result,"%s,%.2f","Gr-A-2B1",ming_han[2]-ming_han[1]);  
  171.    fputc('\n',fp_result);
  172.   
  173.    fprintf(fp_result,"%.2f",ming_han[2]);  fputc(',',fp_result);
  174.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  175.    fprintf(fp_result,"%.2f",ming_han[3]);  fputc(',',fp_result);
  176.    fprintf(fp_result,"%s,%.2f","Gr-A-2E",24.0);
  177.    fputc('\n',fp_result);
  178. }

  179. }

  180. void get_da_zhong_qiao(float O,float H,float angle,float X,float * line_1,int * line_num)
  181. {
  182. float da_zhong_qiao[4],y;
  183. /****大中桥四个桩号求解****/
  184. y=mid_number(O,H,angle);       
  185. da_zhong_qiao[0]=y-(X/2)-0.65-(X>=100?40:32);
  186. da_zhong_qiao[1]=y-(X/2)-0.65;
  187. da_zhong_qiao[2]=y+(X/2)+0.65;
  188. da_zhong_qiao[3]=y+(X/2)+0.65+(X>=100?40:32);       
  189. /*************/
  190. *(line_1+(*line_num))=da_zhong_qiao[0];(*line_num)++;       
  191. *(line_1+(*line_num))=da_zhong_qiao[1];(*line_num)++;       
  192. *(line_1+(*line_num))=da_zhong_qiao[2];(*line_num)++;       
  193. *(line_1+(*line_num))=da_zhong_qiao[3];(*line_num)++;       

  194. /*下面这一段是将数组da_zhong_qiao[]的前四个字符以逗号分隔符的形式写入到 fp_result所打开的文件中去。写完一行后写入换行符*/

  195. {
  196.    fprintf(fp_result,"%.2f ", *(line_1+(*line_num)-5));
  197.    fputc(',',fp_result);
  198.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  199.    fprintf(fp_result,"%.2f",da_zhong_qiao[0]);  fputc(',',fp_result);
  200.    fprintf(fp_result,"%s,%.2f","Gr-A-4E",da_zhong_qiao[0]-*(line_1+(*line_num)-5));
  201.    fputc('\n',fp_result);

  202.    fprintf(fp_result,"%.2f",da_zhong_qiao[0]);  fputc(',',fp_result);
  203.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  204.    fprintf(fp_result,"%.2f",da_zhong_qiao[1]);  fputc(',',fp_result);
  205.       fprintf(fp_result,"%s,%.2f","Gr-SB-2E",da_zhong_qiao[1]-da_zhong_qiao[0]+3.5);
  206.    fputc('\n',fp_result);
  207.    
  208.    fprintf(fp_result,"%.2f",da_zhong_qiao[1]);  fputc(',',fp_result);
  209.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  210.    fprintf(fp_result,"%.2f",da_zhong_qiao[2]);  fputc(',',fp_result);
  211.    fprintf(fp_result,"%s","混凝土护栏");
  212.    fputc('\n',fp_result);
  213.   
  214.    fprintf(fp_result,"%.2f",da_zhong_qiao[2]);  fputc(',',fp_result);
  215.    fprintf(fp_result,"%s","~");        fputc(',',fp_result);
  216.    fprintf(fp_result,"%.2f",da_zhong_qiao[3]);  fputc(',',fp_result);
  217.    fprintf(fp_result,"%s,%.2f","Gr-SB-2E",da_zhong_qiao[3]-da_zhong_qiao[2]+3.5);

  218.    fputc('\n',fp_result);
  219. }


  220. }



回复评论 (6)

顶一顶
昵称:灰小子
点赞  2014-5-17 13:41
赞一个~~~~
点赞  2014-5-17 16:57
值得参考一下,,
点赞  2014-5-17 17:09

5楼 Sur 

欢迎欢迎哈哈
NXP新年新气象大家一起嗨起来 + 恩智浦KW41Z有奖创意征集令高能来袭 +https://www.eeworld.com.cn/huodong/201611_NXPKW41ZActivity1/index.html
点赞  2014-5-17 19:27
牛啊,我们这些只初中毕业且无基础的人看不懂,楼主专业学校就是不一样啊…… 本帖最后由 gh131413 于 2014-5-19 14:44 编辑
点赞  2014-5-19 14:42
学习。。。。。。。。。。。。

点赞  2014-5-19 17:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复