以下为《2-《计算思维(二)》基础实践二报告(模板)》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
哈尔滨工程大学
《计算思维(二)》实验报告
基础实践二
班级:
学号:
姓名:
实验时间: 2021 年 第03~13周
成绩
哈尔滨工程大学计算机基础课程教学中心
实验五:数组
实验题目1:数组元素遍历
【适用题型】编程题
【题目标题】数组元素遍历。
【问题描述】
输入一个整型数组a[10],并计算其中的前9个元素的平均值,然后将这个值替换a[9]中的内容,最后输出该数组的所有元素。
【源文件名】ex501.c
【输入形式】从键盘先后输入数组元素值,每两个值之间用空格分隔
【输出形式】在一行内输出数组的所有元素值,每两个值之间用逗号分隔
【样例输入】0 1 2 3 4 5 6 7 8 9
【样例输出】0,1,2,3,4,5,6,7,8,4
【样例说明】无
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】2
【知识点】数组;一维数组;循环结构
【章节】第6章 数组;实验五:数组
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验题目2:数组合并与排序
【适用题型】编程题
【题目标题】数组合并与排序。
【问题描述】
输入两个整数数组,每个数组有5个整数,将二者进行合并,然后按照数值从小到大排序输出。
【源文件名】ex502.c
【输入形式】有两行输入,分别为第一个数组和第二个数组的元素赋值。每行输入中的每两个数值之间用空格分隔
【输出形式】有两行输出,第一行输出为合并之后的数组元素值,第二行输出为排序后的数组元素值。每行输出中的每两个数值之间用逗号分隔
【样例输入】
9 1 5 3 7
8 0 6 4 2
【样例输出】
9,1,5,3,7,8,0,6,4,2
0,1,2,3,4,5,6,7,8,9
【样例说明】
无
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】数组;一维数组;函数;循环结构;排序算法
【章节】第6章 数组;实验五:数组
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验题目3:填充矩阵
【适用题型】编程题
【题目标题】填充矩阵。
【问题描述】
编程实现自动填充n×n矩阵元素数值,填充规则为:从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1,2,…,n×n,其中:n从键盘输入且3≤n≤20。最后向显示器输出该矩阵所有元素。
【源文件名】ex503.c
【输入形式】输入一个正整数,为矩阵的行数和列数
【输出形式】按行列顺序输出n×n矩阵的所有元素。
(1)每行n列矩阵元素均需在一行内输出显示
(2)输出每行矩阵元素后均需换行输出下一行,共输出n行
(3)每个矩阵元素数值的域宽均为4位且右对齐
【样例输入】
11
【样例输出】
11 10 9 8 7 6 5 4 3 2 1
12 49 48 47 46 45 44 43 42 41 40
13 50 79 78 77 76 75 74 73 72 39
14 51 80 101 100 99 98 97 96 71 38
15 52 81 102 115 114 113 112 95 70 37
16 53 82 103 116 121 120 111 94 69 36
17 54 83 104 117 118 119 110 93 68 35
18 55 84 105 106 107 108 109 92 67 34
19 56 85 86 87 88 89 90 91 66 33
20 57 58 59 60 61 62 63 64 65 32
21 22 23 24 25 26 27 28 29 30 31
【样例说明】在样例输出中,对于数值域宽的控制,请参见《教材》P54表3-7。输入和输出的格式控制效果如下图所示,请以此图为标准设计程序的输入和输出格式。
/
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】数组;二维数组;循环结构
【章节】第6章 数组;实验五:数组
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
【解析】
这是一个简单的二维数组元素的遍历访问问题,但是你可以把这个矩阵看成一张地图、一个计算机网络、一个居民生活区、一块广阔的农业种植区域、一个工业工厂的流水线作业平台、一个自动化物流仓库,当然你也可以把它看成一个游戏界面、一个军事沙盘或作战区域……如果你倾心其他更为复杂的问题,那么请先耐心思考一下本问题吧,也请思考和体会如何自顶向下、逐步求精的将复杂问题进行分解?如何构造程序对象和程序算法?
由于题目要求采用逆时针螺旋式填充矩阵的所有元素,因此,解题思路之一是通过设计两层的嵌套循环来解决所有矩阵元素的遍历,其中:
(1)通过外层循环来定义矩阵元素遍历的总次数问题,即所有矩阵元素都将被遍历一次的次数总和,就是n×n次。
(2)通过外层循环所包含的4个内层循环解决如何遍历的问题,即解决如何控制上下左右或东南西北四个方向按序逐步移动遍历访问的问题。
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验题目4:字串处理
【适用题型】编程题
【题目标题】字串处理。
【问题描述】
现有两个字符串s1和s2,它们最多都只能包含255个字符。编写程序,将字符串s1中所有出现在字符串s2中的字符删去,然后输出s1。
【源文件名】ex504.c
【输入形式】有两行输入。第一行输入为字符串s1,第二行输入为字符串s2
【输出形式】输出被处理过的字符串s1
【样例输入】
I love you!8767%$#&*Yeah
o7W$hB*
【样例输出(测试数据)】
I lve yu!86%#&Yea
【样例说明】无
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】数组;一维数组;字符数组;循环结构;函数;字串处理函数
【章节】第6章 数组;实验五:数组
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验题目5:寻找子串
【适用题型】编程题
【题目标题】寻找子串。
【问题描述】
有两个字符串str1和str2,它们的长度都不超过100个字符。请编程实现在str1中查找str2的初始位置。
【源文件名】ex505.c
【输入形式】有两行输入,第一行输入字串str1,第二行输入字串str2
【输出形式】一个整数。若该整数为正整数,则表示str2在str1中的初始位置。若该整数为-1,则表示str2中在str1不存在,或者str2的长度大于str1的长度
【样例输入】
Hello World!
o
【样例输出】
5
【样例说明】无
【样例输入】
How are you!
habin
【样例输出】
-1
【样例说明】无
【样例输入】
Hello World!
Hello World! I love you!
【样例输出】
-1
【样例说明】无
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】数组;一维数组;字符数组;函数;
【章节】第6章 数组;实验五:数组
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验六:指针
提示:程序片段编程题这类题型有助于认识和培养结构化(函数模块)编程方法和能力;有利于将难度较大的复杂问题分解为若干个难度较小的问题,进而有助于学习相关知识;也有助于通过代码的阅读,逐步理解和学习程序设计和算法设计思想。因此,希望大家能够耐心阅读代码,认真完成题目。
实验题目1:函数指针应用
【适用题型】程序片段编程题
【题目标题】指针形参及函数指针应用。
【问题描述】
任意输入两个整数,编写三个函数分别实现:(1)计算两个数的加法和;(2)计算两个整数的减法差;(3)交换这两个整数的数值。要求用“函数指针”调用这三个函数,结果在主函数中输出。目前已编写完成main函数,请编程实现sum函数、minus函数和swap函数,函数功能和要求如下所示。
/*
@Filename: ex601.c
@Author: Ju Chengdong
@Version: 1.0
@Date: 2021-03-18
@Description: Simple Application of Pointer
*/
#include
/*主函数*/
int main(void){
int sum(int *a, int *b);
int minus(int *a, int *b);
void swap(int *a, int *b);
int a, b;
int *pa = &a, *pb = &b;
scanf("%d,%d", &a, &b);
int (*p)(int *, int *);
p = sum;
printf("%d", (*p)(pa, pb));
p = minus;
printf("\n%d", (*p)(pa, pb));
void (*q)(int *,int *);
q = swap;
(*q)(pa, pb);
printf("\n%d,%d", a, b);
return 1;
}
/*
* 函数名称:sum
* 函数功能:对两个整数进行加法计算
* 形式参数:a,整型指针
* 形式参数:b,整型指针
* 返 回 值:int型,为两个整数的加法和
*/
int sum(int *a, int *b){
//请编程实现本函数
}
/*
* 函数名称:minus
* 函数功能:对两个整数进行减法计算
* 形式参数:a,整型指针
* 形式参数:b,整型指针
* 返 回 值:int型,为两个整数的减法差
*/
int minus(int *a, int *b){
//请编程实现本函数
}
/*
* 函数名称:swap
* 函数功能:交换两个整数数值
* 形式参数:a,整型指针
* 形式参数:b,整型指针
* 返 回 值:无
*/
void swap(int *a, int *b){
//请编程实现本函数
}
注:不得使用全局变量。
【源文件名】ex601.c
【输入形式】输入两个整数,用逗号分隔
【输出形式】有三行输出,分别为:
第1行:输出两个整数的加法和
第2行:输出两个整数的减法差
第3行:输出两个整数交换数值后的结果,用逗号分隔
【样例输入】10,20
【样例输出】
30
-10
20,10
【样例说明】无
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】指针;指针变量;指针运算;指向函数的指针;
【章节】第7章 指针;实验六:指针
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验题目2:指针作为函数参数
【适用题型】程序片段编程题
【题目标题】指针作为函数参数。
【问题描述】
一维整型数组a有5个元素,请编写assign函数和max函数分别实现为数组元素赋值和求解数组元素最大值。目前,除了assign和max这两个函数以外,其他代码已编写完成,如下所示。请编码实现上述两个函数。
#include
/*
@Filename: ex602.c
@Author: Ju Chengdong
@Version: 1.0
@Date: 2021-03-18
@Description: Pointer As Function Parameter
*/
int main(void){
void assign(int *array, int length);
int max(int *array, int length);
int a[5];
assign(a, 5); /* 为数组a元素赋值 */
printf("max=%d",max(a, 5)); /* 求数组元素最大值并输出 */
return 0;
}
/*
* 函数名称:assign
* 函数功能:通过键盘输入为一维数组元素赋值
* 形式参数:array为int型指针;length为int型,可用于表示一维数组长度
* 返 回 值:无
*/
void assign(int *array,int length){
// 请编码实现assign函数
}
/*
* 函数名称:max
* 函数功能:求解一维数组元素最大值
* 形式参数:array为int型指针;length为int型,可用于表示一维数组长度
* 返 回 值:int型,为数组元素最大值
*/
int max(int *array,int length){
// 请编码实现max函数
}
注:在程序中不得使用全局变量。
【源文件名】ex602.c
【输入形式】在assign函数中,从键盘输入整型数据为数组元素赋值,用逗号分隔
【输出形式】在main函数中,输出数组元素最大值,为整型数据
【样例输入】-9 28 76 45 34
【样例输出】max=76
【样例说明】样例输入和输出的效果如下图所示。
/
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】指针;指针变量;指针运算;指针与一维数组;
【章节】第7章 指针;实验六:指针
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
实验题目3:单词排序
【适用题型】程序片段编程题
【题目标题】单词排序。
【问题描述】
编程实现从键盘输入5个英文单词(每个单词不超过20个字母),然后将它们按照字典序(即字母从小到大的顺序)排序后打印输出。要求:编写assign函数、sort函数、show函数,分别用于实现单词的键盘输入、单词的排序、单词的输出。目前,已完成main函数的编写,请编写assign、sort和show函数,对这三个函数的定义及要求如下所示。
#include
#include
#define ROWS 5
#define COLUMNS 20
/*
@Filename: ex603.c
@Author: Ju Chengdong
@Version: 1.0
@Date: 2021-03-18
@Description: Sort Words
@Features: 基于字符数组指针(行指针)实现
*/
/*
* 函数名称:assign
* 函数功能:通过键盘输入为多个一维字符数组(字串)赋值
* 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数
* 返 回 值:无
*/
void assign(char (*arr)[COLUMNS], int rows){
// 请编码实现assign函数
}
/*
* 函数名称:show
* 函数功能:输出显示所有单词(字串)
* 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数
* 返 回 值:无
*/
void show(char (*arr)[COLUMNS], int rows){
// 请编码实现show函数
}
/*
* 函数名称:sort
* 函数功能:对多个一维字符数组(字串)进行排序
* 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数
* 返 回 值:无
*/
void sort(char(*arr)[COLUMNS], int rows){
// 请编码实现sort函数
}
int main(void){
//ch为二维字符数组,包含ROWS个单词,每个单词最多COLUMNS个字母
char ch[ROWS][COLUMNS];
//p是一个指向字符数组的指针,称为行指针,请参见教材Page189
//必须给p指定长度,否则编译不报错,运行也不报错,但会不正常
//p与ch等价,因此既可引用p,也可引用ch
char (*p)[COLUMNS] = ch;
//从键盘输入ROWS个单词,为ch赋值
assign(p, ROWS);
//对ch中的ROWS个单词进行排序
sort(p, ROWS);
//输出显示单词排序结果
show(p, ROWS);
return 0;
}
注:
(1)在assign、sort、show这三个函数中是使用一维字符数组指针(行指针)对多个单词(字串)进行逐一处理的。
(2)请注意区分“字符数 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 、成绩2、成绩3、平均成绩,以逗号分隔
第5行:第3个学生的学号、姓名、成绩1、成绩2、成绩3、平均成绩,以逗号分隔
【样例输入】
1001
LiuBeibei
100
100
71
1002
GuanYuyu
90
90
80
1003
ZhangFeifei
80
80
90
【样例输出】
3
3
1001,LiuBeibei,100,100,71,90.33
1002,GuanYuyu,90,90,80,86.67
1003,ZhangFeifei,80,80,90,83.33
【样例说明】
/
图1 标准输入与输出样例
【评分标准】正确性 + ( 性能(性能占比0%)
【难度】3
【知识点】文件系统;
【章节】第9章 文件;实验八:文件
【输入类型】( 标准输入 ( 文件 ( 命令行参数
【输出类型】( 标准输出 ( 文件
【计算机语言】C
【运行时限制】最长运行时间:( )秒;最大内存(一般不用设置):( )KB
【代码提交方式】( 源文件提交 ( 在线编辑
设计思想:
实验代码及注释:
验证与结论:
总结与心得体会:
[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《2-《计算思维(二)》基础实践二报告(模板)》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。