C语言的题目 求大佬帮看一下

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
C语言题目 求大佬帮看一下

首先说一下题目的答案是:11
程序运行了一下, 截图如下:

下面解析一下原因:
1、根据判断条件来看,当 k = 10时, while 条件不成立。
2、但是需要注意的一点是,在while条件中,使用的是 K++, 而++符号在后面。
3、++运算符使用有两种, 先+1在用, 和先使用在+1。而此处使用的明明是后者。
4、++在后, 变量k==10时,在判断不成立后, 会在进行+1运算,所以最后结果为11。
以上是我对这道题目的解析, 如果对你有帮助,请采纳一下, 谢谢。

个人也是新手,根据我的理解是,这个题目出的很奇葩呀。因为刚开始大家写c都是一个黑窗口怎么可能同时实现这些功能呢。

肯定是有一个顺序方式的,
两个函数模块。
一个是手动输入数据的,另一个是自动生成数据的,我们统称之为数据模块。
题目要求需要用户自定义选择,那我们就定义一个,选择模块。
显示方式,题目要的要求是,可以自定义的排序,例如从大到小,从小到大,我们统称之为排序模块。
最后题目要求有一个查找功能,那么我就重新定义一个,对比模块。

注意我说的模块,就是题目中所说的函数,一个函数一个函数的,我习惯称之为模块,定义好之后在主函数里面直接引用就行了。

原代码,实际效果就是冒泡排序,的确不需要k,但也不需要写i=j。

在冒泡中,依次取每一位(i)和后面所有位(j),比较大小,如果满足比较条件,对应j的值就和i值交换。

所以原代码可以直接写:

for(i=0;i<N+1;i++)
    for(j=i+1,j<N;j++)
            if(st[j].sum>st[i].sum)
            {
                t=st[i];
                st[i]=st[j];
                st[j]=t;
             }


不可以这样改,问题如下:
1。打乱for(i=0;i<N-1;i++)循环
2。if(k!=i)改成了else那就会把它下面的代码变成了第二个for里面的语句了,完全乱了。

比方2,1,4,3排序,会排成1,2,4,3,第一个for循环一次就结束了。

带标记的冒泡排序算法:它的优势是对于后部已经排好序的的数列,节省了继续向后比较的操作。
带标记的冒泡排序算法:在一次排序中,标记出最后一次进行交换元素的位置,在下次排序中,只需要比较到这个标记位置,因为后面的元素已经排好序