//找出不是两个数组中共有的元素
//练习7-4
#include<stdio.h>
int main()
{
int n,m;
int a[10],b[10];
int i,j,k;
printf("Enter n: ");
scanf("%d",&n);
printf("Enter m: ");
scanf("%d",&m);
printf("Enter %d: ",n);
for(i=0; i<n; i++){
scanf("%d",&a[i]);
}
printf("Enter %d: ",m);
for(j=0; j<m; j++){
scanf("%d",&b[j]);
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(a[i]!=b[j])
printf("%d %d\n",a[i],b[j]);
}
}
return 0;
}
Enter n: 3
Enter m: 3
Enter 3: 1 2 3
Enter 3: 1 3 4
1 3
1 4
2 1
2 3
2 4
3 1
3 4
评价:结果是出来了,但没有直观的显示不同的结果,结果重复了。
//找出不是两个数组共有的元素
//代码改进
#include<stdio.h>
int main()
{
int n,m,flag;
int a[10],b[10];
int i,j,k;
printf("Enter n: ");
scanf("%d",&n);
printf("Enter m: ");
scanf("%d",&m);
printf("Enter %d: ",n);
for(i=0; i<n; i++){
scanf("%d",&a[i]);
}
printf("Enter %d: ",m);
for(j=0; j<m; j++){
scanf("%d",&b[j]);
}
for(i=0; i<n; i++)
{
flag=1; //要定义在第二个for循环外面
for(j=0; j<m; j++)
{
if(a[i]==b[j])//这里如果用if-else语句回全部输出,不可取
flag=0;
break; //break语句很关键,等于的以后就不在比较
}
if(flag==1)
printf("%d ",a[i]);
}
for(j=0; j<m; j++)
{
flag=1;
for(i=0; i<n; i++)
{
if(b[j]==a[i])
flag=0;
break;
}
if(flag==1)
printf("%d ",b[j]);
}
return 0;
}
Enter n: 3
Enter m: 3
Enter 3: 1 2 3
Enter 3: 1 3 4
2 3 3 4
评价:相对于代码一,可以直观的仅一次输出结果。
//找出矩阵中最大值所在的位置
//及其行下标和列下标
//例7-7
#include<stdio.h>
int main()
{
int col,i,j,row;
int a[3][2];
printf("Enter 6 intergers: \n");
for(i=0; i<3; i++)
for(j=0; j<2; j++)
scanf("%d",&a[i][j]);
//按矩阵的形式输出二维数组
for(i=0; i<3; i++)
{
for(j=0; j<2; j++)
printf("%4d",a[i][j]);
printf("\n");
}
//找出最大值 a[row][col]
row=col=0;
for(i=0; i<3; i++)
for(j=0; j<2; j++)
if(a[i][j]>a[row][col]){
row=i;
col=j;
}
printf("max=a[%d][%d]=%d\n",row,col,a[row][col]);
return 0;
}
Enter 6 intergers:
3 2
10 -9
6 -1
3 2
10 -9
6 -1
max=a[1][0]=10