❶ c语言文件合并
文件的合并要使用到FILE类型,以及文件的打开关闭,下面以图片文件和其它类型的文件进行合并为例,说说文件的合并:
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
FILE*fp,*ff,*ftt;
charch;
charfn1[20],fn2[20],ft[20];
printf(" 图片文件合成器 ");
printf("输入要合成的图片名称:");
scanf("%s",fn1);
printf("输入要合成的文件名称:");
scanf("%s",fn2);
printf("生成的名称:");
scanf("%s",ft);
if(!(fp=fopen(fn1,"rb")))//当不能打开图片文件的提示处理
{
printf("不能打开图片%s ",fn1);
return;
}
if(!(ff=fopen(fn2,"rb")))
{
printf("不能打开文件%s",fn2);
return;
}
if(!(ftt=fopen(ft,"wb")))
{
printf("不能打开%s",ft);
return;
}
while(!(feof(fp)))//写入图片文件
{
ch=fgetc(fp);
fputc(ch,ftt);
}
fclose(fp);
while(!(feof(ff)))//写入其它类型的文件
{
ch=fgetc(ff);
fputc(ch,ftt);
}
fclose(ff);
fclose(ftt);
system("pause");
}
要注意了,这个例子涉及的文件均要在cpp文件的同一级目录,要是不在同一级目录则要输入文件的路径,合成的文件也在cpp文件的目录下。
❷ 区间合并C语言找错误
你的代码太乱了,我整理了一下,我故意等了一天来看一看有没有人来回答,是想看看有没有人有心情看这么乱的代码。错误在你用0和1代表区间那里赋值为0的条件加 if (1 != sz[a])
/*
*Version:1.0.1
*Author:XXX
*ModifyAuthor:YB
*/
#include<stdio.h>
#defineN20
intmain(){
inti,k,n,a,s=0,p;
intsz[N]={-1},sz1[N]={-1},sz2[N]={-1},e,f;
//input
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&(sz1[i]),&(sz2[i]));
}
//inputend
//sz表示坐标,数组sz[a]为1则该位在区间;为0则不在区间
for(i=0;i<n;i++)
{
for(a=0;a<N;a++)
{
if(a>=sz1[i]&&a<=sz2[i])
{
sz[a]=1;
}
elseif(1!=sz[a])//修改在此处,如果已经在上个区间里,去不在下个区间,则
{
sz[a]=0;
}
}
}
//将列从小到大排序
for(k=1;k<n;k++)
{
for(i=0;i<n-k;i++)
{
if(sz1[i]>sz1[i+1])
{
e=sz1[i+1];
sz1[i+1]=sz1[i];
sz1[i]=e;
}
}
}
for(k=1;k<n;k++)
{
for(i=0;i<n-k;i++)
{
if(sz2[i]>sz2[i+1])
{
f=sz2[i+1];
sz2[i+1]=sz2[i];
sz2[i]=f;
}
}
}
//排序END
//统计区间元素个数
for(a=0;a<N;a++)
{
if(sz[a]==1)
{
s++;
}
}
//统计END
p=sz2[n-1]-sz1[0]+1;
if(p==s)
{
printf("%d%d",sz1[0],sz2[n-1]);
}
else
{
printf("no");
}
return0;
}
❸ C语言区间交、并问题
先排序一下,然后在大的范围中去寻找幷集,只要比较你的N个范围的大小就行了。
❹ 如何将几道C语言程序的合并
把这些程序做成子函数(不包含主函数),把各函数的声明放在一个头文件里,然后新建主函数分别调用。
❺ 合并区间C++程序怎么写
算法问题吧,先将每个区间按起始数值从小到大排序,然后读取第一个区间,判断区间结束位置是否大于下一个区间的起始位置,然后将该区间结束位置更新为两者结束区间的最大值,然后判断下一个区间,直到结束。
❻ 怎样用语言c语言实现集合的合并,交集
通过你描述的问题,正确的交集代码如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合并集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}
❼ C语言 顺序表的合并
1、c语言是没有引用的,可以使用一个const指针来模拟引用void InitList(SqList *L){L->last=0;}。
❽ 区间合并问题
未考虑前面的区间包含在后面的区间,如输入
2
23
14
你的程序将输出2。只要在 if 中多条分支即可,或:
#include<iostream>
usingnamespacestd;
intmain(){
intN;
intA[1000][2];
cin>>N;
for(inti=0;i<N;i++)
cin>>A[i][1]>>A[i][2];
intnum=N;
for(intj=0;j<N;j++)
for(intk=j+1;k<N;k++)
if(A[k][2]>A[j][1]&&A[k][1]<A[j][2]){
num--;
if(A[j][1]<A[k][1])
A[k][1]=A[j][1];
if(A[j][2]>A[k][2])
A[k][2]=A[j][2];
break;
}
cout<<num<<endl;
return0;
}
此外,你设数组下标从1开始,那么a应设成1001大小。
❾ c语言区间合并题目找错误
我觉得排序还是有必要的,按ai排序,排好以后如果ai-b(i-1)>1,那就说明区间不连续.按这个逻辑把你的代码改了下:
哦,不对,应该是ai和最大的bi的差:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
intn,min,max,i,j,m=10000;
scanf("%d",&n);
structp{
intx,y;
}t;
p*sz=newp[n];//c++不支持变长数组,用了new
for(i=0;i<n;i++){
scanf("%d%d",&sz[i].x,&sz[i].y);
}
for(i=0;i<n-1;i++){
for(j=i+1;j<=n-1;j++){
if(sz[i].x>sz[j].x){
t=sz[j];
sz[j]=sz[i];
sz[i]=t;
}
}
}
//======================
max=sz[0].y;
for(i=1;i<n;++i)
{
if(sz[i-1].y>max)
max=sz[i-1].y;
if(sz[i].x-max>1)
{
printf("no ");
delete[]sz;
return0;
}
}
//=============================
printf("%d%d",sz[0].x,sz[n-1].y);
delete[]sz;
return0;
}