实验一指针的程序设计实验.doc
文本预览下载声明
实验1: 指针的程序设计实验
[实验目的]
指针是C语言中最为有用的数据类型之一。本实验是为了巩固有关指针类型的概念,正确使用指针变量、指针数组、字符串指针、函数指针,用指针编写简捷、高效的程序。具体包括:
1. 掌握指针变量的定义与引用。
2. 正确使用指针变量、指针数组、函数指针、字符串指针编写应用程序。
3. 掌握指针的基本运算。
4. 了解二级指针的使用方法。
〔实验要求〕
理解和区分普通变量和指针变量、地址的概念。
复习指针与数组,指针与函数的关系的相关理论课程。
第一次完成1-4题,第二次完成5-7题。
完成各项实验任务,并按要求完成实验报告。
[实验内容]
本部分习题要求全部用指针完成。
1. 运行下列程序观查运行结果,若有错误请改之。
①main()
{
int a,*p;
p=a;
scanf(“%d”,p);
printf(“a=%d\n*p=%d\n”,a,*p);
}
②
main(){
int a,*p;
p=a;
scanf(%d,a);
printf(p=%p *p=%d\n,p,*p);
printf(%4d%4d\n,*p++,*p);
printf(p=%x\n,p);
}
③用单步运行的方式运行下面的程序,观察各个变量的值。
sub(int x,int y,int *z)
{
*z=y-x;}
main()
{
int a,b,c;
sub(10,5,a);
sub(7,a,b);
sub(a,b,c);
printf(“a=%d\nb=%d\nc=%d\n”,a,b,c);
}
④main()
{
int *p,a;
a=2;
p=a;
f(p);
printf(“a=%d”,a);
}
f(int *t)
{
*t=10;
}
2. 运行下面的程序,并通过输出结果理解指针与数组的关系,总结指针访问数组元素的方法。
main()
{int a[10],j,*p;
for (j=0; j10; j++) a[j]=j+1;
printf(“\nOutput array using a[j]:\n”);
for (j=0; j10; j++) printf(“%d ”,a[j]);
p=a; //p指向数组a
printf(“\nOutput array using p[j]:\n”);
for (j=0; j10; j++) printf(“%d ”,p[j]);
printf(“\nOutput array using*( p+j):\n”);
for (j=0; j10; j++) printf(“%d ”,*(p+j));
printf(“\nOutput array using*( a+j):\n”);
for (j=0; j10; j++) printf(“%d ”,*(a+j));
printf(“\nOutput array using *(p++):\n”);
for (j=0; j10; j++) printf(“%d ”,*(p++));
}
从键盘上输入10个数据到一维数组x中,然后找出数组中的最大值和该值所在的元素下标。要求用子函数search(int *pa,int n,int *pmax,int *pflag),数组名作为实参,指针作为形参,最大值和下标在形参中以指针的形式返回。
4.一个二维数组中按学号顺序存放有10个学生的5门成绩,编写一个函数aver,能够输入一个学生学号,计算该生各门课的平均成绩。
实验步骤与要求:
(1)设计函数aver;
(2)在主函数中输入10个学生的5门成绩并输入要查询的学生的学号;
(3)调用函数aver求该生的平均成绩;
(4)在主函数中输出该平均成绩。
5.运行下列程序观察运行结果,若有错误请改之。
①main()
{
char *str1,*str2,*str3;
printf(“str1=“);
gets(str1);
printf(“str2=“);
gets(str2);
strcat(str1,str2);
printf(“str1=%s\n”,str1);
strcpy(str3,str1);
printf(“str3=%s\n”,str3);
}
②#include stdio.h
char *p = “abcdefghijklmnopq” ;
main( )
{
int i=0;
while( *p++!=’ e’);
printf(“%c\n”, *p);
}
③#include stdio.h
main( )
{ int a=1,*p,**pp;
pp=p;
p=a;
a++;
printf (“%d,%d,%d\
显示全部