2019春第六周作业

 一.作业头文件

这个作业属于那个课程C语言程序设计II
这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/computer-scienceclass1-2018/homework/2828
我在这个课程的目标是掌握定义指针变量,使用指针变量,进行指针变量的初始化
这个作业在那个具体方面帮助我实现目标能从多个角度来解决以前类似的题目
参考文献https://zhidao.baidu.com/question/193848631.html和https://blog.csdn.net/lhj_168/article/details/80308041

二.基础作业

PTA:

6-1 求两数平方根之和 (10 分)

 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。

函数接口定义:

double fun (double *a, double *b); 

其中 ab是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。

裁判测试程序样例:

#include<stdio.h>
#include <math.h> 
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

实验代码:
 1 #include<stdio.h>
 2 #include <math.h> 
 3 double fun (double *a, double *b); 
 4 int main ( )
 5 { double a, b, y;
 6 scanf ("%lf%lf", &a, &b );
 7  y=fun(&a, &b); printf ("y=%.2f\n", y );
 8 return 0;
 9 }
10 double fun(double *a,double *b)
11 {
12     double result;
13     
14     result=sqrt(*a)+sqrt(*b);
15     
16     return result;
17 }

设计思路:

本题调试过程碰到问题及解决办法:

问题原因:把这个题目的完整代码提交了

解决办法:删掉声明函数和调用函数部分,再次提交

运行结果:

 7-1 利用指针返回多个函数值 (30 分)

 
 读入n个整数, 调用max_min()函数求这n个数中的最大值和最小值。

输入格式:

输入有两行: 第一行是n值; 第二行是n个数。

输出格式:

输出最大值和最小值。

输入样例:

在这里给出一组输入。例如:

5
8 9 12 0 3

输出样例:

在这里给出相应的输出。例如:

max = 12

min = 0



实验代码:
 1 #include<stdio.h>
 2 #define MAX 80
 3 int n;
 4 
 5 void max_min(int *num,int *max,int *min);   
 6 int main()
 7 {   
 8     int num[MAX];
 9     int i,max,min;
10     scanf("%d",&n);
11     
12     for(i=0;i<n;i++)
13     {
14         scanf("%d",&num[i]);
15     }
16     
17     max_min(&num[0],&max,&min);   
18     
19     printf("max = %d\nmin = %d\n",max,min);
20     
21     return 0;
22 }
23 
24 void max_min(int *num,int *max,int *min) 
25 {
26     int i;
27     *max = *min = num[0];
28 
29     for(i=0;i<n;i++)
30     {
31         if(*max < num[i])
32         {
33             *max = num[i];
34         }
35         if(*min > num[i])
36         {
37             *min = num[i];
38         }
39     }
40 }

设计思路:

题调试过程碰到问题及解决办法:

 

问题原因:运行超时

解决办法:定义最大值的数值

运行结果:

 

思考题:(分值等同于编程题)

  1.为什么要使用指针?它有什么用?

       答:1.在数据传递时,如果数据块较大,使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存

              2.字符串指针

              3.函数指针,可以用在大量分支处理的实例当中

            

 

             (1)指针就是指向一个特定内存地址的一个变量。

             (2)指针只是一个变量,它存储一个内存地址

             (3)指针直接与数据等的存储地址有关


  2.指针变量在内存中暂用多大的空间?它的大小由什么决定?

        答:指针的大小实际上是由CPU的寻址位数决定,而不是字长

              32位处理器上32位操作系统的32位编译器,指针大小4字节。
         32位处理器上32位操作系统的16位编译器,指针大小2字节。  
         32位处理器上16位操作系统的16位编译器,指针大小2字节。
         16位处理器上16位操作系统的16位编译器,指针大小2字节。

              它只跟当前CPU的寻址位数 和编译器的 位数有关

三.挑战作业

 

接着上周的挑战作业继续,本周, 我们需要考虑如果 “子数组” 并不要求是一个矩形, 而是联通的元素即可 (上下或左右相邻即视为联通), 那解法会是怎么样呢?

 

具体要求请参看邹欣老师博客 现代程序设计作业

 

四.预习作业

6-3 最小数放前最大数放后 (10 分)

 为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。

函数接口定义:

void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);

三个函数中的 arrn 都是用户传入的参数。n 是元素个数。

input函数的功能是输入 n个元素存到指针arr所指向的一维数组中。

max_min函数的功能是求指针arr所指向的一维数组中的最大值和最小值,其中最小的数与第一个数对换,将最大的数与最后一个数对换。

output函数的功能是在一行中输出数组元素,每个元素输出占3列。

裁判测试程序样例:

#include<stdio.h>
void 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

实验代码:
 1 #include<stdio.h>
 2 void input(int *arr,int n);
 3 void max_min(int *arr,int n);
 4 void output(int *arr,int n);
 5 int main()
 6 { int a[10];
 7 input(a,10);
 8  max_min(a,10);
 9  output(a,10);
10  return 0;
11 }
12 void input(int *arr,int n)
13 {
14     int i;
15     for(i=0;i<n;i++)
16     {
17     scanf("%d",&arr[i]);
18     }
19 }
20 void max_min(int *arr,int n)
21 {
22     int max,min,x,y,i,temp;
23     
24     min=max=arr[0];
25     
26     for(i=0;i<10;i++)
27     {
28         if(min>arr[i])
29         {
30             min=arr[i];
31             x=i;
32         }
33         if(max<arr[i])
34         {
35             max=arr[i];
36             y=i;
37         }
38     }
39     temp=arr[0];
40     arr[0]=arr[x];
41     arr[x]=temp;
42     
43     temp=arr[9];
44     arr[9]=arr[y];
45     arr[y]=temp;
46 }
47 void output(int *arr,int n)
48 {
49     int i;
50     
51     for(i=0;i<n;i++)
52     {
53         printf("%3d",arr[i]);
54     }
55 }

设计思路:

 

 

本题调试过程碰到问题及解决办法:

问题原因:思路完全错误

解决办法:三次定义函数

运行结果:

 

五.学习进度统计和学习感悟(强调要画学习进度折线图)

周/日期这周所用时间    代码行学到的知识点简介目前比较迷惑的问题  
3/9-3/1510小时左右200左右自学二维数组对矩阵的上下三角形的一些规律,运用的不熟练
3/16-3/228小时左右260左右选择排序法和冒泡法对题目进行思路分析不够全面
3/23-3/2910小时30分钟左右220左右在定义指针变量时需要使用指针声明符 * ,但指针声明符并不是指针的组成部分什么是指针变量的初始化
3/30-4/57小时左右180左右 理解变量、内存单元和地址之间的关系;掌握定义指针变量,使用指针变量 如何使用指针实现函数调用返回多个值

 

累积代码行和博客字数:

时间博客字数代码行数
第二周101045
第三周147992
第四周258674
第五周230868
第六周1791112

                                                           

六.学习感悟

掌握定义指针变量,使用指针变量,进行指针变量的初始化

七.结对编程感受

有一起讨论,提高了做题效率

结对编程的优缺点:积极思考,讨论问题。就是有些小粗心,会写错代码

完成时间:8小时左右

 

转载于:https://www.cnblogs.com/TheMatrixOfTYY/p/10652039.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值