我感觉这段C语言代码有问题,为什么编译没错啊?

#include <stdio.h>
void SelectSort(int r[ ], int n); //用选择排序思想对数组a中的n个元素排序
const int N = 6 ;

int main (void)
{ int i;
int a[N] ; //①定义有N个元素的数组 a
printf("输入%d个整数:\n", N); //提示输入N个元素
for(int i = 0; i < N; i++) //②输入数组的N个元素
scanf("%d", &a[i]);
SelectSort(a, N); //③调用函数对数组a进行排序
printf("排序后结果为:");
for(int i = 0; i < N; i++) //④输出排序后的数组元素
printf("%d ", a[i]);
printf("\n");

return 0;
}
void SelectSort(int r[ ], int n)
{
int i, j, mink, m; //mink存放最小元素的下标
for(i = 0; i < n-1; i++)
{
mink = i; //在r[i]~r[n-1]中找最元素,用mink记录最小元素下标
for(j = i + 1; j < n; j++)
{
if(r[mink] > r[j]) mink = j;
}
if(mink != i) //如果a[i]元素不是r[i]~r[n-1]中的最小元素,则交换a[mink],a[i]
{
int t;
t = r[i]; r[i] = r[mink]; r[mink] = t;
}
}
}
这最后t被多次定义为int型,可为什么编译没错啊

1、首先,编译没错误,表明你程序没有语法错误,但并表示程序正确,因为语法正确,但你程序所要实现的功能还不一定正确
2、if(mink != i) //如果a[i]元素不是r[i]~r[n-1]中的最小元素,则交换a[mink],a[i]
{
int t;
t = r[i]; r[i] = r[mink]; r[mink] = t;
}
这段代码中,因为在循环体内,你认为t被多次定义,这是不正确的,因为t是本段程序中地局部变量,本段程序进入时,定义t,但结束时,t释放了,等下一次再进入时,重新定义的t,和原来的就没有关系了,虽然名称一样,但计算机中认为是一个新变量,而且每次用完就释放,系统并不会出现问题
你可以简单验证,在本段代码后面再用t,是不可以的
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-07

这最后t被多次定义为int型,可为什么编译没错啊------这话说得不对。全文才有这一处啊,怎么是“多次定义”呢?写在循环体内的定义,它不是“多次定义的”。请看下面的程序,它始终是同一个变量。

本回答被提问者采纳
第2个回答  2019-12-07
编译的软件只要没有逻辑上的问题的话,能编译通过就可以编译的,只会检查你的语法错误,不会考虑你的代码逻辑有没有问题。
第3个回答  2019-12-07
可能翻译是对的吧,你可以仔细的再看看,有时候翻译也不是万能的
第4个回答  2019-12-07
每次进入代码块都是一个新的局部变量

C语言这道题目没有声明也没有参数类型为啥能正常输出?
我是这样看的,这段代码存在一些语法问题,但是可以在某些C语言编译器中正常运行和输出结果。这是因为在C语言中,如果函数的定义没有指定参数类型,编译器会默认为其参数类型为int。另外,在早期版本的C语言编译器中,函数的声明也可以省略参数类型,编译器会根据函数的使用情况自动推断参数类型。具体来说...

C语言程序运行出错,编译没有错误
1、需要给主函数一个函数返回值的类型,可以为void也可以是int 2、scanf函数的语法错了,少了&

C语言为什么编程的时候编译没错,组建错误。
你说的组建错误多半是link出错吧,这个很可能是你安装的路径不是默认那个路径,于是,可能需要你自己修改一下编译器设置,你可以到网上搜一下到底是在什么地方设置。我记不清楚具体位置了,就是设置链接器的路径。在对vc进行设置的那个菜单里面找一找,里面就有各种路径设置,包括头文件路径啊,可执行文...

c语言问题,这是我写的代码,为什么编译组建都没有问题,但是运行文件后输 ...
其实你的程序是正确的。只不过,有关于float(浮点数)的BUG而已。解决这个问题有一个方法,先#include <math.h> 然后在main的第一句,调用 定义变量的后面sqrt(0); \/\/求0的平方根,但舍弃结果 \/\/这句的作用,只是为了让编译器打开浮点数支持 include <stdio.h> include "math.h"include "string...

为什么我的C语言编程时没有错误但有警告,运行不了,这个实在不晓得为什 ...
编译没有错误只是说没有语法错误。 但你的程序可能有逻辑错误。例如死循环什么的。 所以 ,编译正确不代表程序就是对的。其实只要你学习半年左右就很少出语法错误的。更多的是逻辑错误。那是侯还要靠自己一步步的调试啊 看啊,想啊。

为什么我写的c语言在编译后没错误,没警告,但是运行时却没结果。
楼主,你好!编译没有错误只能说明没有语法错误,并不能说明代码的逻辑没有错!因为编辑器主要是根据C语言的语法来检查你的代码有没有错!

C语言程序老是显示错误但是没有错是什么原因
从代码上看没有问题。如果你是新安装的编译器,那么有可能是编译器配置问题。 (Error spawning cl.exe)也有可能是你工程中加了不止一个文件。(function main )建议你鼠标点在1 errors位置,然后鼠标滚轮向上滚动,查看具体错误信息。根据错误信息分析具体原因。

请问我这个C语言程序为何编译无错 但是一打开就提示有错误需要关闭呢...
int i,j,t,*p;for(j=0;j<n-1;j++)for(i=0;i<n-1-j;i++){ if (*(p+i)<*(p+i+1))\/\/在这个被调函数中你的*p未赋值就在引用,是野指针。{ t=*(p+i);

为什么 程序 编译通过 也是正确的 但是运行的结果却不是正确的 我用...
没语法错误,有逻辑错误,特别是指针容易用错。

求教啊! C语言一个程序我编的为什么编译没错 但是一打开就哗哗的刷屏...
你的程序会刷屏的原因是你的sort函数里面有个do while语句,你在主函数中制定style的值为a,那么while(style=='b');将会永远成立,就会永远执行do语句,而do里面又有printf语句,因此你运行时会不停的输出数据,便会出现刷屏现象,其实你的程序还有其他小问题,下面是我改过之后的程序,已经运行没有...

相似回答