2019春第十二周作业
2019春第十二周作业
这个作业属于哪个课程 | C语言程序设计Ⅱ |
---|---|
这个作业要求在哪里 | 第十二周作业 |
我在这个课程的目标是 | 能够使用c语言实现基本的程序设计,以至最后能够设计出较大的项目 |
这个作业在哪个具体方面帮助我实现目标 | 学习指针的进阶,指针函数、函数指针、指针数组、数组指针等 |
参考文献 | C语言程序设计(第3版); C Primer Plus (第6版) |
一、本周完成的作业
题目1. 6-1 计算最长的字符串长度 (15 分)
本题要求实现一个函数,用于计算有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 )
{
int a=0,i;
for (i=0; i<n; i++) {
if (strlen (*(s+i)) > a)
a = strlen (*(s+i));
}
return a;
}
2)、设计思路
3)、本题调试过程碰到的问题及解决方法
无
4)、运行结果图
题目2. 6-2 统计专业人数 (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 )
{
int sum=0;
while (head!=NULL) {
if (head->code[1]=='0'&&head->code[2]=='2')
sum++;
head=head->next;
}
return sum;
}
2)、设计思路
3)、本题调试过程碰到的问题及解决方法
无
4)、运行结果图
题目3. 6-3 删除单链表偶数节点 (20 分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:
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()
{
int n;
struct ListNode *head=NULL,*tail=NULL,*t=NULL;
scanf("%d",&n);
while(n!=-1)
{
t=(struct ListNode *)malloc(sizeof(struct ListNode));
t->data=n;
t->next=NULL;
if(head == NULL)
head=t;
else
tail->next=t;
tail=t;
scanf("%d",&n);
}
return head;
}
struct ListNode *deleteeven( struct ListNode *head )
{
struct ListNode *a=NULL,*b=NULL;
for(a = head; a != NULL; a = a->next)
{
if(a->data%2 == 0)
{
if(a == head)
{
head = head->next;
free(a);
}
else
{
b->next = a->next;
free(a);
}
}
else
b = a;
}
return head;
}
2)、设计思路
3)、本题调试过程碰到的问题及解决方法
这道题本来不怎么会,还好周五补课,老师又重点讲了链表的知识。听懂了很多,比之前好很多,虽然再看题目任然有点不懂,但已经好多了,借鉴时,看大佬代码也起码能看懂,由于对链表这一块实在不怎么会,所以感觉自己写的话,很难写出来。
另外还看到了一个之前不怎么知道的知识点,“data”,如图,
4)、运行结果图
预习作业
名称:双人飞机对战
目标:两个人的对战游戏,控制两台飞机用子弹攻击对方,并闪避对方的子弹。
项目主体功能: 1. 飞机控制
2..子弹发射
3.击中对方
4.障碍物的产生,与击毁
5.子弹升级
现阶段已做的准备工作:团队协商、任务分配
小组成员名单:陈安平、刘凯、宋官昊。
任务进度:前期准备
学习进度条
周/日期 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/2-3/8 | 三天六小时 | 50 | 1、定义、运用文件指针;2、如何打开、关闭文件3、如何读出指定文件中的数据;4、如何向指定文件中写入数据; | 字符、字符串有什么区别?二者输入、输出有没有很大不同?什么才算字符串?什么算字符?在文件中二者有没有差别? |
3/9-3/15 | 四天三小时 | 180 | 1、运用二维数组解决问题,矩阵的判断;2、对一组数的所有子数组求和 | 如何在输出时利用数组的性质 |
3/16-3/22 | 三天八小时 | 210 | 1、二维数组加深理解,二维数组与矩阵;2、选择排序法解决问题;3、二分查找法 | 二分查找法这周没练习,只是看看书上例题大致懂了,不知道真正应用时能否掌握。 |
3/23-3/29 | 三天两小时 | 120 | 1、判断回;文2、字符数组的概念及其简单运用;3、一些简单的与字符数组相关的暂时没接触补充知识,一些函数,用法等。 | 在作业运用文件指针时,一开始总是出现从文件里输不出来结果,打印不出来,后来发现可能与自己输入时格式未搞好,本来不应该出现的空格出现了,导致打印不出来结果。文件指针还不是很熟练 |
3/30-4/5 | 两天 | 150 | 1、指针的含义,变量、地址、指针变量等间的关系;2、指针变量的初始化,运用指针做一些简单运算;3、指针与数组之间的关系 | 在用指针处理字符串时,应怎样定义指针变量 |
4/6-4/12 | 三天 | 200 | 1、更深一步掌握指针与数组间的关系;2、懂得指针可以实现数组的一些功能;3、指针在碰到字符数组时的应用 | 在代码中,如果遇到要输出单个字符,%s与%c有什么区别? scanf()与 getchar 两种输入方式有区别吗?会不会在有些情况下能影响到输出结果? |
4/13-4/19 | 两天 | 170 | 1、学习了与字符串有关的一些字符串处理函数;2、学习了利用指针实现内存动态分配 | 究竟什么情况下采用内存动态分配?具体要采用哪一种动态内存分配? |
4/20-4/26 | 两天 | 135 | 1、学习了结构及结构变量的定义与运用 | 如果运用递归函数解决问题,虽然使代码简化了,更美观了。但会导致相同的运算重复进行,占内存。感觉递归弊大于利。 |
4/27-5/3 | 一天 | 1、复习了结构与数组、指针间的关系,两者之间是如何进行替换利用; | ||
5/4-5/10 | 三天 | 165 | 1、学习了递归程序的设计;2、宏的基本定义;3、文件包含等内容; | 链表知识点看了看,不是很懂 |
5/11-5/17 | 三天 | 148 | 1、学习了指针函数、函数指针、指针数组、数组指针;2、讲了链表的部分知识。 | 链表不是很会,可能是书看的少了 |
三、学习感悟
感觉这周的课就有点难度了,前面几周写的时候都很轻松,突然碰到这些比较难的东西,吃不消。感觉只凭老师上课讲的话,远远不够啊,自己下去也要在抽空看书,而且如果课前能够预习,提前对这些知识有一点概念,就会轻松很多。题目方面,前两题一开始没有很大难度,就是第三题链表,不是很懂,就托了一天。
结对编程感想
结对时,队友题目还没怎么写,而我只能在前两题上面给予他帮助。然后两个人针对第三题,先是瞎讨论了一番,发现并不会,然后看看书,最后还是看了别人的代码,看了看,有的写得很超前,看不懂,有的能看懂,不怎么理解,总之慢慢搞吧。
表格-折线图
时间 | 累计代码行数 | 累计博客字数 |
---|---|---|
第一周 | 80 | 275 |
第二周 | 50 | 883 |
第三周 | 180 | 1303 |
第四周 | 210 | 1849 |
第五周 | 120 | 1988 |
第六周 | 150 | 2717 |
第七周 | 200 | 3000 |
第八周 | 170 | 2820 |
第九周 | 135 | 2855 |
第十周 | 3945 | |
第十一周 | 165 | 4934 |
第十二周 | 148 | 2654 |