高分悬赏3题简单C语言编程题

1 统计字母、数字和字符
统计一个文本文件中字母、数字及其他字符各有多少个。

2 删除注释
将一个C 语言源程序文件中所有注释去掉后,存入另一个文件。

3文件合并
文本文件a1.txt 和a2.txt 中包含若干从小到大排过序的整数,现要求把两个文件中的数据合起来,仍按从小到大顺序写入文件a3.txt 中,试编写相应程序。

//题目1***************
#include <stdio.h>
int chType(char c)
{
if(c>='A'&&c<='Z'||c>='a'&&c<='z') return 0; //字母
if(c>='0'&&c<='9') return 1;//数字
if(c!=' '&&c!='\t'&&c!='\r'&&c!='\n'&&c!='\b') return 2; //其它
return 3; //空白符
}

int main(int argc,char*argv[])
{
char FileNameBuf[256]={0};
int count[4]={0};
int k;
FILE* rfp;
if(argc>1) //命令行上参数带入文件名
strncpy(FileNameBuf,argv[1],255);
else //程序运行中输入
{
printf("请输入待统计的文件路径");
gets(FileNameBuf);
}
if((rfp=fopen(FileNameBuf,"rb"))==NULL)
{
printf("文件[%s]打不开",FileNameBuf);return -1;
}
printf("正在统计...");
while(!feof(rfp))
{
count[chType(k=fgetc(rfp))]++;
if(k!=3)printf("%c",k);else printf(" ");//<<<不许输出文件内容则注释掉这整行
}
fclose(rfp);
printf("\n统计情况:\n\t字母个数:%d\n\t数字个数:%d\n\t空白符:%d\n\t其它字符:%d\n",
count[0],count[1],count[3],count[2]);
printf("\t\t总共:%d\n",count[0]+count[1]+count[3]+count[2]);
return 0;
}

//题目2***************
#include <stdio.h>
#include <io.h>
#include<conio.h>
#include<string.h>
#define BUFSIZE 10240
char remarkFlag[3][3]={"//","/*","*/"};
int main(int argc,char*argv[])
{
char buf[BUFSIZE];
char *p0,*p1,*p2;
FILE *rp,*wp;
int flag=0,n=0;
if(argc!=3)
{
printf("去注释程序,调用方法:\n 命令名 源文件路径 生成文件路径");return -1;
}
if((rp=fopen(argv[1],"rt"))==NULL)
{
printf("源文件[%s]打不开",argv[1]);return -2;
}
if(access(argv[2],0)==0)
{
printf("目标文件[%s]已存在,是否要覆盖它(Y/N):",argv[2]);
int c=getch();
if(c!='Y'&&c!='y') return -3;
printf("覆盖目标文件[%s]!!!\n");
}
if((wp=fopen(argv[2],"wt"))==NULL)
{
printf("目标文件[%s]打不开",argv[2]);
fclose(rp);
return -3;
}
printf("正在处理...00000行");
while(!feof(rp))
{
printf("\b\b\b\b\b\b\b%5d行",++n);
if(buf==fgets(buf,BUFSIZE,rp))
{
Replace:
p0 = strstr(buf,remarkFlag[0]);
p1 = strstr(buf,remarkFlag[1]);
p2 = strstr(buf,remarkFlag[2]);
if(!flag&&!p0&&!p1)//没有注释的行
fputs(buf,wp);
else if(flag) //找跨行注释尾
{
if(p2)
{
p0=buf,p2++,p2++;
while(*p0++ = *p2++);
flag=0;
goto Replace;
}
}
else
{
if(p0&&(!p1||p0<p1))//先有双斜杠的注释行
{
*p0++='\n';*p0='\0';
fputs(buf,wp);
}else if(p1)//有多行注释开始 可能结束于本行,也可能在N行之后
{
*p1++='\0';*p1++='\0';
fputs(buf,wp);
flag = 1;
p0=buf;
while(*p0++ = *p1++);
goto Replace;
}
}
}
}
fclose(rp);fclose(wp);
printf("\b\b\b\b\b\b\b处理完成.\n");
return 0;
}

