实验10数组指针综合练习.doc
- 格式:doc
- 大小:65.50 KB
- 文档页数:4
作业:1、下列程序的功能是:输入字符串S和字符串t,将字符串t追加到字符串S的尾部。
例如:串s:“abcde fgh”,串t: “1 2 3”,追加后s:“abcdefghl 2 3”。
2、下列程序的功能是实现从键盘输入两个字符串,输出后一子串在前一字符串中首次出现的位置(即第几个字符,若字符串不存在位置取0)。
3、下列程序的功能是:提取字符串中首个数字字串,转为对应的数字,输出其与15的和。
(注:数字W 的ASCII值为48,如无数字子串,输出15)例如:输入asdl23jk456,hg789ck输出:123+15=1384、实现:1)将数组a中大于-20的元素,依次存放到数组b中;2)将数组b中的元素按照从小到大的顺序存放到数组c中;3)输出数组b中的元素个数及数组c中的所有元素6、输入3行3列整型数组,求其最大值和最小值。
5、将三个字符串从小到大排序后输出。
1、下列程序的功能是:输入字符串S和字符串t,将字符串t追加到字符串s的尾部。
例如:串s:^abcde fgh”,串t: “1 2 3”,追加后s:“abcdefghl 2 3”。
#include <stdio.h>#include <string.h>void main(){chars[100],t[10];int ijenofs;gets(s);gets(t);/**/ i=0; /**/lenofs=strlen(s);while(tfil){ s[lenofs+i]=t[i];i++; }s[lenofs+i]=/**/ '\0' /**/;printf(n The final string s:%s\rT,s);getch();}2、下列程序的功能是实现从键盘输入两个字符串,输出后一子串在前一字符串中首次出现的位置(即第几个字符,若字符串不存在位置取0)。
#include <stdio.h>#include <string.h>void main(){ int i,j,k,position=0;char strl[100],str2[100];gets(strl);/**/gets(str2) /**/;for(i=0; /**/ strl[i]!=,\O, /**/; i++)for(j=i,k=0; (strl[j]==str2[k])&&(std[j]!=、(y); j++,k++ )■if(sti*2[k]==、0‘){position=i+l;/**/break /**/;}}printf(n\nlt,s at:%d\n H,position);getch();}-/**/; p++)3、下列程序的功能是:提取字符串中首个数字字串,转为对应的数 字,输出其与15的和。
上机实验十指针与数组学号: 姓名:一、目的要求:1.了解或掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。
2.了解或掌握运用指针处理数组。
二、实验内容:第1题、分别用下标法和指针变量p访问数组a[5]={1,3,5,7,9},至少用三种方法输出数组各元素的值,每种方法输出的五个元素在一行上。
第2题、书上P211例10-4。
并仔细体会P212“使用指针实现数组元素逆序存放”的指针移动思想。
第3题、编写程序,使用指针实现逆序打印一维整型数组所有元素的操作。
数组a: 1 3 7 2 9 6 5 8 2 0 4 8 2 0 4第4题、书上P213冒泡排序。
第5题、编写一个函数s(a,n),其中a是一个指向整型的指针接受一维整型数组首地址,n 是数组长度,功能是通过指针求数组中元素的平均值,并编写主函数测试函数。
第6题、编写一个函数void sort(int *a, int n), 用选择法对数组a中的元素按降序排序。
在main()函数中输入10个数,调用sort函数排序后,然后输出。
第7题、使用指针把从键盘输入的2个数按从大到小的顺序输出(不改变变量的值),请补充完整并上机调试。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第8题、输入10个整数存入一维数组,然后逆置数组,最后输出。
下面给出部分程序的内容,请将程序补充完整,然后上机调试。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第9题、上机调试下面程序,看哪些程序实现了交换主函数中两个变量值的操作,哪些没有实现,并分析原因。
第10题、调试修改下面程序,函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。
最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。
例如:若输入 2 8 5 7 8 4 5 3 2 8则应输出:The max: 8The positions: 1 4 9请改正函数fun中的错误,使它能得出正确的结果。
/**题目:将1~10存入数组a[10],并将其逆序输出。
*/#include <stdio.h>void main(){int a[10];int i;/*1~10存入数组a[10]*/for (i = 0; i < 10; i++){a[i] = i+1; //利用数组下标对1~10进行存入}/*数组数据顺序输出*/for (i = 0; i < 10; i++){printf("%3d", a[i]);}printf("\n");/*数组数据逆序输出*/for (i = 9; i >= 0; i--){printf("%3d", a[i]);}}/**题目:用指针方式编写程序:从键盘输入10个整型数据,* 并存入数组,要求将10个数中最大的数与第1个输* 入的数交换;将10个数中最小的数与最后1个输入* 的数交换。
*/#include <stdio.h>void main(){int a[10], *p, *max, *min, x;/*利用数组地址添加数组数据*/for (p = a; p < a+10; p++){scanf("%d", p);}/*判断出数组中的最大值与最小值*/max = min = a;for (p = a; p < a+10; p++){if (*max < *p){max = p;}if (*min > *p){min = p;}}/*输出数组中的数据*/for (p = a; p < a+10; p++){printf("%4d", *p);}printf("\n");/*将最大值与最小值分别和输入的第一个数与最后一个数交换*/if (*max == *(a+9) && *min == *a) //最大值为最后一个数,最小值为第一个数时,三者之间交换。
数组指针01 :逆序输出从键盘输入n 个整数( n<100 ),存放在一个一维数组中,逆序输出能被3 整除的元素,并逆序输出数组下标为3 的倍数的元素。
输入格式:第一个整数为个数n ,后续为n 个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20 输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++) cin>>a[i];for(i=n-1;i>=0;i--) if(a[i]%3==0) cout<<a[i]<<" " cout<<endl;for(i=n-1;i>=0;i--) if(i%3==0) cout<<a[i]<<" " cout<<endl; return 0;}数组指针02 :逆序存储从键盘输入n(n<100 )个整数,存放在一个一维数组a 中,将它们逆序存放在另一个整型数组b 中,并按b 数组中下标从小到大的顺序输出下标为3 的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素。
输出格式:下标为3 的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:20 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],b[MAX],n,i; cin>>n;for(i=0;i<n;i++)cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03 :平均值,存放在一个一从键盘输入任意个整数(以0结束,假设不超过100 个) 维数组中,计算这组数的平均值(实型)。
实验十指针实验目的1.熟练掌握指针的定义和使用2.掌握指针数组处理字符串3.熟练掌握指针作为函数参数,包括数组名作为函数的参数4.熟练使用字符串处理函数strcmp、strcpy、strlen、strcat。
实验内容1.调试,将5个字符串从小到大排序后输出。
源程序(有错误的程序)#include#includevoid fsort(char cname[][6],int n{ int k,j;char tmp[6];for(k=1;k 调试时设置断点 */for(j=0;jif(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];} /*调试时设置断点*/运行结果(改正后程序的运行结果)JinLiWangXianZhang#include "stdafx.h"#include#includevoid fsort(char cname[][6],int n{ int k,j;char t[6];for(k=1;kfor(j=0;jif(*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 个数中的最小值及其下标。
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
实验十:数组、指针和函数综合编程练习一:实验目的:–1.掌握指针变量的定义和使用–2.指针变量作为函数参数的实际意义。
–3.体会数组名作为函数参数与指针变量作为函数参数的区别。
二:实验内容及要求:1 打印最高分和学号假设每班人数最多不超过40人,具体人数由键盘输入,用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。
2 字符串拷贝分别用字符数组和字符指针编程实现字符串拷贝。
三:程序源代码:题目1:#include <stdio.h>#define ARR_SIZE 40void Findmax(int score[],long num[],int n,int *pmaxScore,long *pmaxNum);main(){int i,n;int score[ARR_SIZE],maxScore;long num[ARR_SIZE],maxNum;printf("Please enter total number:");scanf("%d",&n);printf("Please enter the number and score:\n");for(i=0;i<n;i++){scanf("%ld%d",&num[i],&score[i]);}Findmax(score,num,n,&maxScore,&maxNum);printf("maxScore=%d,maxNum=%06ld\n",maxScore,maxNum);}void Findmax(int score[],long num[],int n,int *pmaxScore,long *pmaxNum){int i;*pmaxScore=score[0];*pmaxNum=num[0];for(i=0;i<n;i++){if(score[i]>*pmaxScore){*pmaxScore=score[i];*pmaxNum=num[i];}}}题目2:#include <stdio.h>void Mystrcpy(char *dstStr,const char *srcStr); main(){char dstStr[80],srcStr[80];printf("Please enter a string:");scanf("%s",srcStr);Mystrcpy(&dstStr,&srcStr);printf("The copy is:%s\n",dstStr);}void Mystrcpy(char *dstStr,const char *srcStr) {while(*srcStr!='\0'){*dstStr=*srcStr;dstStr++;srcStr++;}dstStr='\0';}四:运行结果、分析与讨论:题目1:Please enter total number:5 Please enter the number and score: 00001 8500002 6500003 9800004 8700005 45maxScore=98,maxNum=000003 Press any key to continue... 在程序需要多个返回变量值时,return因无法实现其目的而显现出它的劣势,而通过使用指针变量来实现对存储地址内的内容的交换,并返回相应的值是很好的选择。
数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。
输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针02:逆序存储从键盘输入n (n<100)个整数,存放在一个一维数组a中,将它们逆序存放在另一个整型数组b中,并按b数组中下标从小到大的顺序输出下标为3的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素输出格式:下标为3的倍数的元素,各个数值之间用空格分隔输入:10 2 7 9 10 5 4 3 6 8 20输出:20 3 10 2#include <iostream> using namespace std; const int MAX=100; int main(){int a[MAX],b[MAX],n,i; cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03:平均值从键盘输入任意个整数(以0结束,假设不超过100个),存放在一个一维数组中,计算这组数的平均值(实型) 。
以下是一些数组和指针的例题:
1. 编写一个程序,将一个整数数组逆序输出。
2. 编写一个程序,找出一个整数数组中的最大值和最小值。
3. 编写一个程序,将一个字符串数组中的每个元素倒序输出。
4. 编写一个程序,找出一个整数数组中的所有奇数并输出。
5. 编写一个程序,将一个整数数组中的元素复制到另一个整数数组中。
6. 编写一个程序,找出一个整数数组中的重复元素并输出。
7. 编写一个程序,将一个整数数组中的元素按照一定的规则排序。
8. 编写一个程序,找出一个整数数组中的第K个最大元素。
9. 编写一个程序,将一个字符串数组中的每个元素转换为大写字母并输出。
10. 编写一个程序,找出一个整数数组中的两个数之和为给定值的下标。
数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。
输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针02:逆序存储从键盘输入n(n<100)个整数,存放在一个一维数组a中,将它们逆序存放在另一个整型数组b中,并按b数组中下标从小到大的顺序输出下标为3的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素。
输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20 输出:20 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],b[MAX],n,i;cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03:平均值从键盘输入任意个整数(以0结束,假设不超过100个),存放在一个一维数组中,计算这组数的平均值(实型)。
(完整)指针综合练习题(带答案).编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)指针综合练习题(带答案).)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)指针综合练习题(带答案).的全部内容。
指针综合练习题一、选择题1.若有以下定义,则对a数组元素的正确引用是____d_____。
int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)2.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为__d____.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j3.若有以下定义,则p+5表示___a____。
int a[10],*p=a;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值4.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是____b____。
a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);5.若有说明语句char a[]="It is mine";char *p=”It is mine”;则以下不正确的叙述是___d_____。
a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符二、填空题1 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它 (2)和(3)的地址。
使用变量名来访问变量,是按(4)来直接存取变量称为 (5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6) 方式。
数组指针 01:逆序输出从键盘输入 n 个整数( n<100),寄存在一个一维数组中,逆序输出能被 3 整除的元素,并逆序输出数组下标为 3 的倍数的元素。
输入格式:第一个整数为个数n,后续为 n 个整数输出格式:第一行能被 3 整除的元素,第二行为下标为 3 的倍数的元素,各个数值之间用空格分开。
输入:输出:6 3 9203102#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针 02:逆序储存从键盘输入 n( n<100)个整数,寄存在一个一维数组 a 中,将它们逆序存放在另一个整型数组 b 中,并按 b 数组中下标从小到大的次序输出下标为 3 的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,以后为 n 个元素。
输出格式:下标为 3 的倍数的元素,各个数值之间用空格分开。
输入:输出:203102#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],b[MAX],n,i;cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针 03:均匀值从键盘输入随意个整数(以 0 结束,假定不超出 100 个),寄存在一个一维数组中,计算这组数的均匀值(实型)。