一、本周作业头
| 这个作业属于那个课程 | C语言程序设计II |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/3202 |
| 我在这个课程的目标是 | 明白二级指针的概念,以及对指针数组的应用 |
| 这个作业在那个具体方面帮助我实现目标 | 对二级指针的理解进行巩固 |
| 参考文献 |
《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\n", max_len(string, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
4
blue
yellow
red
green
输出样例:
6
实验代码:
1 int max_len( char *s[], int n ) 2 { 3 int max_len = 0; 4 int i,len; 5 for(i=0;i<n;i++) 6 { 7 len=strlen(s[i]); 8 9 if(len>max_len) 10 { 11 max_len=len; 12 } 13 } 14 return max_len; 15 }
设计思路:

本题调试过程遇到的问题及解决办法:
本题实在是没有问题,之前有过类似的题目
运行结果:

本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:
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\n", countcs(head));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
1021202
2022310
8102134
1030912
3110203
4021205
#
输出样例:
3
实验代码:
1 int countcs( struct ListNode *head ) 2 { 3 int sum=0; 4 5 while(head!=NULL) 6 { 7 if(head->code[1]=='0'&&head->code[2]=='2') 8 { 9 sum++; 10 } 11 12 head=head->next; 13 } 14 return sum; 15 }
设计思路:
本题调试过程遇到的问题及解决办法:
问题:while括号里面的判断条件写错了
解决的办法:把判断条件应该为head>0
运行结果:
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:
struct ListNode {
int data;
struct ListNode *next;
};
函数接口定义:
struct ListNode *createlist();
struct ListNode *deleteeven( struct ListNode *head );
函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。
函数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("\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
实验代码:
1 struct ListNode *createlist() 2 { 3 int n; 4 5 struct ListNode *head,*tail,*p; 6 7 head=(struct ListNode*)malloc(sizeof(struct ListNode)); 8 head->next=NULL; 9 tail=head; 10 11 while(1) 12 { 13 p=(struct ListNode*)malloc(sizeof(struct ListNode)); 14 p->next=NULL; 15 16 scanf("%d",&n); 17 18 if(n==-1) 19 { 20 break; 21 } 22 23 p->data=n; 24 p->next=NULL; 25 tail->next=p; 26 tail=p; 27 } 28 29 return head; 30 } 31 32 struct ListNode *deleteeven( struct ListNode *head ) 33 { 34 struct ListNode *p,*p2; 35 int flag; 36 37 p=head; 38 p2=p->next; 39 while(p->next) 40 { 41 flag=0; 42 if(p2->data%2==0) 43 { 44 p->next=p2->next; 45 p2=p2->next; 46 flag=1; 47 } 48 if(flag==0) 49 { 50 p=p->next; 51 p2=p->next; 52 } 53 } 54 55 return head->next; 56 }
设计思路:
本题调试过程遇到的问题及解决办法:
当时看到这个题目,真心一头雾水,好不容易懂点题意了,却一直编译错误
后来有大佬指导,是函数调用这块出现了问题
运行结果:
三、预习作业
从第十三周开始,将进入课程设计阶段,请在本次作业中给出:
1.所在小组想要开发的项目的名称和目标;
答:
名称:人与鹿
目标:小游戏,两个模式:有人抓鹿的模式和生存模式
2.项目主体功能的描述;
答:
生存模式:在电脑上控制人物的移动,来躲避伤害性技能,获得增益性技能,生存越久分数越高
抓鹿模式:在电脑上控制人物的移动,来躲避伤害性技能,获得增益性技能,在规定的时间内抓到鹿,抓不到就失败,抓到就下一关。
3.现阶段已做的准备工作;
答:
有创意、目标、人员、教材书,正努力学习。
4.小组成员名单和进度安排。(课程设计阶段:13-17周)
答:
何磊(组长)李代传 颜晴 汤云云
进度安排还没有实行
四、学习感悟
还是感觉很难
五、描述结对编程过程和结对编程的优缺点
星期三是针对游戏设计,所以没有编程结对,只是在QQ上交流了下
六、学习进度条
累积代码行和博客字数:
| 时间 | 博客字数 | 代码行数 |
| 第二周 | 1010 | 45 |
| 第三周 | 1479 | 92 |
| 第四周 | 2586 | 74 |
| 第五周 | 2308 | 68 |
| 第六周 | 1791 | 112 |
| 第七周 | 2043 | 99 |
| 第八周 | 2422 | 118 |
| 第九周 | 2511 | 87 |
| 第十周 | 3338 | 0 |
| 第十一周 | 3236 | 214 |
| 第十二周 | 2987 | 167 |

| 周/日期 | 这周所用时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
| 3/9-3/15 | 10小时左右 | 200左右 | 自学二维数组 | 对矩阵的上下三角形的一些规律,运用的不熟练 |
| 3/16-3/22 | 8小时左右 | 260左右 | 选择排序法和冒泡法 | 对题目进行思路分析不够全面 |
| 3/23-3/29 | 10小时30分钟左右 | 220左右 | 在定义指针变量时需要使用指针声明符 * ,但指针声明符并不是指针的组成部分 | 什么是指针变量的初始化 |
| 3/30-4/5 | 7小时左右 | 180左右 | 理解变量、内存单元和地址之间的关系;掌握定义指针变量,使用指针变量 | 如何使用指针实现函数调用返回多个值 |
| 4/6-4/12 | 8小时左右 | 200左右 | 使用指针实现函数调用返回多个值 | 老师上课的表格,我还不能完全运用 |
| 4/13-4/19 | 9小时左右 | 236左右 | 可以根据运行时的实际存储需求分配适当的存储区 | 还不能分清什么时候用数组什么时候用字符串 |
| 4/20-4/26 | 7小时左右 | 220左右 | 了解结构的概念和定义 | 结构的定义形式还有其他类型吗 |
| 4/27-5/1 | 2小时左右 | 0 | 对于PTA 上同一个题目有不同的解法,有了了解 |
感觉有时候数组和指针可以在代码中互换 |
| 5/2-5/10 | 6小时左右 |
210左右 |
能够使用递归函数进行编程,掌握宏的基本用法 | 对新学的知识不能熟练掌握 |
| 5/11-5/17 | 4小时左右 |
167左右 |
明白二级指针的概念,以及对指针数组的应用 | 链表这种数据结构,如何使用动态内存分配操作 |
浙公网安备 33010602011771号