这个作业属于哪个课程 | C语言程序设计Ⅱ |
这个作业的要求在哪里 | |
我在这个课程的目标是 | 学会运用指针并复习数组的使用 |
这个作业在哪个具体方面帮助我实现目标 | 用指针和数组 |
参考文献 |
第六周作业
一 1 、求两数平方根之和
函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
函数接口定义:
double fun (double *a, double *b);
其中
a
和b
是用户传入的参数。函数求a
指针和b
指针所指的两个数的平方根之和,并返回和。
裁判测试程序样例:
#include#include double fun (double *a, double *b); int main ( ){ double a, b, y;scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y );return 0;}/* 请在这里填写答案 */
输入样例:
12 20
输出样例:
y=7.94
实验代码
double fun (double * a, double * b){ double c; c=sqrt (* a) + sqrt (* b); return c;}
设计思路
本题调试过程碰到问题及解决方法
无。
运行结果截图
2 、利用指针返回多个函数值
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行: 第一行是n值; 第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
58 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12min = 0
实验代码
#includevoid max_min(int a[], int n, int *max, int *min);int main(void){ int n, i, max, min, a[100]; scanf("%d" ,&n); for(i = 0; i a[i]){ *min = a[i]; } }}
设计思路
本题调试过程碰到问题及解决方法
愚蠢的问题,我在输出结果的等于号前后打了空格,然后一直格式错误,放进devc++运行结束后发现的......
运行结果截图
3 、第六周预习作业:最小数放前最大数放后
为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。
函数接口定义:
void input(int *arr,int n);void max_min(int *arr,int n);void output(int *arr,int n);
○ 三个函数中的 arr
和n
都是用户传入的参数。n
是元素个数。
● input函数的功能是输入 n
个元素存到指针arr
所指向的一维数组中。
● max_min函数的功能是求指针arr
所指向的一维数组中的最大值和最小值,其中最小的数与第一个数对换,将最大的数与最后一个数对换。
● output函数的功能是在一行中输出数组元素,每个元素输出占3列。
裁判测试程序样例:
#includevoid input(int *arr,int n);void max_min(int *arr,int n);void output(int *arr,int n);int main(){ int a[10];input(a,10); max_min(a,10); output(a,10); return 0;}/* 请在这里填写答案 */
输入样例:
5 1 4 8 2 3 9 5 12 7
输出样例:
1 5 4 8 2 3 9 5 7 12
实验代码
void input(int *arr,int n){ int i; for(i=0;i<10;i++){ scanf("%d",arr+i); }}void max_min(int *arr, int n){ int i = 0, max = *arr, min = *arr, t = 0, indexmax = 0, indexmin = 0; for(i = 0;i < n; i++) { if(*(arr+i) > max) { max = *(arr+i); indexmax = i; } } t = *(arr + n - 1); *(arr+n-1) = max; *(arr+indexmax) = t; for(i = 0; i < n; i++) { if(*(arr+i) < min){ min = *(arr+i); indexmin = i; } } t = *arr; *arr = min; *(arr + indexmin) = t;}void output(int *arr, int n){ int i; for(i = 0; i < n; i++) { printf("%3d", *(arr+i)); }}
设计思路
本题调试过程碰到问题及解决方法
无。
运行结果截图
预习的主要内容
●变量、内存单元和地址之间的关系;定义指针变量,使用指针变量,进行指针变量的初始化;指针变量的基本运算;指针作为函数参数的作用;如何使用指针实现函数调用返回多个值。
思考题
1.为什么要使用指针?它有什么用?
● 指针只是一个变量,它存储一个内存地址。如果传入一个地址,比传入一个struct效率要高,因为少了一个拷贝过程。
● 指针能够有效的表示数据结构,能动态分配内存,能较方便的使用字符串,有效的使用数组。 ● 值传递不如地址传递高效,因为值传递先从实参的地址中提出值,再赋值给形参带入函数计算;而指针则把形参的地址直接指向实参地址,使用时直接提出数据,使效率提高,特别在频繁赋值等情况下。
2.指针变量在内存中暂用多大的空间?它的大小由什么决定?
● 指针变量是保存一个变量地址的变量,它里面保存的是一个特殊的东西:地址,即内存单元。一个内存单元要用32个状态来表示,(32个0和1),一个0或1占用1个位,8个位是一个字节,所以当然要占用32/8=4个字节的空间。
● 因机器不同所占的字节数也有所不同。在32位的机器上,一个指针变量占4个字节,在64位的机器上,一个指针变量占8个字节。
二、学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
第二周 | 4 hours | 35 | 用c语言程序读取电脑中的文本文件并对其进行基础操作 | ... |
第三周 | 4 hours | 69 | 初步使用二维数组,如何写入一个矩阵 | ... |
第四周 | 5 hours | 102 | 认识了选择排序法、二分查找法和冒泡排序法以及在二维数组的定义、引用、初始化和其矩阵。 | ... |
第五周 | 5 hours | 98 | 用到二维数组,初用头文件<string.h>中的strlen函数和strcpy函数 | ... |
第六周 | 5 hours | 96 | 了解了变量、内存单元和地址之间的关系;了解了如何定义指针变量,怎样使用指针变量,怎样进行指针变量的初始化;了解了指针变量的基本运算;了解了指针作为函数参数的作用;了解了如何使用指针实现函数调用返回多个值。 | ... |
... |
三、学习折线图
四、学习感悟&结对编程
- 由于在上课时因为自身原因困意太深在课后完成作业时有些吃力,但大多书上的题目还是有流程和大纲的,给出的题目就是会有一些条件限制,这些是要注意的点。然后本周的结对编程又没有如期完成,因为个人有事,无法同同学一起结对编程,结对编程优劣参半吧,看个人情况了。