132实验十三数组指针和函数综合编程练习参考答案

合集下载

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

指针与指针运算例题及练习题

指针与指针运算例题及练习题

指针与指针运算例题及练习题
指针是C语言中非常重要的概念之一,通过指针可以直接访问
和操作内存中的数据。

指针运算是指针在C语言中的特定运算操作。

下面是一些指针与指针运算的例题及练题,供研究和练使用:
1. 请用指针实现一个交换函数,该函数可以交换两个整数的值。

2. 请编写一个函数,接受一个整数数组和数组长度作为参数,
计算数组中所有元素的和,并返回结果。

3. 编写一个函数,接受一个整数数组和数组长度作为参数,找
出数组中的最大值,并返回其索引位置。

4. 编写一个函数,接受一个字符串作为参数,并返回字符串中
第一个出现的大写字母。

5. 请实现一个函数,接受一个字符串和一个字符作为参数,统
计字符串中包含该字符的个数,并返回结果。

6. 对于一个整数数组,编写一个函数,接受数组和数组长度作为参数,并将数组按照升序排列。

希望以上例题和练题可以帮助你更好地理解和掌握指针与指针运算的概念。

如果有任何问题或需要进一步帮助,请随时告知。

指针数组函数练习(含参考答案).

指针数组函数练习(含参考答案).
int i;
for(i=0;i
printf("%.0f\t",array[i];
Transfer(array,N;
printf("\n";
for(i=0;i
printf("%.0f\t",array[i];
printf("\n";
}
3.编写一个通用函数,该函数可以实现求数值型二维数组的上三角各元素的平方根的和(即先对上三角各元素求平方根,然后再对平方根求和)。编写主程序调用该函数,计算数组A的上三角元素的平方根的和。
scanf("%d",#
Transfer(num;
}
5.编写一个通用函数,该函数可以实现把一个十进制的正整数转换成七进制。例如把88转换成154。编写主程序调用该函数,把整数123455转换成七进制并输出。
注:把一个十进制的整数转换成七进制的方法是:把十进制数当作被除数,用7除,直到商为0为至,然后把余数倒序即可。例88除7的余数依次是4、5、1,则其七进制为:154。
注:把一个十进制的整数转换成二进制的方法是:把十进制数当作被除数,用2除,直到商为0为止,然后把余数倒序即可。例18除2的余数依次是0、1、0、0、1,则其二进制为:10010。
#include
void Transfer(int num
{
int a[100];
int count=0;
while(num!=0
return 1;
else
return 0;
}
void main(
{
int count=0;
long i;
for(i=10000;i<=99999;i++

C、C++程序设计:指针和数组单元测试与答案

C、C++程序设计:指针和数组单元测试与答案

一、单选题1、若已定义: int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 假设0≤i≤9,则对a数组元素不正确的引用是()A.a[p-a]B.a[10]C. p[i]D.*(&a[i])正确答案:B2、假设有定义 int a=3,b=5,*pa=&a,*pb=&b;则执行如下语句后,a,b的值分别为()*pa=a+b;*pb=a+b;A.出错B.a=8,b=13C.a=13,b=13D.a=8,b=8正确答案:B3、有说明 int a[10]=[1,2,3,4,5,6,7,8,9,10},*p=a;,则数值为9的表达式是()。

A.*p+=9B.*(p+8)C. *p+=9D.*(p+9)正确答案:B4、执行char a[10]={"abcd"},*p=a;后,*(p+4)的值是()A.不能确定B."abcd"C.'\0'D.'d'正确答案:C5、若有char *a="ABCD";,则执行cout<<a的结果是()A.AB.ABC.ABCD.ABCD正确答案:D二、判断题1、假设有定义char s[100],*p=s; ,则可以用delete p;来释放p占用的内存空间。

正确答案:×2、假设有定义int a[]={10,20,30,40,50,60,70,80,90,100},*p=a;,则表达式*p+9的值为100。

正确答案:×3、假设有定义 char s1[20]="1234567" ,s2[20]={"ABCD"};,则执行strcpy(s1,s2)后,s1的内容为“ABCD”正确答案:√三、填空题1、假设有定义float d[10]={1.5, 2.0,2.5,3.0},*p=d;则表达式*++p的值为()正确答案:2.02、假设有定义 char s[]="ABCD",*p=s;则执行cout<<p+2的结果为()正确答案:CD。

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

132实验十三数组指针和函数综合编程练习参考答案.doc

132实验十三数组指针和函数综合编程练习参考答案.doc

数组、指针和函数综合编程练习:打印最高分和学号假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其学号。

程序1 用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。

/*以一维数组的数组名作函数参数,实参、形参均为数组以指针变量作函数形参,通过该指针变量间接访问主调函数中的变量,并修改其值*/#include <stdio.h>#define ARR_SIZE 40int FindMax(int score[ ], long num[ ], int n, long *pMaxNum);void main(){int score[ARR_SIZE], maxScore, n, i;long num[ARR_SIZE], maxNum;printf("Please enter total number:");scanf("%d", &n); /*从键盘输入学生人数n*/printf("Please enter the number and score:\n");for(i=0; i<n; i++) /*分别以长整型和整型格式输入学生的学号和成绩*/{scanf("%ld%d", &num[i], &score[i]);}maxScore = FindMax(score, num, n, &maxNum); /*计算最高分及学生学号*/printf("maxScore = %d, maxNum = %ld\n", maxScore, maxNum);}/* 函数功能:计算最高分及最高分学生的学号函数入口参数:整型数组score,存放学生的成绩长整型数组num,存放学生的学号函数出口参数:长整型指针变量pMaxNum,指向最高分学生的学号函数返回值:最高分*/int FindMax(int score[ ], long num[ ], int n, long *pMaxNum){int i;int maxScore;maxScore = score[0];*pMaxNum = num[0]; /*假设score[0]为最高分*/ 以一维数组的数组名作函数参数,实参、形参均为数组for (i=1; i<n; i++){if (score[i] > maxScore){maxScore = score[i]; /*记录最高分*/*pMaxNum = num[i]; /*记录最高分学生的学号num[i]*/ }}return (maxScore); /*返回最高分maxScore*/}程序2 用二维数组和指针变量作为函数参数,编程打印3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

指针练习题及答案

指针练习题及答案

指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。

```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。

```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。

```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。

指针综合练习题(带答案)

指针综合练习题(带答案)

指针综合练习题一、选择题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)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问2 以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。

请填空。

void main(){int *a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;cou<<"输入3个整数:";cin>>a>>b>>c;cout<<*a<<*b<<*c;num=*a;if(*a>*b) __num=*b____;if(num>*c) _num=*c_____;cout<<"输出最小整数:"<<num<<endl;}3 下面程序段的运行结果是___ef_____.char str[]="abc\0def\0ghi",*p=str;cout<<p+5;4若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是___12______.5若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___. *(*(a+1)+0))的值是____8____.6以下程序将数组a中的数据按逆序存放,请填空。

C++数组指针题(含答案)_共6页

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个),存放在一个一维数组中,计算这组数的平均值(实型) 。

C++数组指针题(含答案)

C++数组指针题(含答案)

数组指针 01 :逆序输出从键盘输入 n 个整数( n<100 ),存放在一个一维数组中,逆序输出能被 3 整除的元素,并逆序输出数组下标为 3 的倍数的元素。

输入格式:第一个整数为个数n ,后续为 n 个整数输出格式:第一行能被 3 整除的元素,第二行为下标为 3 的倍数的元素,各个数值之间用空格分隔。

输入:10279105436820输出: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 的倍数的元素,各个数值之间用空格分隔。

输入:10279105436820输出: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 个),存放在一个一维数组中,计算这组数的平均值(实型)。

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

c++指针数组编程题

c++指针数组编程题

c++指针数组编程题当涉及到C++指针数组的编程题时,有许多不同的问题和情况可以讨论。

下面我将从多个角度给出一些可能的问题和答案,以便全面回答你的问题。

1. 什么是C++指针数组?C++指针数组是一个数组,其中的每个元素都是一个指针。

这些指针可以指向不同的数据类型或对象。

2. 如何声明和初始化C++指针数组?可以使用以下语法声明和初始化C++指针数组:cpp.dataType arrayName[size];其中,dataType是指针所指向的数据类型,arrayName是数组的名称,size是数组的大小。

例如,声明一个指针数组,其中每个元素都指向int类型的数据:cpp.int numbers[5];这将创建一个包含5个指向int类型数据的指针数组。

3. 如何访问C++指针数组的元素?可以使用下标运算符[]来访问C++指针数组的元素。

例如,要访问指针数组numbers的第一个元素,可以使用以下语法:cpp.dataType element = numbers[0];其中,dataType是指针所指向的数据类型,element是一个指针,指向numbers数组的第一个元素。

4. 如何使用C++指针数组进行动态内存分配?可以使用new运算符来为C++指针数组动态分配内存。

例如,要动态分配一个包含5个int类型指针的指针数组,可以使用以下语法:cpp.int numbers[5];for (int i = 0; i < 5; i++) {。

numbers[i] = new int;}。

在使用完指针数组后,不要忘记使用delete运算符释放内存:cpp.for (int i = 0; i < 5; i++) {。

delete numbers[i];}。

5. 如何在函数之间传递C++指针数组?可以将C++指针数组作为函数的参数进行传递。

例如,要将指针数组numbers传递给函数foo,可以使用以下语法:cpp.void foo(dataType arrayName[size]) {。

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

指针基础练习题

指针基础练习题

指针基础练习题
指针是C语言中非常重要的概念之一,掌握指针的基本使用方法对于理解和编写复杂的程序至关重要。

本文将提供一些指针的基础练习题,帮助读者巩固和提升对指针的理解和应用。

请读者根据每个题目的要求完成代码,并注明每一步的思路和解答。

题目一:交换两个变量的值
要求:编写一个函数,使用指针交换两个整数变量的值,并在主函数中调用该函数进行测试。

题目二:计算数组元素的平均值
要求:编写一个函数,使用指针计算给定整型数组的元素平均值,并在主函数中调用该函数进行测试。

数组长度和元素的值可由用户输入。

题目三:查找数组中的最大值和最小值
要求:编写一个函数,使用指针查找给定整型数组中的最大值和最小值,并在主函数中调用该函数进行测试。

数组长度和元素的值可由用户输入。

题目四:字符串反转
要求:编写一个函数,使用指针将输入的字符串反转,并在主函数中调用该函数进行测试。

要求不能使用任何库函数。

题目五:动态分配内存
要求:编写一个函数,使用指针动态分配内存,在堆中存储指定数量的整型数据,并在主函数中调用该函数进行测试。

要求用户输入存储的整数个数,然后输入每个整数。

题目六:指针数组的排序
要求:编写一个函数,通过指针数组实现对字符串数组的排序,并在主函数中调用该函数进行测试。

要求用户输入字符串的个数和每个字符串的值。

以上是指针基础练习题的要求和内容,通过完成这些题目,读者可以加深对指针概念和使用方法的理解,在实际编程中能够熟练地运用指针操作。

希望读者能够通过不断的练习和实践,掌握指针的应用技巧,并在编程中取得更好的成果。

数组题参考答案

数组题参考答案

数组题参考答案数组题参考答案在计算机科学中,数组是一种用于存储和管理一组相同类型数据的数据结构。

它是一种非常重要的数据结构,被广泛应用于各种编程语言和算法中。

在编程中,经常会遇到与数组相关的题目,这些题目既有基础的数组操作,也有一些较为复杂的问题。

下面,我将为大家提供一些常见数组题目的参考答案。

1. 数组反转题目描述:给定一个数组,将其反转。

解题思路:可以使用双指针法,一个指针指向数组的起始位置,另一个指针指向数组的末尾位置。

然后交换两个指针所指向的元素,并分别向中间移动,直到两个指针相遇。

```pythondef reverse_array(arr):left = 0right = len(arr) - 1while left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1return arr```2. 数组去重题目描述:给定一个数组,删除其中重复的元素。

解题思路:可以使用一个集合来存储已经出现过的元素,然后遍历数组,将未出现过的元素添加到集合中。

```pythondef remove_duplicates(arr):unique_elements = set()result = []for num in arr:if num not in unique_elements:unique_elements.add(num)result.append(num)return result```3. 数组求和题目描述:给定一个数组,计算其中所有元素的和。

解题思路:可以使用一个变量来记录累加的和,然后遍历数组,将每个元素加到累加和中。

```pythondef array_sum(arr):sum = 0for num in arr:sum += numreturn sum```4. 数组中的最大值和最小值题目描述:给定一个数组,找出其中的最大值和最小值。

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个),存放在一个一维数组中,计算这组数的平均值(实型)。

C++指针与数组的混合运算(补充指针的内容)

C++指针与数组的混合运算(补充指针的内容)
2、指针和[ ]的混合计算法则(以下假设 b 为二维数组 b[3][4]): 1、首先要明白,指针运算符的作用,我用一言以概之,你在哪里使用都不会错。指针运算符*的作用是求出*后面所指 地址里的值。因此只要*后面的变量表示的是一个地址就可以使用*运算符,来求出址就可以使用*来求出地址中的值。 2、[ ]这个运算符的的运算法则是,把左侧的地址加上[ ]内的偏移量然后再求指针运算,注意有[ ]运算符的地方就有个
隐含的指针,比如 x[2]表示的就是 将指针x 偏移 2 个单位量后再求指针运算。也就说 x[2]与*(x+2)是相等的。 3、对于 b[1]这样的地址,一定要表示 为&b[1][0]再进行偏移计算,比如对于 b[1]+1,这不是直接在对b[1]加 1,也就是
b[1]+1 不等于 b[2],因为 b[1]表示的是 第二行行1 个元素的地址,对其加 1,应该表示的是第二行第二个元素的地 址,也就是&b[1][1],而 b[2]则表示的是 第二行第一个元素的地址,因此错误,所以在计算 时应把b[1]转换为&b[1][0] 之后,才能直接进行地址的偏移,也就是说 b[1]+1=&b[1][0]+1=&b[1][1],这样才能得到正确的结果,并且不会出 错。 4、对于有小括号的地方,一定不要 省略小括号。比如(&b[1])[1]与&b[1][1]将表示的是不同的结果,第二个是显然的, 对于第一个(&b[1])[1]=*((&b[1])+1)=*(&b[1]+1)=*(&b[2])=b[2],可以看到,表示的是 第3 行第 1 个元素的地址,因 此 这 两 个 的 结 果 是 显 然 不 一 样 的 。 因 此 对 于 (b+1)[1] 这 样 的 运 算 , 不 能 省 略 小 括 号 , 即 (b+1)[1]=(&b[1])[1]=*((&b[1])+1)=*(&b[1]+1)=*(&b[2])=b[2],如果省略了小括号,则是(b+1)[1]=&b[1][1],这将是 不易发现的错误。因此这是 两个完完全全不同的符案。 5、对于指针,只要指针指向了数组,不管他是多少重指针,都可以使用这 些计算法则。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数组、指针和函数综合编程练习:打印最高分和学号
假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其学号。

程序1 用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。

/*以一维数组的数组名作函数参数,实参、形参均为数组
以指针变量作函数形参,通过该指针变量间接访问主调函数中的变量,并修改其值
*/
#include <stdio.h>
#define ARR_SIZE 40
int FindMax(int score[ ], long num[ ], int n, long *pMaxNum);
void main()
{
int score[ARR_SIZE], maxScore, n, i;
long num[ARR_SIZE], maxNum;
printf("Please enter total number:");
scanf("%d", &n); /*从键盘输入学生人数n*/
printf("Please enter the number and score:\n");
for(i=0; i<n; i++) /*分别以长整型和整型格式输入学生的学号和成绩*/
{
scanf("%ld%d", &num[i], &score[i]);
}
maxScore = FindMax(score, num, n, &maxNum); /*计算最高分及学生学号*/
printf("maxScore = %d, maxNum = %ld\n", maxScore, maxNum);
}
/* 函数功能:计算最高分及最高分学生的学号
函数入口参数:整型数组score,存放学生的成绩
长整型数组num,存放学生的学号
函数出口参数:长整型指针变量pMaxNum,指向最高分学生的学号函数返回值:最高分
*/
int FindMax(int score[ ], long num[ ], int n, long *pMaxNum)
{
int i;
int maxScore;
maxScore = score[0];
*pMaxNum = num[0]; /*假设score[0]为最高分*/ 以一维数组的数组名作函数参数,实参、形参均为数组
for (i=1; i<n; i++)
{
if (score[i] > maxScore)
{
maxScore = score[i]; /*记录最高分*/
*pMaxNum = num[i]; /*记录最高分学生的学号num[i]*/ }
}
return (maxScore); /*返回最高分maxScore*/
}
程序2 用二维数组和指针变量作为函数参数,编程打印3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

/*以二维数组的数组名作函数参数,实参、形参均为数组
以指针变量作函数形参,通过该指针变量间接访问主调函数中的变量,并修改其值
*/
#include <stdio.h>
#define CLASS 3
#define STU 4
int FindMax(int score[][STU], int m, int *pRow, int *pCol);
void main()
{
int score[CLASS][STU], i, j, maxScore, row, col;
printf("Please enter score:\n");
for (i=0; i<CLASS; i++)
{
for (j=0; j<STU; j++)
{
scanf("%d", &score[i][j]); /*输入学生成绩*/
}
}
/*计算最高分及其学生所在班号和学号*/
maxScore = FindMax(score, CLASS, &row, &col);
printf("maxScore = %d, class = %d, number = %d\n",
maxScore, row+1, col+1);
}
/* 函数功能:计算任意m行STU列二维数组中元素的最大值,并指出其所在行列下标值函数入口参数:二维整型数组score,存放学生成绩
整型变量m,二维整型数组的行数,代表班级数
函数出口参数:整型指针变量pRow,指向数组元素最大值所在的行
整型指针变量pCol,指向数组元素最大值所在的列
函数返回值:数组元素的最大值
*/
int FindMax(int score[ ][STU], int m, int *pRow, int *pCol)
{
int i, j, maxScore;
maxScore = score[0][0]; /*置初值,假设第一个元素值最大*/
*pRow = 0;
*pCol = 0;
for (i = 0; i<m; i++)
{
for (j = 0; j<STU; j++)
{
if (score[i][j] > maxScore)
{
maxScore = score[i][j]; /*记录当前最大值*/
*pRow = i; /*记录行下标*/
*pCol = j; /*记录列下标*/
} /*if结束*/
} /*内层for结束*/
} /*外层for结束*/
return (maxScore); /*返回最大值*/
}
程序3 用指向二维数组第0行第0列元素的指针作为函数参数,编写一个计算m行n列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数计算3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

/*以指向二维数组的数组元素的指针变量作函数参数,实参、形参均为指针
以指针变量作函数形参,通过该指针变量间接访问主调函数中的变量,并修改其值
*/
#include <stdio.h>
#define CLASS 3
#define STU 4
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
void main()
{
int score[CLASS][STU], i, j, maxScore, row, col;
printf("Please enter score:\n");
for (i=0; i<CLASS; i++)
{
for (j=0; j<STU; j++)
{
scanf("%d", &score[i][j]); /*输入学生成绩*/
}
}
/*计算最高分及其学生所在班号和学号*/
maxScore = FindMax(*score , CLASS, STU, &row, &col );
printf("maxScore = %d, class = %d, number = %d\n",
maxScore, row+1, col+1);
}
/*函数功能:计算任意m 行n 列的二维数组中元素的最大值,并指出其所在的行列下标值 函数入口参数:整型指针变量p ,指向一个二维整型数组的第0行第0列
整型变量m ,二维整型数组的行数
整型变量n ,二维整型数组的列数
函数出口参数:整型指针变量pRow ,指向数组元素最大值所在的行
整型指针变量pCol ,指向数组元素最大值所在的列
函数返回值:数组元素的最大值
*/
int FindMax(int *p , int m, int n, int *pRow, int *pCol )
{
int i, j, maxScore;
maxScore = p[0]; /*置初值,假设第一个元素值最大*/ *pRow = 0; *pCol = 0; for (i = 0; i<m; i++) { for (j = 0; j<n; j++)
{
if (p[i*n+j] > maxScore) /*用*(*(p+i)+j)可以吗?不行,为什么?*/ {
maxScore = p[i*n+j]; /*记录当前最大值*/
*pRow = i; /*记录行下标*/
*pCol = j; /*记录列下标*/
以指向二维数组的数组元素的指针变量作函数参数,实参、形参均为指针
} /*if结束*/ } /*内层for结束*/ } /*外层for结束*/ return (maxScore); /*返回最大值*/
}。

相关文档
最新文档