这个作业属于的课程 |
第十二周编程总结 |
我在这个课程的目标是 |
学习链表的概念和建立 |
这个课程在哪个具体方面帮我实现目标 |
学习链表并利用其构建信息库 |
参考文献 |
<<C语言程序设计>>,百度 |
本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。
函数接口定义:
int max_len( char *s[], int n );
其中n
个字符串存储在s[]
中,函数max_len
应返回其中最长字符串的长度。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 10
#define MAXS 20
int 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
", max_len(string, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
4
blue
yellow
red
green
输出样例:
6
1).实验代码
int max_len( char *s[], int n ) { int i,max=0; for(i=0;i<n;i++) { if(max<strlen(s[i])){ max=strlen(s[i]); } } return max; }
2)设计思路
3)本题做对过程碰到问题及解决办法
本题之前学过,没有碰到问题。
正确截图
本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:
struct ListNode {
char code[8];
struct ListNode *next;
};
这里学生的学号共7位数字,其中第2、3位是专业编号。计算机专业的编号为02。
函数接口定义:
int countcs( struct ListNode *head );
其中head
是用户传入的学生学号链表的头指针;函数countcs
统计并返回head
链表中专业为计算机的学生人数。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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
", countcs(head));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
1021202
2022310
8102134
1030912
3110203
4021205
#
输出样例:
3
1).实验代码
int countcs( struct ListNode *head ) { int num=0; while(head!=null){ if(head->code[1]=='0'&&head->code[2]=='2') num++; head=head->next; } return num; }
2)设计思路
3)本题做对过程碰到问题及解决办法
刚开始不明白链表的定义,后来通过百度和书上的一些例题对链表进行了解,再加上本题并不难,所以也没用多久时间,但也出现了一些错误,列如NULL只能用大写。
正确截图
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:
struct ListNode {
int data;
struct ListNode *next;
};
函数接口定义:
struct ListNode *createlist();
struct ListNode *deleteeven( struct ListNode *head );
函数createlist
从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−时表示输入结束,函数应返回指向单链表头结点的指针。
函数deleteeven
将单链表head
中偶数值的结点删除,返回结果链表的头指针。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
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("
");
}
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
1).实验代码
struct ListNode *createlist() { int data; struct ListNode *head,*p,*tail; int size=sizeof(struct ListNode); head=p=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 *data,*p; p=head; data=head->next; while(data!=NULL) { if(data->data%2==0) p->next=data->next; free(data) else p=p->next; data=data->next; } return head; }
2)设计思路
3)本题做对过程碰到问题及解决办法
本题如果对链表很了解,就有难度,首先对照书上写出了代码,但是由于对链表不够了解,还是出现了错误,后来下午老师讲解了链表,对链表的认识加深,发现可以用建立多个节点来解决问题,后来出现部分答案错误,后来将返回head改为head->next.
正确截图
预习作业
从第十三周开始,将进入课程设计阶段,请在本次作业中给出:
1.所在小组想要开发的项目的名称和目标;
贪吃蛇 回顾经典游戏
2.项目主体功能的描述;
和以前诺基亚手机里面的贪吃蛇那样 不过可能是画质没有那么美
3.现阶段已做的准备工作;
参考书,做好目标
4.小组成员名单和进度安排。(课程设计阶段:13-17周)
罗璇哲 夏章洋 黎志洋
作业评价
本周题目难度不是很大,但是要对链表很了解才能完成,花费的时间不长。
结对编程
本周我和结对的队员在一起进行了编程,但是本周主要讲了做游戏的一些事情,后来还是和队友一起完成了第一题。
学期总结
经过这两学期的学习比刚入学自然提升不少,但进步的空间还是有很大的,在面对一些问题时,实践能力不行,还是要加强实践能力,不能空有思路而敲不出代码。以后还是要多实践,多敲代码。
学习进度条
|
周 |
这周所花的时间 |
代码行 |
学到的知识点 |
遇到的问题 |
第二周 |
8h |
51 |
文件指针的定义 |
指针的具体用法 |
第三周 |
12h |
74 |
二维数组的定义和用其编程 |
如何使用指针对二维数组进行处理。 |
第四周 |
12h |
98 |
利用数组对一组数进行排序 |
把一些简单的问题复杂化,不能找到最佳的方法。 |
第五周 |
10h |
125 |
综合利用指针和数组解决问题 |
指针在编程中的作用 |
第六周 |
12h |
150 |
学习指针的定义和作用 |
指针在问题中如何体现出简便 |
第七周 |
10h |
128 |
学习指针和数组的关系 |
什么时候该用指针 |
第八周 |
13h |
167 |
学习字符指针和字符串处理函数 |
内存动态分配的用法 |
第九周 |
12h |
135 |
学习结构的使用 |
如何综合使用结构和指针 |
第十一周 |
12h |
148 |
学习递归函数 |
如何利用递归函数进行程序设计 |
第十二周 |
10h |
130 |
学习链表 |
利用链表解决实际问题 |