当前位置:文档之家› C实验八 指针操作

C实验八 指针操作

C实验八 指针操作
C实验八 指针操作

实验八指针操作实验目的

(1)掌握指针概念及定义,指针变量的引用和操作。

(2)掌握通过指针操作数组元素的方法。

(3)掌握指针参数在函数中传递地址值。

(4)掌握通过指针使用字符串。

(5)了解main函数中参数的使用。

实验内容

1.读程序写结果

(1) /****** s8-1.c ******/

#include

main()

{

int a[]={2,3,4};

int *p,s,i;

s=1;

p=a;

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

s*=*(p+i);

printf("s=%d\n ",s);

}

上机前分析结果:

实际上机结果:

(2) /****** s8-2.c ******/

#include

main()

{

int a[]={1,3,5,7,9},*p=a;

printf("%d\n ",(*p++));

printf("%d\n ",(*++p));

printf("%d\n ",(*++p)++);

printf("%d\n ",*p);

}

上机前分析结果:

实际上机结果:

(3) /****** s8-3.c ******/

#include

main()

{

char s1[]="Today is Friday!";

char *s2="Tomorrow ",*p;

p=s1;

while (*s2!=’\0’)

*p++=*s2++;

printf("%s\n ",s1);

}

上机前分析结果:

实际上机结果:

(4) /****** s8-4.c ******/

#include

int fun(int *s)

{

static int t=0;

t=*s+t;

return t;

}

main()

{

int i,k;

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

{

k=fun(&i);

printf("%4d",k);

}

printf("\n");

}

上机前分析结果:

实际上机结果:

2.完善程序

(1) 程序功能:函数strcat(str1,st2)实现将字符串str2拼接到字符串str1后面的功能。/****** s8-5.c ******/

#include

char *strcat1(char *str1,char *str2)

{

char *t=str1;

while (_____1____ ) str1++;

while ( _____2_____ );

return(t);

}

main()

{

char s1[80],s2[80],*s3;

gets(s1);

gets(s2);

s3=strcat1(s1,s2);

printf("%s\n ",s3);

}

(2) 程序功能:依次取出字符串中所有小写字母以形成新的字符串,并取代原字符串。/****** s8-6.c ******/

#include

void fun(char *s)

{

int i=0;

char *p=s;

while ( ____1____ )

{

if (*p>=’a’&& *p<=’z’)

{

s[i]=*p;

____2____;

}

p++;

}

s[i]= ____3____ ;

}

main()

{

char str[80];

gets(str);

fun(str);

printf("\n the string of changing is:%s\n",str);

}

(3) 程序功能:通过指针作函数的参数实现三个数从小到大的排序。

/****** s8-7.c ******/

#include

void swap (_____1_____ )

{

int i;

i=*pt1;

*pt1=*pt2;

*pt2=i;

}

void exchange (int *q1,int *q2,int *q3)

{

if ( _____2_____ ) swap(q1,q2);

if ( _____3_____ ) swap(q1,q3);

if ( _____4_____ ) swap(q2,q3);

}

main()

{

int a,b,c;

int *p1, *p2, *p3;

p1=&a; p2=&b; p3=&c;

*p1=24;*p2=93;*p3=15;

exchange( _____5_____ );

printf("a=%d,b=%d,c=%d\n ",a,b,c);

}

(4) 将以下程序用指针变量实现

/****** s8-8.c ******/

#include

main()

