C语言程序设计 (谭浩强) 中的问题请教

[复制链接]
查看11 | 回复5 | 2013-1-18 16:28:24 | 显示全部楼层 |阅读模式
int main(){int i,j,p,q,s,a[10];//s是多余的printf("\n input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a);for(i=0;i<10;i++) //\\定义第二个并列的for循环语句 (用于按照0-9的递增方式排序,本程序采用逐个比较的方法排序)\\{//每一轮循环选出一个最大值,//放在剩余所有数的第一个位置,也就是a的位置i上
p=i;q=a;初始化位置,先设i就是最小值位置,a就是最大值
for(j=i+1;j<10;j++) //\\在剩余的10-i-1 个数据里挑...
回复

使用道具 举报

千问 | 2013-1-18 16:28:24 | 显示全部楼层
if(i!=p)
{s=a;
a=a[p];
a[p]=s; } 一般来说,后面3个是一个整体的,作用是交换a和a[p]内存放的数据i!=p的意思的,a和a[p]不是同一个数(但大小可能一样,只是存放地址不同)楼主可以自己试试,用一个无关的变量s,先赋值成a,然后a...
回复

使用道具 举报

千问 | 2013-1-18 16:28:24 | 显示全部楼层
for(j=i+1;j<10;j++)\\ 定义嵌套循环语句(用于将外循环变化一次的a与其后面的a[i+1]→a[10]之间的所有数组元素都比较一次\\
if(q<a[j]) { p=j;q=a[j]; }//将a跟后面的数进行比较,取出最大值赋值给q,记录下标pif(i!=p)\\如果a中的下标i跟最大值的j不...
回复

使用道具 举报

千问 | 2013-1-18 16:28:24 | 显示全部楼层
就是如果a < a[j]就将a 和a[j]的值交换if(i!=p)\\因为p=j,所以就是i!=j,如果是不同元素,才需要交换
{s=a; \\先把a的值临时保存在变量s中
a=a[p]; \\a = a[j]
a[p]=s; }\\给a[j]赋值为a原先的...
回复

使用道具 举报

千问 | 2013-1-18 16:28:24 | 显示全部楼层
if(i!=p) 说明p变化了,数组后面有数比q大s=a; a=a[p]; a[p]=s; 这里是两个值交换位置,把大的交换到最前面...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行