【EduCoder实训作业】复习 您所在的位置:网站首页 整型变量的概念 【EduCoder实训作业】复习

【EduCoder实训作业】复习

2024-07-07 20:28| 来源: 网络整理| 查看: 265

复习-指针基本概念 第1关:通过指针变量间接访问变量第2关:交换两个指针变量的值第3关:利用指针方法求数组的最大值和最小值

第1关:通过指针变量间接访问变量

任务描述 本关任务:编写程序通过指针变量间接访问整型变量。

相关知识 为了完成本关任务,你需要掌握: 1.如何定义指针变量; 2.掌握两个与指针变量有关的运算符。

如何定义指针变量 指针变量指的是定义存放变量地址的变量,定义指针变量如下:

int *p1; //p1是指向int型变量的指针变量 float p2; //p2是指向float型变量的指针变量 double p3; //p3是指向double型变量的指针变量 char p4; //p4是指向char型变量的指针变量 是一个特殊符号,表明一个变量是指针变量,定义指针变量时必须带,而给指针变量赋值时,就没必要再带上,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带,给指针变量赋值时不能带。

掌握两个与指针变量有关的运算符 取地址运算符“&” 指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。在 C 语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。C 语言中提供了地址运算符&来表示变量的地址。

其一般形式为:& 变量名, 如&a变示变量a的地址,&b表示变量b的地址。

取内容运算符“” 取内容运算符“”,用来表示指针变量所指向的变量内容(值),在“*”运算符之后跟的变量必须是指针变量。

示例如下:

int p,a; p = &a; //给指针变量p赋值时不能带,&a表示变量a的内存地址 scanf("%d",p); // 通过指针变量p从键盘输入数据赋给变量a,p和&a是等价的 printf("%d\n",*p); // 通过指针变量p输出变量a的值,*p和a是等价的 如何利用指针变量访问不同的变量 利用指针变量,通过改变它的指向,可以实现以相同的形式输入输出不同的变量值。

编程要求 根据提示,在右侧编辑器 Begin-End 区间补充代码,输入输出两个变量的值。

测试说明 平台会对你编写的代码进行测试:

测试输入: 100 200 预期输出: 100 200

#include int main() { int x,y; int *p; //定义指针变量p p=&x; //使指针变量p指向一个变量x /***** 请在以下填写通过p输入输出x值代码 *****/ /********** Begin **********/ scanf("%d",p); printf("%d\n",*p); /********** End **********/ p=&y; //使指针变量p指向另一个变量y /***** 请在以下填写通过p输入输出y值代码 *****/ /********** Begin **********/ scanf("%d",p); printf("%d",*p); /********** End **********/ return 0; } 第2关:交换两个指针变量的值

任务描述 本关任务:编写程序交换两个指针变量的值。

相关知识 为了完成本关任务,你需要掌握指针数据类型。

基本数据类型和指针数据类型的区别 指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。

int a = 100; // 100为int型常量,a为int型变量 double b = 3.14; // 3.14为double型常量,b为double型变量 int *pa = &a; // &a为指针类型常量,&a值由系统分配得到,pa为指针变量 要注意的是,指针变量虽然存的是地址,但是不能用整型直接赋值的,比如:

int ptr; ptr = 10; //错误,不能直接用整型赋值 ptr = (int)10; //可以通过强制类型转换赋值,但除非很了解内存布局,否则这么做一般会出现程序异常 但是有一个特例,那就是赋值 0 的时候,这个时候表达的含义是空指针,比如:

int ptr; ptr = 0; //这个是可以的 注意:与其他变量一样,没有初始化或者赋值的指针变量存的值是随机的,如果此时直接使用运算符,则会因为访问了不属于程序的内存位置而发生异常。也就是所谓的访问越界。

指针变量的交换运算 指针变量保存的是地址,而地址本质上是一个整数,所以指针变量可以进行部分运算,例如加法、减法、比较等,还可以交换两个指针变量的值,指针变量可以像基本类型变量一样进行交换。

示例如下:

int a = 100,b = 200; int *pa = &a, *pb = &b,*temp; temp = pa; pa = pb; pb = temp; 编程要求 根据提示,在右侧编辑器 Begin-End 区间补充代码,交换两个指针变量的值。

测试说明 平台会对你编写的代码进行测试:

测试输入: 100 200 预期输出: 200 100

#include int main() { int a=100,b=200; int *p1, *p2, *p; p1=&a; p2=&b; scanf("%d%d",p1,p2); /***** 交换p1、p2的值 *****/ /********** Begin **********/ p = p1; p1 = p2; p2 = p; /********** End **********/ printf("%d %d\n",*p1,*p2); return 0; } 第3关:利用指针方法求数组的最大值和最小值

任务描述 本关任务:编写程序,利用指针方法求数组的最大值和最小值。

相关知识 擂台赛算法思想 求最大值的擂台赛算法思想:从数组中任意找一个数组元素作为擂主,默认是最大值,遍历数组,将每个数组元素依次和擂主比较,如果比擂主大就将这个数组元素的值赋给擂主,否则就离开,直至最后一个数组元素,即可得出擂主就是最大值。

为了完成本关任务,需要定义一个指针变量指向任意一个数组元素,擂主是指针变量指向的数组元素,遍历数组,将每个数组元素依次和指针变量指向的数组元素比较。如果大就将这个数组元素的地址赋给指针变量,否则指针变量的值不变,直至最后一个数组元素,即可得出指针变量指向的数组元素为最大。

求最小值的算法思想与求最大值的算法思想一致。

用指针变量指向最大值最小值 定义指针变量 max 保存最大值的地址,指针变量 min 保存最小值的地址。

编程要求 根据提示,在右侧编辑器 Begin-End 区间补充代码,从后台输入 3 个数,使用指针方法找到 3 个数中最大和最小的数并输出。

测试说明 平台会对你编写的代码进行测试:

测试输入: 4 91 51 预期输出: min=4 max=91

测试输入: 151 91 1 预期输出: min=1 max=151

#include #define M 3 main() { int a[M],i; int *max,*min; for(i=0 ;i if(*maxa[i]) min = &a[i]; } /********** End **********/ /***** 通过指针变量max,min输出最大值和最小值 *****/ /********** Begin **********/ printf("min=%d\nmax=%d",*min,*max); /********** End **********/ return 0; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有