【知识点详解】
1. 字符串排序:在第一套题目的程序填空中,涉及到了根据姓名的字典序对结构体数组进行排序。这需要使用`strcmp`函数,它是C语言中用来比较两个字符串的标准库函数,返回值小于0表示第一个字符串小于第二个,大于0表示第一个字符串大于第二个,等于0表示两者相同。题目要求从小到大排序,因此在判断条件中,应使用`strcmp(a[i].name, a[j].name)>0`。
2. 字符串处理:第二套程序修改中,要求找出ASCII码值最大的字符并将其放到字符串首位,同时其他字符向前移动。`q=p+i`和`while(q>p)`是寻找最大ASCII码值字符的过程,而将字符向前移动则涉及到字符串的遍历和字符的复制。
3. 数据筛选:第三套程序设计中,函数`fun`的作用是从结构体数组中筛选出指定分数范围内的学生数据,并将这些数据复制到新的数组中。这个过程涉及到了条件判断和数组的遍历,以及数组元素的拷贝。
4. 链表操作:第一套题目中,函数`fun`用于删除链表中数据域值相同的结点。链表操作通常包括遍历链表、结点的创建与销毁。`free(q)`用于释放内存,`q=p->next`和`q=q->next`则是链表节点的遍历与链接操作。
5. 排序算法:第二套题目中,`fun`函数实现了选择排序,这是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。`p=j`和`p=i`分别是在查找最小元素和完成交换过程时的关键步骤。
6. 数字处理:第三套程序设计中,`fun`函数用于找出能被7或11整除的整数并存入数组。这需要循环遍历,使用取模运算`%`来判断整除条件,然后将符合条件的数添加到数组中。
7. 数组逆置:第四套题目中,`fun`函数实现数组元素值的逆置。这通常通过两个指针分别从数组的首尾向中间遍历,交换元素实现。`for(i=0;i<n/2;i++)`遍历一半数组,`a[i]=a[n-1-i]`和`a[n-i-1]=t`实现元素交换。
8. 字符串转数字:第二套程序修改中,`fun`函数将八进制字符串转换为十进制整数。`n=*p-'0'`和`n=n*8+*p-'0'`是将字符转换为对应的数字并累加的过程,注意八进制转换涉及基数的乘法。
9. 查找功能:第四套题目中的`fun`函数在链表中查找特定值的结点,返回其在链表中的位置。`while(p!=0)`是链表遍历,`if(p->data==ch)return n;`是找到目标结点的判断,`k=fun(head, ch);`调用函数查找并返回结果。
10. 字符串处理:第三套程序修改中,删除字符串中的空白字符。`for(i=0,t=0;p[i];i++)`遍历字符串,`c[t]= ’0’;`清空新字符串。这需要理解字符串的本质,即以空字符`\0`结尾。
11. 自定义函数设计:所有题目中的`fun`函数都体现了自定义函数的设计思想,它们接受特定参数,执行特定任务,并可能返回结果。这是编程中常见的模式,体现了模块化编程的原则。
以上就是从题目中提取出的各个知识点,涵盖了字符串处理、数组操作、链表操作、排序算法、数字转换、查找功能以及字符串清理等多个方面,这些都是计算机科学尤其是编程学习中的基础内容。