实验10 数组指针综合练习
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的和。
C语言 数组和指针练习题

若当堂没做完,下周四之前上交也可。
至ftp://211.64.82.253/用户名和密码:stuC语言程序设计练习题——数组一、选择题77、以下对一维数组a的正确说明是_d ___A、char a(10);B、int a[ ];C、int k=5,a[k];D、char a[ ]={'a' , 'b' , 'c'};78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___A、a[0][3]B、a[0][4]C、a[2][2]D、a[2][2+1]79、以下能对二维数组y进行初始化的语句是_b__A、static int y[2][ ]={{1,0,1}, {5,2,3}};B、static int y[ ][3]={{1,2,3}, {4,5,6}};C、static int y[2][4]={{1,2,3}, {4,5} , {6}};D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___A、数组y的每个元素都可得初值0B、二维数组y的行数为1C、该说明等价于int y[ ][4]={0};D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值081、以下各组选项中,均能正确定义二维实型数组s的选项是_c___A、float s[3][4];B、float s(3,4);float s[ ][4]; float s[ ][ ]={{0};{0}};float s[3][ ]={{1},{0}}; float s[3][4];C、 float s[3][4];D、float s[3][4];static float s[ ][4]={{0},{0}}; float s[3][ ];auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__A、3B、2C、无确定值D、183、若二维数组y有m列,则在y[i][j]前的元素个数为_B___A、j*m+iB、i*m+jC、i*m+j-1D、i*m+j+184、下面程序中有错误的行是____1、 main( )2、 {3、 int x[3]={1};4、 int k;5、 scanf("%d", &x);6、 for (k=1; k<3; k++)7、 x[0]=x[0]+x[i];8、 printf("x[0]=%d\n", x[0]);9、 }A、3B、6C、7D、585、若有以下语句,则正确的描述是__b__char x[ ]="12345";char y[ ]={'1', '2', '3', '4', '5'};A、x数组与y数组的长度相同B、x数组长度大于y数组长度C、x数组长度小于y数组长度D、x数组等价于y数组86、以下不正确的数组定义语句是__b__A、double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};B、int y[5]={0, 1, 3, 5, 7, 9};C、char ch1[ ]={'1', '2', '3', '4', '5'};D、char ch2[ ]={'\x10', '\xa', '\x8'};87、以下正确的数组定义语句是_c___A、char a[5]={'1', '2', '3', '4', '5', '\0'};B、int b[2][ ]={{1}, {2}};C、float c[ ][3]={1, 2, 3, 4, 5};D、char d[5]="CHINA";88、判断字符串str1是否大于字符串str2,应当使用__d__A、if (str1>str2)B、if (strcmp(str1, str2))C、if (strcmp(str2, str1)>0)D、if (strcmp(str1, str2)>0)89、下面程序段的运行结果是_c___char x[5]={'a', 'b', '\0', 'c', '\0'};printf("%s", x);A、'a''b'B、abC、ab└┘cD、abc90、有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_d___A、gets(a, b);B、scanf("%s%s", &a, &b);C、getchar(a); getchar(b);D、gets(a); gets(b);91、有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是___b_A、puts(s1, s2)B、printf("%s, %s", s1, s2);C、putchar(s1, s2);D、puts(s1), puts(s2);92、以下程序段的运行结果是_c___char a[7]="abcdef";char b[4]="ABC";strcpy(a, b);printf("%c", a[5]);A、└┘B、\0C、eD、f93、以下描述正确的是_d___A、两个字符串所包含的字符个数相同时,才能比较字符串B、字符个数多的字符串比字符个数少的字符串大C、字符串"STOP└┘"与"STOP"相等D、字符串"That"小于字符串"The"94、以下对字符数组的描述中错误的是_c___A、字符数组中可以存放字符串B、字符数组中的字符串可以整体输入、输出C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D、不可以用关系运算符对字符数组中的字符串进行比较95、若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_b___A、s1={"books"};B、strcpy(s1, s2);C、s1=s2;D、strcpy(s2, s1);96、以下printf语句的输出结果是____printf("%d\n", strlen("school");A、7B、6C、存在语法错误D、不定值97、下面程序的功能是将字符串s中所有的字符c删除。
数组与指针习题