{int i,j=0,k,*p=&I,a[100];

/*以下i全部用p替换*/

for(i=200;i<=300;i++)

{for(k=2;k

if(i%k==0)break;

if(k>=i)a[j++]=i;

}

for(i=0;i

}

1.改错

程序功能:给定程序中函数fun 的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符的顺序排列。(注意0为偶数)

例如:当s中的字符串为:"ABCDEF"时,

则t中的字符串应为:"BBDDFF"。

请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

/****** s8-9.c ******/

#include

#include

#include

void fun (char *s, char *t)

{

int i, j, sl;

sl = strlen(s);

/************found************/

for (i=0, j=0; i

{

t[2*j] = s[i];

t[2*j +1] = s[i];

/************found************/

j--;

}

t[2*j] = '\0';

}

main()

{

char s[100], t[100];

printf("\nPlease enter string s:");

scanf("%s", s);

fun(s, t);

printf("The result is: %s\n", t);

}

2.程序设计

(1) 请编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回结果。部分源程序如下:(s8-10.c)

/****** s8-10.c ******/

#include

void fun(int s[], int *p1, int *p2,int n)

{

}

main()

{

int a[3],i,max,min;

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

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

fun(a,&max,&min,3);

printf("max=%d,min=%d\n",max,min);

}

(2) 编写函数,其功能是:对传送过来的两个浮点数求出和值和差值,并通过形参传送回调用函数。(s8-11.c)

提示:

①利用指针传送地址值,通过传送地址值来改变实参。

②区分*变量和&变量的含义。

③参考:函数名(数1,数2,和变量地址,差变量地址)。

(3) 编写函数fun(),其功能是:先将字符串s中的字符按正序存放到t串中,然后再将s中的字符按逆序连接到t串的后面。(s8-12.c)

/****** s8-12.c ******/

#include

#include

void fun(char *s,char *t)

{

}

main()

{

char s[80],t[80];

printf("\n please enter string s:");

gets(s);

fun(s,t);

printf("\n the result is %s\n ",t);

}

(4) 用指针方法比较输入的两个字符串是否相等。(s8-13.c)

提示:可用字符型指针指向字符串的开始,逐个移动指针进行比较。

(5) 编程:将用户输入的由数字字符和非数字字符组成的字符串中的数字字符提取出来形成一个新的字符串并输出。例如:输入“asd123rt789,fg456k”,则产生的新字符串是“123789456”。(s8-14.c)

提示:用一个函数接收用户输入的字符串,逐一判断每个字符是否是数字字符,若是数字字符,将其逐个存入字符数组中,处理完后输出新字符串。

实验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、改错题 (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) {

实验七 指针

实验七指针(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);

实验报告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

《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; } } ②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。

实验8-1 指针

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

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

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

实验十 指针(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 ,在函数中使用指针。 输入输出示例:

实验8 指针的应用

实验八指针的应用(2学时) 实验前必须做的操作 ..新建文件夹: ...... .........—— 1、先在对应的K:盘上建立一个父文件夹(用来存放本人整个学期的作业),格式为:“专业+班级+学号+姓名”,如:航海1091班、学号为05的匡珍春同学,其父文件夹名称为:航海109105匡珍春,然后在此父文件夹下建立子文件夹,名称为:实验8(用来存放实验8需要上交的文件)。 2、在E:盘上建立一个以本人姓名为名称的文件夹(本次实验的工作文件夹),例如:E:\匡珍春【实验目的】 1、掌握指针的概念、指针变量定义格式; 2、掌握指针的运算; 3、学会用指针对变量进行操作; 4、掌握指针与数组的关系; 5、了解通过指针操作字符串的方法; 6、了解指针与函数的关系; 7、了解指向指针变量的指针。 【实验内容】 [实验任务一]:补充完整程序,掌握C语言中与指针有关的算法。 程序填空实例8-1:使用指针把从键盘输入的2个数按从大到小的顺序输出(不改变变量的值),请补充完整并上机调试。将填空后完整的程序以文件名为blank8_1.c保存在实验8文件夹里。(需要存盘)

程序填空实例8-2:输入10个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。下面给出部分程序的内容,请将程序补充完整,然后上机调试。 将填空后完整的程序以文件名为nixu_1.c保存在实验8文件夹里。(需要存盘) 将填空后完整的程序以文件名为nixu_1.c保存在实验8文件夹里。(需要存盘)

程序填空实例8-3:用指针访问简单变量。从键盘输入三个整数,要求设三个指针变量p1,p2,p3,使p1指向三个数的最大者,p2指向次大者,p3指向最小者,然后按由小到大的顺序输出这三个数。将填空后完整的程序以文件名为blank8_3.c保存在实验8文件夹里。(需要存盘) 程序填空实例8-4:用指针来处理一维数组元素。从键盘上输入若干个字符,以符号“@”结束。编一个C程序,统计这些符号的个数(不包括@)存入数组元素a[0],将这些符号依次存入a[1]、a[2]、a[3]、…中。接着利用a[0]中存放的字符个数,输出这些字符。将填空后完整的程序以文件名为blank8_4.c保存在实验8文件夹里。(需要存盘) 【待填充的源程序参考清单】 #include void main( ) { char a[100]={0}, =a, c; scanf ("%c", &c); while( ) { ; ; *pa=c; scanf("%c", &c); } printf("\nnumber of string: %d\nstring:\n", a[0]); for(pa=a+1; pa<= ;pa++) printf("%c",*pa); printf("\n"); }

C语言实验八

实验8 指针程序设计 一、实验目的 1、掌握指针和指针变量、内存单元和地址、变量与地址、数组与地址的关系。 2、掌握指针变量的定义和初始化,指针变量的引用方式。 3、掌握指向变量的指针变量的使用。 4、掌握指向数组的指针变量的使用。 5、掌握指向字符数组指针变量的使用。 二、实验内容 1.改错题 (1)下列程序的功能为:互换给定数组中的最大数和最小数。程序中,最大数与最小数的互换操作通过函数调用来实现,指针max和min分别指向最大数和最小数。纠正程序中存在的错误,以实现其功能。程序以文件名sy8_1.c保存。 #include void main() { int i; static int a[8]={10,5,4,0,12,18,20,46}; void jhmaxmin(); printf(“Original array:\n”); for(i=0;i<8;i++) printf(“%5d”,a[i]); /*输出原始数组元素*/ printf(“\n”); jhmaxmin(a,8); printf(“Array after swaping max and min:\n”); for(i=0;i<8;i++) printf(“%5d”,a[i]); /*输出交换后的数组元素*/ printf(“\n”); } void jhmaxmin(int p,n) { int t,*max,*min,*end,*q; end=p+n; max=min=p; for(q=p+1;q*max) max=q; if (*q

实验八指针

上机实验八指针 一.目的要求 1.掌握指针的基本概念。 2.掌握指针变量的定义和初始化。 二.实验内容 【实验题1】程序填空,交换指针p1,p2所指向的变量。 # include void main ( ) { int a=1,b=2, *p1, *p2, *pt; p1=&a; p2=&b; printf(“p1=%d, p2=%d \n”, p1,p2); //交换指针变量p1,p2所指向的变量 pt= p1; p1=p2 ; p2=pt; //注意:这三个指针变量前均无间接引用符* printf(“p1=%d, p2=%d \n”, p1,p2); } 运行结果:(注意:输出的是p1、p2所指变量的地址,即变量a或b的地址) 【实验题2】程序填空,交换指针p1,p2所指变量的值。 # include void main ( ) { int a=1,b=2, *p1, *p2, temp; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); //交换p1,p2所指向的变量的值 temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符* printf(“*p1=%d, *p2=%d \n”, *p1,*p2); } 运行结果:(注意:指针前加*, 代表指针所指变量) 【实验题3】程序填空:输入三个整型变量i,j,k的值。请设置三个指针变量p1,p2,p3,分别指向i,j,k。然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。输出交换后i,j,k的值。

实验8

实验八指针 一、实验目的 1.通过实验进一步掌握指针的概念,会定义和使用指针变量; 2. 能正确使用数组的指针和指向数组的指针变量; 3. 能正确使用字符串的指针和指向字符串的指针变量; 4.了解指向指针的指针的概念及其使用方法 二、实验内容 编程序并上机调试运行。本章习题均要求用指针方法处理 1.输入3个整数,按由小到大的顺序输出 2.编写函数用选择法对10个整数按由大到小顺序排序, 方法一,用指针变量做实参形参。方法二,用数组名作实参和形参 3.有一数列,含有20个整数,现要求编写一个函数,能够对从指定位置开始 的几个数按相反顺序重新排列,并在main函数中输出新的数列。例如,原数列为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 若要求对从第5个数开始的10个数进行逆序处理,则得到的新数列为1,2,3,4,14,13,12,11,10,9,8,7,6,5,15,16,17,18,19,20 4、有n个人围成一圈,顺序排号。从第1个人开始报数(从1报到3),凡报到3的人退出圈子,问最后留下的是原来第几号的人?要求如下: (1)用函数实现报数并退出 (2)n的值由main函数输入并通过实参传送给该函数,最后结果由main函数输出。 (3)要求使用指针

5、输入10个数,将其中最小的数与第一个数对换,把最大的数与最后一个数对 换。编写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 6、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m 个数。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。见现在书上习题p247的图8-28 7、将一个3*3的矩阵转置,用一个函数实现,在主函数中用格式输入函数输入矩阵元素,将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。 8、有一个字符串,包含n个字符,写一函数将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 9、写一个函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原形为int strcmp(char *p1,char *p2)。 (本题是教材第10章习题10.17) 10、在主函数中输入10个字符串,用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。要求用指针数组处理。

实验8 c语言非常棒还详细,适合初学者学习

实验8:善于使用指针 综合性实验 实验名称:善于使用指针 实验编号:C_8 小组成员:(姓名) 实验日期: 仪器设备:计算机 实验地点: 实验目的: 1、通过实验进一步掌握指针的概念,会定义和使用指针变量。 2、学会使用指针作为函数参数的方法。 3、能正确使用数组的指针变量。 4、能正确使用字符串的指针和指向字符串的指针变量。 5、能正确使用多维数组的指针变量。 6、能正确使用指向函数的指针变量。 7、能正确使用指针数组变量。 实验内容:空 实验原理: 定义和引用指针的方法;指针作为函数参数。 指针引用数组和字符串的方法。 多维数组的指针、指向函数指针和指针数组。 实验步骤: 实验原理记录及数据处理:(将所运行的程序代码填写在此处。) 结果与结论:程序是否能正常运行,如果不能存在哪些问题。 实验内容(一) 编程序并上机调试运行以下程序(都要求用指针处理)。 (1)输入3个整数,按由小到大的顺序输出,然后将程序改为:输入3个字符串,按由小到大的顺序输出。 ①先编写一个程序,以处理输入3个整数,按由小到大的顺序输出。运行程序,分析 结果。 ②把程序改为能处理3个字符串,按由小到大的顺序输出。运行此程序,分析结果。 ③比较以上两个程序,分析处理整数与处理字符串有什么不同?例如: (a)怎样得到指向整数(或字符串)的指针。 (b)怎样比较两个整数(或字符串)的大小。 (c)怎样交换两个整数(或字符串)。 (2)写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 分别在程序中按以下两种情况处理: ①函数形参用指针变量; ②函数形参用数组名。 作分析比较,掌握其规律。 (3)将n个数按输入时顺序的逆序排列,用函数实现。 ①在调用函灵敏时用数组名作为函数实参。 ②函数实参改为用指向数组首元素的指针,形参不变。

《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

if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z') c1++; if(*p==' ') c2++; if(*p>='0'&&*p<='9') c3++; else c4++; } printf("字母个数:%d\n",c1); printf("空格个数:%d\n",c2); printf("数字个数:%d\n",c3); printf("其他字符个数:%d",c4); }

实验8-1 指针基本概念

实验8-1 指针基本概念 【知识点回顾】 1.指针和指针变量 1)内存地址:内存存储单元的编号,从0开始,以字节为单位 2)指针:一个内存地址有且仅有一个内存存储单元对应,即一个地址“指向”一个单 元,故将地址称为指针 3)指针变量:C语言中允许将地址作为数据值,用一个变量来存放。存放指针的变量 称为指针变量。 2.指针变量使用三步骤 1)声明:一般形式如:类型说明符*指针变量名; 2)初始化:一般形式如:指针变量=&变量; 3)访问数据:一般形式如:*指针变量 3.指针运算符 1)间接访问运算符“*” 2)取地址运算符“&” 4.printf和scanf是否使用指针对比:假定有int x,y;int *px=&x,*py=&y; 1)不使用指针的输入输出语句: scanf(“%d %d”,&x,&y); printf(“%d %d”,x,y); 2)使用指针的输入输出语句: scanf(“%d %d”,px,py); printf(“%d %d”,*px,*py); 5.打印地址信息: 1)使用%p占位符 2)使用%x占位符 【典型例题】 1.例题1,指针的基本使用方法 #include int main() { int data=100; //第一种指针变量定义方式:声明与初始化分两步完成 int * pd; //声明指针变量 pd=&data; //初始化指针变量,注意细节,data变量必须之前声明过

