C语言问题求大神详细解析

作者&投稿:戏畏 (若有异议请与网页底部的电邮联系)
C语言问题求大神详解啊~

这个函数实现了快速排序

快速排序采用递归的方法,
每次将某个数放到合适的位置后再递归处理这个数左右的子序列,
所有的数都被放到合适的位置后排序结束。

下面来分析你给的这个函数,注意子序列在原序列中的相对位置
//a为待排序原序列//left为原序列中的左指针,指向子序列中第1个数在原序列中的位置//right为原序列中的右指针,指向子序列中最后1个数在原序列中的位置void myqsort(int a[], int left, int right) {int i,last;//算出子序列中处于中间位置的数在原序列中的位置int m=(left+right)/2;//递归终止条件,左指针达到或超过了右指针if (left >= right) return;//先把子序列中处于中间位置的数和子序列最左边的数交换,作为这次待放入合适位置的数(待排序数)swap(a,m,left);//由于子序列中左数第1个数是待排序数,那么从左数第2个数开始扫描整个子序列//把扫描到的小于待排序数的那些数依次和子序列中第2、第3…个位置的数进行交换//last记录最后一个移动到前面的数所在的原序列中的新位置,它也表示了比待排序数要小的数字个数for (i=left+1,last=left; i<=right; i++)if (a[i]<=a[left])swap(a,i,++last);//由于最后一个移动到前面的数一定比待排序数要小,交换它们swap(a,left,last);//这个时候对于这个子序列来说//比待排序数小的数都到了待排序数的左边//比待排序数大的数都到了待排序数的右边//递归排序待排序数左边的子序列myqsort(a,left,last-1);//递归排序待排序数右边的子序列myqsort(a,last+1,right);}由于一开始指定的left和right一定是0和(a序列的长度-1),这样一来每轮排序都一定能保证有一个数被移动到整个序列中最合适的位置,通过递归反复对每个子序列进行排序后就能得到一个排序好的a序列了。

第二个for循环体每次只进入一次的,所以执行顺序如下
1
a[0][0]==0
a[1][1]==1
a[2][2]==2
1+0+1+2==4

答案选d
你得搞清楚函数的概念,一个函数要调用必须得有定义。当然如果调用出现在定义之后则可以直接调用,如果调用出现在定义之前,那么在调用之前需要对这个函数进行声明,声明和定义必须相同。
还有函数的返回值类型为void时表示函数没有返回值,不能使用函数的返回值。
a错 因为调用在定义之前但是没有声明
b错 函数定义的时候返回值类型为void,却欲图使用函数的返回值。
c错 函数的声明返回值为int,定义返回值为void 不相符
d正确

选D
第一步,函数声明
第二步,调用
第三步,函数定义

后面两个步骤可以互换。

在主函数中,函数的调用有两种形式:先定义,后调用 以及 函数声明调用。
我们看看A选项,函数的调用明显是在函数定义的前面,不符合“先定义,后调用”的原则。此时再调用之前要对函数声明。
B选项,虽然fun再调用之前就已经定义,但是返回值是void,也就是说这个函数是没有返回值的。那么a=fun这是不合法的。
C选项,fun函数再调用之前已经声明,但是在定义时返回值由int转换到了void,这显然是不合法的。
D选项,同样是在调用前声明,定义时与原声明完全相同,符合规则,故选D。

C语言 计算机题 求大神解答~
答:1、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是“a>=10||a<=0”。(D选项)解析:“≥”用“>=”表示,“或”用“||”表示。2、判断char型变量c是否为大写字母的表达式是“(c>='A')&&(c<='Z')”。(C选项)解析:大写字母是A~Z,加上单引号,可以直接用来判断是否符合要求...

谁能帮我解决下面的C语言问题啊,最好能说明解析过程。
答:解析:道理同第1题,执行switch(a),满足条件进入switch(b),接着满足条件执行case 0后语句,break跳出switch(b),由于跳出后没有语句break,因此接着执行switch(a)。记住一点:break语句只能跳出一个switch;3、至于这题,估计是你输错了,如果题目真这样,就是题目错了。编译都不可能通过,在...

C语言基础题,谁能帮忙解答一下,要有详细注释,谢谢
答:答案是:1 65 1.5 6.5 【解析】对于赋值符号,计算方向是从赋值符号右边往左计算的,所以我们看:a = f /= c *= (x=6.5);我们就能很容易地求出:x = 6.5;c = c * x = 10 * 6.5 = 65;(这里注意下,虽然c是字符型,但是整型也是可以赋给它的,毕竟字符也是和ASCII对应的...

C语言的几个问题,请高手指教
答:1.在C语言中,char型数据在内存中的存储形式是___.A)补码 B)反码 C)原码 D)ASCII码 答案是D,但是在某些资料中说到“数据在内存中是以补码形式存放的”,这使我有些迷惑不解,请各位不吝指教。2.表达式18/2*sqrt(4.0)/8的数据类型为___A)int B)float C)double D)不确定 答案是C,...

C语言选择题8,9题,求大神给个具体解答思路和解析,谢谢了,在线等...
答:解析:B 选项中 char *p = &s;,该句无意义,由于 s 已经是一个 char * 变量了,再进行 & 操作符只会使它变为一个 char ** 的表达式,赋值到 p 中。C 选项中 char *p; p = *s;,该句无意义,只是把一个 char 表达式强制转换成 char * 表达式赋值到 p 中。D 选项中 char *p; ...

一道c语言的计算题。求细致一点的讲解~~~追加!!
答:题目:输入两个整数 x 和 y,求它们的和、差、积、商、余数。这是一道比较基础的 C 语言计算题目,可以通过输入两个整数,然后使用加、减、乘、除等运算符进行计算,最后输出结果。下面是一份示例代码,给你参考:include <stdio.h> int main() {int x, y;printf("请输入两个整数:\n");...

两道很基础的C语言题 求求好心人帮忙给出答案和解析
答:第一题,从题目看,main中输入了一个字符数组到item,并把这个item传给delnum处理,delnum中的那个循环,是逐个判断s[i]是否是小于'0'或者大于9,即判断s[i]是否非数字,如果非数字,则用s[j++]=s[i]来将内容保存,举个例子,比如输入a9,在delnum中,第一次循环i=0,s[0]为'a',满足if...

计算机C语言,有谁会求帮助啊,看不懂?
答:刚刚看到同样一个问题,是同一个人吗?如果是的话就删除一个吧。链接:同样问题答案 第一题解析:变量:int i = 10, j = 5;运算符=和%=的优先级是同级,结合性均为自右向左,所以先算右边的%=运算符,即先算 i%=j,这个表达式相当于 i=i%j,i = 10 % 5,结果为0,然后再把 0 赋...

C语言问题求大神详细解析
答:声明和定义必须相同。还有函数的返回值类型为void时表示函数没有返回值,不能使用函数的返回值。a错 因为调用在定义之前但是没有声明 b错 函数定义的时候返回值类型为void,却欲图使用函数的返回值。c错 函数的声明返回值为int,定义返回值为void 不相符 d正确 ...

请C语言高手帮忙做几道选择题(能解析一下最好),急~~!
答:1、在main函数中定义的变量称为全局变量(错)2、while语句的循环体不能是复合语句(错)3、同一数组中可以储存不同类型的值(错)4、不能用运算符==和!=来比较结构(对)5、在C语言中,函数可以递归调用和递归定义(错)6、静态外部变量只限于本文件中使用(错)7、break语句可用于程序的任何地方...