数组与指针习题一、.基本概念与基础知识自测题1 填充题1.1 数组定义时有三个要素:数组名,数组元素的(1)和数组元素的(2)。
按元素在数组中的位置进行访问,是通过(3)进行的,称为(4)或(5)访问。
为了使数组声明中数组的大小修改更为方便,总是将(6)用于声明数组长度。
答案:(1)类型(2)数量(3)下标运算符(4)下标(5)索引(6)常变量1.2 C/C++中的多维数组用的是一个(1)的定义,即多维数组的基本定义是(2)构成的数组,三维数组的元素是(3)。
答案:(1)嵌套(2)以数组作为元素(3)二维数组1.3 计算机内存是一维编址的,多维数组在内存中的存储(1),C/C++多维在内存中的排列是(2)方式,即越(3)的下标变化(4)。
设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为(5)+ (6)。
答案:(1)必须要转化为一维方式,(2)按行方式(3)右(4)越快(5)a数组的首地址(6)(i*n+j)*u1.4 对于多维数组,(1)的大小是确定的,所谓“不检查数组边界”只是不检查(2)的边界,而(3)的边界是在控制之中的,所以多维数组名作为函数的参数只可以(4)缺省。
答案:(1)较低各维的(2)最高维(第一维)(3)较低各维(4)最高维1.5 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它(2)和(3)的地址。
使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。
答案:(1)地址(2)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问1.6 固定指向一个对象的指针,称为(1),即(2),定义时const放在(3)。
而指向“常量”的指针称为(4),指针本身可以指向别的对象,但(5),定义时const放在(6)。
答案:(1)指针常量(2)指针本身是常量(3)const放在类型说明之后,变量名之前(4)常量指针(5)不能通过该指针修改对象(6)const放在类型说明之前1.7 数组名在表达式中被自动转换为指向(1)的指针常量,数组名是地址,但数组名中放的地址是(2),所以数组名(3)。
上机实验十指针与数组

上机实验十指针与数组学号: 姓名:一、目的要求: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) //最大值为最后一个数,最小值为第一个数时,三者之间交换。
指针与数组补充习题与解答

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数组指针题含答案

数组指针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 个) 维数组中,计算这组数的平均值(实型)。
数组、指针和函数综合编程(二)

int FindMax(int *p,int m,int n,int *pRow,int *pCol);
main()
{
int maxScore,row,col,i,j,m,n,*pScore=NULL;
printf("Please enter the array size m,n:\n");
#define STU 4
int Findmax(int score[][STU],int Maxscore,int *prow,int *pcol);
main()
{
int score[CLASS][STU],Maxscore;
int i,j,row,col;
for(i=0;i<CLASS;i++)
动态内存分配,在程序执行的过程中动态地分配或者回收存储空间的分配内存,它不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。可以知道使用动态内存分配方法存储学生你成绩与用二维数组存储学生成绩相比:1、不需要预先分配存储空间;2、分配的空间可以根据程序的需要扩大或缩小。
{
int i,j,max;
max=p[0];
*prow=0;
*pcol=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(*(p+i*n+j)>max)
{
*prow=i;
*pcol=j;
max=*(p+i*n+j);
}
c语言(函数,数组,指针)练习题

C语言第2次练习题一.选择题1)一个C程序的执行是________.A.从程序的main( )函数开始执行。
B.从本程序的第一个函数开始执行。
C.从本程序第一条语句开始执行D.从#include 处开始执行3) 定义 int a, *p1; 若使p1指向a,在程序中应使用_______。
A.*p1=&a; B. p1=&a; C. p1=a; D. p1=*a;4) 下列为一维数组初始化时, 正确的是_______.A)int a[ ]={1,3,5,….15};B) int a[5]=1; C) int a[3]={5,6,8,3}; D) int a[5]={0};5).下列要将2,4,6,8存入数组a中,不正确的是______.B)int a[4]={2,4,6,8}; B) int a[ ]={2,4,6,8};C) int a[4]; a={2,4,6,8}; D) int a[4]; a[0]=2;a[1]=4,a[2]=6;a[3]=8;6).下列二维数组定义并初始化中, 正确的是A) int a[2][ ]={{3,4},{5,10,15}};B) int a[2][3]={2,3,4,5,6,7,8,9};C) int a[ ][3]={{0},{1,2},{3,4,5}};D) int a[ ][4]={(1,2,4,5),(2,3),(3,4,9),(5,6,8)};7). 若有说明: int a[5][5]; 则对数组元素的正确引用是______.A) a[3+2][3] B) a[0,3] C) a[4][1+2] D) a[ ][2]8).若有定义: char ch[ ]=”book120”; 则数组ch的存储长度是____;A) 7 B) 8 C)9 D)109) 设有定义: char s[20]; 向数组s中输入含有中间空格的字符串应使用的语句是______.A)scanf(“%s”,&s);B) scanf(“%s”,s);C)s=getchar(); D)gets(s);10).在数组: int a[][3]={{1},{3,2},{4,5,6},{0}}; 中, 数组元素a[2][1]的值是________.A)3 B) 4 C) 5 D) 211) 以下字符串赋值错误的是________。
c语言数组指针题库

