当前位置:网站首页>C语言实验十一 指针(一)
C语言实验十一 指针(一)
2022-08-03 02:12:00 【Meteor.792】
一、实验目的
(一)掌握指针的概念,会定义和使用指针变量;
(二)了解或掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。
(三)学会用指针作为函数参数的方法。
二、预习要求
(一)地址和指针的概念;
(二)数组和指针的关系;
(三)字符串和指针的关系;
(四)函数的定义、函数类型、函数参数、函数调用的基本概念。
三、实验内容
/* c10-2.c 输入两个整数,并使其从大到小输出,用指针变量实现数的比较 */
#include "stdio.h"
void main()
{
int *p1,*p2,*p,a,b,c;
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
p=&c;
if(*p1<*p2)
{
*p=*p1,*p1=*p2,*p2=*p;
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}(2)输入数据:5,9
(3)结果输出:a=9,b=5;max=9,min=5
/* c10-3.c 输入两个整数,并使其从大到小输出,用函数实现数的交换*/
#include "stdio.h"
void main()
{
int as(int *p1,int *p2);
int a,b,*p,*q;
scanf("%d %d",&a,&b);
p=&a;
q=&b;
if(*p<*q)
{
as(p,q);
}
printf("a=%d b=%d\n",a,b);
printf("max=%d min=%d\n",*p,*q);
}
int as(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}(2)输入数据:5,9
(3)结果输出:a=9,b=5;max=9,min=5
(4) 如果将 swap 函数修改为如下形式,分析如何调试和修改?
void swap(int *p1, int *p2)
{ int *p;
*p=*p1;
*p1=*p2;
*p2=*p;
}用指针法输入 12 个数,然后按每行 4 个数输出
(1)编程提示:定义一个整型数组和一个整型指针,这样通过数组就可以静态分配 内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同的首地址处,这样就可以通过指针或者数组都可以对存储空间加以操作。
(2)源程序:
/* c10-4.c 用指针法输入 12 个数,然后按每行 4 个数输出 */
#include "stdio.h"
void main()
{
int a[12]={1,2,3,4,2,3,4,5,3,4,5,6};
int *p,i;
p=a;
for(i=0;i<12;i++)
{
printf("%d ",*(p+i));
if((i+1)%4==0)
printf("\n");
}
}四、实验注意事项
(一)注意变量、变量的指针、变量的地址间的相互关系;
(二)注意传地址与传值的区别。
五、思考题
(一)从键盘输入十个整数,要求用冒泡法(或选择法)实现从大到小的排列输出。
#include "stdio.h"
int input(int *num);
int oppo(int *num);
int output(int *num);
void main()
{
int num[10];
input(num);
oppo(num);
output(num);
}
int input(int *num)
{
int i;
printf("请输入10个数字:");
for(i=0;i<10;i++)
scanf("%d",&num[i]);
}
int oppo(int *num)
{
int i,temp;
int *max,*min,*p;
max=min=num;
for(p=num;p<num+10;p++)
{if(*p>*max) *max=*p;}
{temp=num[9];
num[9]=*max;
*max=temp;}
for(p=num;p<num+10;p++)
{if(*p<*min) *min=*p;}
{temp=num[0];
num[0]=*min;
*min=temp;}
}
int output(int *num)
{
int i;
printf("请输出10个数字");
for(i=0;i<10;i++)
printf("%d ",num[i]);
}(二)将指针作为函数参数:一个数组有10个元素{1,8, 10, 2,-5, 0, 7, 15, 4, -5}, 利用指针作为函数参数编程,输出数组中最大和最小的元素值。
#include "stdio.h"
void main()
{
int a[10]={1,8,10,2,-5,0,7,15,4,-5};
int *p,*q,i,j;
p=a,q=a;
for(i=0;i<10;i++)
if(*p<a[i])
{
*p=a[i];
}
printf("max=%d\n",*p);
for(j=0;j<10;j++)
if(*q>a[j])
{
*q=a[j];
}
printf("min=%d\n",*q);
}边栏推荐
- Useful Monitoring Scripts What you want part1 in Oracle
- 【数据分析】基于MATLAB实现SVDD决策边界可视化
- Interconversion between numpy PIL tensors
- JVM内部结构图及各模块运行机制总结
- 【Objective-C语言中的@property增强】
- How does Excel compare if two columns of strings are the same?
- leetcode:140. 单词拆分 II
- 一个循环,两个循环问题的思考及复现
- QCheckBox、margin、border、pandding、QHoxLayout、QSplitter、QSpacerItem
- qt opengl 使用不同的颜色绘制线框三角形
猜你喜欢
随机推荐
[@property enhancement in Objective-C language]
禁用token及无感知更新token功能实现
无法启动服务 错误 193 0xc1
【UE4】搭建局域网内VR直播 UE4.27
openCV第一篇
vsftp容器搭建+go开发web用户管理界面(更新于2022.02.23)
[Static type and dynamic type compile check and run check in Objective-C]
LVS-NAT模式【案例实验】
代码工具推荐
The cornerstone of high concurrency: multithreading, daemon threading, thread safety, thread synchronization, mutual exclusion lock, all in one article!...
会话技术!
46LVS+Keepalived群集
sql注入是什么意思以及防止sql注入?
五大靠谱的婚恋相亲APP详细特点缺点分析!
选中按钮上色
VS中使用BugTrap定位程序崩溃点
FLIR E95 在8层楼看马路上行驶的CAR的热成像形态?
韦东山 数码相框 项目学习(五)libjpeg-turbo的移植
Rust Web(三)—— 通过sqlx连接数据库(MySQL)
MySQL-如何分库分表?一看就懂









