第六周作业

一.作业头内容

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 链接<https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2889
我在这个课程的目标是 学会用指针去定义函数和灵活使用数组
这个作业在那个具体方面帮助我实现目标 指针的使用
参考文献 c语言书

二.题目

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

函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
函数接口定义:
double fun (double *a, double *b);
其中 a和 b是用户传入的参数。函数求 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
", y );
return 0;
}
/* 请在这里填写答案 */

输入样例:
12 20
输出样例:
y=7.94

1) 代码:

#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
", y );
return 0;
}
double fun (double *a, double *b)
{
  double c;
  c=sqrt(*a)+sqrt(*b);
  return c;
}

2)解题思路:

3)正确截图:

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

读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行: 第一行是n值; 第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5
8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12
min = 0

1)代码:

#include<stdio.h>
void max_min(int *a,int n,int *max,int *min)//指针变量定义格式int *p
{ 
    for(int i=0;i<n;i++)
    {
        if(*max<*(a+i)) *max=*(a+i);//引用指针直接进行大小比较,因为指针max是形参,改变形参的指向不会对实参有任何影响,所以对*max进行赋值
        if(*min>*(a+i)) *min=*(a+i);
    }
}
int main()
{
    int a[100],n,i,max,min;
    scanf("%d",&n);
    puts("输入n个数");//puts函数输出后自动换行
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    max=min=a[0];  //对max和min初始化,以便在函数max_min中引出数组a
    max_min(a,n,&max,&min)  ;  //n作为一个数传递给函数,而min和max需要传递地址,故使用&max
    printf("max=%d,min=%d",max,min);
    return 0;
}

2)设计思路:

3)实验截图:

1)实验代码:

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,a,b ,t;
  
  
  /*寻找最小值*/ 
  for(i=1;i<n;i++)
  if(*(arr+i)<*(arr+a))  /*arr指向数组第一个数字即a[0],所以*(arr+a指向a[a]*/ 
  a=i;
  
  
  /*最小值和第一个数字交换*/ 
  t=*(arr+a);
  *(arr+a)=*arr;
  *(arr)=t;
  
  
  /*寻找最大值*/ 
  for(i=1;i<n;i++)
  if(*(arr+b)<*(arr+i)) /*arr指向数组第一个数字即a[0],所以*(arr+a)指向a[a]*/
  b=i;
  t=*(arr+b);
  *(arr+b)=*(arr+9);    /*   *(arr+9)指向a[9],最大值和最后一个数字交换即a[9]    */ 
  *(arr+9)=t;
  
}
void output(int *arr,int n)
{
  int i;
  for (i=0;i<10;i++)
  printf("%3d",*(arr+i));  /*输出交换后的数组*/ 
}

2)实验思路:

3)实验结果截图:

三..学习进度统计

四.思考题

四. 学习感悟

  • 1.注意注意注意 输出格式,申清楚题目 ! ! !
  • 2.有发不知勤学早,秃头方悔读书迟。
原文地址:https://www.cnblogs.com/txtnb/p/10645465.html