第九周学习总结
基础作业
这个作业属于那个课程 c语言程序设计
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/3125
在这个课程的目标 熟练结构
这个作业在哪个具体方面帮助我实现目标 结构
参考文献 课本 C语言程序设计
1.函数题:按等级统计学生成绩
1).实验代码
include <stdio.h>
define MAXN 10
struct student{
int num;
char name[20];
int score;
char grade;
};
int set_grade( struct student *p, int n );
int main()
{ struct student stu[MAXN], *ptr;
int n, i, count;
ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n"
);
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}
int set_grade( struct student *p, int n )
{
int i,count = 0;
for(i=0; i<n; i++)
{
if(85<=p[i].score&&p[i].score<=100 )
p[i].grade = 'A';
else if( 70<=p[i].score&&p[i].score<=84)
p[i].grade = 'B';
else if( 60<=p[i].score&&p[i].score<=69)
p[i].grade = 'C';
else
{p[i].grade = 'D';
count++; }
}
return count;
}
2).设计思路
https://img2018.cnblogs.com/blog/1582702/201904/1582702-20190426142551264-349499587.png
3).本题调试过程碰到问题及解决办法
问题:小问题,就是大于号和小于号搞错了
解决方法 :应该用&&的,通过调试发现的。
4).运行结果截图
7-1 一帮一 (15 分
(1)实验代码
include<stdio.h>
struct student {
int num; //0或1
char name[10]; //姓名
};
int main(void)
{
int i,n,j,k;
struct student s1[50],b[50];
scanf("%d",&n);
for( i=0; i<n; i++)
scanf("%d %s",&s1[i].num,s1[i].name);
for(i=0; i<n/2; i++)
{
for(j=n; j>0; j--)
{
if( s1[i].num !=s1[j-1].num&&s1[j-1].num !=2 )
{
b[i] = s1[j-1];
s1[j-1].num = 2;
break;
}
}
}
for( i=0; i<n/2; i++)
{
printf("%s %s\n",s1[i].name,b[i].name);
}
return 0;
}
(2)设计思路
https://img2018.cnblogs.com/blog/1580500/201904/1580500-20190426161554194-1993542879.jpg
(3)问题及解决办法
这题开始就是不知道怎么去判断,后面看了一下别人的,就知道了,另外没什么问题
(4)运行结果截图
2、考试座位号
1).实验代码
include<stdio.h>
struct student{
char k[17];
int sz;
int kz;
};
int main()
{
int n,i,m;
scanf("%d",&n);
struct student s[n];
for(i=0;i<n;i++){
scanf("%s %d %d",s[i].k,&s[i].sz,&s[i].kz);
}
scanf("%d",&m);
int s2[m];
for(i=0;i<m;i++)
scanf("%d",&s2[i]);
for(i=0;i<m;i++){
for(int j=0;j<n;j++){
if(s2[i]==s[j].sz){
printf("%s %d\n",s[j].k,s[j].kz);
break;
}
}
}
return 0;
}
2)设计思路
https://img2018.cnblogs.com/blog/1580500/201904/1580500-20190426162146788-1978876064.jpg
4).运行结果截图
预习作业
1.什么是递归函数:
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。
所以递归要有两个要素,结束条件与递推关系
2。优点和缺点
优点:代码简洁、清晰,易懂
缺点 递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。->效率
递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。->效率
调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能
3.归纳递归式
以上部分内容取自:https://blog.csdn.net/wf19930209/article/details/79341939 和 https://blog.csdn.net/wangzhenling/article/details/59702845
二、学习进度条
https://img2018.cnblogs.com/blog/1582702/201904/1582702-20190426153619016-1908281078.png
https://img2018.cnblogs.com/blog/1580500/201904/1580500-20190426164018088-1619600711.png
三、学习感悟:
这一周学习了结构,感觉良好,不是特别难,通过所做的题目来看,问题不大。
四、结对编程
结对编程感悟:这周交流比较少,但有些理解性的知识,让我对结构的知识点更加熟悉。