实验六 指针程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计实验报告
实验六指针程序设计
一、实验目的
(1)掌握指针的概念,会定义和使用指针变量;
(2)能正确使用数组的指针和指向数组的指针变量;
(3)熟悉指针做函数参数的使用方法;
(4)能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容及步骤
1、按要求完善程序
下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。
程序代码如下所示:
#include
#define N 20
void fun(int *a,int n,int *odd,int *even)
{ int i;
*even=0;
*odd=0;
for(i=0;i { if(a[i]%2==0) *even=*even+a[i]; else *odd=*odd+a[i]; } } void main() { int a[N]={1,9,2,3,11,6},i,n=6,odd,even; printf("The original data is:\n"); for(i=0;i printf("%5d",*(a+i)); printf("\n\n"); fun(a,n,&odd,&even); printf("The sum of odd numbers:%d\n",odd); printf("The sum of even number:%d\n",even); } 运行结果: 2.假设每班人数最多不超过30人,具体人数由键盘输入,试编程打印最高分及其学号。要求:用一维数组和指针变量作函数参数,编程打印某班一门课成绩的最高分和学号。请编写相应的程序代码,并调试运行出正确结果。 程序代码:#include int main() {void fun(float*score,int n,int*k); float score[30]; int num[30]; int i,n,k=0; printf("请输入学生人数:"); scanf("%d",&n); for(i=0;i {printf("请输入第%d同学的学号,成绩:",i+1); scanf("%d,%f",num+i,score+i); } fun(score,n,&k); printf("\n最高分为:%.2f 学号为:%d\n",score[k],num[k]); return 0; } void fun(float*score,int n,int*k) {int i; for(i=1;i if(*(score+(*k))<*(score+i)) *k=i; } 3.矩阵转置; 要求:从主程序中输入一个3*3的整形矩阵,调用一个函数,将此矩阵转置,用指针作为函数的形参,在主程序中输出转置后的矩阵。 程序代码: #include int main() {void a(int (*b)[3]); int c[3][3]; int i,j; printf("请输入一个3*3矩阵:\n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {scanf("%d",&c[i][j]); } } printf("你输入的矩阵为:\n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("%3d",c[i][j]); } printf("\n"); } a(c); printf("转置之后的矩阵为:\n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("%3d",c[i][j]); } printf("\n"); } return 0; } void a(int (*b)[3]) {int temp,i,j; for(i=0;i<3;i++) {for(j=0;j {temp=*(*(b+j)+i); *(*(b+j)+i)=*(*(b+i)+j); *(*(b+i)+j)=temp; } } } 运行结果: 4.从键盘输入一个字符串,实现利用字符指针将字符串的字符顺序逆置并输出。(例如输入abcdef,输出fedcba)。请编写相应的程序代码,并调试运行出正确结果。 程序代码: #include #include #define SIZE 100 void main() { int i; int length; char sign[SIZE]; char s; printf("请输入一个字符串:"); scanf("%s",sign); length=strlen(sign); printf("字符串逆序输出为:\n"); for(i=length;i>0;i--) {s=sign[i-1]; printf("%c",s); } printf("\n"); } 运行结果: 5.编写在字串str1中找出所有非数字的字符串当成一个空格,存入字符数组str2中(所有数字字符也必须依次存入str2中),str1不变仍为原字串的程序。例如,字符串str1为"$Ts!47&*s456 a23* +B9k",调用函数fun后,字符数组str2将存入" 47 456 23 9 ",str1仍然是"$Ts!47&*s456 a23* +B9k"。 程序代码: