这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)
【问题描述】
编写程序,检查给定的C源程序文件中花括号是否匹配,规定花括号的总个数不超过50个。花括号匹配规则:
1)文件中左花括号“{”个数与右花括号“}”个数相等;
2)从文件中头开始顺序查找右花括号“}”的个数,在任何时候均不超过所遇到的左花括号“{”个数。
注意:
1)源程序注释中(/* … */)花括号应被忽略,不参与匹配。
2)源程序中的字符串常量不会出现花括号。
【输入形式】
要检查的C源程序文件名为input.c,在当前目录下。
【输出形式】
若花括号匹配,则向控制台输出1,并在新的一行上输出相应的花括号串;若不匹配,则向控制台输出0,同时在新的一行上输出相应的花括号串。
【样例输入】
假如当前目录下input.c文件的内容为:
include
main()
{
int a,b,i,sum1,sum2;
/{input}/
scanf("%d%d",&a,&b);
sum1=sum2=0;
for(i=a;i<=b;i++)
{
if(i%2==0)
{
sum1+=i;
}
else
{
sum2+=i;
}
}
/output}/
printf("Sum1=%d, Sum2=%d",sum1,sum2);
}
【样例输出】
1
{{{}{}}}
【样例说明】
源程序input.c中的花括号符合匹配规则,所以先输出1。然后依次输出所有出现的花括号,但注意注释中的花括号不参与匹配,也不输出。
【评分标准】
该题要求检查花括号是否匹配,共有5个测试点。上传C语言文件名为example1c.c。
【代码】
#include//it's a easy problem.
#include
int main()
{
char word;
FILE *fp;
fp = fopen("input.c","r");
char cont[51]= {};
int i = 0;
int m = 0;
int n = 0;
int numl = 0;
int numr = 0;
while(fscanf(fp,"%c",&word) != EOF)
{
if(m == 0)
{
if(word == '/')
{
m = 1;
}
}
else if(m == 1)
{
if(word == '/')
{
m = 0;
}
}
if(m == 0)
{
if(word == '{')
{
numl += 1;
cont[i++]='{';
}
else if(word == '}')
{
numr += 1;
cont[i++]='}';
}
}
if(numr > numl)
{
n = 1;
}
}
if(n == 1)
{
printf("0\n");
for(i=0;cont[i] != '\0';i++)
{
printf("%c",cont[i]);
}
}
else
{
if(numl == numr)
{
printf("1\n");
for(i=0;cont[i] != '\0';i++)
{
printf("%c",cont[i]);
}
}
else
{
printf("0\n");
for(i=0;cont[i] != '\0';i++)
{
printf("%c",cont[i]);
}
}
}
return 0;
}
PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...