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