//下面是第二种指针变量定义方式:声明与初始化一步完成 //int * pd = &data; //声明指针变量,同时初始化指针变量 printf("Direct access: data = %d\n", data); //变量的直接访问 printf("Indirect access: data = %d\n",*pd); //变量的间接访问 printf("The address of data is %p\n", &data);//变量的地址输出 printf("The address of data is %p\n",pd); //指针变量的输出 return 0; } 程序运行效果如下: 2.例题2,两数求和。 #include int func1(int a, int b); void func2(int a, int b, int * pr); int main() { int x, y; int result=0; printf("please enter two integers, like x y:"); scanf("%d %d",&x,&y); //函数调用 result = func1(x, y); printf("func1: %d+%d = %d\n",x, y, result); result =0; //函数调用,前两个实参传递值,实参三传递了地址 func2(x,y,&result); printf("func2: %d+%d = %d\n",x, y, result); } //函数定义,注意,形参均约定为值传递 int func1 (int a, int b) { int r; r=a+b; return r; }

C语言入门学习-C上机实验八要求

上机实验八指针综合练习&函数初步 【实验七参考答案见后】 目的和要求: (1)继续熟悉指向字符串的指针; (2)掌握二维数组列指针、行指针的使用要领; (3)了解指针数组的作用; (4)了解自定义子函数的一般应用; (5)掌握值传递的要领,了解地址传递的特点。 实验内容: 一、完善程序题 1.以下程序统计指定句子(即只含有字母、空格、句号的字符串)中的单词个数,并输出每个单词。【本题的思路是:将每个单词存放到二维数组的每一行,则存放的行数即为单词的个数。】 #include #include main() {char *text=" I will pass the examination in the summer holiday." ; int n, i, j, word; char a[20][80]; while(*text==' ' )text++; /*去掉前导空格*/ n=0; j=0; for(i=0; i

