C语言综合实践-----C程序操作
来源:互联网 发布:手机网络共享怎么设置 编辑:程序博客网 时间:2024/05/17 21:51
用C语言写的源程序是一种文本文件。本项目将以C语言的源程序为操作对象,完成对源程序的一系列处理,如判断是否有main函数、将某些行加上注释等。各功能可以分别编制 一个程序实现(建议用这种简单的方案),(1)读入一个C++程序,判断其中是否只有一个main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,
或者“不能定义多个main()函数”;
提示1:简单处理,可以只比较判断“main()”,考虑实际上的各种可能,main后面的括号中有任意多个空格及void的都应该算在内。
建议按最简单的情形处理。
提示2:建议设计一个函数,将读到的代码与字符串“main()”进行比较。函数用于判断s1是否“包含”在读入的一行s2中,
调用时,形参s1处的实参用”main()”即可,这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。
(2)
读入一个C语言程序,使程序中的所有左花括号“{”和右花括号“}”都单独占一行,
新程序保存到另一个.c文件中,并在屏幕上显示处理过的程序,显示时加上行号。
(3)
读入一个C语言程序,输入m、n两个数字,从第m行起的n行代码将作为注释使用(即在这些行前面加上”//”),
新程序保存到另一个.c文件中,并在屏幕上显示处理过的程序,显示时加上行号。
#include <stdio.h>#include <stdlib.h>int is_sub_sring(char*s1,char*s2);int main( ){ char line[81]; char target[4]="main"; int num=0;//main个数初值为0 //将文件中的数据读入到字符数组中 FILE *fp; if((fp=fopen("source.c","r"))==NULL) { printf("源程序文件不存在!\n"); exit(1); } while(!feof(fp)) { fgets(line,81,fp); num+=is_sub_sring(line,target); if (num>1) //多于1个,没有必要再去读取 break; } fclose(fp); //得出结论 if(num==0) printf("没有:main"); else if (num==1) printf("暂时没有发现问题"); else printf("不能定义多个main()函数"); printf("\n"); return 0;}//返回main 个数int is_sub_sring(char line[],char target[]){ int n=0,flag,i,j,m; for(i=0;i<81;i++) { if(line[i]=='\0') break; if (line[i]==target[0]) /*判断字符串中是否有和要判断的字串首字符相同的字符*/ { m=i+1; flag=1; for(j=1;j<4;j++) /*如果有则判断接下去的几个字符是否相同*/ { if (line[m++]!=target[j]) { flag=0; break; } } if (flag==1) n++; } } return n;}
#include <stdio.h>#include <stdlib.h>int main( ){ FILE *fp1, *fp2; char line[81]; int n = 1,i; if((fp1=fopen("source.c","r"))==NULL) { printf("源程序文件不存在!\n"); exit(1); } if((fp2=fopen("newsource.c","w+"))==NULL) { printf("错误!!\n"); exit(1); } while(!feof(fp1)) { fgets(line,81,fp1); for(i=0; i<81; i++) { if(line[i]=='\0') break; if((line[i]=='{'||line[i]=='}')&&(line[i-1]!='\n'))//读到了花括号,且前一个符号不是换行,应该加入一个换行 fputc('\n',fp2); else if((line[i]=='{'||line[i]=='}')&&(line[i+1]!='\n'))//当前读到的不是换行,但前一个是花括号,此时也该加 fputc('\n',fp2); fputc(line[i],fp2); //输出当前读入的符号 } } rewind(fp2);// 将文件内部的位置指针重新指向开头 printf("处理后的源程序是\n"); while (!feof(fp2)) { fgets(line,81,fp2); printf("%d\t%s", n, line); n++; } fclose(fp1); fclose(fp2); return 0;}
#include <stdio.h>#include <stdlib.h>int main( ){ int m,n; char line[81]; FILE *fp1, *fp2; if((fp1=fopen("source.c","r"))==NULL) { printf("源程序文件不存在!\n"); exit(1); } if((fp2=fopen("newsource.c","w+"))==NULL) { printf("无法建立输出文件!\n"); exit(1); } printf("您要将第m行开始的n行代码作为注释,请输入m和n:"); scanf("%d %d", &m, &n); int n1=0; fgets(line,81,fp1); while(!feof(fp1)) { n1++; if(n1>=m&&n1<m+n) { fputc('/',fp2); fputc('/',fp2); } fputs(line,fp2); fgets(line,81,fp1); } rewind(fp2); printf("经过处理后的源程序是\n"); n=1; fgets(line,81,fp2); while (!feof(fp2)) { printf("%d\t%s", n, line); n++; fgets(line,81,fp2); } fclose(fp1); fclose(fp2); return 0;}
0 0
- C语言综合实践-----C程序操作
- C语言综合实践7.18
- C语言综合实践-----银行储蓄系统
- 综合实践报告(7)C程序源码操作(内附五套代码)
- C语言链表综合操作
- C语言综合练习
- C语言程序-位操作
- 第十次c语言上机实践操作
- 第十一次c语言上机实践操作
- C语言中动态数组操作实践
- c语言综合练习一
- c语言综合练习二
- C语言_综合实例
- C语言位域操作测试程序
- 链表操作程序(完整)C语言
- C语言操作windows的小程序
- c语言之文件操作程序
- C语言操作剪切板内容!win32程序
- Golang 优化之路——空结构
- ruby基础记录
- 第四次上机实验
- SQLSERVER聚合函数
- Python 绘制函数图形
- C语言综合实践-----C程序操作
- Run loop简析
- php+memcached实现定时静态页面生成
- hdu-5880 AC自动机 + 差分优化
- No.7 week9 optimal division
- 阅读effective stl 有感(一)
- thinkphp实现上传图文消息中的图片的接口
- 四区例
- JSP三大指令