⑴ c语言二维数组的比较。。。
a[NR][NC]={...}
b[rb][NC] = {..}
假定 NR,NC,rb 已知,数据已输入。
处理程序例子如下:
#include <stdio.h>
main(){
int a[4][5]= { {1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15} ,{16,17,18,19,20}};
int b[2][5]= { {6,7,8,9,10,} ,{11,12,13,14,15} };
int row[4]; // 存放各行是否要删信息。1要,0不要。
int NR=4,NC=5,rb=2;
int i,j,k,flag;
for (i=0;i<NR;i++) row[i]=0; //初始化0
for (j=0;j<NR;j++){
if (row[j]==0)
for (k=0;k<rb;k++){
flag = 0;
for (i=0;i<NC;i++){
if (a[j][i]==b[k][i]) flag++; // 统计此行中有几个数相等
}
if (flag == NC) row[j]=1; // 满足此条件的行要删
}
}
// for (i=0;i<NR;i++) printf("%d ",row[i]);printf("\n");
for (j=0;j<NR;j++){
if (row[j]==0) {
for (i=0;i<NC;i++) printf("%d ",a[j][i]);
printf("\n");
}
}
}
⑵ c语言中怎样比较两个二维数组相同
#include<string.h>
strcmp(char *s1,char *s2)
把你的2个二维数组写进去就可以了; 如果strcmp的返回值等于0说明相等
⑶ c语言二维数组与一维数组比较有相同的删掉一行,也可以赋值给另一个二维数组。
可以采用两种方式:
1 按元素赋值:
遍历一维数组,并将每个元素赋值到二维数组的对应元素上。
或者遍历二维数组,将每个元素赋值为一维数组对应值上。
优点为操作灵活,可以按照需要任意赋值。
2 当一维数组和二维数组类型相同,而且赋值顺序与一维数组中的存储顺序完全相同时,可以用memcpy的方式,直接一次性赋值。
如一维数组为a,二维数组为b,基础类型为TYPE,需赋值元素个数为n,可以调用
memcpy(b,a,sizeof(TYPE)*n);
该方法有点为操作简单,执行效率高。
不过所需满足的前提条件多。在满足上述所有条件时,用memcpy的方式更为简单。
⑷ 关于c语言 二维数组排列大小的问题
如果没看错的话,你写的代码是把二维数组每行元素按从小到大排列,而行与行之间不会进行比较,如果这是你的想法,我帮你把代码改下:
第四行笔误:for(j=0;j<3;j++)改成for(j=0;j<3;j++)。
第五行for(k=0;k<12;k++0 应是多余的吧,后面没用到k。
循环语句{for(i=0;i<3;i++)
for(j=0;j<4;j++)
{if(j<3)
{if(a[i][j]>a[i][j+1])
{t=a[i][j];a[i][j]=a[i][j+1];a[i][j+1]=t;}
if(j==3)
{if(a[i][3]>a[i+1][0])
{t=a[i][3];a[i][3]=a[i+1][0];a[i+1][0]=t;}
}
并不能起到将一行中的元素从大到小排列,若某行为6,5,1,2四数经过比较后只会得到:5,1,2,6;注意这只可以使得最后一数为最大。
而且if(j==3)
{if(a[i][3]>a[i+1][0])
{t=a[i][3];a[i][3]=a[i+1][0];a[i+1][0]=t;}
}
这行代码出现在这里也是不对的。
循环代码修改如下:int m;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{ m=0;
for(k=1;k<=3-j;k++)
if(a[i][m]<a[i][k])
{ k=m;
t=a[i][m];
a[i][m]=a[i][k];
a[i][k]=t;
}
}
这样可完成上面对每行的元素从下到大排列的目的,而行与行之间不互相比较排列。
可能你是想把全部元素从小到大排列,可利用指针来排列:
#include<stdio.h>
int main()
{
int a[3][4],*p=a[0],i,j,k,temp;
printf("please input twelve integr:")
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=1;i<12;i++) \*用冒泡法排序,每次选出最大的放到最后*\
{ k=0;
for(j=1;j<=12-i;j++)
if(*p[k]>*p[j])
{ k=j;
temp=*p[k];
*p[k]=*p[j];
*p[j]=*p[k];
}
}
printf("\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf(" %d ",a[i][j]);
}
⑸ C语言 比较两个大小不同的二维数组。返回配对成功的位置
两种方法:
1.转化为一维数组申请
2.先申请全部行首指针,再按行逐行申请
1.
a=(int *)malloc(sizeof(int),(unsigned)m*n);
使用的时候就和一般的二维数组一样。
举个例子给你:
#include "stdlib.h"
#include "stdio.h"
#include <malloc.h>
int main()
{
int i,j;
int n;//这个就是需要指定的行数
int (*p)[10];
scanf("%d",&n);//取得行数
//动态生成二维数组,指定列数为10,如果想改,自己该里面
的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int));
p=(int (*)[10])malloc(n*10*sizeof(int)); //动态申请n行10列的二维数组
for(i=0;i<n;i++)
for(j=0;j<10;j++)
p[i][j]=i*j;
for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
printf("%d,",p[i][j]);
printf("\n");
}
free(p);
return 0;
}
2.
这个也给你举个例子吧:
#include <stdio.h>
#include <malloc.h>
main()
{
int i = 0;
int j = 0;
int line = 0;
int row = 0;
int **p = NULL;
⑹ c语言 二维数组的比较
if(a[i]==b[j][0])
{
n=1;
for(k=0;k<4;k++)
n=0;
}
//根据语法规则你这一句里面的内容应该是无效的(n始终为0),so 后面的一大串都没有被执行;
⑺ 急求,C语言二维数组字符串的比较
#include<stdio.h>
#include<string.h>
#defineN113101
#defineM200
FILE*fp1,*fp2;
intmain(){
inti,j,k,cnt,n=0;
staticchara[N][M]={0};
fp1=fopen("ccc.txt","rt");
fp2=fopen("ggg.txt","wt");
while(!feof(fp1))
fscanf(fp1,"%s",a[n++]);
fclose(fp1);
for(i=0;i<n-1;i++){
cnt=1;
for(j=i+1;j<n;++i){
if(strcmp(a[i],a[j])==0){
++cnt;
for(k=j;k<n-1;++k)
strcpy(a[k],a[k+1]);
--n;
}
}
fprintf(fp2,"%s %d ",a[i],cnt);
}
fclose(fp2);
return0;
}
⑻ c语言二维数组比较大小
if(i==j==0){max=x;min=x;}
中的
i==j==0
等价于
(i==j)==0
所以当i=1 j=0时(即倒数第二轮)
其值为0==0 即1
所以 max和min被重新赋值了
这样只能比较最后两个
应该改成
if(i==0&&j==0){max=x;min=x;}
其他不变
⑼ 二维数组比大小,结果不对,C语言高手请进
#include <stdio.h>
void main ()
{int a[4][3];
int i,j,max,c,l;
printf("要比较的12个num ");
for (i=0;i<4;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]) ;
max=a[0][0];
for (i=0;i<4;i++)
for (j=0;j<3;j++)
if (a[i][j]>max){max=a[i][j]; c=i;l=j;}
printf("max=%d,i=%d,j=%d",max,c,l) ;
getch();
}
⑽ C语言中strcmp可以比较二维数组吗
C语言中strcmp可以比较二维数组吗?
不行,strcmp只能比较2个字符串,即2个一维的字符数组。如果要比较2个2维的字符串数组,必须逐个字符串元素进行比对。
#include<stdio.h>
#include<string.h>
#defineN2
voidmain()
{
//chara[N][2]={1,2,3};
//charb[N][2]={1,2,3};
chara[n][2]={"abc","hello","world"};
charb[n][2]={"abc","hello","world"};
boolmark=true;
for(inti=0;i<N;i++){
if(!strcmp(a,b)){
mark=false;
break;
}
}
if(mark)
printf("两个一样");
else
printf("不一样");
}
如果满意,欢迎采纳,谢谢
如有疑问,欢迎追问