指针和数组习题
指针例题经典

指针例题经典一、指针例题经典嘿,宝子们!今天咱们来唠唠那些超经典的指针例题。
指针这玩意儿啊,就像一把神奇的小钥匙,能打开好多编程世界里的小秘密呢。
你看啊,有这么一道例题。
就是定义一个整型数组,然后用指针去遍历这个数组,找出数组里的最大值。
这就像是在一群小伙伴里找那个最高的人一样。
咱们先定义一个数组,就像这样:int arr[] = {1, 5, 3, 7, 2};然后再定义一个指针,让这个指针指向这个数组的开头,就像给小侦探指了个路,让他从这儿开始找。
这个指针的定义呢,就是int p = arr; 然后呢,小指针就开始它的旅程啦。
它从数组的第一个元素开始,一个一个地看,和后面的元素比较。
要是后面的元素比它指向的元素大,那就让指针指向这个更大的元素。
最后呢,这个指针指向的就是数组里最大的元素啦。
还有一道题也很有意思。
是关于函数指针的。
函数指针就像是一个超级快递员,它能把函数这个大包裹送到你想要的地方。
比如说,有一个函数是用来计算两个数的和的,函数原型是int add(int a, int b)。
那我们要定义一个函数指针来指向这个函数,就像这样:int (fp)(int, int) = add; 然后呢,我们就可以通过这个函数指针来调用这个函数啦,就像fp(3, 5);这样就会得到8。
这是不是超级酷呢?再讲讲指针和结构体的例题。
结构体就像是一个小盒子,里面可以装好多不同类型的东西。
比如说,有一个结构体是用来表示一个学生的信息的,里面有学生的姓名、年龄和成绩。
我们可以定义一个结构体类型:struct student {char name[20];int age;float score;};然后我们定义一个结构体变量,再用指针指向这个结构体变量。
这个指针就可以用来访问结构体里的各个成员啦。
就像我们要访问学生的年龄,就可以用指针->age这样的形式。
这就像打开小盒子,拿出里面特定的东西一样。
指针例题真的很有趣,就像一个个小谜题一样。
计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针1、有以下程序main(){ int a[]={2,4,6,8,10}, y=0, x, *p;p=&a[1];for(x= 1; x< 3; x++) y += p[x];printf("%d\n",y);}程序运行后的输出结果是A)10 B)11 C)14 D)152、有以下程序void sum(int a[]){ a[0] = a[-1]+a[1]; }main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};sum(&a[2]);printf("%d\n", a[2]);}程序运行后的输出结果是A)6 B)7 C)5 D)83、有以下程序main(){int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++< 7) if(p[i]%2) j+=p[i];printf("%d\n",j);}程序运行后的输出结果是A)42 B)45 C)56 D)604、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是A)for(i=0;i<6;i++) printf("%2d",*(p++));B)for(i=0;i<6;i++) printf("%2d",*(p+i));C)for(i=0;i<6;i++) printf("%2d",*p++);D)for(i=0;i<6;i++) printf("%2d",(*p)++);5、有以下程序#include < stdio.h >main(){ int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5);printf("%d %d\n",*p,*q); }程序运行后的输出结果是A)运行后报错 B)6 6 C)6 11 D)5 106、有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是A)5 B)6 C)8 D)97、已有定义:int i,a[10],*p;则合法的赋值语句是A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;8、以下能正确定义一维数组的选项是A)int num []; B)#define N 100int num [N];C)int num[0..100]; D)int N=100;int num[N];9、有以下程序main(){ int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i< 7&&p[i]%2){k=k+p[i];i++;}printf("%d\n",k);}执行后输出结果是A)58 B)56 C)45 D)2410、有以下程序main(){ int x[8]={8,7,6,5,0,0},*s;s=x+3;printf("%d\n",s[2]);}执行后输出结果是A)随机值 B)0 C)5 D)611、若有定义:int aa[8];。
指针数组函数练习(含参考答案).

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语言之二维数组与指针--题+答案

D) 定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
(10) 有以下程序
main()
{ int a[3][3], *p, i;
p=&a [0][0] ;
for ( i=0 ; i<9 ; i++) p[i]=i+1;
(5) 若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是
A) p+1
B) *(p+3)
C) *(p+1)+3
D) *(p[0]+2))
(6) 有以下定义和语句
int a[3][2]={1,2,3,4,5,6,},*p[3];
pa=a;
for(i=0;i<3;i++)
if(i<2) pa[1][i]=pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
执行后输出结果是
A) 7
B) 6
C) 8
for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf(“%dn”,s);
}
(21) 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是
A) &t[3][2]
B) t[3]
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次练习题一.选择题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语言 数组和指针练习题

