2019春第八周作业 一.基础题 一.预习题 三.预习的主要内容 四.学习进度条 五.学习感悟 六.结对编程感想 七.表格和折线图


这个作业属于哪个课程 C语言程序设计
这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3074
我在这个课程的目标是 掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配
这个作业在哪个具体方面帮助我实现目标 让我理解了动态内存分配,熟练运用字符串处理函数
参考文献 C语言程序设计

6-1 函数实现字符串逆序 (15 分)

本题要求实现一个字符串逆序的简单函数。
函数接口定义:

void f( char *p );

函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:

#include <stdio.h>
#define MAXS 20

void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];

    ReadString(s);
    f(s);
    printf("%s
", s);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

Hello World!

输出样例:

!dlroW olleH

1.运行代码

void f( char *p )
{
	//得到最后一个元素的地址
	char *q,*end=p;
	int i=0;
	for(q=p;*q!=' ';*q!=' ');
	end=q-1;
	
	//字符串首尾交换元素
	for(q=p;q<end;q++,end--){
		char op;
		op=*q;
		*q=*end;
		*end=op;
	} 
}

2.设计思路

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

3)本题调试过称中遇到的问题及解决办法

本题比较简单,一次性通过,没有遇到问题。

4)运行截图

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

6-3 字符串的连接 (15 分)

本题要求实现一个函数,将两个字符串连接起来。
函数接口定义:

char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。
裁判测试程序样例:

#include <stdio.h>
#include <string.h>

#define MAXS 10

char *str_cat( char *s, char *t );

int main()
{
    char *p;
    char str1[MAXS+MAXS] = {' '}, str2[MAXS] = {' '};

    scanf("%s%s", str1, str2);
    p = str_cat(str1, str2);
    printf("%s
%s
", p, str1);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

abc
def

输出样例:

abcdef
abcdef

1).运行代码

char *str_cat( char *s, char *t )
{
	char *q=s;
	//找到字符串str1的末尾 
	for(;*q!=' ';q++);
	//将str2接到str1的末尾
	char *r=t;
	for(;*r!=' ';r++,q++){
		*q=*r;
	} 
	*(q+1)=' ';
	return s;
}

2).设计思路

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

3)本题调试过称中遇到的问题及解决办法

本来一开始我以为可以用字符串连接函数strcat(),觉得很简单,后来我室友说用strcat()会扣分,我就改成了不用strcat()做,没有遇到什么问题,一次性通过。

4)运行截图

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

7-1 输出学生成绩 (20 分)

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
输入格式:
输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。
输出格式:
按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。
输入样例:

3
85 90 95

输出样例:

average = 90.00
max = 95.00
min = 85.00

1)实验代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n,*p;
	scanf("%d",&n);
	
	//为数组p动态分配n个整数类型大小的空间
	if((p= (int *) calloc (n, sizeof(int)))==NULL){
		exit(1);
	} 
	
	//输入数据 
	for(int i=0;i<n;i++){
		scanf("%d", p+i);
	}
	
	double num=0;
	double max=*p;
	double min=*p; 
	
	for(int i=0;i<n;i++){
		//求和 
		num+=*(p+i);
		//求最大值
		if(*(p+i)>max){
			max=*(p+i);
		} 
		//求最小值 
		if(*(p+i)<min){
			min=*(p+i);
		}
	}
	//输出 
	printf("average = %.2f
",num/n);
	printf("max = %.2f
",max);
	printf("min = %.2f
",min);
	//释放动态分配的空间
	free(p);
	return 0; 
}

2)设计思路

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

3)本题调试过称中遇到的问题及解决办法

这题照着书上的例题做,在编译器上遇到了一些问题,解决后提交没有遇到问题,一次性通过;
exit(1)和exit(0)的区别:exit(1)表示异常退出,在退出前可以给出一些提示信息,或在调试程序中察看出错原因。exit(0)表示正常退出。

4)运行结果

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

7-4 字符串排序 (20 分)

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue green white

输出样例:

After sorted:
blue
green
red
white
yellow

1)实验代码

#include<stdio.h>
#include<string.h>
int main()
{
	char str[5][80],num[80];
	//输入 
	for(int i=0;i<5;i++){
		scanf("%s",str[i]);
	}
	
	//比较、用冒泡排序法排序 
	for(int i=1;i<5;i++){
		for(int j=0;j<5-i;j++){
			if(strcmp(str[j],str[j+1])>0){
				strcpy(num,str[j]);
				strcpy(str[j],str[j+1]);
				strcpy(str[j+1],num);
			}
		}
	} 
	//输出
	printf("After sorted:
");
	for(int i=0;i<5;i++){
		printf("%s
",str[i]);
	} 
}

2)设计思路

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

3)本题调试过称中遇到的问题及解决办法

