这个作业属于那个课程 |
C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-scienceclass1-2018/homework/2892 |
我在这个课程的目标是 | 掌握指针的知识并会简单运用 |
这个作业在哪个具体方面帮助我实现目标 | 通过PTA作业学习指针使用方法并对代码进行检测 |
参考文献 | c语言程序设计 |
基础题函数题:求两数平方根之和
1)实验代码
double fun (double *a, double *b)
{
double c;
c=sqrt(*a)+sqrt(*b);
return c;
}
2)流程图
3)遇到的问题:无
4)运行结果截图
二:编程题:利用指针返回多个函数值
1)试验代码
#include<stdio.h>
void max_min(int n, int *a);
int main()
{
int n;
scanf("%d", &n);
int a[n];
for(int i = 0;i < n;i++)
{
scanf("%d", (a + i));
}
max_min(n, a);
return 0;
}
void max_min(int n, int *a)
{
int t;
for(int i = 0;i < n - 1;i++)
{
for(int j = 0;j < n - i - 1;j++)
{
if(*(a + j) < *(a + j + 1))
{
t = *(a + j + 1);
*(a + j)= t;
}
}
}
printf("max = %d
", *(a));
printf("min = %d
", *(a + n - 1));
}
2)设计思路
3)遇到的问题
在pta上面提交错误,用Devc++检测出是少了换行符
4)运行截图
预习作业
三:最小数放前最大数放后
1)试验代码
void input(int *arr,int n)
{
int i;
for(i=0;i<n;i++,arr++){
scanf("%d",arr);
}
}
void max_min(int *arr,int n)
{
int i,min,max,m,h;
for(i=0;i<n;i++,arr++){
if(i==0){
max=*arr;min=*arr;
}
if(max<=*arr){
max=*arr; m=i;
}
if(min>=*arr){
min=*arr; h=i;
}
}
arr=arr-10;
*(arr+h)=*arr;*arr=min;
*(arr+m)=*(arr+9);*(arr+9)=max;
}
void output(int *arr,int n)
{
int i;
for(i=0;i<n;i++,arr++){
printf("%3d",*arr);
}
}
2)流程图和设计思路
3)遇到的问题
之前做过比较大小的题,只要改一下指针变量就行,所以没什么大问题。
4)运行截图
思考题:1).为什么要使用指针?它有什么用?
和其他变量一样,指针是基本的变量,所不同的是指针包含一个实际的数据,该数据代表一个可以找到实际信息的内存地址。这是一个非常重要的概念。许多程序和思想依靠指针作为他们设计的基础。
指针变量是从指针本身的意义来说,
指针是一种类型
这种类型的对象有一种*运算,可以把指针本身的值当地址,指针指向的类型作为类型,去解释这个地址的内容.
这种运算也叫"非关联化"
有些程序如果不用指针那么这两个数的位置就不能交换。形参是一定得用指针接收实参的。这只是最简单的一种用法。
2)指针变量在内存中暂用多大的空间?它的大小由什么决定?
有人说是这样的
32位处理器上32位操作系统的32位编译器,指针大小4字节。
32位处理器上32位操作系统的16位编译器,指针大小2字节。
32位处理器上16位操作系统的16位编译器,指针大小2字节。
16位处理器上16位操作系统的16位编译器,指针大小2字节。
指针大小是由当前CPU运行模式的寻址位数决定!
也有这样的:
在C中, 指针只有3种:
指向简单变量的, 指向结构体变量的, 指向函数的.
他们的大小和指向的类型无关, 基本都是一样的, 等于地址宽度.
在16位的地址的系统里, 用 段:偏移 来表示一个地址,
当只用偏移的时候(段内)称为NEAR指针, 当段偏移都用的时候(跨段), 称为FAR指针,
FAR指针占用空间大于NEAR指针.
但是在32位系统中, 指针大小是统一的.
指针变量所占空间大小和该指针变量指向的数据类型没有任何直接关系,同一编译器下,同一编译选项下所有类型的指针变量大小都是一样的,指针变量的大小是编译器所对应的系统环境所决定的,或者说是由编译器决定的。
四:挑战作业诚实点,不会