若当堂没做完,下周四之前上交也可。
至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删除。
数组和指针 笔试题

数组和指针笔试题当然!以下是一个关于数组和指针的笔试题:题目:编写一个函数,接收一个整型数组和数组的长度作为参数,并将数组中的元素逆序存放。
要求:只能使用指针来操作数组,不能使用任何其他的辅助数组或临时变量。
示例输入:arr = [1, 2, 3, 4, 5], length = 5示例输出:arr = [5, 4, 3, 2, 1]请编写代码实现该功能,并给出示例输入的输出结果。
以下是示例代码:```c#include <stdio.h>void reverseArray(int *arr, int length) {int *start = arr;int *end = arr + length - 1;while (start < end) {int temp = *start;*start = *end;*end = temp;start++;end--;}}int main() {int arr[] = {1, 2, 3, 4, 5};int length = sizeof(arr) / sizeof(arr[0]);printf("原数组:");for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}reverseArray(arr, length);printf("\n逆序后的数组:");for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}return 0;}```以上代码定义了一个reverseArray函数,该函数通过使用指针实现了将数组元素逆序存放的功能。
在主函数中,我们定义了一个示例数组arr,并计算出数组的长度。
然后调用reverseArray函数对数组进行逆序操作,并打印出逆序后的数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、1 数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值。
()2. 取数组a的第5个元素的地址,正确的写法是()A) *a[4] B) &a[4]C) a[4] D) *(a+4)3. 程序段输出结果是()int main(){double number = 12345.12345678;cout << setw(10) << setprecision(5) << number << endl;cout << setw(10) << setprecision(10) << number << endl;return 0;}12345 B)12345 C) 12345 D) 1234512345.12346 12345.12345 12345.12345 12345.12354、若x为整形变量,p是基类型为整形的指针变量,则正确的赋值表达式()A p=&xB p=xC *p=&xD *p=*x5,设p1和p2均为指向同一个int型一维数组的指针变量,k为int型变量,下列不正确的语句是()A k=*p1+*p2B k=*p1*(*p2)C p2=kD p1=p26.对于相同类型的指针变量,不能进行()运算。
A,+ B,- C,= D,==7.有函数定义如下,则其返回值为()int *f(int a){Int*p,n;n=a;p=&n;return p;}A 一个不可用的存储单元地址值B一个不可用的存储单元地址值C n中的值D 形参a中得值8,下列关于字符串的描述中,错误的是()A,一维字符数组可以存放一个字符串B,可以用一个字符串给二维字符数组赋值C,二维字符数组可以存放多个字符串D;可以用一个字符串给二维字符数组进行初始化9;下列关于字符数组的描述中,错误的是()A.字符数组中得每一个元素都是字符B,字符数组可以使用初始值表进行初始化C,字符数组可以存放字符串D 字符数组就是字符串10;下列关于数组下标的描述中,错误的是()A;C++中,数组元素的下标是从0开始的B,数组元素下标是一个整型常量表达式C,数组元素可以用下标来表示D,数组元素的某维数下标值应小于该维的大小11,下面能正确地将字符串“C++”进行完整赋值操作语句的是()A char s【3】={‘C’,‘+’,‘+’}B char s【】=“C++”C,char s【3】={“C++”} D,char s【3】;s【0】=‘C’;s 【1】=‘+’;s【2】=‘+’;12,在C++中,二维数组元素在内存中的存放顺序为()A.按行存放B。
按列存放C,有用户自己定义D,有编译器决定二、解释下列语句含义(10分)(1)int *p(); 语句含义:____________________________________________________(2)int (*p)(); 语句含义:__________________________________________________(3)int (*p)[3]; 语句含义:_________________________________________________(4)int *p[4]; 语句含义:___________________________________________________(5)int **p; 语句含义:____________________________________________________三、阅读程序选择正确答案填空程序功能:检查给定字符串s是否满足下列两条件:1、从字符串首字符起,在顺序检查s中的字符的过程中,遇到的右括号“)”的个数在任何时候均不超过所遇到的左括号“(”的个数;2、字符串s中左括号“(”的个数与右括号“)”的个数相同。
若字符串s同时满足上述条件1和条件2,函数返回非0值,否则返回0值。
int check( (1) ) (){int lp, rp;lp = 0;rp = 0;while ((2)) (){if ( *s == '(' )lp++;else if ( *s == ')' ){rp++;if ((3) ) ()return 0;}(4) ; ()}return ((lp != rp) ? 0 : 1);}(1) A. char *s B. char s[][] C. char s D. char s[](2) A. *s B. *s == 0 C. *s != 0 D. s(3) A. rp > lp B. rp < lp C. rp == lp D. rp != lp(4) A. s++ B. (*s)++ C. ++(*s) D. ++s四、阅读程序(22分)(1)下面程序运行会出错吗?如果会,请改正。
(4分)#include <stdio.h>main(){char buffer[128];int c;int pos=0;while((c=getchar()) != EOF){buffer[pos++] = c;}printf("%s", buffer);}(2)给下面程序找错。
请标注在程序上,并给予恰当的文字说明。
(6分)#include <stdio.h>main(){int size=10, i;float f[size];for (i=0; i<=size; i++)scanf("%f", f[i]);if (f[0] = f[10])printf("您输入的第一个数和最后一个数相等\n");}(3) 输入一行字符(最多80个),统计其中的大写字母,小写字母,数字,空格及其它字符的个数。
#include <stdio.h>#define UCASE 0#define LCASE 1#define NUM 2#define SPACE 3#define OTHER 4Int main(){int i=0;char temp;int letter[5]={0};while(temp=getchar()!=’\n’){if(temp>=’A’&&temp<=’Z’)letter[UCASE]++;else if(temp>=’a’&&temp<=’z’)letter[LCASE]++;else if(temp>=’0’&&temp<=’9’)letter[NUM]++;else if(temp==’’)letter[SPACE]++;else letter[OTHER]++;}printf(“Upper case: %d\nLower case: %d\nNumber: %d\n\Space: %d\n\);return 0;}(4) 用户输入若干个(不超过20个)小于100的正整数,编程求出这些数的最大值、最小值和平均值。
用户输入一个负数表示输入结束。
/*这题……让输入正整数,负数表示结束,输入0咋整……*/#include <stdio.h>main(){int i=0,temp;int max=0,min=100,sum=0;int num[20];while(scanf(“%d”,temp)==1){if(temp<=0)break;if(temp>max)max=temp;if(temp<min)min=temp;sum+=temp;num[i]=temp;i++;}if(i==0)printf(“No input.\n”);else{printf(“Max: %d\n”,max);printf(“Min: %d\n”,min);printf(“Average: %lf\n”,sum/(double)i);}}(5) 利用memcpy()函数实现char* my_strcpy(char* dst, char* src)函数,把字符串src拷贝到dst内,并返回dst。
char* my_strcpy(char *dst,char *src){int i=0;while(*(src+(i++)));return (char *)memcpy(dst,src,i);}(6) 用户输入一行字符串,可能输入的字符个数不定,以回车作为结束标志。
统计用户的输入中一共有多少个单词。
单词之间以空格或者\t作为分隔。
#include <iostream>#include <string>using namespace std;int main(){int word=0;string input;getline(cin,input);for(int i=0;i<input.size();i++){if(input[i]==’’||input[i]==’\t’)word++;}if(input[input.size()-1]!=’’||input[input.size()-1]!=’\t’)word++;cout<<word<<endl;return 0;}(7). 分析下面的程序,请找到并改正其中的任意五行错误或不当的代码,不改正不得分(可以在题目上直接改)。
统计字符数。
判断一个由’0’ ~ ‘9’这10个字符组成的字符串中哪个字符出现的次数最多。
输入数据:第一行是测试数据的组数m,每组测试数据占1行,每行数据不超过1000个字符且非空。
输出要求:m行,每行对应一组输入,包括出现次数最多的字符和该字符出现的次数。
如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个。
#include <iostream>using namespace std;main() {int cases, sum[10], i, max;char str[1000];cin >> case;while (cases > 0) {cin.getline(str, 1000);for (i = 0; i < 10; i++)sum[i] = 0;for (i = 0; i < strlen(str); i++)++sum[str[i] - 0];max = 0;for (i = 1; i < 10; i++)if (sum[i] >= sum[max]) max = i;cout << max + '0' << sum[0];cases--;}}(8)写出下面程序的执行结果。