C语言的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的一个问题相关的知识,希望对你有一定的参考价值。

int ast(int x,int y,int *cp,int *dp)

*cp=x+y;
*dp=x-y;

main()

int a,b,c,d;
a=4;
b=23;
ast(a,b,&c,&d);
printf("%d%d\n",c,d);

运行结果为27-19,请解释谢谢

其实你看不懂这里的原因是由于你对指针学习的不是很好。上面的那个方法后面两个参数是指针,所以你给它传值的时候要传递一个地址。
&运算符的意思就是去c和d的地址给方法。到了方法后*的意思就是去该地址中的值,等于说把你传递过来的两个地址里面的值改成了别的,比如说c地址里面原来假设是个0,现在把这个地址里的值改为a+b。当推出这个方法后,c还是指向原来的内存地址,但是地址里面的内容已经通过方法给改变了。所以输出的是27. 以后出题的时候给点分吧。很累的。
参考技术A main()

int a,b,c,d;
a=4;
b=23;
c=a+b;
d=a-b;
printf("%d%d\n",c,d);

你的程序跟上面的这个程序是一样的,只不过你的是进行了函数的调用,你分别把a,b,c,d传给了函数ast里的形参x,y,cp,dp,只不过cp,dp是指针,它就相当于直接对c,d进行赋值。
就是这样。
参考技术B 因为c,d是以地址的方式传递到ast函数中,cp和dp分别指向c,d,所以对*cp和*dp的改变其实就是对c,d的改变.而x,y是ast()的内部变量,相当于
int x,y;
x=a;
y=b;
x,y的值的改变不会影响main()里的变量,x,y所占用的空间也会随ast()的调用完成而释放.
参考技术C 传值、传址的问题,上面已经说的很详细了,我就不废话了

c语言中值滤波问题?

中值滤波是信号处理中一种常用的滤波算法,它是指在在一维信号数据中对目标信号给一个模板,该模板以某一数据为中心的m(m为大于1的奇数)个数据,构成一个滤波模板,再用模板中的m个数据排序后的中间值来代替原来数据值。对原始信号中的每一个数据均进行如上处理即可得到处理后的信号。注意:模板大小为m时,信号最初的m/2个数据和最后的m/2个数据无需处理,例如m为3时,第一个和最后一个数据无需处理。

编写一个主函数,输入n(n由用户输入决定)个int 型数据,并存入数组;
编写一个函数void median(int * data, int n, int m), 对长度为n的数据实现模板为m的中值滤波;
编写一个函数 int find(int * data, int n),寻找滤波后的n个数据中出现次数最多的数据(有同样多次数时取某一个即可),返回该数据;
在主函数中调用函数对用户输入的数据完成中值滤波和出现次数最多数据的输出。
#include<stdio.h>
void median(int * data, int n, int m);
int find(int * data, int n);
int main()

int i,n,m,*a[100];
printf("决定输入数组的个数");
scanf_s("%d", &n);
printf("决定模板大小");
scanf_s("%d", &m);
printf("输入数组");
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);
median(*a, n, m);
printf("中值滤波后出现次数最多的数据是%d", find(*a, n));


void median(int * data, int n, int m)


int i, j, k, temp, b[1000];
for (i = m / 2; i < n - m / 2; i++)

for (j = i - m / 2; i <= i + m / 2; j++)

k = 0;
b[k] = *(data + j);
k++;

for(k=0;k<m;k++)
for (j = 0; j < m - 1 - k; m++)

if (b[j] > b[j + 1])

temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;



*(data + i) = b[m / 2];




int find(int * data, int n)

int i,j,k=0,max,b[1000];
for (i = 0; i < n; i++)

for (j = i + 1; j < n; j++)

if (*(data + j) == *(data + i))
k++;

b[i] = k;

for (i = 1; i < n; i++)

if (b[i] > b[i - 1])
max = b[i];

return max;

以上是我写的代码,但是没有任何输出,求解决!

1. 是规定做中值滤波的点不含边缘的点(取决于中值滤波窗口大小)。 2,对图像边缘部分的信息进行镜像处理。 参考技术A #include <stdio.h>
#include<stdlib.h>

void median(int* data, int n, int m);
int find(int* data, int n);
int main()

int i, n, m, a[100];
printf("决定输入数组的个数:");
scanf_s("%d", &n);
printf("决定模板大小:");
scanf_s("%d", &m);
printf("输入数组:");
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);

for (i = 0; i < n; i++)
printf_s("%d ", a[i]);
printf_s("\n");
median(a, n, m);

for (i = 0; i < n; i++)
printf_s("%d ", a[i]);
printf_s("\n");
printf("中值滤波后出现次数最多的数据是%d\n", find(a, n));


void median(int* data, int n, int m)


int i, j, k, temp, b[1000],c[1000];
int j_tmp;
for (i = 0; i < n ; i++)

k = 0;
for (j = i - m / 2; j <= i + m / 2; j++)

if (j < 0)

j_tmp = 0;

else

j_tmp = j;

b[k] = *(data + j_tmp);
k++;

for (k = 0; k < m; k++)
for (j = 0; j < m - 1 - k; j++)

if (b[j] > b[j + 1])

temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;



c[i] = b[m / 2];



for (i = 0; i < n; i++)

*(data + i) = c[i];



int find(int* data, int n)

int i, j, k = 0, max = 0, b[1000];
for (i = 0; i < n; i++)

for (j = i + 1; j < n; j++)

if (*(data + j) == *(data + i))
k++;

b[i] = k;

for (i = 1; i < n; i++)

if (b[i] > b[i - 1])
max = b[i];

return max;

以上是关于C语言的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

一个C语言问题

C语言的一个问题

c语言问题

一个c语言的问题

c语言问题?????????

关于C语言的语法中类型转换的一个问题。求教C语言高手。