实验指针参考标准答案

实验指针参考标准答案
实验指针参考标准答案

C语言程序设计实验教学(8)

【实验目的】指针是C语言中非常重要的一章内容。通过实验让学生掌握各类指针的定义与引用、指针作为函数参数的应用、字符指针的应用、函数指针的应用。

【实验要求】使用指针来完成变量的引用,编写程序将指针作为参数进行传递,理解指针的含义。

【实验课时】10.0

【实验内容】

1. 上机编程实现用函数来将从键盘上输入的三个数按由小到大的顺序输出。要求编写自定义函数swap()用于交换两个变量的值;且函数原型为:void swap(int *p1,int *p2);;并在main函数中用指针变量作为实际参数调用函数swap();最后输出排序后的结果。

#include

main()

{void swap(int *p1,int *p2);

int n1,n2,n3; int *p1,*p2,*p3;

printf("Input three integers n1,n2,n3: ");

scanf("%d,%d,%d",&n1,&n2,&n3);

p1=&n1; p2=&n2; p3=&n3;

if(n1>n2) swap(p1,p2);

if(n1>n3) swap(p1,p3);

if(n2>n3) swap(p2,p3);

printf("Now, the order is: %d,%d,%d\n",n1,n2,n3);}

void swap(int *p1,int *p2)

{int p;

p=*p1;*p1=*p2;*p2=p;}

运行结果如下:

Input three integers n1,n2,n3: 34,21,25↙

Now, the order is: 21,25,34

2. 上机编程实现用函数来将从键盘上输入的三个字符串按由小到大的顺序输出。要求编写自定义函数swap()用于交换两个变量的值;且函数原型为:void swap(char *p1,char *p2);;并在main函数中用字符数组名作为实际参数调用函数swap();最后输出排序后的结果。

#include

#include

main()

{void swap (char *p1,char*p2);

char str1[20],str2[20],str3[20];

printf("Input three strings:\n");

gets(str1); gets(str2); gets(str3);

if(strcmp(str1,str2)>0) swap(str1,str2);

if(strcmp(str1,str3)>0) swap(str1,str3);

if(strcmp(str2,str3)>0) swap(str2,str3);

printf("Now, the order is:\n");

printf("%s\n%s\n%s\n",str1,str2,str3);}

void swap (char *p1,char*p2) /*交换两个字符串*/

{ char p[20];

strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p);}

运行结果如下:

Input three lines:

I study very hard.↙

C language is very interesting.↙

He is a professor.↙

Now, the order is:

C language is very interesting.

He is a professor.

I study very hard.

3. 上机编程实现用函数来返回一维数组a中的最大值。要求设计一个自定义函数max()函数原型为:int max(int *p,int n);;在main函数中用数组名a和数组的长度n作为实际参数调用函数max();最后输出结果。

int max(int *p,int n)

