这个教程属于哪个教程 | C语言程序设计 |
这次作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/homework/3237 |
我在这个课程的目标是 | 二级指针的应用,了解指针与函数的关系,掌握指针作为函数返回值掌握单向链表的概念和操作 |
这个具体在哪个方面帮助我实现目标的 | 类似于用于数据的删除 |
参考文献 | c语言程序设 |
6-1 计算最长的字符串长度
本题要求实现一个函数,用于计算有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 m=0; for(int i=0;i<n;i++) { int t=strlen(s[i]); if(m < t) { m=t; } } return m; }
设计思路:
运行结果图:
6-2 统计专业人数
本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:
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
实验代码:
int countcs( struct ListNode *head ) { int num = 0; struct ListNode *p = head; while(p != NULL) { if(p->code[1] == '0' && p->code[2] == '2') num++; p = p->next; } return num; }
设计思路:
运行结果截图:
6-3 删除单链表偶数节点
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:
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
实验代码:
typedef struct ListNode *List; struct ListNode *createlist() { List head=NULL, tail=NULL; int t; scanf("%d",&t); while(t != -1){ List temp = (List)malloc(sizeof(struct ListNode)); temp->data = t; temp->next = NULL; if(tail==NULL) head = tail = temp; else{ tail->next = temp; tail = temp; } scanf("%d",&t); } return head; } struct ListNode *deleteeven( struct ListNode *head ) { List p=head,q; while(head && head->data%2==0){ p = head; head = head->next; free(p); } p = head; while(p && p->next){ while(p->next && p->next->data%2==0){ q = p->next; p->next = q->next; } p = p->next; } return head; }
设计思路:
运行结果截图:
预习题:
开发的项目的名称和目标 | 制作小游戏 |
项目主体功能的描述 | 像俄罗斯方块,贪吃蛇之类的游戏 |
准备工作 | 小组近期有看设计的书 |
成员名单 | 王滇,王子豪,周洪,杜伟 |
周/日期 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较的迷惑的问题 |
---|---|---|---|---|
3/11-3/17 | 八个多小时 | 35 | 预习了二维数组,利用二维数组解决实际问题 | 无 |
3/4-3/10 | 三个多小时 | 34 | 学会创建C语言中的文件,将我们所需的数据和打印出来的数据储存到文件中,学会如何将用户信息进行加密和校验 | 在用户信息·加密中,对低四位取反,高四位保持不变的操作不是很理解 |
3/18-3/24 | 七个多小时 | 137 | 二维数组的初始,选择排序,冒泡排序 | 无 |
3/25-3/31 | 七个多小时 | 82 | 判断回文,字符串,一维字符数组 | 英语单词排序那题还有一点点知识点没找好 |
4/1-4/7 | 六个多小时 | 83 | 理解变量,内存和地址之间的关系 | 预习了指针与调用函数的相结合,有点困难 |
4/8-4/14 | 五个小时 | 87 | 指针、数组和地址之间的关系 | 题目难度对我来说挺大的,很多东西还没搞懂 |
4/15-4/21 | 四个小时 | 137 | 动态内存分配,字符串函数 | 无 |
4/22-4/28 | 四个小时 | 93 | 结构体 | 无 |
5/6-5/12 | 四个小时 | 23 | 递归函数 | 很多问题,都在这次的题目当中 |
5/13-5/19 | 五个小时 | 137 | 指针函数,函数指针,单向链表等的运用 | 单向链表不知道咋用 |