实验10数组指针综合练习.doc

合集下载

C语言数组指针练习.doc

C语言数组指针练习.doc

作业: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) //最大值为最后一个数,最小值为第一个数时,三者之间交换。

指针与数组补充习题与解答

指针与数组补充习题与解答
7
void insert(char *s1,char *s2,int pos) { char s[80]; char *p=s1,*p1=s; p=p+pos-1; *p++=0; while(*p) { *p1++=*p++; } *p1=0; strcat(s1,s2); strcat(s1,s); } 6、 编写程序, 实现下面一个有关单词个数统计问题。 编写一个函数 findstr(char *str,char *substr), 该函数统计一个长度为 2 的子字符串在另一个字符串中出 现的次数。例如,假定输入的字符串为”asd asasdfg asd as zx67 asd mklo”, 子字符串为 as,函数返回值是 6。 asd asasdfg asd as zx67 asd mklo as 6 解: #include"stdio.h" #include"string.h" int main(void) { char s1[80],s2[80]; int n; int findstr(char *str,char *substr); printf("请输入一个字符串:"); gets(s1); printf("请输入你要查找的字符串: "); gets(s2); n=findstr(s1,s2); printf("%s 在%s 里共有%d 个\n",s2,s1,n); return 0; } int findstr(char *str,char *substr) { int i,j,k,count=0; char temp[80]; int length=strlen(substr); for(i=0;i<strlen(str);i++) { k=0;

C数组指针题含答案

C数组指针题含答案

数组指针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).

实验十  指针(1).

实验十指针实验目的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 个数中的最小值及其下标。

(完整word版)C语言指针练习+答案+讲解

(完整word版)C语言指针练习+答案+讲解

第七章指针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因无法实现其目的而显现出它的劣势,而通过使用指针变量来实现对存储地址内的内容的交换,并返回相应的值是很好的选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
for(int i=O;i<nArrayNum;i++)
{
scanf("%d",pArray);//逐个输入数组的每个元素
pArray++;//每次指针加1,指向下一个元素
void OutputArray(int *pArray、//指向整型变ii的指针,史参将一维数组首地址传递过来int nArrayNum)//数组元素的具体个数
{
int i;
printf("the score of no.%d are:",n); for (i=O;i<N;i++)
printf("%5.2f\n",*(*(p+n)+i»;
}
float average(float *p,int n)
{
float *p_end; float sum=0,aver; p_end=p+n-l; for (;p<=p_end; p++)
2.
热身练习:设a为3*2的二维数组,内容为:1-6,有int *p=a;写程序完成如下测试2
测试内容
测试值
描述
a
a+l
a[l]
&a[l]
a[l】+l
&a[l]+l
*(a+l)
*(a+l)+l
(a+l)+l
&a[l][l]
a[l][l]
a[2]-a[l]
P
p+1
Hale Waihona Puke *P*p+l练习2,求二维数组中的最大数和最小数。
}
作业:仿照例子,写出把字符串2追加粘贴到字符串1的函数及主程序,如果两个字符串相 等,则不粘贴。例如:字符串1为stu,字符申2为dent,粘贴之后,字符中1变为:student。判断字符串相等,可以使用:strcmp函数。
4.
参考如下实例片段,该程序可以实现什么功能?请将程序补全。float average(float *pjnt n); void search(float (*p)[N] ,int n);
{
scanf("%d",pArray);//逐个输入数组的每个元素pArray++;//每次指针加1,指向下一个元素
}
}
void OutputArrayfint *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来int nArrayRow, int nArrayCol)//数组元素的行数和列数
C
•、实验目的
1.
2.
3
二、实验内容
1.
热身练习:设a为一维数组,内容为:1-9,有int*p=a;写程序完成如下测试1
Tipsl用°/以可以输出十六进制的地址值,%o可以输出八进制地址值,测试值输出什么进制, 看你个人喜好啦!
测试内容
测试值
描述
a
a[l]
&a[l]
a+1
p+1
(*P)++
*p++
++(*p)
{
for(int i=O;i<nArrayNum;i++)
{
printf("%dn,*PArray);//逐个输出数组元素,然后指针加1,指向下一个元素pArray++;
}
printf("\n"h
练习1:在主函数中,测试一下这两个函数。再根据例子,写出冒泡法排序的函数,用指针 做参数。
Tips2指针指向一维数组,作为函数的参数,是一般软件中非常常见的方法,要熟悉并掌握。
{
for(int i=0;i<nArrayRow;i++) for(int j=0;j<nArrayCol,j++)
{
printffMdVpArray);//逐个输出数组元素,然后指针加1,指向下一个元素pArray++;
}
printf("\n"};
}
作业:写出求二维数组最大及最小数的函数及主程序,完成程序的功能。
#define M 3
#define N 4 main()
{
static float score[M][N]....//这里添加一个读入学生成绩的函数printf("average=%5.2f\n", average(score,M*N));
search(score,2);
}
void search(float (*p)[N] Jnt n)
++*p
练习:对一列整数进行输入,输出和排序,分别用函数实现,在主程序中测试,Tips2:虽然功 能和实验十一一样,但是,我们这次要用指针做为参数,来传递数组的地址了。
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:
void lnputArray(int *pArray,//指向整型变量的指针,实参将一维数组首地址传递过来int nArrayNum>//数组元素的具体个数
{
char *szl="l am a teacher."; //sz是常见的字符串变ii开头
char *sz2="You are a student.〃;//字符串的指针,是字符变量的指针,存放字符串的首地址printf("string_a=%s\n string_b=%s\n〃,a,b};//输山可以使用%s完成copy_string(szl,sz2);//调用函数完成字符串的复制
sum=sum+(*p); aver=sum/n; return aver;
}
pUts(SZl);//输入输出也可以使用string.h库里的字符串函数完成puts(sz2);
//自制的字符串复制函数
void copy_string(char *pFrom,*pTo)
{一
while(*pFrom!=,\0,)
*pTo=*pFrom;
pFrom++;
pTo++;
}
*pTo='\0';//为什么要加这一句?
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:
void lnputArray(int *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来int nArrayRow, int nArrayCol)//数组元素的行数和列数
{
for(int i=0;i<nArrayRow;i++) for(int j=0;j<nArrayCol,j++)
问题:为什么pArny这个指针,既可以用来指一维数组元素,也可以用在指二维数组元素? 在两个程序中,pArray++的意思相同吗?
Tips3指针指向二维数组元素作为函数的参数,是一般软件中非常常见的方法,需要熟悉并
掌握。
3.
参考如下实例,完成字符串的复制:
#include "stdio.h" include "string.h" main()
相关文档
最新文档