以下是一些关于C语言数组指针的题目:题目:以下程序中,函数f 的功能是交换两个整数的值。
请在f 函数中填入适当的语句,使程序能够实现该功能。
c#include <stdio.h>void f(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int x = 5, y = 10;printf("Before swap: x = %d, y = %d\n", x, y);f(&x, &y);printf("After swap: x = %d, y = %d\n", x, y);return 0;}答案:在f 函数中,使用指针*a 和*b 分别访问整数变量a 和b 的值,然后交换它们的值。
具体实现如下:cvoid f(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}题目:以下程序中,函数g 的功能是交换两个整数的值。
请在g 函数中填入适当的语句,使程序能够实现该功能。
c#include <stdio.h>void g(int a, int b) {int temp = a;a = b;b = temp;}int main() {int x = 5, y = 10;printf("Before swap: x = %d, y = %d\n", x, y);g(x, y);printf("After swap: x = %d, y = %d\n", x, y);return 0;}答案:在g 函数中,由于参数传递是按值传递的,因此无法直接交换两个整数的值。
为了实现交换功能,需要使用指针来传递变量的地址。
具体实现如下:cvoid g(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}。
数组、指针和函数综合编程练习

实验十:数组、指针和函数综合编程练习一:实验目的:–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因无法实现其目的而显现出它的劣势,而通过使用指针变量来实现对存储地址内的内容的交换,并返回相应的值是很好的选择。
C++数组指针题(含答案)_共6页

从键盘输入 n 个整数(n<100),存放在一个一维数组中,逆序输出能被 3 整 除的元素,并逆序输出数组下标为 3 的倍数的元素。
输入格式:第一个整数为个数 n,后续为 n 个整数
输出格式:第一行能被 3 整除的元素,第二行为下标为 3 的倍数的元素,各 个数值之间用空格分隔。
int main()
{
int a[MAX],i,n=0,min=0;
cin>>a[n];
while(a[n])
{
n++;
..
..
cin>>a[n]; } for(i=1;i<n;i++) { if(a[i]<a[min]) min=i; } cout<<min<<endl; return 0; } 数组指针 06:排序
..
..
if(i%3==0) cout<<b[i]<<" "; cout<<endl; return 0; } 数组指针 03:平均值
从键盘输入任意个整数(以 0 结束,假设不超过 100 个),存放在一个一维数 组中,计算这组数的平均值(实型)。
输入:15 2 7 9 10 5 4 3 6 8 20 0
输入格式:第一个数为数组中元素个数 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++)
C++数组指针题(含答案)_共6页

数组指针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. 编写一个程序,找出一个整数数组中的两个数之和为给定值的下标。
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个),存放在一个一维数组中,计算这组数的平均值(实型)。
(2021年整理)指针综合练习题(带答案).

