一、实验的目的、要求及内容
1、通过实验掌握指针的概念,学会定义和使用指针变量。
2、能正确使用数组的指针和指向数组的指针变量。
3、能正确使用字符串指针和指向字符串的指针变量。
4、掌握结构体类型变量的定义和使用。
二、算法设计思想及内容
本实验主要完成指针和结构体的应用训练,总共要求完成三个问题的源代码的编辑、编译、连接与运行,最终产生相关的运行结果,按规定要求提交相应的实验报告。
具体要求完成的问题如下:
1、采用指针方式编写程序输入10个整数,将其中最小的数与第一个数对换,把最
大的数与最后一个数对换。
写3个函数:(1)输入10个数;(2)进行处理;(3)
输出处理后的10个数。
2、采用指针方式在主函数中输入字符串,在函数中求出字符串的长度,然后输出求
出的长度。
3、有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个
学生的数据,要求输出3门课程的总平均成绩,以及最高分数的学生的数据(包
括学号、姓名、3门课的成绩、平均分)。
三、所使用的软硬件平台
软件平台:Microsoft Windows XP专业版SP3,Microsoft Visual C++ 6.0。
硬件平台:联想系列,Intel(R)Core(TM)i3,CPU 3.20Ghz,2.99GB内存,550GB硬盘。
四、源程序代码
1.#include<stdio.h>
int main()
{int a[10];
void shuru(int a[10]);
void chuli(int a[10]);
void shuchu(int a[10]);
printf("请输入10个数:");
shuru(a);
chuli(a);
printf("输出处理后的10个数为:");
shuchu(a);
printf("\n");
return 0;
}
void shuru(int a[10])
{int i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
}
void chuli(int a[10])
{int i,*max,*min,t1,t2;
max=min=a;
for(i=0;i<10;i++)
{if(*max<a[i]) max=&a[i];
if(*min>a[i]) min=&a[i];
}
t1=*max;
*max=a[9];
a[9]=t1;
t2=*min;
*min=a[0];
a[0]=t2;
}
void shuchu(int a[10])
{int i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
2.#include <stdio.h>
ch(char *a)
{int count=0;
char *p=a;
while(*p++) count++;
return count;
}
int main()
{char a[32767];
printf("请输入一个字符串:\n");
gets(a);
printf("该字符串的长度为:%d\n",ch(a));
return 0;
}
3.#include<stdio.h>
#define N 5
struct student
{char number[6];
char name[8];
int score[3];
int average;
}student[N];
int main()
{int i,j,sum=0,maxi=0,max=0,average=0;
for(i=0;i<N;i++)
{printf("输入第%d个学生以下相关信息:\n",i+1);
printf("学号:");
scanf("%s",student[i].number);
printf("姓名:");
scanf("%s",student[i].name);
for(j=0;j<3;j++)
{
printf("第%d门课程的成绩:",j+1);
scanf("%d",&student[i].score[j]);
}
}
for(i=0;i<N;i++)
{
for(j=0;j<3;j++)
sum+=student[i].score[j];
student[i].average=sum/3;
average=average+student[i].average;
if(sum>max)
{
max=sum;
maxi=i;
}
sum=1;
}
average/=N;
printf("学号姓名科目1 科目2 科目3 平均成绩\n");
for(i=0;i<N;i++)
{
printf("%2s%5s",student[i].number,student[i].name);
for(j=0;j<3;j++)
printf("%6d",student[i].score[j]);
printf("%8d\n",student[i].average);
}
printf("3门课程的总平均成绩为:%d\n",average);
printf("最高分学生的号数:%s,姓名:%s\n",student[maxi].number,student[maxi].name);
printf("这个学生3门课程的成绩分别为:%d,%d,%d,平均成绩为:d\n",student[maxi].score[0],student[maxi].score[1],student[maxi ].score[2],student[maxi].average);
return 0;
}
五、运行结果及分析
1.
2.
3.
六、结论与体会(在上机程序调试中遇到的问题、采用的解决办法、得到的收获)
通过对指针和结构体的学习,我体会到了指针是C程序中广泛使用的一种数据类型。
运用指针进行编程是C语言最主要的风格之一。
利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能编写出高校的程序。
指针极大地丰富了C语言的功能,学习指针是C语言学习中重要的一个环节,
能否正确理解和掌握指针的使用时我们是否真正掌握C语言精华的一个标志。
同时,指针也是C语言中很困难的一部分,在学习中除了要真正理解基本概念,还需要多多编程上机实践。
当一个C程序中变量过多,各个数据之间难以联系,没有整体概念的时候,结构体的作用大大凸显,定义一个结构体类型,可以在一个结构中声明不同的数据类型,相同结构的结构体变量是可以相互赋值的。
使用结构体不仅节省了内存空间,而且使得编程效率大大提高。
仅供学习交流参考。