欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

2022/2/14——浙大版《C语言程序设计(第3版)》题目集PAT错题记录(写完了)

时间:2023-06-05
习题11-5 指定位置输出字符串 (20 分)

本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

函数接口定义:

char *match( char *s, char ch1, char ch2 );

函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。

裁判测试程序样例:

#include #define MAXS 10char *match( char *s, char ch1, char ch2 );int main(){ char str[MAXS], ch_start, ch_end, *p; scanf("%sn", str); scanf("%c %c", &ch_start, &ch_end); p = match(str, ch_start, ch_end); printf("%sn", p); return 0;}

输入样例1:

programr g

输出样例1:

rogrogram

输入样例2:

programz o

输出样例2:

(空行)(空行)

输入样例3:

programg z

输出样例3:

gramgram

//我写的错了一半,看了别人写的,只需要两个变量即可

char *match( char *s, char ch1, char ch2 ){ int i = 0, j; while(s[i] != '' && s[i] != ch1) { i++; } for(j = i; s[j] != ''; j++) { printf("%c", s[j]); if(s[j] == ch2) break; } printf("n"); return &s[i];}

习题11-7 奇数值结点链表 (20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:

struct ListNode { int data; ListNode *next;};

函数接口定义:

struct ListNode *readlist();struct ListNode *getodd( struct ListNode **L );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。

裁判测试程序样例:

#include #include struct ListNode { int data; struct ListNode *next;};struct ListNode *readlist();struct ListNode *getodd( struct ListNode **L );void printlist( struct ListNode *L ){ struct ListNode *p = L; while (p) { printf("%d ", p->data); p = p->next; } printf("n");}int main(){ struct ListNode *L, *Odd; L = readlist(); Odd = getodd(&L); printlist(Odd); printlist(L); return 0;}

输入样例:

1 2 2 3 4 5 6 7 -1

输出样例:

1 3 5 7 2 2 4 6

//呃,参考着别人写的,一点点编译过来的。这道纯粹是数据结构的题,没做过几道数据结构的题,哈哈,前面几道还很简单,突然上了难度,花了好长时间

struct ListNode *readlist(){ struct ListNode * L = NULL, *p, *q; int a; scanf("%d", &a); while(a != -1) { p = (struct ListNode *)malloc(sizeof(struct ListNode)); p->data = a; if(L == NULL) { L = p; q = p; L->next = NULL; } else { q->next = p; p->next = NULL; q = p; } scanf("%d", &a); } return L;}struct ListNode *getodd( struct ListNode **L ){ struct ListNode *p, *q, *o = NULL, *r, *l = NULL, *m, *n; for(p = *L; p != NULL; p = p->next) { if(p->data %2 == 1) { n = (struct ListNode *)malloc(sizeof(struct ListNode)); n->data = p->data; if(l == NULL) { l = n; m = n; l->next == NULL; } else { m->next = n; m = n; m->next = NULL; } } else { q = (struct ListNode *)malloc(sizeof(struct ListNode)); q->data = p->data; if(o == NULL) { o = q; r = q; o->next == NULL; } else { r->next = q; r = q; r->next = NULL; } } } (*L) = o; return l;}

今日总结:一共花了11天终于把这个习题集写完了,虽然写完了会很有成就感,但是花的时间太长了,之前浪费了太多时间,之后要补回来,接下来应该会同时写C实验指导和基础题集,希望之后能继续努力,尽快做完这两个习题集!

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。