c语言数组元素交换问题,请高手过来看看

主要问题是数组元素交换不正确,以下是代码:

#include

#include

#define PI 3.1415926

#define MAX 512

double  ARRAYR[MAX], ARRAYI[MAX], MODULUS[MAX];

int N, M, Select, P, B, L, J;

double W;

void fun1(int n)

{

for (int i = 0; i

{

if (i

{

ARRAYR[i] = 1; ARRAYI[i] = 0;

}

else{

ARRAYR[i] = ARRAYI[i] = 0;

}

}

}

void fun2(int n)

{

for (int i = 0; i

{

ARRAYI[i] = 0;

if (i <= 3)

{

ARRAYR[i] = i + 1;

}

if (4 <= i &&i <= 7)

{

ARRAYR[i] = 8 - i;

}

else

ARRAYR[i] = 0;

}

}

voidfun3(int n)

{

for (int i = 0; i

{

ARRAYI[i] = 0;

if (i

{

ARRAYR[i] = 4-i;

}

if (3

{

ARRAYR[i] = i - 3;

}

else

{

ARRAYR[i] = 0;

}

}

}

void fun4(int n)

{

for (int i = 0; i

{

ARRAYI[i] = 0;

ARRAYR[i] = cos(PI*n / 4);

}

}

void fun5(int n)

{

for (int i = 0; i

{

ARRAYI[i] = 0;

ARRAYR[i] = sin(PI*n / 8);

}

}

void SWAP(double *a, double *b)   //用于交换数组的元素

{

double temp;

temp = *a;

*a = *b;

*b = temp;

}

/*   void fun6()

{

for (int i = 0; i

{

ARRAYI[i] = 0;

ARRAYR[i] = cos(PI*8*)

}

}*/

main()

{

printf("Please enter the M:\n");

scanf_s("%d", &M);

N =(int) pow(2, M);

printf("Please select signal fun:\n");

scanf_s("%d", &Select);

switch (Select)

{

case 1:

fun1(N);

for (int i = 0; i

{

printf("%10.7lf+%10.7lf*j", ARRAYR[i], ARRAYI[i]); printf("\n");

}

break;

case 2:

fun2(N);

for (int i = 0; i

{

printf("%10.7lf+%10.7lf*j", ARRAYR[i], ARRAYI[i]); printf("\n");

}break;

case 3:

fun3(N);

for (int i = 0; i

{

printf("%10.7lf+%10.7lf*j", ARRAYR[i], ARRAYI[i]); printf("\n");

}break;

case 4:

fun4(N);

for (int i = 0; i

{

printf("%10.7lf+%10.7lf*j", ARRAYR[i], ARRAYI[i]); printf("\n");

}break;

case 5:

fun5(N);

for (int i = 0; i

{

printf("%10.7lf+%10.7lf*j", ARRAYR[i], ARRAYI[i]); printf("\n");

}break;

}

int Binary[MAX][11];

for (int j = 0; j

{

int p = j;

Binary[j][M + 1] = 0;

Binary[j][M] = j;

for (int i = 0; i

{

Binary[j][i] = p% 2;

if (Binary[j][i] == 0){ p =p/ 2; }

if (Binary[j][i] != 0){ p = (p - p % 2) / 2; }

Binary[j][M + 1] += (int)Binary[j][i]*pow(2, M -1- i);

}

for (int k = 0; k

{

printf("%d", Binary[j][k]);

}

printf("\n");

SWAP(ARRAYR+Binary[j][M],ARRAYR+Binary[j][M + 1]);   //运行发现交换结果不符合预期

SWAP(ARRAYI+Binary[j][M],ARRAYI+Binary[j][M + 1]);     //运行发现交换结果不符合预期

}

for (int i = 0; i

{

printf("%10.7lf+(%10.7lf*j)", ARRAYR[i], ARRAYI[i]); printf("\n");

}

for (L = 1; L

{

B =(int) pow(2, L - 1);

for (J = 0; J

{

P = (int)J*pow(2, M - L);

W = (double)(2 * PI / N)*P;

double cs = cos(W), sn = sin(W);

for (int k = J; k

{

double TEMP1,TEMP2;

TEMP1 = ARRAYR[k] + ARRAYR[k + B] * cs + ARRAYI[k + B] * sn;

ARRAYR[k + B] = ARRAYI[k] - (ARRAYR[k + B] * cs + ARRAYI[k + B] * sn);

ARRAYR[k] = TEMP1;

TEMP2 = ARRAYI[k] + ARRAYI[k + B] * cs - ARRAYR[k + B] * sn;

ARRAYI[k + B] = ARRAYI[k] - (ARRAYI[k + B] * cs - ARRAYR[k + B] * sn);

ARRAYI[k] = TEMP2;

}

}

}

printf("%-s", "FFT变换后的序列为:"); printf("%25s", "最右边为模值:"); printf("\n");

for (int i = 0; i

{

MODULUS[i] = sqrt(pow(ARRAYR[i], 2)+ pow(ARRAYI[i], 2));

printf("%10.7lf+(%10.7lf*j)", ARRAYR[i], ARRAYI[i]); printf("%12.7lf", MODULUS[i]); printf("\n");

}

return 0;

}

------解决思路----------------------

在SWAP调用那里打断点,看下交换的两个指针位置是否有误。SWAP函数是没有问题的

------解决思路----------------------

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。

提醒:再牛×的老师也无法代替学生自己领悟和上厕所!

单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

------解决思路----------------------

printf("before SWAP ARRAYR+%d==%lg,ARRAYR+%d==%lg\n",Binary[j][M],ARRAYR+Binary[j][M],Binary[j][M + 1],ARRAYR+Binary[j][M + 1]);

SWAP(ARRAYR+Binary[j][M],ARRAYR+Binary[j][M + 1]);   //运行发现交换结果不符合预期

printf("after SWAP ARRAYR+%d==%lg,ARRAYR+%d==%lg\n",Binary[j][M],ARRAYR+Binary[j][M],Binary[j][M + 1],ARRAYR+Binary[j][M + 1]);

printf("before SWAP ARRAYI+%d==%lg,ARRAYI+%d==%lg\n",Binary[j][M],ARRAYI+Binary[j][M],Binary[j][M + 1],ARRAYI+Binary[j][M + 1]);

SWAP(ARRAYI+Binary[j][M],ARRAYI+Binary[j][M + 1]);     //运行发现交换结果不符合预期

printf("after SWAP ARRAYI+%d==%lg,ARRAYI+%d==%lg\n",Binary[j][M],ARRAYI+Binary[j][M],Binary[j][M + 1],ARRAYI+Binary[j][M + 1]);

getchar();

------解决思路----------------------

地址不变正常,Binary[j][M]和Binary[j][M+1]的值不在[0,511]范围内就不正常了。

c语言数组最大元调换,c语言数组元素交换有关问题,请高手过来看看相关推荐

  1. c语言产生随机数调换,C语言产生随机数

    1 产生随机数的函数为:rand() 2 所在的库函数的头文件为#include 3 rand() ,它返回一个[seed, RAND_MAX(0x7fff))间的随机整数,RAND_MAX=3276 ...

  2. C语言会出现的错误,c语言,能运行但是偶尔会出现些错误,请高手们帮忙看看错在哪里啦...

    匿名用户 1级 2010-06-22 回答 printf("Now the test begin!Come on!\n"); printf("Press any key ...

  3. c语言程序输出一个桌子图案,几道程序题,请高手帮帮忙吧

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 else if( *ps>='0'&& *ps<='9')digital++; else if(____            ...

  4. 如何寻找无序数组中的第K大元素?

    如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...

  5. C语言编程>第二十六周 ① 函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。

    例题:函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换.形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动. 例如,若a所指数组中的数据依次为:11 22 33 ...

  6. 多个数字数组_三菱ST语言教学(2)——数组的使用

    上一篇文章介绍了ST基本指令的用法,和声明基本数据类型的标签,但标签除了可以声明单个的基本数据,还可以声明多个数据构成的数组(array),也可以声明结构体(struct)和功能块(function ...

  7. c语言bool怎么用_C语言中的一维数组和二维数组什么?怎么用?

    C++| 匠心之作 从0到1入门学编程[免费]​yun.itheima.com C语言除了基本数据类型之外,还提供了构造类型的数据,构造类型的数据包括数组类型.结构体类型和共用体类型.下面我们详细介绍 ...

  8. c语言用随机数定义数组中,C语言 将发生的随机数存入数组,数据不能相同

    C语言 将产生的随机数存入数组,数据不能相同 1.定义一个一维数,数组大小为24. 2.产生0~23的随机数. 3.将产生的随机数存入i数组,要求数组中的每个数据不能相同. 4.补充说明,这个子程序要 ...

  9. java数组是行优先还是列优先的语言_详解C语言数组中是以列优先吗

    如果我们按照C语言的方式存储它,也就是行优先存储的话,那么在内存中,它的形状是这样的: 这种存储方式又被称作C contiguous array. C语言数组结构列优先顺序存储的实现 (GCC编译). ...

最新文章

  1. vlookup反向查询_【Excel 函数】Vlookup 正反向查询
  2. rocketMq指定broker ip地址,适合解决云主机部署问题
  3. Office365 用户同步排错思路
  4. CoreLocation MKMapView
  5. 简单暴力到dp的优化(初级篇)
  6. 如何在学习机器学习时学习数学?
  7. 封装 Vue.js 组件库
  8. Could not create the view An unexpected exception……的问题
  9. TSP旅行商问题的Hopfield求解过程
  10. 销售订单无法使用折扣(其他可以正常使用)
  11. 广州坐标系转换大地2000_城市坐标系转换2000国家大地坐标系分析
  12. 为什么网站总显示服务器不能创建对象,IE浏览器出现“Automation 服务器不能创建对象”解决教程...
  13. 微型计算机求RAM片数,微机原理随堂练习答案及解析..doc
  14. 解决webpack打包报错: Cannot find module '@webassemblyjs/wasm-parser'
  15. Android中MVP模式
  16. jQuery菜鸟教程03
  17. [弱电工程] 视频监控存储空间的计算方法
  18. unity blend 笔记
  19. 【VMware Fusion】如何配置VMware Fusion中的Vmnet网卡
  20. Java雍俊海第三版7.3答案

热门文章

  1. 热议!“建议放学时间与父母下班时间一致”,网友:陪我一起996吗?
  2. HikariCP为什么自己造了一个FastList?
  3. Containers vs Serverless:怎么选择?
  4. linux图形化卡在开机界面,linux怎么在开机时进入图形界面
  5. 微信小程序开发者工具升级自动预览功能,福利啊
  6. face track
  7. pytorch筛选修改问题
  8. Python获取昨天、今天、明天开始、结束时间戳
  9. torch The “freeze_support()” line can be omitted if the programis not going to be frozen to produce
  10. Ubuntu 16.04 安装 miniconda