给定程序MODI1.C中,函数 void list ( MYDATA * h )的功能是:列出带头结点单链表中所有没有删除标记的数据。调用这个函数时,传给形参 h 的是指向单链表头结点的指针。 例如,当10个结点的数据为1,2,3,4,5,6,7,8 ,10时,输出将是:34678910。 其中,各个数据所对应的删除标记是由随机数产生的。 请改正函数 list 中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main 函数和 creat 函数,不得增行或删行,也不得更改程序的结构
时间: 2023-05-24 16:05:33 浏览: 73
错误的指定部分是在循环中直接将当前结点指向下一个结点,导致删除标记未被判断。应该改为先判断当前结点是否被删除,如果没有就输出数据并将当前结点指向下一个结点,否则就跳过当前结点,继续判断下一个结点。
修改后的代码如下:
void list(MYDATA *h) {
MYDATA *p = h->next;
while (p != NULL) {
if (!p->deleted) { // 判断当前结点是否被删除
printf("%d", p->data);
if (p->next != NULL && !p->next->deleted) // 判断下一个结点是否被删除
printf(",");
}
p = p->next;
}
}
相关问题
c语言 串最后一次出现字符串,给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的..._考试资料网...
根据您提供的信息,我无法看到MODI1.C中函数fun的具体实现。但是,根据您描述的函数功能,我可以给出通用的思路:
1. 定义一个指向字符串s的指针p,初始化为s的起始地址。
2. 定义一个指向最后一次出现字符串t的位置的指针q,初始化为NULL。
3. 使用strstr函数在字符串p中查找字符串t,如果找到,则将q指向该位置,然后将p指向该位置之后的位置继续查找。
4. 如果没有找到,说明字符串t不在字符串s中,结束查找。
5. 最后返回q指向的位置,即为最后一次出现字符串t的位置。
下面是一个可能的实现:
```c
char *fun(char *s, char *t) {
char *p = s;
char *q = NULL;
while (1) {
p = strstr(p, t);
if (p == NULL) { // 没有找到
break;
}
q = p; // 更新最后一次出现的位置
p++; // 继续查找
}
return q;
}
```
需要注意的是,该函数返回的是最后一次出现字符串t的位置,如果字符串t在字符串s中只出现了一次,那么该函数返回的就是字符串t在字符串s中的位置。
给定程序MODI1.C中函数fun 的功能是:判断一个整数n是否是素数,若是返回1,否则返回0。 在main0函数中,若fun返回1输出?ES,若fun返回0输出可O!
根据描述,可以猜测程序如下:
```c
#include <stdio.h>
int fun(int n) {
if (n < 2) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n;
scanf("%d", &n);
if (fun(n)) {
printf("YES\n");
} else {
printf("NO\n");
}
return 0;
}
```
函数 `fun` 判断一个整数 `n` 是否是素数,若是返回 `1`,否则返回 `0`。在 `main` 函数中,读入一个整数 `n`,如果 `fun(n)` 返回 `1`,则输出 `YES`,否则输出 `NO`。
需要注意的是,`fun` 函数的判断方法使用的是试除法,而不是更高效的算法。如果需要判断的数很大,该程序的运行时间可能会很长。