① c语言定义的二维数组中行i列j可以互换吗
如果你说的只是下标的名字,那当然可以互换。a[i][j] 表示i 行 j列,a[j][i] 表示j行i列。
② c语言中,这个语句是什么意思啊
tp = a;a = b;b = tp是交换了ab的指向,不影响主函数,t = *a;*a = *b;*b = t是改变了地址上的值,也就是把i和j的值互换。
所以函数中*a*b的输出对应是j=3,i=7,主函数输出ij这个没什么好说的,*p和*q还是ij的值。
③ 在C语言中如何将两个数进行互换
将两个数进行互换的方法有两种形式:
1、借助中间变量完成,此方法直观,易理解,使用最多
2、不需要中间变量,通过变量身的运算完成交换。
参考代码:
方法1:
int a=2,b=3,t;
t=a; //先将a存储到临时变量t中
a=b; //将b存储到a中
b=t; //将临时变量中的原a值存储到b中
printf("a=%d b=%d\n", a,b );
方法2:
int a=2,b=3,t;
a += b ; //把两数之和存到a中
b= a-b ; //用两数和减去b可得原a,存储到b中
a= a-b ; //因为b现在是原a值,所以,用两数和减去b(原a)可得 原b,存储到a中
此方法,还可以用异或运算来实现,原理相同。
④ C语言关于二维数组行列互换的问题
这两个坐标分别代表行和列,所以“行列互换”实际上就是这两个坐标互换啊。比如第2行第3列换成第3行第2列,不就是b[3][2]=a[2][3]吗?
⑤ 在c语言中如何将数组的最大值与最小值互换位置,求大神解答!!!
找到最大和最小值的下标,然后交换,例如:
#include <stdio.h>
main()
{
int a[10]={10,2,3,4,5,6,7,8,9,10},n=10;
int i1,i2,i;
i1=0;
for (i=0;i<n;i++)if (a[i]<a[i1]) i1=i;
i2=0;
for (i=0;i<n;i++)if (a[i]>a[i2]) i2=i;
i=a[i1]; a[i1]=a[i2];a[i2]=i;
for (i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
⑥ 一道c语言题,用二维数组行列互换问题,想来想去实在想不通划红线的地方为什么是j=i+1;不能是j=0吗
不可以
所谓行列互换是以主对角线为对称轴元素互换的.
内存循环钥匙改为从0开始,就把之前按主对角线互换的数据又再次互换了一次,就是又返回原位了
⑦ 求助c语言编写一个字节位互换
支持任意两位互换.
运行结果:
00000110 /* 输入数字, 23位是1 45位是0 */
00001010 /* 34互换后 */
00011000 /* 25也互换后 */
代码:
#include <stdio.h>
unsigned char mask(int n)
{
return 1 << (n-1);
}
void setbit(unsigned char *in, unsigned char n, unsigned char value)
{
if(value) (*in) |= mask(n);
else (*in) &= (~mask(n));
}
unsigned char getbit(unsigned char in, unsigned char n)
{
unsigned char value = in & mask(n);
if(value) return 1;
else return 0;
}
void swap(unsigned char *in, int m, int n)
{
unsigned char valuem = getbit(*in, m);
unsigned char valuen = getbit(*in, n);
setbit(in, n, valuem);
setbit(in, m, valuen);
}
void showbin(unsigned char x)
{
int i;
for(i=8;i>=1;i--){
printf("%d", getbit(x, i));
}
printf("\n");
}
int main()
{
/* 3位是1,, 2位是1, 4位是0, 5位是0. */
unsigned char a = mask(3) | mask(2);
showbin(a);
/* 34互换 */
swap(&a, 3, 4);
showbin(a);
/* 25互换 */
swap(&a, 2, 5);
showbin(a);
return 0;
}
⑧ 二级C语言程序解答
你应该是没有搞清传址的实际的实现方式。
一个一个看吧:
先看上面的这个:
void swap(int *a,int *b)
{
int t;
t=*a; *a=*b; *b=t;
}
首先你得清楚,*a和*b是函数swap声明的两个指针变量。
在main函数中调用swap(p,q)时,
由于在main函数中,已经将指针p指向i的地址(&i),q指向j的地址(&j),
所以swap(p,q)调用,
也就是
将p指向的地址赋给函数swap的指针a,
将q指向的地址赋给函数swap的指针b,
又由于指针p指向i的地址(&i),q指向j的地址(&j),
所以此时指针a指向i的地址(&i),b指向j的地址(&j)。
而对于*a,*b的赋值操作也就是对于指针a,b所指向的地址中的数据的赋值操作,
也就是对于i,j的赋值操作。
所以t=*a; *a=*b; *b=t; 实现了对于main函数中的i,j的值的交换,也就是指针p,q所指向的地址中的数据的交换
再看这个:
void swap(int *a,int *b)
{ int *t;
t=a; a=b; b=t;
}
在这里再强调一遍,首先你得清楚,*a和*b是函数swap声明的两个指针变量。
所以,在这里,
没有对于*a,*b进行操作,而是对a,b进行操作,
它和上面的代码的区别就在于,
对于*a,*b进行操作,是操作的a,b所指向的地址中的数据。
对于a,b的操作,是操作的a,b这两个指针本身所指向的地址的不同,
t=a; a=b; b=t; 这个处理只是将函数swap声明的两个指针变量a,b所指向的地址给换了一下,
也就是由:指针a指向i的地址(&i),b指向j的地址(&j)。
变成了:指针b指向i的地址(&i),a指向j的地址(&j)。
但是&i,&j中的内容并没有任何变化。
所以输出结果仍然是3 5
⑨ c语言数组行列互换问题
#include<stdio.h>
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");//括号内你缺少右边的引号
for(i=0;i<=2;i++)//注意i的取值
{
for(j=0;j<=1;j++)//注意j的取值,i,j的值你刚好弄反了
{
printf("%d",b[i][j]);
}
printf("\n");//你缺少这行代码,不能有效的显示
}
}
我已经调试过了,能正确运行,如果不行的话,提出你具体的问题!