写出C语言中移动块的操作步骤

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/01 07:53:58

写出C语言中移动块的操作步骤
写出C语言中移动块的操作步骤

写出C语言中移动块的操作步骤
他写的东西都是代码, 而且是非常详细的注释那种的.
这个人叫管宁
你可以到网上搜搜.
我这里有给你贴出来一点,你可以看看是否合你的意:

在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子.
以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址.
#include <stdio.h>

void main(void)
{

void reversal();
static int a[10] = ; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");

}

void reversal(x,n)
int x[],n; /* 定义形式参数 */
{
int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */
int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
for (i=0;i<=m;i++)
{
j=n-1-i; /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */
temp=x;
x=x[j];
x[j]=temp;
}
}

/* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */
#include <stdio.h>

void main(void)
{

void reversal();
static int a[10] = ; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");

}

void reversal(x,n)
int *x,n; /* 定义x为指针变量 */
{
int temp,*p,*i,*j; /* 这里需要注意的是temp用与交换的时候临时存储数据的 */
i = x; /* 利用指针变量i存储数组a的起始地址 */
p = x + ((n-1)/2); /* 计算最后一次循环的时候数组a的地址 */
j = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */
for (;i<=p;i++,j--) /* 利用循环和指针进行数组元素值的交换 */
{
temp=*i; /* 用temp临时存储*i也就是循环中a实际的值 */
*i=*j;
*j=temp;
}
}

/* 此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值 */


c/c++中指针学习的两个绝好例子
对于众多人提出的c/c++中指针难学的问题做个总结:
指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的,下面是两个很经典的例子,很多书上都有,对于学习的重点在于理解*x和x的理解,他们并不相同,*x所表示的其实就是变量a本身,x表示的是变量a在内存中的地址,如果想明白可以输出观察cout<<*x"|"x;,当定义了int *x;后对x=&a的理解的问题.仔细阅读和联系下面的两个例子我想指针问题就不是难点了!
#include <stdio.h>

main()
{
int a,b; /* 定义a,b两个整形变量用于输入两个整数 */
int *point_1,*point_2,*temp_point; /* 定义三个指针变量 */
scanf("%d,%d",&a,&b); /* 格式化输入a,b的值 */
point_1=&a; /* 把指针变量point_1的值指向变量a的地址 */
point_2=&b; /* 把指针变量point_2的值指向变量b的地址 */
if (a<b)
{
temp_point=point_1; /* 这里的temp_point是用于临时存储point_1的值也就是变量a的地址的 */
point_1=point_2; /* 把point_2的值赋予point_1 */
point_2=temp_point;
/* 由于point_1的值已经改变无法找到,利用前面临时存储的也就是temp_point找回原point_1的值赋予point_2,打到把point_1和point_2值对换的目的*/
}
printf("%d,%d",*point_1,*point_2); /* 利用*point_1和*point_2也就是分辨指向b和a的方法把值显示自爱屏幕上 */
}

/* 此题需要注意和了解是的此法并没有改变变量a,b的值只是利用指针变量分别存储a和b的地址,然后再把那两个指针变量的值对换一下其实就是存储在
指针变量里面a与b的地址对换,在利用*point_1和*point_2的方式把调换后的值显示出来这里的*point_1实际就是a,此中算法并非真的改变a,b的值,而是
利用指针进行地址交换达到大小排序的目的.
*/
#include <stdio.h>

main()
{
int a,b; /* 定义a,b两个整形变量用于输入两个整数 */
int *point_1,*point_2; /* 定义三个指针变量 */
scanf("%d,%d",&a,&b); /* 格式化输入a,b的值 */
point_1 = &a; /* 把指针变量point_1的值指向变量a的地址 */
point_2 = &b; /* 把指针变量point_2的值指向变量b的地址 */
compositor(point_1,point_2); /* 调用自定义的排序涵数,把a,b的地址传递给point_1和point_2 */
printf("%d,%d",a,b); /* 打印出a,b的值 */
}

static compositor(p1,p2)
int *p1,*p2; /* 定义形式参数p1,p2为指针变量 */
{
int temp; /* 建立临时存储变量 */
if (*p1<*p2) /* 如果*p1<p2,注意这里的*p1和*p2其实就是a和b */
{
temp = *p1; /* 利用变量temp用于临时存储*p1和就是a的值 */
*p1 = *p2; /* 将*p1的值也就是a的值换成*p2的值也就是b的值,等价于a=b */
*p2 = temp; /* 将*p2的值也就是temp的值等价于b=temp */
}
}

/* 注意:此题与上题不同的是,直接改变了a于b的值达到真实改变的目的 */

写出C语言中移动块的操作步骤 设计从硫酸钾中除去所含杂质碳酸钾的试验方案(写出操作步骤) 除杂,除去下列物质中括号内的杂质,发生化学反应的写出反应方程式,并写出必要的操作步骤CO2(CO)CO(CO2)Cu(Fe)FeSO4溶液(CuSO4)溶液CuO(C)N2(O2) 如何检验Na2CO3固体中是否混入少量的NaCl杂质?写出实验操作步骤和有关的离子方程式. 如何检验Na2CO3固体中是否混入少量的NaCl杂质?写出实验操作步骤和有关的离子方程式 请你设计一个实验除去FeCl2溶液中少量的CuCl2,写出主要操作步骤和化学方程式. 为除去食盐固体中混有的CaCl2得到纯净的食盐晶体,请写出实验操作步骤 无菌操作的步骤 显微镜的操作步骤 全站仪的操作步骤? 显微镜的操作步骤 酶标仪的操作步骤! 用天平、量筒和适量的水测量大豆的密度,写出步骤和表达式并写出一处操作中为了减少误差需注意的事项 七下 测量质量的密度习题测定不沉入水中的蜡块的密度,某同学操作了如下的实验步骤:A.用天平测出铁块的质量B.在量筒中倒入适量的水C.用天平测出蜡块的质量M2D.记下量筒中倒入水后水面 金属块在空气中浮力是0.6N 水中是0.1N 金属块重122克 求的是金属块在水中受到的浮力求【实验操作的步骤】和【答案】 写出测量50ML水的质量步骤要写出操作天平的过程 C语言中int型变量的有关例题和详细的解题步骤 用下列路线合成化合物C:反应结束后,产物中仍含有未反应的A和B.8-1 请给出从混合物中分离出C的操作步骤;简述操作步骤的理论依据.请说明理由