C语言综合实践main()函数匹配,括号换行,加注释
2017-04-23 12:58
267 查看
作者:夏晓林
地点:烟大计控
时间:2017.04.23
题目大意:用C语言写的源程序是一种文本文件。本项目以C语言的源程序为操作对象,完成对源程序的一系列处理,如判断是否有main函数、将某些行加上注释等。各功能可分别编制一个程序实现(建议用这种简单的方案),也可以编制一个程序文件,各功能作为程序中的模块。
(1).读入一个C程序,判断其中是否只有一个main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个main()函数”。
提示1:简单处理,可以只比较判断“main()“,考虑实际上的各种可能,main后面的括号中有任意多个空格及void的都应该算在内。建议按最简单的情形处理。
提示2:建议设计一个函数is_sub_sring(char *s1,char *s2),函数用于判断s1是否“包含”在读入的一行s2中。调用时,用"main()"与读到的代码与字符串比较,形参s1对应的实参用“main()”即可。这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。
(2).读入一个C语言程序,使程序中的所有左大括号“{”和右大括号“}”都单独占一行,修改后的程序保存到另一个.c文件中。并在屏幕上显示处理过的程序,显示时加上行号。
(3).读入一个C语言程序,输入m,n两个数,从第m行起的n行代码将 作为注释使用(即在这些行前面加上“//”),修改的程序保存到另一个.c文件中,并在屏幕上显示处理过的程序,显示时加上行号。
c语言代码:
(1):
#include <stdio.h>
#include <stdlib.h>
int is_sub_sring(char*s1,char*s2);
int main( )
{
char hang[200];
char a[7]="main()";
int num=0;//用于统计main()的数量
FILE *fp;
if((fp=fopen("source.c","r"))==NULL)
{
printf("源程序不存在!\n");
exit(1);
}
while(!feof(fp))//若不结束
{
fgets(hang,81,fp);
num=num+is_sub_sring(hang,a);
}
fclose(fp);
if(num==0)
printf("没有main()函数\n");
else if (num==1)
printf("暂时没有发现问题\n");
else
printf("不能定义多个main()函数\n");
return 0;
}
int is_sub_sring(char*s1,char*s2)
{
int n=0,y;//n用于统计数目,y用于判断
char *p,*q;
for(; *s1!='\0'; s1++)
{
if (*s2==*s1)
{
y=1;
p=s1;
q=s2;
for(; *q!='\0';)//第一个字符相同继续往后判断
{
if (*q++!=*p++)//不相同
{
y=0;
break;
}
}
if (y==1)//相同
n++;
}
}
return n;
}代码(2):
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char ch1,ch2;
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);
}
ch1='\0';
while(!feof(fp1))//若不结束
{
ch2=fgetc(fp1);//从文件中读入字符
if((ch2=='{'||ch2=='}')&&(ch1!='\n'))//读到了花括号且前一个字符不是换行
fputc('\n',fp2);//加上换行
else if((ch1=='{'||ch1=='}')&&(ch2!='\n')) //前一个字符是花括号并且当前字符不是换行
fputc('\n',fp2);//加上换行
fputc(ch2,fp2); //将当前字符写入新建的文件中
ch1=ch2;//依次向后读取
}
rewind(fp2);//移动文件指针的最简单函数,功能是将文件的位置指针移到文件的起始位置
printf("处理过的源程序是:\n");
char hang[200];
int n = 1;
while (!feof(fp2))//若不结束
{
fgets(hang,80,fp2);//读入字符串
printf("%d\t%s", n, hang);
n++;
}
fclose(fp1);
fclose(fp2);
return 0;
}代码(3):
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char hang[200];
int m,n,i;
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:\n");
scanf("%d%d",&m,&n);
for(i=1; i<m; i++)//m行之前
{
fgets(hang,80,fp1);
fputs(hang,fp2);
}
for(i=m; i<m+n; i++)//加//的
{
fputc('/',fp2);
fputc('/',fp2);
fgets(hang,80,fp1);
fputs(hang,fp2);
}
for(i=m+n; !feof(fp1) ; i++)//加完//之后的
{
fgets(hang,80,fp1);
fputs(hang,fp2);
}
rewind(fp2);//移动文件指针的最简单函数,功能是将文件的位置指针移到文件的起始位置
printf("处理过的源程序是:\n");
int num = 1;
while (!feof(fp2))//若不结束
{
fgets(hang,80,fp2);//读入字符串
printf("%d\t%s", num, hang);
num++;
}
fclose(fp1);
fclose(fp2);
return 0;
}体会心得:
熟练运用文件的打开关闭,读写字符函数fgetc,fputc,读写字符串函数fgets,fputs。
地点:烟大计控
时间:2017.04.23
题目大意:用C语言写的源程序是一种文本文件。本项目以C语言的源程序为操作对象,完成对源程序的一系列处理,如判断是否有main函数、将某些行加上注释等。各功能可分别编制一个程序实现(建议用这种简单的方案),也可以编制一个程序文件,各功能作为程序中的模块。
(1).读入一个C程序,判断其中是否只有一个main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个main()函数”。
提示1:简单处理,可以只比较判断“main()“,考虑实际上的各种可能,main后面的括号中有任意多个空格及void的都应该算在内。建议按最简单的情形处理。
提示2:建议设计一个函数is_sub_sring(char *s1,char *s2),函数用于判断s1是否“包含”在读入的一行s2中。调用时,用"main()"与读到的代码与字符串比较,形参s1对应的实参用“main()”即可。这样写提升了“抽象”级别,更容易实现,对应更高的代码质量。
(2).读入一个C语言程序,使程序中的所有左大括号“{”和右大括号“}”都单独占一行,修改后的程序保存到另一个.c文件中。并在屏幕上显示处理过的程序,显示时加上行号。
(3).读入一个C语言程序,输入m,n两个数,从第m行起的n行代码将 作为注释使用(即在这些行前面加上“//”),修改的程序保存到另一个.c文件中,并在屏幕上显示处理过的程序,显示时加上行号。
c语言代码:
(1):
#include <stdio.h>
#include <stdlib.h>
int is_sub_sring(char*s1,char*s2);
int main( )
{
char hang[200];
char a[7]="main()";
int num=0;//用于统计main()的数量
FILE *fp;
if((fp=fopen("source.c","r"))==NULL)
{
printf("源程序不存在!\n");
exit(1);
}
while(!feof(fp))//若不结束
{
fgets(hang,81,fp);
num=num+is_sub_sring(hang,a);
}
fclose(fp);
if(num==0)
printf("没有main()函数\n");
else if (num==1)
printf("暂时没有发现问题\n");
else
printf("不能定义多个main()函数\n");
return 0;
}
int is_sub_sring(char*s1,char*s2)
{
int n=0,y;//n用于统计数目,y用于判断
char *p,*q;
for(; *s1!='\0'; s1++)
{
if (*s2==*s1)
{
y=1;
p=s1;
q=s2;
for(; *q!='\0';)//第一个字符相同继续往后判断
{
if (*q++!=*p++)//不相同
{
y=0;
break;
}
}
if (y==1)//相同
n++;
}
}
return n;
}代码(2):
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char ch1,ch2;
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);
}
ch1='\0';
while(!feof(fp1))//若不结束
{
ch2=fgetc(fp1);//从文件中读入字符
if((ch2=='{'||ch2=='}')&&(ch1!='\n'))//读到了花括号且前一个字符不是换行
fputc('\n',fp2);//加上换行
else if((ch1=='{'||ch1=='}')&&(ch2!='\n')) //前一个字符是花括号并且当前字符不是换行
fputc('\n',fp2);//加上换行
fputc(ch2,fp2); //将当前字符写入新建的文件中
ch1=ch2;//依次向后读取
}
rewind(fp2);//移动文件指针的最简单函数,功能是将文件的位置指针移到文件的起始位置
printf("处理过的源程序是:\n");
char hang[200];
int n = 1;
while (!feof(fp2))//若不结束
{
fgets(hang,80,fp2);//读入字符串
printf("%d\t%s", n, hang);
n++;
}
fclose(fp1);
fclose(fp2);
return 0;
}代码(3):
#include <stdio.h>
#include <stdlib.h>
int main( )
{
char hang[200];
int m,n,i;
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:\n");
scanf("%d%d",&m,&n);
for(i=1; i<m; i++)//m行之前
{
fgets(hang,80,fp1);
fputs(hang,fp2);
}
for(i=m; i<m+n; i++)//加//的
{
fputc('/',fp2);
fputc('/',fp2);
fgets(hang,80,fp1);
fputs(hang,fp2);
}
for(i=m+n; !feof(fp1) ; i++)//加完//之后的
{
fgets(hang,80,fp1);
fputs(hang,fp2);
}
rewind(fp2);//移动文件指针的最简单函数,功能是将文件的位置指针移到文件的起始位置
printf("处理过的源程序是:\n");
int num = 1;
while (!feof(fp2))//若不结束
{
fgets(hang,80,fp2);//读入字符串
printf("%d\t%s", num, hang);
num++;
}
fclose(fp1);
fclose(fp2);
return 0;
}体会心得:
熟练运用文件的打开关闭,读写字符函数fgetc,fputc,读写字符串函数fgets,fputs。
相关文章推荐
- C语言之main()函数
- C语言 设置在main 之前运行的函数
- 实验9 指针1 1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- c# 函数注释 显示换行 ,
- 括号匹配性检测C语言实现
- 括号匹配问题 栈的应用 C语言实现
- C语言中main( int argc, char *argv[] )和getopt()函数学习
- 实验九指针1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- uboot中C语言代码入口函数(start_armboot)的注释
- c语言实现括号匹配 栈的思想
- C语言 设置在main 之前运行的函数
- C语言中main()函数不要返回结构体类型(求助)
- 栈的应用——括号匹配的检验(C语言)
- 实验9 指针1 、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依
- 括号的匹配(c语言数据结构)
- uboot中C语言代码入口函数(start_armboot)的注释
- C语言注释的匹配的正则表达式
- 用c语言用栈编程的括号匹配问题
- 用堆栈解决括号匹配问题(C语言)
- c语言超强删除注释的函数(linux、mac)