02369肖艳峰实验任务10四川农业大学.docx
- 文档编号:17620482
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:11
- 大小:157.51KB
02369肖艳峰实验任务10四川农业大学.docx
《02369肖艳峰实验任务10四川农业大学.docx》由会员分享,可在线阅读,更多相关《02369肖艳峰实验任务10四川农业大学.docx(11页珍藏版)》请在冰点文库上搜索。
02369肖艳峰实验任务10四川农业大学
实验七指针
一、验证及程序分析
1、输入两个整数,并使其从大到小输出,用指针变量实现数的比较。
(1)源程序:
#include
voidmain()
{
int*p1,*p2,*p,a,b;
scanf("%d,%d",&a,&b);
p1=&a;p2=&b;
if(a
{
p=p1;p1=p2;p2=p;
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
(2)程序运行结果:
运行结果抓图至下方:
(3)在程序中的定义一个整型变量t,然后将语句段
if(a
{
p=p1;p1=p2;p2=p;
}
改为:
if(a
{
t=*p1;*p1=*p2;*p2=t;
}
再运行结果,观察两程序的区别。
运行结果抓图至下方:
区别:
前者程序中的p表示的是位置,即p1,p2,对应的a,b的位置,而后者程序中的t表示的是指针变量,即*p1,*p2,对应的a,b的值。
2、运行并改正下面程序中的错误。
#include
voidmain()
{
inta=3,b;
int*p;
*p=a;
b=*p;
printf("%d\n",b);
a=100;
b=*p;
printf("%d\n",b);
}
(1)程序运行结果:
运行结果抓图至下方:
(2)请简要分析程序错误的原因:
程序错误的原因:
不应该将a的值赋给指针变量*p(*p=a),应该是将a的位置赋给p(p=&a)。
(3)请将程序中的错误改正后重新运行:
程序中错误语句:
*p=a
改正为:
p=&a
程序运行的结果:
3、用指针法输入12个数,然后按每行4个数输出。
(1)算法分析:
定义一个整型数组和一个整型指针,这样通过数组就可以静态分配内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同的首地址处,这样就可以通过指针对数组的存储空间加以操作。
(2)源程序:
#include
voidmain()
{
intj,k,a[12],*p;
p=a;//使指针p指向与数组a的首地址处
for(j=0;j<12;j++)
scanf("%d",p++);//移动P的位置,输入数据
p=a;//指针重新定位到数组a的首地址
for(j=0;j<12;j++)
{
if()
printf("\n");//按每行4个数输出
printf("%4d",*p++);//注意:
*p++相当于*(p++)
}
printf("\n");
}
(2)程序运行结果:
运行结果抓图至下方:
4、用字符串指针实现两个字符串的复制。
(1)算法分析:
分别定义两个字符数组,用于存放字符串;再定义两个字符串指针,分别指向两个串的起始地址,进行串复制,其实就是将一个指针(如p1)所指向的字符,复制给另一个指针(如p2)所指向的位置,重复该过程直到串尾。
如下图:
(2)源程序:
#include
voidmain()
{
chara[30]="Cprogram.";
charb[30],*p1,*p2;
p1=a;p2=b;//两个指针分别指向两个字符串的起始位置
for(;*p1!
='\0';p1++,p2++)//当串1没有到串尾时,进行复制
——*p2=*p1————;
*p2='\0';//给串2加上结束标志
printf("stringais:
%s\n",a);
printf("stringbis:
%s\n",b);
}
(3)程序的运行结果:
运行结果抓图至下方:
5、用字符串指针实现字符串的接收。
(1)源程序
#include
voidmain()
{
char*str;
scanf("%s",str);
printf("输入的字符串是:
%s\n",str);
}
(2)请简要分析程序错误的原因:
程序运行错误的原因:
str没有确定指向的地址。
(3)请将程序中的错误改正后重新运行:
改正后的程序:
#include
voidmain()
{
char*str,a[20];
str=a;
scanf("%s",str);
printf("输入的字符串是:
%s\n",str);
}
程序运行的结果:
6、用字符指针数组处理多个字符串:
用选择排序法将若干字符串按字母顺序排序输出。
(1)算法分析:
定义一个字符指针数组,给定其初值为若干字符串,则数组中的各指针分别指向字符串。
用strcmp函数比较各字符串的大小,并按选择法进行排序后,则str指针数组中的指针所指向的字符变为有序。
注意:
①在进行字符比较时,一定要用strcmp函数;
②比较过程中,当需要交换两字符位置时,并不是直接交换两串的内容,而是交换指针变量中的值。
当指针的指向变了,则输出时的内容也随之改变。
如下图:
(2)源程序:
#include
#include
voidmain()
{
char*str[]={"Cprogram","Basic","Foxbase+","Fortran","Pascal"};
inti,j;char*temp;
for(i=0;i<4;i++)/*选择法排序*/
for(j=i+1;j<5;j++)
if(strcmp(str[i],str[j])>0)//当前面串比后面的大时,交换位置
{temp=str[i];str[i]=str[j];str[j]=temp;}
}
(3)运行程序,并将程序的运行结果抓图至下方:
运行结果抓图至下方:
二、编程练习
1、练习指针与字符串
在一行字符串中删去指定的字符。
例如,要求在一行文字:
“Ihave150Yuan!
!
”中删去字符“0”,使其变为“Ihave15Yuan!
!
”。
字符串可用gets()函数接收,要删除的字符用getchar()函数接收。
(1)算法提示:
先用一个字符串指针指向串的开头,然后用循环进行比较,当*p与接收到的字符不同时,指针后移,继续比较。
比较到相同时,把指针后面的字符复制给指针当前所指向的位置,如*p=*(p+1);
(2)请将源程序及结果粘贴到下面。
#include
#include
voidmain()
{
char*p1,*p2,a[]="Ihave150Yuan!
!
",b[]="0";
p1=a,p2=b;
for(;*p1!
='\0';p1++)
if(*p1==*p2)
{
*p1=*(p1+1);
}
printf("%s\n",a);
}
运行结果抓图至下方:
2、从键盘接收5个字符串,然后按字典顺序排序后输出。
算法提示:
分别定义一个字符指针数组(用于存放字符串的地址)和一个二维字符数组(用于存放字符串),开始时令指针数组中的元素指向每个串的起始位置;用选择法(也可尝试用冒泡法)对字符串进行排序。
程序片断如下:
char*str[5];//定义字符指针数组,用于指向多个字符串
charstr1[5][80];//用于接收多个字符串
for(i=0;i<5;i++)//从键盘上接收多个字符串
for(i=0;i<5;i++)str[i]=str1[i];//让指针数组中的字符串指针指向输入的串
……
//排序
//输出
for(i=0;i<5;i++)
printf(”%s\n”,str[i]);
(1)请将源程序粘贴到下面。
#include
#include
voidmain()
{
char*str[5],*temp;
charstr1[5][80];
inti,j;
for(i=0;i<5;i++)
{gets(str1[i]);}
for(i=0;i<5;i++)
str[i]=str1[i];
for(i=0;i<5;i++)
for(j=i+1;j<6;j++)
{
if(strcmp(str[i],str[j])>0)
{
temp=str[i];str[i]=str[j];str[j]=temp;
}
}
for(i=0;i<5;i++)
printf("%s\n",str[i]);
}
(2)程序运行结果抓图至下方:
运行结果抓图至下方:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 02369 肖艳峰 实验 任务 10 四川 农业大学