高分悬赏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");
}
}

求高手解答一些简单的C语言题目!(高分悬赏)
1、Before GlobalPlusPlus(), it is 1 Before ++, it is 1 After ++, it is 2 After GlobalPlusPlus(), it is 2 2、over!3、(1)printf("Input a year:");scanf("%d",&year);(2)(0==year%4 && 0!=year%100) || 0==year%400 4、(1)s[i]!='\\0'(2)s[j]=s[i];5...

C语言编写一个程序,急用!!高分悬赏(正确答案追加分数)
printf("%d + %d = %d\\t", plu[j][0], plu[j][1], plu[j][2]);if(plu[j][2] != plu[j][3])printf("(正确答案为%d)", plu[j][3]);printf("\\n");} printf("输入任意键返回主菜单\\n");

高分悬赏!!!用C语言编一程序。将大写26个字母,小写26个字母,0到9十个...
for(int j=0;j<8;j++)printf("%c",a[j]);printf("\\n");x++;} }

...C语言!救人一命胜造七级浮屠!高分悬赏,选中的好加100!谢谢了!_百度...
9.十进制数25的二进制数是:( 11001 )10.执行下面语句后,m=( 2 )int m=3,z=1;m=(m<z)?m:++z 11.系统默认的c语言源文件的扩展名为( .c ),经过编译生成的目标文件扩展名为( .obj ),经过连接后生成的可执行文件扩展名为( .exe )。12.计算机程序设计语言的...

高分悬赏 求三维数据点C语言插值计算程序
计算这个问题的c语言程序如下:minclude stdio includeM<nath.h> Main(){ Float x0[4]={ 0.46, 0.47,0.48,0.49};Float y0[4]={ 0.484655 ,0.4903745 ,0.502750 ,0.511668};Float x, y;Int n, rtn;N=4;X=0.472;Rth=lagrange(x0,y0,n,x,&y);If(rtn=0){ Prinf(“Y(...

图中找回路 C语言编程 跪求大神帮助 高分悬赏 采纳 追加分数
简单提示:(1)可以用矩阵表示图 (2)用深入优先(DFS)从任 一顶点v0开始搜索,在搜索过程中标记访问过的顶点和边,如果有某个顶点未访问,且该顶点有一条边与v0相连,即找到一条回路。伪码差不多是这个样子吧。int DFS(Graph G,int vj){ visited[vj]=TRUE;for(vj所有邻接点vi){ if(visited...

高分悬赏,用C语言实现:获取汉字的首字母。
如果想知道一个汉字的首字母,而且不用汉字拼音对照,只有一种办法,就是根据汉字的GB2312编码规则找到规律,然后对比汉字编码属于哪个字母段,我以前写过一个Minigui的检索,就这样搞的 ,分类表见参考资料 参考资料:http:\/\/hi.baidu.com\/yunlongchn\/blog\/item\/f6e16ffbd4ea961b6d22ebc8.html ...

C语言方程求解(高分悬赏)
void main()下面那行错误 提示信息为main must return int 去掉void看是不是你要的结果,我把你上面的复制到Dev-C++上编译运行的,就出现上面的错误

高分悬赏这道题的解法(C或C++,也可以是思路)
首先C是最大的并且是三位数,所以A的百位数只可能是1 2 3 再来看B,应为B是A的两倍,所以B的百位数只可能是2到6之间,3*A的最大值只有987,所以A<325,所以B的百位数只可能到6。然后C的百位数就是3到9之间。以上分析当然是一个笼统的分析而已,可以更加详细的分析这3个数之间的关系,例如...

用C语言编程组合与排列的生成,很着急。。高分悬赏。下周要交。悬赏可以...
void combination(int now,int lenght);void arrange();int main(){ scanf("%d %d", &m, &n);combination(1, 0);k = 0;arrange(0);printf("总共有%d种排列方式\\n", k);return 0;} void combination(int now, int lenght){ int i;if (lenght == n){ for (i = 0;i < n;i...

相似回答