实验8 指针的应用

实验八指针得应用(2学时) 实验前必须做得操作 ..新建文件夹 .....:. .........—— 首先在各自对应得计算机ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹得名字为“班级+学号得后两位+姓名”,如座位号为K02,航海1111班、学号后两位就是02得、姓名为“张强”得同学,则其对应得文件夹名字就是:航海111102张强。然后在刚才建好得文件夹里面再建立一个文件夹,文件夹为“实验8”。 【实验目得】 1、掌握指针得概念、指针变量定义格式; 2、掌握指针得运算; 3、学会用指针对变量进行操作; 4、掌握指针与数组得关系; 5、了解通过指针操作字符串得方法; 6、了解指针与函数得关系; 7、了解指向指针变量得指针。 【实验内容】 [实验任务一]:补充完整程序,掌握C语言中与指针有关得算法。 程序填空实例8-1:使用指针把从键盘输入得2个数按从大到小得顺序输出(不改变变量得值),请补充完整并上机调试、将填空后完整得程序以文件名为blank8_1。c保存在实验8文件夹里、(需要存盘)

程序填空实例8—2:输入10个整数存入一维数组,再按逆序重新调整该数组中元素得顺序然后再输出、下面给出部分程序得内容,请将程序补充完整,然后上机调试。 将填空后完整得程序以文件名为nixu_1。c保存在实验8文件夹里。(需要存盘) 将填空后完整得程序以文件名为nixu_1、c保存在实验8文件夹里。(需要存盘)

程序填空实例8—3:用指针访问简单变量、从键盘输入三个整数,要求设三个指针变量p1,p2,p3,使p1指向三个数得最大者,p2指向次大者,p3指向最小者,然后按由小到大得顺序输出这三个数、将填空后完整得程序以文件名为blank8_3.c保存在实验8文件夹里。(需要存盘) 程序填空实例8-4:用指针来处理一维数组元素。从键盘上输入若干个字符,以符号“”结束。编一个C 程序,统计这些符号得个数(不包括)存入数组元素a[0],将这些符号依次存入a[1]、a[2]、a[3]、…中。接着利用a[0]中存放得字符个数,输出这些字符。将填空后完整得程序以文件名为blank8_4。c 保存在实验8文件夹里。(需要存盘) 【待填充得源程序参考清单】?#include

相关主题
文本预览
相关文档 最新文档