{int i,max; max=p[0];

for(i=1;i

if(max

return max;}

main()

{int i,a[6];

for(i=0;i<6;i++)

scanf("%d",&a[i]);

printf("max=%d \n",max(a,6));} /*或者用max(&a[0],6) */

4. 上机编程实现从键盘上输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请编写3个函数:(1)输入10个数;input()函数原型为:void input(int *);;(2)进行处理;max_min_value()函数原型为:void max_min_value(int *);(3)输出10个数。output()函数原型为:void output(int *);

解:输入输出函数的N-S图见图10.1。交换函数的N-S图见图10.2。

#include

main()

{void input(int *); void max_min_value(int *); void output(int *);

int number[10];

input(number); max_min_value(number); output(number);}

void input(int array[10])

{int i;

printf("input 10 numbers: ");

for(i=0;i<10;i++)

scanf("%d",&array[i]);}

void max_min_value(int array[10])

{int *max,*min,*p,*array_end;

array_end=array+10;

max=min=array;

for(p=array+1;p

if(*p>*max) max=p;

else if(*p<*min) min=p;

*p=array[0]; array[0]=*min; *min=*p;

*p=array[9];array[9]=*max;*max=*p;}

void output(int array[10])

{int *p;

printf("Now, they are: ");

for(p=array;p<=array+9;p++)

printf("%d ",*p);}

运行结果如下:

input 10 numbers: 32 24 56 78 198 36 44 29 6↙

Now, they are: 1 24 56 78 326 36 44 29 98

5.编写一函数,函数原型为:void invert(char *p,int m);,实现将n个数按输入顺序的逆序存放,并输出。

#include

main()

{void invert(int *p,int m);

int i,n; int *p,num[20];

printf("\ninput n: ");

scanf("%d",&n);

printf("please input these numbers:\n");

for(i=0;i

scanf("%d",&num[i]);

p=&num[0];

invert(p,n);

printf("Now, the sequence is:\n");

for(i=0;i

printf("%5d",num[i]);

}

void invert(int *p,int m)

{int i; int temp,*p1,*p2;

for(i=0;i

{p1=p+i; p2=p+(m-1-i);

temp=*p1; *p1=*p2; *p2=temp;}

}

运行结果:

input n: 10↙

please input these numbers:

10 9 8 7 6 5 4 3 2 1 ↙

Now,the sequence is:

1 2 3 4 5 6 7 8 9 10

6.在主函数中输入n个整数,编写一函数move(),是n个整数循环向后移一个位置,函数原型为:void move(int *,int,int);再通过函数的递归调用实现将前面各数顺序向后移m个位置,使得最后m个数变成最前面m个数,(效果见图10.3)。并在主函数中输出调整后的n个数。

#include

main()

{int number[20],n,m,i;

void move(int array[20],int n,int m);

printf("\nHow many numbers? "); /* 共有多少个数*/

scanf("%d",&n);

printf("Input %d numbers: \n",n); /* 输入n个数*/

for(i=0;i

scanf("%d",&number[i]);

printf("How many place you want to move? "); /* 后移多少个位置*/ scanf("%d",&m);

move(number,n,m); /* 调用move 函数*/

printf("Now, they are: \n");

for(i=0;i

printf("%5d",number[i]);}

void move(int array[20],int n,int m) /* 循环后移-次的函数*/

{int *p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p--)

*p=*(p-1);

*array=array_end;

m--;

if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/ }

运行结果:

How many numbers? 8↙

Input 8 numbers:

12 43 65 67 8 2 7 11↙

How many place you want to move? 4↙

Now, they are:

8 2 7 1112 43 65 67

7.在主函数中输入二维数组a[3][3],编写一函数move(),将一个3×3的矩阵转置。函数原型为:void move(int *,);并在主函数中输出转置后的矩阵。/* 用指向数组元素的列指针变量实现*/

#include

main()

{int a[3][3],*p,i; void move(int *pointer);

printf("\nInput matrix: \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("Now,matrix: \n");

for(i=0;i<3;i++)

printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);}

void move(int *pointer)

{int i,j,t;

for(i=0;i<3;i++)

for(j=0;j

{t=*(pointer+3*i+j);

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;}}

/* 用指向由3个元素组成的一维数组的行指针变量实现*/

#include

main()

{int a[3][3],(*p)[3],i; void move(int (*pointer)[3]);

printf("\nInput matrix: \n");

for(i=0;i<3;i++)

scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);

p=&a[0];

move(p);

printf("Now,matrix: \n");

for(i=0;i<3;i++)

printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);}

void move(int (*pointer)[3])

{int i,j,t;

for(i=0;i<3;i++)

for(j=0;j

{t=*(*(pointer+i)+j);

*(*(pointer+i)+j)=*(*(pointer+j)+i);

*(*(pointer+j)+i)=t;}}

运行结果:

Input matrix:

l 2 3↙

4 5 6↙

7 8 9↙

Now,matrix:

1 4 7

2 5 8

3 6 9

8.编程实现在main函数中输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少。

#include

main()

{int upper=0,lower=0,digit=0,space=0,other=0,i=0;

char *p,s[80];

printf("Input string: ");

while((s[i]=getchar())!='\n') i++;

p=&s[0];

{if(('A'<=*p)&&(*p<='Z')) upper++;

else if(('a'<=*p)&&(*p<='z')) lower++;

else if(*p==' ') space++;

else if(('0'<=*p)&&(*p<='9')) digit++;

else other++;

p++;}

printf("upperer case:%d\n",upper);

printf("lowerer case:%d\n",lower);

printf("digit:%d\n",digit);

printf("space:%d\n",space);

printf("other:%d\n",other);

}

运行结果:

Input string: Today is 2000/1/1↙

upperer case:1

lowerer case:6

digit:6

space:2

other:2

9.编写一个函数,求一个字符串的长度函数原型为:int length(char *p,);在main函数中输入字符串,并输出其长度。

#include

main()

{int len; char str[20];

int length(char *p);

printf("Input string: ");

scanf("%s",str);

len=length(str);

printf("The length of string is %d.\n",len);}

int length(char *p) /* 求字符中长度函数*/

{int n; n=0;

{n++;

p++;}

return(n);}

运行结果:

Input string: China↙

The length of string is 5.

10.在main函数中输入一字符串,包含n个字符。编写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串,函数原型为:void copystr(char *,char *,int);。

#include

#include

main()

{int m; char str1[20],str2[20];

void copystr(char *p1,char *p2,int m);

printf("Input string: ");

gets(str1);

printf("Which character that begin to copy? ");

scanf("%d",&m);

if(strlen(str1)

printf("input error!");

else

{copystr(str1,str2,m);

printf("result: %s\n",str2);}

}

void copystr(char *p1,char *p2,int m)/* 字符串部分复制函数*/

{int n; n=0;

while(n

{n++;p1++;}

while(*p1!='\0')

{*p2=*p1;p1++;p2++;}

*p2='\0';

}

运行结果:

Input string: reading-room↙

Which character that begin to copy? 9↙

result: room

11.编写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);,设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果s1

#include

main()

{int strcmp(char *p1,char *p2);

int m; char str1[20],str2[20],*p1,*p2;

printf("Input two strings:\n");

scanf("%s",str1); scanf("%s",str2);

p1=&str1[0]; p2=&str2[0];

m=strcmp(p1,p2);

printf("result: %d\n",m);

}

int strcmp(char *p1,char *p2) /*两个字符串比较的函数*/

{int i; i=0;

while(*(p1+i)==*(p2+i) &&*(p1+i)!='\0'&&*(p2+i)!='\0')

i++;

if(*(p1+i)=='\0'&&*(p2+i)=='\0') return(0); /*相等时返回结果0*/ return(*(p1+i)-*(p2+i)); /*不等时结果为第一个不等字符ASCII码的差值*/ }

运行情况如下:

① Input two strings:

CHINA↙

Chen↙

Result: -32

② Input two strings:

hello! ↙

hello! ↙

Result: 0

③ Input two stings:

dog↙

cat↙

result: 1

12.用函数指针变量来调用函数min(),求变量a,b中的最小值。(需要注意的是:在用指针变量调用函数之前,应先将函数入口地址赋给指针变量)

min(int x,int y)

{int z; z=x

main()

{int (*p)(int,int); int a,b,m;

p=min;

scanf("\n%d,%d",&a,&b);

m=(*p)(a,b);

printf("\na=%d,b=%d,min=%d\n",a,b,m); }

13.设计一函数process()原型为:int process(int x,int y,int (*fun)());,调用它时,每次实现不同的功能: (用函数的指针变量来调用函数)

(1)求a和b之和。(2)指a,b中大者。(3)求a,b中小者。

main()

{int add(),max(), min(); int a,b;

printf("please input a and b:\n");

scanf("%d,%d",&a,&b);

printf("sum="); process(a,b,add);

printf("max="); process(a,b,max);

printf("min="); process(a,b,min);}

add(int x,int y)

{int z; z=x+y; return(z);}

max(int x,int y)

{int z;

if(x>y) z=x;

else z=y;

return(z);}

min(int x,int y)

{int z;

if(x

else z=y;

return(z);}

process(int x,int y,int(*fun)())

{int result;

result=(*fun)(x,y);

printf("%d\n",result);}

14.设计一个用矩形法求定积分的通用函数,分别求:

?1 0sin xdx

,

?

-

1

1

cos xdx

,

dx

e x

?2

(说明:sin()、cos()、exp() 已在系统的数学函数库中,程序开头要用#include )。

说明:sin、cos和exp是系统提供的数学函数。在程序中定义3个函数fsin、fcos和fexp分别用来计算sin(x)、cos(x)和exp(x)的值,在main函数中要声明这3个函数。在main函数中定义p为指向函数的指针变量,定义形式是“float(*p)(float)”,表示p指向的函数有一个实型形参,p可指向返回值为实型的函数。在main函数中有“p=fsin;”,表示将fsin函数的人口地址赋给

p。在调用integral函数时,用p作为实参,把fsin函数的人口地址传递给形参p(形参p也定义为指向函数的指针变量),这样形参P也指向fsin函数,(*p)(x)就相当于fsin(x)。fsin(x)的值就是sinx的值。因此通过调用integral 函数求出了sinx的定积分。求其余两个函数定积分的情况与此类似。

#include

#include

main()

{float integral(float (*p)(float),float a,float b,int n);

float a1,b1,a2,b2,a3,b3,c,(*p)(float);

float fsin(float); /*声明fsin函数*/

float fcos(float); /*声明fcos函数*/

float fexp(float); /*声明fexp函数*/

int n=20;

printf("Input a1,b1: "); /*输入求sinx定积分的下限和上限*/

scanf("%f,%f",&a1,&b1);

printf("Input a2,b2: "); /*输入求cosx定积分的下限和上限*/

scanf("%f,%f",&a2,&b2);

printf("Input a3,b3: "); /*输入求定积分的下限和上限*/

scanf("%f,%f",&a3,&b3);

p=fsin;

c=integral(p,a1,b1,n); /*求出sinx的定积分*/

printf("The integral of sin(x) is: %f\n",c);

p=fcos;

c=integral(p,a2,b2,n); /*求出cosx的定积分*/

printf("Tht integral of cos(x) is: %f\n",c);

p=fexp;

c=integral(p,a3,b3,n); /*求出ex的定积分*/

printf("The integral of exp(x) is: %f\n",c);

}

float integral(float(*p)(float),float a,float b,int n)

/*用矩形法求定积分的通用函数*/

{int i; float x,h,s;

h=(b-a)/n; x=a; s=0;

for(i=1;i<=n;i++)

{x=x+h;

s=s+(*p)(x)*h;}

return(s);}

float fsin(float x) /*计算sinx的函数*/

{return sin(x);}

float fcos(float x)/*计算cosx的函数*/

{return cos(x);}

float fexp(float x) /*计算ex的函数*/

{return exp(x);}

运行情况如下,

Input a1,b1:0,1↙

Input a2,b2: -1,1↙

Input a3,b3: 0,2↙

The integral of sin(x) is: 0.480639

The integral of cos(x) is: 1.681539

The integral of exp(x) is: 6.713833

15.编一个程序,打入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。

#include

main()

{char *month_name[13]={"illegal month","January","February","March","April","May","June","July","August" ,"September","October","November","December"};

int n;

printf("Input month: ");

scanf("%d",&n);

if((n<=12)&&(n>=1))

printf("It is %s.\n",*(month_name+n));

else

printf("It is wrong.\n");

}

运行结果:

① Input month: 2↙

It is February.

② Input month: 8↙

It is August.

③ Input month: 13↙

It is wrong.

16.编写一个程序,在主函数中输入10个等长的字符串。用另一个函数sort() 对它们排序,函数sort()原型为:void sort(char (*s)[6]);,要求形参是指向由6个元素组成的一维数组的行指针,然后在主函数输出这10个已排好的字符串。

#include

#include

main()

{void sort(char (*s)[6]);

int i; char str[10][6];char (*p)[6];

printf("Input 10 strings:\n");

for(i=0;i<10;i++)

scanf("%s",str[i]);

p=str;

sort(p);

printf("Now, the sequence is:\n");

for(i=0;i<10;i++)

printf("%s\n",str[i]);

}

void sort(char (*s)[6]) /*冒泡法对10个字符串排序的函数*/

{ int i,j; char *t,temp[6];

t=temp;

for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(strcmp(s[j],s[j+1])>0 )

{strcpy(t,s[j]);

strcpy(s[j],s[j+1]);

strcpy(s[j+1],t);}

}

运行结果:

Input 10 strings:

China↙

Japan↙

Korea↙

Egypt↙

Nepal↙

Burma↙

Ghana↙

Sudan↙

Italy↙

Libya↙

Now, the sequence is:

Burma

China

Egypt

Ghana

Italy

Japan

Korea

Libya

Nepal

Sudan

17.编写一个程序,在主函数中输入10个不等长的字符串。用另一个函数

sort()对它们排序,函数sort()原型为:void sort(char *p[6]);,要求用指针数组处理,然后在主函数输出这10个已排好的字符串。

#include

#include

main()

{void sort(char *p[]);

int i; char *s[10],str[10][20];

for(i=0;i<10;i++)

s[i]=str[i]; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf("Input 10 strings:\n");

for(i=0;i<10;i++)

scanf("%s",s[i]);

sort(s);

printf("Now, the sequence is:\n");

for(i=0;i<10;i++)

printf("%s\n",s[i]);

}

void sort(char *p[]) /*冒泡法对10个字符串排序的函数*/

{int i,j; char *temp;

for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(strcmp(*(p+j),*(p+j+1))>0)

{temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;}

}

运行情况如下:

Input 10 strings:

China↙

Japan↙

Yemen↙

Pakistan↙

Mexico↙

Korea↙

Brazil↙

Iceland↙

Canada↙

Mongolia↙

Now, the sequence is:

Brazil

Canada

China

Iceland

Japan

Korea

Mexico

Mongolia

Pakistan

Yemen

18.编写一个程序,用指向指针的指针的方法对5个字符串排序并输出。自定义函数sort()的原型为:void sort(char **p);。

#include

#define LINEMAX 20 /*定义字符串的最大长度*/ main()

{void sort(char **p);

int i; char **p,*pstr[5],str[5][LINEMAX];

for(i=0;i<5;i++)

pstr[i]=str[i]; /*将第i个字符串首地址赋予指针数组pstr的第i个元素*/ printf("Input 5 strings:\n");

for(i=0;i<5;i++)

scanf("%s",pstr[i]);

p=pstr;

sort(p);

printf("strings sorted:\n");

for(i=0;i<5;i++)

printf("%s\n",pstr[i]);

}

void sort(char **p)/*选择法对5个字符串排序的函数*/

{int i,j; char *temp;

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(strcmp(*(p+i),*(p+j))>0) /*比较后交换字符串地址*/

{temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp;}

}

运行情况如下:

Input 5 strings:

China↙

America↙

India↙

Philippines↙

Canada↙

strings sorted:

America

Canada

China

India

Philippines

19.编写一个程序,用指向指针的指针的方法对n个整数排序并输出。要求写一个自定义函数sort(),其原型为:void sort(int **p,int n);n和整数在主函数中输入。排序后结果最后在主函数中输出。

#include

main()

{void sort(int **p,int n);

实验8 指针

实验8 指针 一、实验目的 1. 熟练掌握指针的定义、赋值的方法 2. 掌握间接引用运算符的使用方法 3. 掌握通过指针引用数组元素的方法 4. 掌握使用指针处理字串的方法 二、实验内容 实训1 循环输入学生某门课的成绩,将成绩存储到数组中,统计最高分和获得最高分的学生人数,最后输出统计信息。 1)在VS2013中新建项目,在项目中新建C++源文件,输入下面程序。 #include// 包含输入输出接口文件 using namespace std; // 引用标准命名空间 int main() // 主函数 { const int n = 5; // 使用常变量定义学生人数 int score[n]; // 定义成绩数组,有n个整型元素 int maxScore = 0; // 最高分,并初始化为 int maxStudent = 0; // 得到最高分的学生人数 int i; // 循环变量 int *p = 0; p = score; // p指向score[0] for (i = 0; i < n; i++) // 计数循环 { // 开始循环 cout << "请输入第" << i << "位学生的成绩:"; cin >> p[i]; // 输入第i位学生的成绩,并存储到score[i] if (maxScore < p[i]) // 如果第i位学生的成绩高于原最高分 { maxScore = p[i]; // 将最高分修改为第i位学生的成绩} } // 结束循环 cout << "本班最高分为" << maxScore << endl; cout << "得到最高分的学生序号为:" << endl; for (i = 0; i < n; i++) // 计数循环 { // 循环开始 if (*(p + i) == maxScore) // 如果第i位学生的成绩等于最高分 { maxStudent++; // 得最高分的学生人数增1 cout << i << endl; // 输出该生序号

实验六 指针.

实验六指针 ●实验目的 1、进一步掌握指针的概念,会定义和使用指针变量。 2、能正确使用数组的指针和指向数组的指针变量。 3、能正确使用字符串的指针和指向宇符串的指针变量。 4、了解指向指针的指针的概念及其使用方法。 5、通过实验进一步理解指针和函数的几种关系。 ● 实验内容 1、输入两个整数,按由大到小的顺序输出。 输入以下程序并调试运行。 #include int main() { int a,b; int *p=&a,*q=&b,*t; cout<<"请输入a和b:"; cin>>a>>b; if(a

char *temp; int i,j,n=4; for(i=0;i0) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } //排序 for(i=0;i

实验八 指针程序设计(解答)

《指针程序设计》实验解答 1、改错题 (1) include int digits(char *s) { int c=0; while(*s) //s改为*s { if(*s>='0' && *s<='9') //*s>=0 && *s<=9改为*s>='0' && *s<='9' c++; s++; } return c; } void main() { char s[80]; printf("请输入一行字符\n"); gets(s); printf("字符长度是:%d\n",digits(s)); } (2) #include swap(int *p1,int *p2) { int p; //int *p改为int p p=*p1; //*p=*p1改为p=*p1 *p1=*p2; *p2= p; //*p2=*p 改为*p2=*p } void main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d\tb=%d\n",a,b); swap(&a,&b); printf("a=%d\tb=%d\n",a,b); }

(3) #include void move(int *pointer) ; //添加 void main(void) { 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]); //scanf("%d%d%d",a[i][0], a[i][1], a[i][2]) p=&a[0][0]; // 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]); } 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); //t=(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; //*(pointer+3*j+i)=*t; } } 2、程序填空 (1) #include int findmax(int *s,int t ) { int i,k=0; for(i=0;i< t ;i++) //1 if( s[i]>s[k]) k=i; // 2 return k ; //3 } void main() { int a[10]={12,23,34,45,56,67,78,89,11,22},k=0,*add; int j; for(j=0;j<10;j++) printf("%4d%4d%10xh\n",j+1,a[j],&a[j]);

实验八实验报告_卓越14_彭佳伟

C语言程序设计实验报告 专业计算机科学与技术班级卓越工程师班 日期2014年12月17日成绩 第八次实验指针实验指导教师李开 学生姓名彭佳伟学号U201414716 实验组别同组人姓名 实验名称指针实验 一、实验目的 (1)熟练掌握指针的说明、赋值、使用。 (2)掌握用指针引用数组的元素,熟悉指向数组的指针的使用。 (3)熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。 (4)掌握指针函数与函数指针的用法。 (5)掌握带有参数的main函数的用法。 二、实验任务 1.源程序改错 下面的源程序中是否存在错误?如果存在,原因是什么?如果存在错误,要求在计算机上对这个源程序进行调试修改,使之能够正确执行。 源程序1 #include int main(void) { float *p; scanf("%f", p); printf("%f\n", *p); return 0; } 2.源程序完善、修改、替换 (1)下面的源程序的功能是:通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。 #include #include int main(void) { char a[80], b[80], c[160], *result = c; int choice, i; do { printf("\t\t1 copy string.\n"); printf("\t\t2 connect string.\n");

printf("\t\t3 exit. \n"); printf("\t\tinput a number(1-3) please! \n"); scanf ("%d", &choice); }while(choice < 1|| choice > 5); switch(choice) { case 1: p = strcpy; break; case 2: p = strcat; break; case 3: goto dowm; } getchar(); printf("input the first string please! \n"); i = 0; printf("input the second string please! \n"); i = 0; result = (a, b); printf("the result is %s\n", result); dowm: ; return 0; } (2)请上机运行第(1)题程序,使之能按下面要求输出结果: 1 copy string. 2 connet string. 3 exit input a number(1-2) please! 2(输入) Input the first string please! the more you learn,(输入) input the second string please! the more you get.(输入) the result is the more you learn, the more you get. 3.跟踪调试源程序 请按下面的要求对所给的源程序进行操作,并回答问题和排除错误。 (1)单步执行源程序。进入strcpy时,watches窗口中s为何值?返回main时,watches 窗口中s为何值? (2)排除源程序中的错误,使程序输出结果为:there is a bote on the lake. 源程序3 #include char *strcpy(char *, char*); int main(void) {

c语言实验报告6 指针

实验6 指针1.实验目的和要求 (1)掌握指针的概念、指针变量定义格式和引用。 (2)掌握指针的运算方法。 (3)掌握数组的指针和指向数组的指针变量。 (4)掌握指针与函数的关系。 (5)能正确使用字符串的指针和指向字符串的指针变量。(6)了解指向函数的指针。 (7)了解指向指针变量的指针。 2.实验内容:实验指导书中的实验九。 3.实验步骤 9.1 调试程序,找出程序的错误。 改正后的程序代码(贴图): 运行结果(帖图): 9.2 运行程序:

运行结果:; 9.3 修改程序错误,并运行。 改正后程序代码: 运行结果(帖图): 9.4. 程序填空:

运行结果(请帖图):9.5. 程序填空:

程序填空: #include main() { int a[5][5]={0},*p[5],i,j; for(i=0; i<5; i++) p[i]= &a[i][0] ; for(i=0; i<5; i++) { *(p[i]+ i )=1; *(p[i]+5- (i+1) )=1; } for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%2d", p[i][j]); Printf("\n") ; } } 运行结果(请帖图):

9.6 编程(选作) #include main() { int *p,a[20],i,k,m,n; p=a; printf("请输入人数n:"); scanf("%d",&n); for(i=0;i

实验七 指针

实验七指针(1) 一、实验目的 1.掌握指针变量的定义与引用 2.掌握指针与变量、指针与数组的关系 3.掌握用数组指针作为函数参数的方法。 4.熟悉TC集成环境的调试指针程序的方法 二、实验内容 以下均用指针方法编程: 1. 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 main() { int j,k,a[12],*p; for(j=0;j<12;j++) scanf("%d",p++); for(j=0;j<12;j++) { printf("%d",*p++); if(j%4 == 0) printf("\n"); } } 调试此程序时将a设置为一个"watch",数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。 2. 在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。 三、实验要求 1.复习指针的定义与使用方法。 2.编写程序,运行程序并记录运行结果。 3.将源程序、目标文件、可执行文件和实验报告存在软盘上。 实验八指针(2) 一、实验目的 1.掌握C语言中函数指针的使用方法。 2.掌握C语言中指针数组的使用方法。 3.熟悉TC集成环境的调试指针程序的方法 二、实验内容 1.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值。 要求用函数指针调用这两个函数,结果在主函数中输出。 main() { int a,b,c,(*p)(); scanf("%d,%d",&a,&b);

C语言实验六实验报告——指针

一、实验项目名称 指针 二、实验目的 1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等; 2.掌握数组与指针的关系并能够利用指针解决数组的相关问题; 3.掌握字符串与指针的关系并能够利用指针处理字符串的问题; 4.掌握指针与函数的关系并能够利用指针处理函数问题; 5.了解指向指针的指针的概念及其使用方法; 6.能够使用指针进行程序设计。 三、实验内容 有关指针的程序设计 1.编程实现:任意输入的10个数,求其平均值。 要求: (1)10个数采用scanf语句读入。 (2)利用指针实现对这10个数的访问。 (3)要求平均值的精度为小数后面2位。 2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。 要求: (1)整数数组由初始化方式输入。任意整数由scanf函数输入; (2)实现过程采用指针处理; (3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。 3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。 要求: (1)在主函数中以初始化方式输入一个字符串; (2)调用newcopy()函数; (3)在主函数中输出处理后的结果。 4.编程实现:输入三个整数,按由大到小的顺序输出。

要求: (1)通过scanf函数输入三个数据并存入三个变量中; (2)利用指针实现从大到小输出; (3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出; (4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出; (5)体会指针对不同数据处理的特点。 四、实验步骤及结果 一、 #include <> void main() { int a[10],n,sum=0; float aver;/* 定义平均数为浮点型*/ int *p=a;/*初始化*/ printf("Please input 10 numbers:\n"); for (n=0;n<10;++n) scanf("%d",&a[n]);/*输入十个数*/ for (n=0;n<10;++n) sum=sum+*(p+n);/*使用指针访问数据*/ aver=(float)sum/n; printf("Average is %.2f",aver);/*精确到小数点后两位*/ } 二、 #include <> void arr(int *a,int n);/*定义排序函数*/ void insert(int *a,int num);/*插入并排序函数*/ int n=10;/*定义数据个数,可修改*/ void main()

实验报告8

实验八:指针及其应用 班级: 学生姓名:李林 学号:20141060101 一、实验目的 1、掌握指针的概念 2、掌握指针变量的定义和基本使用方法 3、掌握使用指针操作数组元素的方法 4、掌握使用指针操作字符串的方法 二、知识要点 1、变量的直接访问和间接访问的概念 2、指针和指针变量的概念 3、简单变量的指针及指向简单变量的指针变量的定义、赋值及使用 4、数组的指针及指向数组的指针变量的定义、赋值及使用 5、字符串的指针及指向字符串的指针变量的定义、赋值及使用 三、实验预习(要求做实验前完成) 1、写出一个C语句,使得指针变量u指向变量x: 2、写出一个C语句,输出“指针变量p指向的整型变量”的值: 3、把“指针变量u所指向的变量”的值变为40,其语句是: 4、定义三个变量,其中x1是整型变量;y1、y2是指向整数的指针变量: 5、若有语句:char t[20]= “abcdefgh”,*p;则使p指向字符串的第一个 字符的语句是: 四、实验内容(以下题目要求使用指针方法完成) 1、已知一个整数数组x[4],它的各元素值分别为3、11、8和22。使用指针表 示法编程序,求该数组各元素之积。#include #include int main() { int x[4]={3,11,8,22};

int *p=&x,ji=1,i; for(i=0;i<4;i++) { ji=ji*(*p); p++; } printf("%d\n",ji); return 0; } 2、编写程序,输入10个整数至一数组,将其中最小的数与第一个数对调,把 最大的数与最后一个数对调。(要求输出对调前后的数组)#include #include void ha(int *p,int n) { int i; for(i=0; i

实验六 指针(题目)

实验六指针 一、实验目的及要求 1.通用实验进一步掌握指针的概念,会定义和使用指针变量; 2.能正确使用数组的指针和指向数组的指针变量; 3.能正确使用字符串的指针和指向字符串的指针变量; 4.能正确使用指向函数的指针变量; 5.了解指向指针的指针的概念及其使用方法。 二、实验学时 4学时 三、实验任务 编程序并上机调试运行程序(都要求用指针处理)。 1.上机验证以下c70101.c程序的运行结果 #include void main() { inti,j,*pi,*pj; pi=&i; pj=&j; i=5; j=7; printf("\n%d\t%d\t%d\t%d",i,j,pi,pj); printf("\n%d\t%d\t%d\t%d",&i,*&i,&j,*&j); } 运行结果: 5 7 -34 -32 -34 5 -32 7 相关知识:指针的值与指针指向的变量值的区别。在VC环境下,以上运行结果中的负数是另一个值。 2.上机验证以下c70102.c程序的运行结果 #include void main() { inti,a[]={1,2,3},*p; p=a;/*将数组a首地址赋给指针p*/ for (i=0;i<3;i++) printf("%d,%d,%d,%d\n",a[i],p[i],*(p+i),*(a+i)); } 运行结果: 1,1,1,1 2,2,2,2

3,3,3,3 相关知识:①指针指向数组的方法;②指针表示数组元素的方法。③数组元素的多种表示方法。 3.调试下列c70103.c程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 #include void main() { intj,a[12],*p=a; for(j=0;j<12;j++) scanf("%d",p++); p=a; for(j=1;j<=12;j++) { printf("%4d",*p++); if(j%4 == 0) printf("\n"); } } 相关知识:①调试时指针变量指向哪个目标变量;②区分指针的值和指针指向变量的值; ③通过指针操作数组元素。 4.调试下列c70104.c程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:⑴2个数的和,⑵2个数交换值。 #include void main( ) { inta,b,c,*p=&c; void sum(int ,int ,int *); void swap(int * ,int * ); scanf("%d,%d",&a,&b); sum(a,b,p); swap(&a,&b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } void sum(inta,intb,int *c) { *c=a+b; } void swap(int *a,int *b) { int *t; t=a; a=b; b=t; } 相关知识:①调试程序时注意参数传递的是数值还是地址。②指针作为参数;③利用指针得到多个返回值。

《C语言程序设计》(江宝钏著)实验八答案

江宝钏实验八 3.一般编程题 1.用指针法统计10个数中正数、负数与零的个数,并分别求正数的总与,负数的总与。#include void main() { int a[10]; int i,*p,sum1,sum2,c1,c2,c3; printf("输入10个整数:"); for(i=0;i<10;i++) scanf("%d",&a[i]); c1=c2=c3=0;sum1=sum2=0; for(p=a;p<(a+10);p++) { if(*p<0){ sum1+=*p;c1++;} if(*p==0){ c2++;} if(*p>0) {sum2+=*p;c3++;} } printf("正数,负数的与:%d %d\n",sum2,sum1); printf("正数、零、负数的个数:%d %d %d \n",c3,c2,c1); }

4.较难编程题 1.输入一行字符,开始用一个指针指向这行字符的开头,并依次向后移,分别统计出其中英 文字母、空格、数字与其它字符的个数。 #include #include #define N 100 void main() { char *p; char str[N]; int c1,c2,c3,c4,i; printf("input a string:"); gets(str); i=strlen(str); c1=c2=c3=c4=0; for(p=str;p='a'&&*p<='z'||*p>='A'&&*p<='Z') c1++;

实验08-1参考答案

实验八指针程序设计 班级:学号:姓名:评分: 一.【实验目的】 1、理解指针、地址和数组间的关系。 2、掌握通过指针操作数组元素的方法。 3、掌握数组名作为函数参数的编程方式。 4、进一步掌握C程序的调试方法和技巧。 二.【实验内容和步骤】 1、程序调试题 A.目标:进一步学习掌握程序调试的方法和技巧。 B.内容:有n个整数,使各数顺序往后循环移动m个位置(m void mov(int *, int, int); int main() { int m, n, i, a[80], *p; printf("Input n, m:"); scanf("%d%d",&n,&m); for(p=a,i=0;i0;j--) x[j]=x[j-1]; /* 调试时设置断点 */ x[0]=k; } } ②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

C语言_实验六 指针剖析

实验六指针 一、实验目的 1、掌握指针的概念,定义和使用指针变量; 2、掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。 3、掌握字符串指针作的用法。 二、相关知识点 ●地址和指针的概念; ●数组和指针的关系; ●字符串和指针的关系; 三、实验内容一(验证及程序分析) Eg5-1: 输入两个整数,并使其从大到小输出,用指针变量实现数的比较。 (1)源程序: #include void main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a; p2=&b; if(a

printf("a=%d,b=%d\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); } (2)程序运行结果: (3)在程序中的定义一个整型变量t,然后将语句段if(a

Eg5-2:运行并改正下面程序中的错误。#include void main() { int a=3,b; int *p; *p=a; b=*p; printf("%d\n",b); a=100; b=*p; printf("%d\n",b); } (1)程序运行结果:

(2)请简要分析程序错误的原因: (3)请将程序中的错误改正后重新运行: Eg5-3:用指针法输入12 个数,然后按每行4 个数输出。 (1)算法分析:定义一个整型数组和一个整型指针,这样通过数组就可以静态分配内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同

实验六 指 针

昆明理工大学(C++面向对象编程)上机报告 实验六指针(一) 一、目的和要求 1. 熟悉指针的正确用法。 2. 掌握指针作为函数参数的使用方式 二、实验内容和步骤 1、指出下面程序错误的原因。 main( ) { int x=10,y=5,*px,*py; px=py; px=&x; py=&y; printf(“*px=%d,*py=%d,*px,*py);

} 答:警告是px,py没有赋初值; 错误时printf语句中缺少了” 正确:printf(“*px=%d,*py=%d”,*px,*py); 2、下面的程序试图有如下运行结果: 请调试下面的程序,使其有如上执行结果。#include main () { char s*; char c; printf(“which style you want to :ln”); printf(“capital ( c ) or uncapital(a):”); c=getchar(); if(c=’c’)strcpy(s,”COMPUTER”);

else strcpy(s,”computer”); put(s); } 分析出错原因。 If(c=’ c’)不应用赋值语句 Strcpy函数中s 不应该为指针!!应定义为数组;正确程序 3.下面的程序能获得上述运行结果吗? main() {

char *S=”COMPUTER”; char c; printf(“which style you want t o \n”); printf(“capital (c) or uncapital(u);”); c=getchar(); if(c=’c’) put(s); else { s=”computer”; puts(s); } } 分析出错原因。 If(c=’ c’)不应用赋值语句 Put函数无法输出 正确程序

实验8-1 指针

实验8-1 指针(一) 1 【实验目的】 (1)掌握指针的概念和定义和使用指针变量的方法 (2)能正确使用数组的指针和指向数组的指针变量 (3)能正确使用字符串的指针和指向字符串的指针变量 【实验要求】 (1)熟练掌握和使用一维数组的指针和指向一维数组的指针变量 (2)能正确使用字符串的指针和指向字符串的指针变量 【实验环境】 (1) Microsoft XP操作系统 (2) Microsoft VC++ 6.0 【实验内容】 1、两个数比较https://www.360docs.net/doc/6714108396.html,/acmhome/problemdetail.do?&method=showdetail&id=1002 题目描述:求2个数中较大者。 输入:第一行为测试的数据组数N,接下来的N行分别是两个待比较的整数 输出:输出N行,每一行的值为每组数中较大的整数 样例输入 2 1 2

15 10 样例输出 2 15 2、三个数排序https://www.360docs.net/doc/6714108396.html,/JudgeOnline/problem.php?id=1511 题目描述:输入三个整数,按由小到大的顺序输出。 输入:三个整数 输出:由小到大输出成一行,每个数字后面跟一个空格 样例输入:2 3 1 样例输出:1 2 3 3、字符串排序https://www.360docs.net/doc/6714108396.html,/acmhome/problemdetail.do?&method=showdetail&id=1484 描述:输入3个字符串,按字典序从小到大进行排序。 输入:输入数据有一行,分别为3个字符串,用空格分隔。 输出:输出排序后的三个字符串,用空格分隔。 样例输入:abcd cdef bcde 样例输出:abcd bcde cdef 4、重置最值https://www.360docs.net/doc/6714108396.html,/JudgeOnline/problem.php?id=1513 题目描述:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;①输入10个数;②进行处理;③输出10个数。

实验报告一(指针)

实验报告一(指针) 指针实验一 指向变量得指针变量编程一.实验目得与要求 1、理解指针得概念。 2、掌握指针变量得定义与使用。 3、掌握指针变量作为函数参数得使用方法。 二二. 实验题目1、用指针变量编程,求数组中得最大元素与最小元素. #include "stdio、h”#define N 10 void main() { ;)n tni,2tp* tni,1tp* tni,][rra tni(nimxamdiov?int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; ;b&=2p ;a&=1p? ;)N,2p,1p,yarra(nimxam? printf("max=%d,min=%d\n",a,b); } void maxmin(int arr[],int *pt1,int *pt2,int n)

{ int i; * ;]0[rra=2tp*=1tp? for(i=1;i #define MAXLEN 20 int CountLetter(char *str, char ch) {

C语言程序设计 实验8.1 指针与数组

实验8.1 指针与数组 题目信息表 序号题目名称题目满分题目得分题目编号 1 循环移动(调试示例error08_1) 2 在数组中查找指定元素 3 使用函数的选择法排序 4 报数 1 循环移动(调试示例error08_1) #include int main(void) { int i, m, n,k,j; int a[80]; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) scanf("%d", &a[i]); for(i=0;i0;j--) a[j]=a[j-1]; a[0]=k; } /*-----程序填空,不要改变与输入输出有关的语句。 输入两个正整数n 和m (1

printf("\n"); return 0; } 2 在数组中查找指定元素 #include int main(void) { int i, n, res, x; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &x); res=-1; for(i=0;i

实验6指针程序设计

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; for(i=0;i

实验十 指针(1).

实验十指针 实验目的 1.熟练掌握指针的定义和使用 2.掌握指针数组处理字符串 3.熟练掌握指针作为函数参数,包括数组名作为函数的参数4.熟练使用字符串处理函数strcmp、strcpy、strlen、strcat。 实验内容 1.调试,将5个字符串从小到大排序后输出。 源程序(有错误的程序) #include #include void fsort(char cname[][6],int n { int k,j; char tmp[6]; for(k=1;k 调试时设置断点 */ for(j=0;j if(cname[j]>cname[j+1] { t=cname[j]; cname[j]=cname[j+1]; cname[j+1]=t; } }

void main( { int i; char cname[5][6]={“wang”,”li”,”zhang”,”jin”,”xian”}; fsort(cname,5; for(i=0;i<5;i++ printf(“%s \n”,cname[i]; } /*调试时设置断点*/ 运行结果(改正后程序的运行结果) Jin Li Wang Xian Zhang #include "stdafx.h" #include #include void fsort(char cname[][6],int n { int k,j; char t[6]; for(k=1;k for(j=0;j

if(*cname[j]>*cname[j+1] { strcpy(t,cname[j]; strcpy(cname[j],cname[j+1]; strcpy(cname[j+1],t; } } void main( { int i; char cname[5][6]={"wang","li","zhang","jin","xian"}; fsort(cname,5; for(i=0;i<5;i++ printf("%s\n",cname[i]; } 2.编程,输入n(3 个数,输出这 n 个数中的最小值及其下标。要求定义和调用函数,寻找 n 个数中的最小值及其下标,函数的返回值类型是 void ,在函数中使用指针。 输入输出示例:

实验六 指针

实验6指针 一.实验目的 1.熟练掌握指针、地址、指针类型、void指针、空指针等概念; 2.熟练掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式; 3.会使用数组的指针和指向的指针变量; 4.会使用字符串的指针和指向字符串的指针变量 5.学会使用指向函数的指针变量; 6.了解指针与链表关系。 二.实验内容 1. 用调用函数,实现从两个数为输出较大者(要求用指针变量传递参数值)。 #include using namespace std; void swap(int *,int *); int main() { int x,y; cout<<"请输入两个整数:"<>x>>y; swap(&x,&y); cout<<"较大的数是:"< #include using namespace std; #define N 50 int main() { char a[N];

char *p = NULL; int len=0; int count1=0,count2=0,count3=0,count4=0,count5=0; cout<<"please input a string:"<= 'A' && *p <= 'Z') count1++; else if (*p >= 'a' && *p<= 'z') count2++; else if (*p == ' ') count3++; else if (*p >= '0' && *p<= '9') count4++; else count5++; } cout<<"大写字母:"< using namespace std; int findMinIndex(int a[], int n); int findMaxIndex(int a[], int n); void main() { int array[10]; cout<<"请输入十个数据:"<

相关文档
最新文档