//题目3***************
#include <stdio.h>
typedef struct _LinkNode
{
int value;
struct _LinkNode* next;
} LinkNode;
void append(int value, LinkNode **head)
{
LinkNode* p=(LinkNode*)malloc(sizeof(LinkNode));
p->value=value; p->next=NULL;
if(*head==NULL) *head=p;
else{
int i;
LinkNode*node=*head;
LinkNode*nodetmp=NULL;
while((i=(value>node->value))&&node->next!=NULL ){
nodetmp=node;
node=node->next;
}
if(i==0){//前插
if(nodetmp){nodetmp->next=p; p->next=node;}
else{p->next=node; *head=p;}
}else{//后插
p->next=node->next;
node->next=p;
}
}
}
int pop(LinkNode **head)
{
int value=0;
if (head!=NULL)
{ value=(*head)->value;
LinkNode* p=*head;
*head=p->next;
delete p;
}
return value;
}
#define TXTMODE 1 //1:文本格式 0:二进制格式
#if (TXTMODE == 1)
#define RMODE "rt"
#define WMODE "wt"
#else
#define RMODE "rb"
#define WMODE "wb"
#endif
void main()
{
char *fn1 = "a1.txt";
char *fn2 = "a2.txt";
char *fn3 = "a3.txt";
FILE *fp1,*fp2,*fp3;
LinkNode* pHead = NULL;
int k;
if((fp1=fopen(fn1,RMODE))==NULL)
{printf("文件[%s]打不开",fn1);return;}
if((fp2=fopen(fn2,RMODE))==NULL)
{printf("文件[%s]打不开",fn2);fclose(fp1);return;}
if((fp3=fopen(fn3,WMODE))==NULL)
{printf("文件[%s]打不开",fn3);fclose(fp1);fclose(fp2);return;}
printf("读取文件[%s]和[%s],写入文件[%s]...",fn1,fn2,fn3);
while(!feof(fp1))
#if(TXTMODE==1)
if(fscanf(fp1,"%d",&k)==1)
#else
if(fread(&k,sizeof(int),1,fp1)==1)
#endif
append(k,&pHead);
fclose(fp1);
while(!feof(fp2))
#if(TXTMODE==1)
if(fscanf(fp2,"%d",&k)==1)
#else
if(fread(&k,sizeof(int),1,fp2)==1)
#endif
append(k,&pHead);
fclose(fp2);
while(pHead!=NULL){
k=pop(&pHead);
#if(TXTMODE==1)
fprintf(fp3,"%d ",k);
#else
fwrite(&k,sizeof(int),1,fp2);
#endif
}
fclose(fp3);
printf("操作完成");
}
//VC7下全部调试通过,功能全部合格
//编译后直接达到实用程度.: 不限大小,调用灵活方便
//仅题目2还不够完美,未正确处理引号对中的假注释
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-22
#include <stdio.h>
int sum(int x)
{
if(x%3==0&&x%5==0)
return 1;
else
return 0;
}
void main()
{
int i,s=0;
for(i=15;i<=300;i++)
if(sum(i)==1) s=s+1;
printf("s=%d\n",s);
}
第2个回答  2012-01-08
/*计算字符个数*/
#include "stdio.h"
void main()
{ static char a[3][80];
int i,j,m=0,n=0,o=0,p=0,k=0;
for(i=0;i<3;i++)
gets(a[i]);
for(i=0;i<3;i++)
for(j=0;j<80;j++)
{ if(a[i][j]>='A'&&a[i][j]<='Z')
m++;
else if(a[i][j]>='a'&&a[i][j]<='z')
n++;
else if(a[i][j]>='0'&&a[i][j]<='9')
o++;
else if(a[i][j]==0)
p++;
else
k++;
}
printf("m=%d,n=%d,o=%d,p=%d,k=%d",m,n,o,p,k);
}
第3个回答  2012-01-13
1.用到数组知识。2.。不知道。3.还是数组
第4个回答  2012-01-08
1
#include <stdio.h>

void main()
{
int letters=0,digits=0,others=0;
char ch;
FILE *fp;
char filename[100];

printf("请输入要读的文件名: ");
scanf("%s",filename);
if((fp=fopen(filename,"rt"))==NULL)
{
printf("cannot open file\n");
return;
}
ch = fgetc(fp);
while(!feof(fp))
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
letters++;
else if(ch>='0'&&ch<='9')
digits++;
else
others++;
ch=fgetc(fp);
}
fclose(fp);
printf("字母:%d 数字:%d 其他:%d\n",letters,digits,others);
}

2
#include <stdio.h>
#include <string.h>

char str[1000];
char str1[1000];

int StringBracket(char *str)//删除空格和制表符
{
int i,j,len;

len=strlen(str);
j=0;
for(i=0; i<len; i++)
{
if(str[i]!=' ' && str[i]!='\t')
{
str[j]=str[i];
j=j+1;
}
}
str[j]='\0';
if(str[0]=='\n') return 0;
else return j;
}

void main()
{
int zs=0,j,k=0;
FILE *fp,*fp1;
char filename[100],filename1[100];
printf("请输入要读的文件名: ");
scanf("%s",filename);
fp=fopen(filename,"rt");
if(fp==NULL)
{
printf("cannot open file\n");
return;
}
printf("请输入要写的文件名: ");
scanf("%s",filename1);
fp1=fopen(filename1,"wt");
if(fp1==NULL)
{
printf("cannot open file\n");
return;
}
while (fgets(str,1000,fp))
{
strcpy(str1,str);
j=StringBracket(str);
zs=0;
if(k==0)
{
if(j==0)
fprintf(fp1,"%s",str1);
else if(str[0]=='/')
{
if(strstr(str,"/*")) k=1;
if(strstr(str, "*/"))k=0;
zs=1;
}
}
else
{
if(strstr(str, "*/"))k=0;
zs=1;
}
if(zs==0)
fprintf(fp1,"%s",str1);
}
fclose(fp);
fclose(fp1);
}

3
#include <stdio.h>

int a[10000];

void main()
{
int i,j,k=0,t;
FILE *fp;
fp=fopen("a1.txt","rt");
if(fp==NULL)
{
printf("cannot open file\n");
return;
}
while (fscanf(fp,"%d", &t) != EOF)
{
a[k]=t;
k++;
}
fclose(fp);

fp=fopen("a2.txt","rt");
if(fp==NULL)
{
printf("cannot open file\n");
return;
}
while (fscanf(fp,"%d", &t) != EOF)
{
a[k]=t;
k++;
}
fclose(fp);
for(j=0;j<k;j++)
for(i=0;i<k-1-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}

fp=fopen("a3.txt","wt");
if(fp==NULL)
{
printf("cannot open file\n");
return;
}
for(i=0; i<k;i++)
{
fprintf(fp,"%d ",a[i]);
if(i%10==9)
fprintf(fp,"\n");
}
}
相似回答