(完整)指针综合练习题(带答案).编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)指针综合练习题(带答案).)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)指针综合练习题(带答案).的全部内容。
指针综合练习题一、选择题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) 方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计实验10:数组指针综合练习
一、实验目的
1.熟悉一维数组元素指针的基本概念和使用方法;
2.熟悉指向二维数组元素指针的基本概念和使用方法;
3了解一维数组指针的基本概念和使用方法;
二、实验内容
1. 熟悉一维数组元素指针的基本概念和使用方法;
热身练习:设a为一维数组,内容为:1-9,有int *p=a; 写程序完成如下测试1
练习:对一列整数进行输入,输出和排序,分别用函数实现,在主程序中测试,Tips2:虽然功能和实验十一一样,但是,我们这次要用指针做为参数,来传递数组的地址了。
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:void InputArray(int *pArray,//指向整型变量的指针,实参将一维数组首地址传递过来
int nArrayNum )//数组元素的具体个数
{
for(int i=0;i<nArrayNum;i++)
{
scanf("%d",pArray);//逐个输入数组的每个元素
pArray++;//每次指针加1,指向下一个元素
}
}
void OutputArray(int *pArray,//指向整型变量的指针,实参将一维数组首地址传递过来
int nArrayNum )//数组元素的具体个数
{
for(int i=0;i<nArrayNum;i++)
{
printf("%d ", *pArray);//逐个输出数组元素,然后指针加1,指向下一个元素
pArray++;
}
printf("\n");
}
练习1:在主函数中,测试一下这两个函数。
再根据例子,写出冒泡法排序的函数,用指针做参数。
Tips2 指针指向一维数组,作为函数的参数,是一般软件中非常常见的方法,要熟悉并掌握。
2.熟悉指向二维数组元素指针的基本概念和使用方法;
热身练习:设a为3*2的二维数组,内容为:1-6,有int *p=a; 写程序完成如下测试2
练习2,求二维数组中的最大数和最小数。
输入输出模块举例,首先写函数,数组和数组元素的个数作为形参,定义方法如下:
void InputArray(int *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来
int nArrayRow, int nArrayCol)//数组元素的行数和列数
{
for(int i=0;i<nArrayRow;i++)
for(int j=0;j<nArrayCol,j++)
{
scanf("%d",pArray);//逐个输入数组的每个元素
pArray++;//每次指针加1,指向下一个元素
}
}
void OutputArray(int *pArray,//指向整型变量的指针,实参将二维数组首地址传递过来
int nArrayRow, int nArrayCol)//数组元素的行数和列数
{
for(int i=0;i<nArrayRow;i++)
for(int j=0;j<nArrayCol,j++)
{
printf("%d ", *pArray);//逐个输出数组元素,然后指针加1,指向下一个元素
pArray++;
}
printf("\n");
}
作业:写出求二维数组最大及最小数的函数及主程序,完成程序的功能。
问题:为什么pArray这个指针,既可以用来指一维数组元素,也可以用在指二维数组元素?在两个程序中,pArray++的意思相同吗?
Tips3 指针指向二维数组元素作为函数的参数,是一般软件中非常常见的方法,需要熟悉并掌握。
3.熟悉指针指向字符串的基本概念和使用方法。
参考如下实例,完成字符串的复制:
#include “stdio.h”
#include “string.h”
main()
{
char *sz1=“I am a teacher.”; //sz 是常见的字符串变量开头
char *sz2=“You are a student.”;//字符串的指针,是字符变量的指针,存放字符串的首地址printf(“string_a=%s\n string_b=%s\n”,a,b);//输出可以使用%s完成
copy_string(sz1,sz2);//调用函数完成字符串的复制
puts(sz1);//输入输出也可以使用string.h 库里的字符串函数完成
puts(sz2);
//自制的字符串复制函数
void copy_string(char *pFrom,*pTo)
{
while(*pFrom!=’\0’)
{
*pTo=*pFrom;
pFrom++;
pTo++;
}
*pTo=’\0’;//为什么要加这一句?
}
作业:仿照例子,写出把字符串2追加粘贴到字符串1的函数及主程序,如果两个字符串相等,则不粘贴。
例如:字符串1为stu,字符串2为dent,粘贴之后,字符串1变为:student。
判断字符串相等,可以使用:strcmp函数。
4.了解一维数组指针的基本概念和使用方法;
参考如下实例片段,该程序可以实现什么功能?请将程序补全。
float average(float *p,int n);
void search(float (*p)[N] ,int 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] ,int n)
{
int i;
printf(“the score of no.%d are:”,n);
for (i=0;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-1;
for (;p<=p_end; p++)
sum=sum+(*p);
aver=sum/n;
return aver;
}
编写子函数,实现查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。
课堂练习过的,忽略该题目。
5.编写程序
对于一个n*n矩阵A。
矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最小数,第j列上的最大数。
一个矩阵A也可能没有鞍点。
你的任务是找出A的鞍点。
要求将二维数组的输入、输出、求鞍点和鞍点打印,分别用4个函数完成,数组的地址通过指针传递给子函数,用主程序依次调之。
作业:提交该程序源代码,并写作业反馈。