一开始我是想用一维数组做,后发现太麻烦了,就改为用二维数组做,再用字符串处理函数就很简单的做出来了,一次性提交通过。

4)运行截图

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

一.预习题

7-3 计算平均成绩 (15 分)

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
输入样例:

5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60

输出样例:

80.00
zhang 00001
chen 21987

1)运行代码

#include<stdio.h>
//定义学生信息结构 
struct student {
	//学号
	char num[6]; 
	//姓名
	char name[10];
	//成绩 
	int sum;
}; 
int main()
{
	int z=0,n;
	//定义结构变量 
	struct student s1[10];
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%s %s %d",&s1[i].num,s1[i].name,&s1[i].sum);
		//总成绩 
		z+=s1[i].sum;
	} 
	//计算平均分
	double average=z/n; 
	printf("%.2f
",average);
	//输出平均分以下的学生
	for(int i=0;i<n;i++){
		if(s1[i].sum<average){
			printf("%s %s
",s1[i].name,s1[i].num);
		}
	}
	return 0; 
}

2)设计思路

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

3)本题调试过称中遇到的问题及解决办法

一开始我是用二维整型数组来储存学号,但发现学号不能一次性输入,必须要用循环,后来就改为二维字符数组,用gets()一次性输入每个学生的学号;开始我定义的二维字符数组每行的长度是5,在c++上运行总是过不了,看了很久代码,知道了字符数组的每行末尾会自动添加结束符号’ ’,所以要将每行长度定义为6;后来pta快结束的时候,同学告诉我要用结构类型做,我就立马照着书上例题一步一步将题目做出来了,没有遇到什么问题,一次性通过。

4)运行截图

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图

三.预习的主要内容

1.结构类型的概念与定义
2.结构的嵌套定义
3.结构变量的定义和初始化
4.结构变量的使用

四.学习进度条


周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
2/25-3/3 6h 39 一维数组的定义和引用及初始化 字符数组和整型数组的区别
3/4-3/10 12h 47 指针的定义及运用;文件的读取、写入, 处理和开关;文件的打开方. 文件的分类,什么是文本文件, 什么是二进制文件;字符数组的读取和写入
3/11-3/17 6h 57 二维数组的定义及应用 二维数组的行和列的嵌套循环输入和输出
3/18-3/24 12h 98 选择排序法、冒泡排序法和二分查找法 不清楚选择排序法和冒泡排序法的区别
3/25-3/31 20h 88 字符数组和字符串的区别,字符串的输入输出方式和格式,二维数组更高级的运用。 不清楚指针在程序中的作用
4/1-4/7 12h 70 变量、内存单元和地址之间的关系;指针变量的定义及初始化,指针变量的基本运算,指针、数组和地址间的关系 二分法查找法不太明白
4/8-4/14 11h 99 掌握数组名作为函数参数的用法,理解指针、数组和地址之间的关系,理解指针和数组可以实现相同的操作 好像忘记了,可能没有
4/15-4/21 12h 132 掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配 各个动态内存分配函数的区别还是不太清楚

五.学习感悟

这周作业相比以前比较多,但我觉得题目不是很难,但还是遇到了很多问题,有些问题是自己的粗心大意导致的,比如预习题没有用结构类型做,比如定义字符串数组长度时至少要大于输入字符串一位。还有一些是自己对知识的掌握不牢固导致的,如整型数组不能一次性输入,要用for循环才行。预习题还是要用后面要预习内容中的方法去做,最好能不用学过的方法去做。

六.结对编程感想

过程: 我们都在一个栽了跟头, 就是预习题都没用结构类型做,后来同学告诉我要用结构类型做,不然会扣分,然后照着书上的例题一起将预习题用结构类型做出来了。
感想:两个人一起做一道难题,能够彼此鼓励,彼此竞争,增强彼此做题目的定力,做起题目来也更快。

七.表格和折线图


时间 代码行数 博客字数
第一周 39 1754
第二周 47 2087
第三周 57 1993
第四周 98 2145
第五周 88 2472
第六周 70 2514
第七周 99 3127
第八周 132 3313

2019春第八周作业
一.基础题
一.预习题
三.预习的主要内容
四.学习进度条
五.学习感悟
六.结对编程感想
七.表格和折线图