上海电力学院c语言报告:实验8 指针
上海电力学院
实验报告
课程名称 C语言程序设计 实验名称 实验8 指针
姓名 蔡福瑞 学号 班级 2010027
专业 电气工程及其自动化(供用电技术方向)
同组人姓名 蔡福瑞、黄任凭、龚奕磊、傅庆燕、程旭
指导老师姓名 魏为民 实验日期 2010-12-27
一、实验目的
1、通过实验进一步掌握指标的概念,会定义和使用指针变量。
2、能正确使用数组的指针和指向数组的指针变量。
3、能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容和步骤
1、改错
(1)指出下面程序错误的原因.
main()
{
int x=10,y=5,*px ,*py;
px=py;
px=&x’;
printf (“*px=%d, *py=%d, *px ,*py);
}
图(8-1)
该程序运行的整个过程如图(8-2)所示。
错误的原因:printf(”*px=%d,*py=%d, *px, *py);该行此处少了个引号。
修改后,运行结果如图(8-3)所示:
图(8-2)
图(8-3)
(2)下面的程序试图有如下运行结果:
Which style you want to:
Capital (c) or uncapital (a):c ↙
COMPUTER
Which style you want to:
Capital (c) or uncapital(a):u ↙图(8-4)
请调试下面的程序,使其有如上执行结果.
#include
main()
{ char s*;
char c;
printf(“which style you want to :ln”);
printf(“capital(c) or uncapital(a):”);
c=getchar();
if(c=’c’) strcpy(s,”COMPUTER”);
else strcpy(s,”computer”);
put(s)
}
图(8-5)
该程序运行的整个过程如图(8-6)所示。
错误的原因:缺少库函数;指针格式错误; 回车的控制符为 \n ; ‘=’为赋值运算符,‘=='才是关系运算符;put只能输出一个字符,puts才能输出字符串。
修改后,运行结果如图(8-7)所示:
图(8-6)
图(8-7)
(3)下面的程序能获得上述运行结果吗?
main()
{
char *S=”COMPUTER”;
char c;
printf(“which style you want to \n”);
printf(“capital(c) or uncapital(U):”);
c=getchar();
if(c=’c’)
put(s);
else
{ s=”computer”;
puts(s);
}
}
图(8-8)
该程序运行的整个过程如图(8-9)所示。
错误的原因:①if(’c=c’)中‘=’为赋值运算符,‘=='才是关系运算符;②put语句只能输出一个字符,puts语句才能输出字符串。
修改后,运行结果如图(8-10)所示:
图(8-9)
图(8-10)
(4)设计一个C程序,用以测试下列各表达式的运算。
1)y=*px++; 2)y=*++py 3)y=(*py)++ 4)y=--*ppx++
图(8-11)
图(8-12)
(5)想使指针变量pt1指向a 和b中的大者,pt2指向小者,一下程序能否实现此目的。
swap(int *p1,int *p2)
{
int *p;
p=p1;p1=p2;p2=p;
}
main()
{ int a,b;
scanf (“%d,%d”,&a,&b);
pt1=&a;pt2=&b;
if(a
ptintf(“%d,%d\n”,*pt1,pt2);
图(8-14)
图(8-15)
二、程序填空:
(1)一位数组和指针。分别采用下标法,数组名法和指针发访问数组元素,求出10个数中的最大值。
下标法:如图(8-16)
#include
void main()
{ int a[10],i,max;
for(___________)
scanf(“%d”,______________);
for ( __________