第十二周编程总结
这个作业属于的课程 | C语言程序设计 |
这个作业要求在哪里 | |
我在这个课程的目标是 | 掌握单向链表的概念和操作 |
这个作业在哪个具体方面帮助我实现目标 | 使用指针解决问题,熟悉指针与函数之间的关系和指针作为函数返回值 |
参考文献 | C语言程序设计,百度 |
6-1 计算最长的字符串长度 (15 分)
本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。
函数接口定义:
int max_len( char *s[], int n );
其中n
个字符串存储在s[]
中,函数max_len
应返回其中最长字符串的长度。
裁判测试程序样例:
#include#include #include #define MAXN 10#define MAXS 20int max_len( char *s[], int n );int main(){ int i, n; char *string[MAXN] = {NULL}; scanf("%d", &n); for(i = 0; i < n; i++) { string[i] = (char *)malloc(sizeof(char)*MAXS); scanf("%s", string[i]); } printf("%d\n", max_len(string, n)); return 0;}/* 你的代码将被嵌在这里 */
输入样例:4blueyellowredgreen输出样例:6
实验代码:
int max_len( char *s[], int n ){ int i,j=0; for(i=0;istrlen(s[j])){ j=i; } } return strlen(s[j]);}
实验思路:题目要求的是计算所给元素中最长字符的长度,所以我的思路是依次计算每个元素的长度,然后进行比较并将最长值附在j上,将所有的元素输出后,自然也就比较了所有的元素长度,此时的j 代表的就是最长元素的长度。
实验中遇到的问题及解决方法:此题并没出现问题,一次过。
实验截图:
本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:
struct ListNode { char code[8]; struct ListNode *next;};
这里学生的学号共7位数字,其中第2、3位是专业编号。计算机专业的编号为02。
函数接口定义:
int countcs( struct ListNode *head );
其中head
是用户传入的学生学号链表的头指针;函数countcs
统计并返回head
链表中专业为计算机的学生人数。
裁判测试程序样例:
#include#include #include struct ListNode { char code[8]; struct ListNode *next;};struct ListNode *createlist(); /*裁判实现,细节不表*/int countcs( struct ListNode *head );int main(){ struct ListNode *head; head = createlist(); printf("%d\n", countcs(head)); return 0;}/* 你的代码将被嵌在这里 */
输入样例:102120220223108102134103091231102034021205#输出样例:3
实验代码:
int countcs( struct ListNode *head ){ int num=0; while(head){ if(head->code[1]=='0'&&head->code[2]=='2') num++; head=head->next; } return num; }
实验思路:判断学号的二三位数是否符合题目要求,如果符合则加一,并将所有符合的数进行累加输出。
实验中遇到的问题及解决方法:这个题问题还是蛮多的,首先我不懂->在程序中的作用,然后百度了,head->code的意思就是head所指向的结构体中包含的数据code。第二,此错误截图的问题在于我没有将判断过的数据移出,然后导致重复判断。然后我就在网上搜了下此题,发现少的东西是head=head->next,还是看不懂,然后找了黄诺诚同学,他给我的解释是将下一个元素赋给head,下一次判断从第二个元素开始。
实验截图:
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:
struct ListNode { int data; struct ListNode *next;};
函数接口定义:
struct ListNode *createlist();struct ListNode *deleteeven( struct ListNode *head );
函数createlist
从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。
函数deleteeven
将单链表head
中偶数值的结点删除,返回结果链表的头指针。
裁判测试程序样例:
#include#include struct ListNode { int data; struct ListNode *next;};struct ListNode *createlist();struct ListNode *deleteeven( struct ListNode *head );void printlist( struct ListNode *head ){ struct ListNode *p = head; while (p) { printf("%d ", p->data); p = p->next; } printf("\n");}int main(){ struct ListNode *head; head = createlist(); head = deleteeven(head); printlist(head); return 0;}/* 你的代码将被嵌在这里 */
输入样例:1 2 2 3 4 5 6 7 -1输出样例:1 3 5 7
实验代码:
struct ListNode *createlist(){ struct ListNode *head,*p,*tail; int size=sizeof(struct ListNode),data; head=NULL; scanf("%d",&data); while(data!=-1) { p=(struct ListNode*)malloc(size); p->data=data; p->next=NULL; if(head==NULL){ head=p; }else{ tail->next=p; } tail=p; scanf("%d",&data); } return head; } struct ListNode *deleteeven( struct ListNode *head ){ struct ListNode *p,*q; while(head!=NULL&&head->data%2==0) { q=head; head=head->next; free(q); } if(head==NULL){ return NULL; } p=head; q=head-> next; while(q!=NULL) { if(q->data%2==0) { p->next=q->next; free(q); }else{ p=q; } q=p->next; } return head;}
实验思路:这个题目书上有例子,只需改改条件就行了。
实验中遇到的问题及解决方法:此题按书上的流程来,并未出现错误。
实验截图:
预习作业小组还没商讨好。
学习感悟:本周的作业我感觉还是比较容易的,像第三题书上又是有例子的,然后现在感觉就是被老师所说的实验设计啊,后面的学习要求吓住了,感觉往后的生活真的是十分幸苦啊!
结对编程感悟:哎,这可能是最后一次结对编程了,实验设计就不是一个组了,黄诺诚真的挺强的,基础也好,在此过程中他帮助我解决了许多的问题,反观我怕是一直在拖后腿,希望以后还有机会和这样的大佬抱团。
优点:能提高我们的交流水平,能把我们所学到的东西最大化释放出来,毕竟讨论能有效解决很多问题。
缺点:我太菜了,水平不平衡会导致有一方懒散,总想着大佬能帮忙,还有就是因此也会导致两个人之间的交流变少。
周/日期 | 学习进度 | 代码行数 | 学到的知识简介 | 目前存在的问题 |
3.10-3.15 | 四天 | 54 | 二维数组和指针的初步了解 | 都学得比较迷糊 |
3.16-3.22 | 四天 | 76 | 数组的进一步理解及运用 | 思维能力跟不上 |
3.23-3.29 | 四天 | 98 | 调用处理字符型函数 | 不了解到底如何输入单词以及对字符串的有关判断 |
3.30-4.05 | 三天 | 71 | 指针的基本运用 | 数组方面的基本运用 |
4.06-4.12 | 三天 | 153 | 电码加密和自动售货机 | 指针与数组等其它知识的联合应用 |
4.13-4.19 | 三天 | 114 | 动态数组内存分布 | 知识涵盖面积大,不能很好的一起吸收 |
4.20-4.26 | 两天 | 67 | 结构 | 指针及二维数组知识的应用 |
4.27-5.03 | 五小时 | 0 | 看前辈的心得,对自己以后要走的路的规划 | 结构的应用 |
5.04-5.10 | 两天 | 113 | 递归函数的使用 | 不理解啊 |
5.11-5.17 | 两天 | 69 | 链表的含义及其基本操作 | 链表的深层理解 |