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

#include<stdio.h>voidSelectSort(intr[],intn);//用选择排序思想对数组a中的n个元素排序constintN=6;intmain... #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型,可为什么编译没错啊
展开
 我来答
匿名用户
2019-12-07
展开全部
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,是不可以的
听不清啊
高粉答主

2019-12-07 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

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

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
死灵司令路西法

2019-12-07 · TA获得超过11.3万个赞
知道大有可为答主
回答量:3.2万
采纳率:95%
帮助的人:1423万
展开全部
编译的软件只要没有逻辑上的问题的话,能编译通过就可以编译的,只会检查你的语法错误,不会考虑你的代码逻辑有没有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
束凌春36
2019-12-07 · 贡献了超过423个回答
知道答主
回答量:423
采纳率:3%
帮助的人:28.3万
展开全部
可能翻译是对的吧,你可以仔细的再看看,有时候翻译也不是万能的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2019-12-07 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2305万
展开全部
每次进入代码块都是一个新的局部变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式