实验1: 有关指针的程序设计 [实验目的]
指针是C语言中最为有用的数据类型之一。本实验是为了巩固有关指针类型的概念,正确使用指针变量、指针数组、字符串指针、函数指针,用指针编写简捷、高效的程序。具体包括:
1. 掌握指针变量的定义与引用。
2. 正确使用指针变量、指针数组、函数指针、字符串指针编写应用程序。 3. 掌握指针的基本运算。 4. 了解二级指针的使用方法。 〔实验要求〕
1. 理解和区分普通变量和指针变量、地址的概念。
2. 复习指针与数组,指针与函数的关系的相关理论课程。 3. 第一次完成1-4题,第二次完成5-7题。
4. 完成各项实验任务,并按要求完成实验报告。
[实验内容]
本部分习题要求全部用指针完成。
1. 运行下列程序观查运行结果,若有错误请改之。 ①main()
{
int a,*p; p=&a;
scanf(“%d”,p);
printf(“a=%d\\n*p=%d\\n”,a,*p); } 答:若输入5,则输出:
a =5 *p=5
② main(){ int a,*p; p=&a;
scanf(\ //若输入5
printf(\ //输出变量a的内存地址及值(5)
printf(\,*p); //输出*p的值5,再输出*p++,输出*p++时,先输出*p,即a的值5,然后指针p自增
printf(\//输出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); } 答:a=-5
b=-12 c=-7
用F8运行程序,用F7跟踪sub函数调用过程。 ④main() {
int *p,a; a=2; p=&a; f(p);
printf(“a=%d”,a); }
f(int *t) {
*t=10; }
答:a=10
实参p指向main中的变量a,形参t与p的目标相同,修改*t即修改变量a。
2. 运行下面的程序,并通过输出结果理解指针与数组的关系,总结指针访问数组元素的方法。 main()
{int a[10],j,*p;
for (j=0; j<10; j++) a[j]=j+1;
printf(“\\nOutput array using a[j]:\\n”); for (j=0; j<10; j++) printf(“%d ”,a[j]); p=a; //p指向数组a
printf(“\\nOutput array using p[j]:\\n”); for (j=0; j<10; j++) printf(“%d ”,p[j]); printf(“\\nOutput array using*( p+j):\\n”); for (j=0; j<10; j++) printf(“%d ”,*(p+j)); printf(“\\nOutput array using*( a+j):\\n”);
for (j=0; j<10; j++) printf(“%d ”,*(a+j)); printf(“\\nOutput array using *p++:\\n”); for (j=0; j<10; j++) printf(“%d ”,*p++)); }
3. 从键盘上输入10个数据到一维数组x中,然后找出数组中的最大值和该值所在的元素
下标。要求用子函数search(int *pa,int n,int *pmax,int *pflag),数组名作为实参,指针作为形参,最大值和下标在形参中以指针的形式返回。 void search(int *pa,int n,int *pmax,int *pflag) { int i; *pmax=*pa; *pflag=0; for(i=1;i
void main() { int number[10],max,i; for(i=0;i<10;i++) scanf(\ search(number,10,&max,&i); printf(\ printf(\ }
4.一个二维数组中按学号顺序存放有10个学生的5门成绩,编写一个函数aver,能够输入一个学生学号,计算该生各门课的平均成绩。 实验步骤与要求: (1)设计函数aver;
(2)在主函数中输入10个学生的5门成绩并输入要查询的学生的学号; (3)调用函数aver求该生的平均成绩; (4)在主函数中输出该平均成绩。
#include \#include \
#define PERSON 10 /*学生人数*/ #define CLASS 5 /*课程数*/