哈尔滨理工大学
软件与微电子学院
实 验 报 告
(2018-2019第一学期)
课程名称: | 结构化程序设计(C) |
班 级: | 软件18- 1 班 |
学 号: | 1814010130 |
姓 名: | 张立辉 |
哈尔滨理工大学软件与微电子学院
实验名称: | 指针程序设计 | 专 业 | 软件工程 | |||
---|---|---|---|---|---|---|
姓 名 | 张立辉 | 学 号 | 1814010130 | 班 级 | 软件18-1 |
一、 实验目的:
掌握指针的概念,会定义和使用指针变量;
能正确使用指向数组的指针变量;
能正确使用指针作函数的参数,返回正确结果。
能正确使用指向字符串的指针变量;
二、实验内容:
上机录入书上例题、调试并执行程序:
a)教材P242-244 例8.9
b)教材P252-255 例8.14 8.15
c)教材P259-260 例8.20
教材P291 习题1-11
三、实验设备及软件环境:
计算机,Windows系统,CodeBlocks;
四、实验过程及结果:
a)教材P242-244 例8.9
#include<stdio.h>
int main()
{
void inv(int *x,int n);
int i,arr[10],*p=arr;
printf("The original array:\n");
for(i=0;i<10;i++,p++)
scanf("%d",p);
printf("\n");
p=arr;
inv(p,10);
printf("The array has been inverted:\n");
for(p=arr;p<arr+10;p++)
printf(" %d",*p);
printf("\n");
return 0;
}
void inv(int *x,int n)
{
int *p,m,temp,*i,*j;
m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{
temp=*i;*i=*j;*j=temp;
}
return;
}
b)教材P252-255 例8.14 8.15
#include<stdio.h>
int main()
{
void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
average(*score,12);
search(score,2);
return 0;
}
void average(float *p,int n)
{
float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float (*p)[4],int n)
{
int i;
printf("The score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
void search(float (*p)[4],int n);
float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
search(score,3);
return 0;
}
void search(float (*p)[4],int n)
{
int i,j,flag;
for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{
printf("No.%d fails,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%5.1f",*(*(p+j)+i));
printf("\n");
}
}
}
教材P259-260 例8.20
#include <stdio.h>
#include <stdlib.h>
int main()
{
void copy_string(char from[],char to[]);
char a[]="I an a teacher.";
char b[]="You are a student.";
printf("string a =%s\nstring b =%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(a,b);
printf("\nstring a=%s\n string b=%s\n",a,b);
return 0;
}
void copy_string(char from[],char to[])
{
int i=0;
while(from[i]!='\0')
{
to[i]=from[i];
i++;
}
to[i]='\0';
}
教材P291 习题1-11
1.
#include <stdio.h>
int main()
{ void swapper(int *p1,int *p2);
int n1,n2,n3;
int *p1,*p2,*p3;
printf("请输入三个数:");
scanf("%d%d%d",&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2) swapper(p1,p2);
if(n1>n3) swapper(p1,p3);
if(n2>n3) swapper(p2,p3);
printf("排序后为%d %d %d\n",n1,n2,n3);
return 0;
}
void swapper(int *p1,int *p2)
{int p;
p=*p1; *p1=*p2; *p2=p;
}
#include <stdio.h>
#include <string.h>
int main()
{void swapper(char *,char *);
char str1[20],str2[20],str3[20];
printf("请输入三个字符串:\n");
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0) swapper(str1,str2);
if(strcmp(str1,str3)>0) swapper(str1,str3);
if(strcmp(str2,str3)>0) swapper(str2,str3);
printf("排序后字符串为:\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
return 0;
}
void swapper(char *p1,char *p2)
{char p[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
}
#include <stdio.h>
int main()
{ void input(int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number);
max_min_value(number);
output(number);
return 0;
}
void input(int *number)
{int i;
printf("请输入10个数:");
for (i=0;i<10;i++)
scanf("%d",&number[i]);
}
void max_min_value(int *number)
{ int *max,*min,*p,temp;
max=min=number;
for (p=number+1;p<number+10;p++)
if (*p>*max) max=p;
else if (*p<*min) min=p;
temp=number[0];number[0]=*min;*min=temp;
if(max==number) max=min;
temp=number[9];number[9]=*max;*max=temp;
}
void output(int *number)
{int *p;
printf("排序后10个数:");
for (p=number;p<number+10;p++)
printf("%d ",*p);
printf("\n");
}
#include<stdio.h>
int main()
{
printf("Hello Word!");
return 0;
}
#include <stdio.h>
int main()
{
int i,k,m,n,num[50],*p;
printf("\n有?人n=");
scanf("%d",&n);
p=num;
for (i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while (m<n-1)
{
if (*(p+i)!=0) k++;
if (k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if (i==n) i=0;
}
while(*p==0) p++;
printf("最后留下的是原第%d号\n",*p);
return 0;
}
#include <stdio.h>
int main()
{
int length(char *p);
int len;
char str[20];
printf("输入一个字符串");
scanf("%s",str);
len=length(str);
printf("字符串长度为%d.\n",len);
return 0;
}
int length(char *p)
{
int n;
n=0;
while (*p!='\0')
{
n++;
p++;
}
return(n);
}
#include <stdio.h>
#include <string.h>
int main()
{
void copystr(char *,char *,int);
int m;
char str1[20],str2[20];
printf("输入一个字符串");
gets(str1);
printf("从?开始复制");
scanf("%d",&m);
if (strlen(str1)<m)
printf("输入一个字符串");
else
{
copystr(str1,str2,m);
printf("新的字符串%s\n",str2);
}
return 0;
}
void copystr(char *p1,char *p2,int m)
{
int n;
n=0;
while (n<m-1)
{
n++;
p1++;
}
while (*p1!='\0')
{
*p2=*p1;
p1++;
p2++;
}
*p2='\0';
}
#include <stdio.h>
int main()
{
int upper=0,lower=0,digit=0,space=0,other=0,i=0;
char *p,s[20];
printf("输入一个字符串");
while ((s[i]=getchar())!='\n') i++;
p=&s[0];
while (*p!='\n')
{
if (('A'<=*p) && (*p<='Z'))
++upper;
else if (('a'<=*p) && (*p<='z'))
++lower;
else if (*p==' ')
++space;
else if ((*p<='9') && (*p>='0'))
++digit;
else
++other;
p++;
}
printf("大写字母%d\n小写字母%d\n空格%d\n数字%d\n其他%d\n",upper,lower,space,digit,other);
return 0;
}
#include <stdio.h>
int main()
{
void move(int *pointer);
int a[3][3],*p,i;
printf("输入一个矩阵\n");
for (i=0;i<3;i++)
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("新的矩阵\n");
for (i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
return 0;
}
void move(int *pointer)
{
int i,j,t;
for (i=0;i<3;i++)
for (j=i;j<3;j++)
{
t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
#include<stdio.h>
int main()
{
printf("Hello Word!");
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
void sort(char s[][6]);
int i;
char str[10][6];
printf("输入10个字符串\n");
for (i=0;i<10;i++)
scanf("%s",str[i]);
sort(str);
printf("排序后\n");
for (i=0;i<10;i++)
printf("%s\n",str[i]);
return 0;
}
void sort(char s[10][6])
{
int i,j;
char *p,temp[10];
p=temp;
for (i=0;i<9;i++)
for (j=0;j<9-i;j++)
if (strcmp(s[j],s[j+1])>0)
{
strcpy(p,s[j]);
strcpy(s[j],s[+j+1]);
strcpy(s[j+1],p);
}
}
代码均构建并运行成功并测试多次;
四、总结:
经过本次实验,充分的认识到了自己的不足之处,以及有待改进的地方,今后会着重对该地方进行重点练习
实验成绩: 指导教师: