函数指针习题
《C++指针》习题参考答案

《C++指针》习题学号姓名一、选择题1、有定义如下:int a[5], *p; 则下列描述错误的是 BA.表达式p=p+1是合法的B.表达式a=a+1是合法的C.表达式p-a是合法的D.表达式a+2是合法的2、函数定义为Fun(int &i),变量定义n=100,则下面调用该函数正确的是 CA.Fun(20) B.Fun(20+n) C.Fun(n) D.Fun(&n)3、若有说明int I,j=2,*p=&i;则能完成i=j赋值功能的语句是 BA.i=*p; B.*p=*&j; C.i=&j; D.i=**p;4、设已有定义char *st = "how are you";下列程序中正确的是 AA.char a[11],*p;strcpy(p=a+1,&st[4]);B.char a[11];strcpy(++a,st);C. char a[11];strcpy(a,st);D. char a[],*p;strcpy(p=a[1],st+2);5、设有数组int array[3][4],下列引用数组元素的方法中错误的是 DA.array[i][j] B.*(*(array+i)+j)C. *(array[i]+j)D. *(array+i*4+j)6、有定义int s[4][5],(*ps)[5];ps=s;则对数组s中元素引用的正确的是 CA.ps+1 B.*(ps+3) C. ps[0][2] D. *(ps+1)+37、设有说明int b[4][4],以下不能等价表示元素b[3][3]的是: BA.*&b[3][3] B.(*(*(b+3))+3) C.*(b[3]+3) D.*(*(b+3)+3)8、若有说明"char *s[]={"234","5678","9012","3456","7890"};",则表达式*s[1]> *s[3]比较的是 BA."1234"和"9012" B.'5'和'3' C.'l'和'9' D."5678"和"3456"9、设语句"char *s[]={"Student","Teacher","Father","Mother"},*ps=s[2];",执行语句"cout<<*s[1]<<','<<ps<<','<<*ps<<'\n';",则输出结果是 A A.T,Father,F B.Teacher,F,FatherC.Teacher,Father,Father D.语法错无输出10、设有以下说明语句:char sl[20]="hello",s2[20]="china";const char *ptr=s1;以下语句中不符合C++语法规则的语句是 DA.strcpy(s2,ptr); B.ptr=s2; C.ptr=ptr+4; D.*ptr=*s2; 11、设s和t分别为指向两个长度相同的字符数组的指针,则循环语句while( C );可以正确实现字符串t到s的完整复制功能。
教材课后题答案-第6章_指针习题答案

习题解答一、单项选择题1.若定义了int n=2, *p=&n, *q=p;则下面【】的赋值是非法的。
A.p=qB. *p=*qC. n=*qD. p=n【答案】D2.若定义了double *p, a;则能通过scanf函数给输入项读入数据的程序段是【】。
A.p=&a; scanf(“%1e”,p);B. *p=&a; scanf(“%1f”,p);C. p=&a; scanf(“%f”,p);D. p=&a; scanf(“%1f”,a);【答案】C3.若定义了int a[10], i=3, *p; p=&a[5];下面不能表示为a数组元素的是【】。
A.p[-5]B. a[i+5]C. *p++D. a[i-5]【答案】D4.若有如下定义:int n[5]={1,2,3,4,5},*p=n;则值为5的表达式是【】。
A.*+5B. *(p+5)C. *p+=4D. p+4【答案】C5.设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【】。
A.b==&psB. b==psC. b==*psD. &b==&ps【答案】C6.设有以下定义和语句:int a[3][2]={1,2,3,4,5,6},*p[3];p[0]=a[1];则*(p[0]+1)所代表的数组元素是【】。
A.a[0][1]B. a[1][0]C. a[1][1]D. a[1][2]【答案】C7.若定义了char *str=”Hello!”;下面程序段中正确的是【】。
A.char c[ ], *p=c; strcpy(p,str);B.char c[5], *p; strcpy(p=&c[1],&str[3]);C.char c[5]; strcpy(c,str);D.char c[5]; strcpy(p=c+2,str+3);【答案】B8.若有下面的程序段,则不正确的fxy函数的首部是【】。
指针例题经典

指针例题经典一、指针例题经典嘿,宝子们!今天咱们来唠唠那些超经典的指针例题。
指针这玩意儿啊,就像一把神奇的小钥匙,能打开好多编程世界里的小秘密呢。
你看啊,有这么一道例题。
就是定义一个整型数组,然后用指针去遍历这个数组,找出数组里的最大值。
这就像是在一群小伙伴里找那个最高的人一样。
咱们先定义一个数组,就像这样: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这样的形式。
这就像打开小盒子,拿出里面特定的东西一样。
指针例题真的很有趣,就像一个个小谜题一样。
函数、指针与结构体练习题-参考答案

(一)选择题1.以下正确的说法是_________.建立函数的目的之一是 a)提高程序的执行效率b)提高程序的可读性c)减少程序的篇幅d)减少程序文件所占内存2.以下正确的函数原型声明形式是________.a)double fun(int x,int y)b)double fun(int x; int y)c)double fun(int x, int y);d)double fun(int x,y);3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______.A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)由用户指定传递方式4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______.a)floatb)intc)longd)double5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array 的错误定义方式为________.int a[3][4];f(a);a)f(int array[][6])b)f(int array[3][])c)f(int array[][4])d)f(int array[2][5])6.以下程序的正确运行结果是_________.#include <>void num(){ extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;main(){int a=7,b=5;x=a+b;y=a-b;num();printf("%d,%d\n",x,y);}a)12,2 b)不确定 c)5,25 d)1,127.以下正确的描述是____________.a)C语言的预处理功能是指完成宏替换和包含文件的调用b)预处理指令只能位于C源程序文件的首部c)凡是C源程序中行首以"#"标识的控制行都是预处理指令d)C语言的编译预处理就是对源程序进行初步的语法检查8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______.a)仅仅搜索当前目录b)仅仅搜索源程序所在目录c)直接按系统设定的标准方式搜索目录d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索9.当调用函数时,实参是一个数组名,则向函数传送的是_____.A.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值10.函数的值通过return语句返回,下面关于return语句的形式描述错误的是_____.表达式; (表达式);C.一个return语句可以返回多个函数值D.一个return语句只能返回一个函数值11.设函数fun的定义形式为void fun(char ch,float x){…}则以下对函数fun的调用语句中,正确的是_____.("abc",; =fun('D',; ('65',; (32,32);12.以下程序的输出结果是_____.void reverse(int a[],int n){ int i,t;for(i=0;i<n/2;i++){ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}}main( ){ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf(" %d\n ",s);}B.1013.阅读下列程序,则运行结果为_____.fun( ){ static int x=5;x++;return x;}main( ){ int i,x;for(i=0;i<3;i++)x=fun( );printf("%d\n",x);}B.614.若使用一维数组名作函数实参,则以下正确的说法是_____.A.必须在主调函数中说明此数组的大小B.实参数组类型与形参数组类型可以不匹配C.在被调用函数中,不需要考虑形参数组的大小D.实参数组名与形参数组名必须一致15.在C语言中,定义函数时函数的类型可以缺省,此时函数的隐含类型是_____. 16.在C语言中,形参的缺省存储类别是( ).17.以下关于字符串的叙述中正确的是_____.语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行字符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小18.阅读程序,选择程序的运行结果。
c 指针练习题

c 指针练习题C指针练习题C语言中的指针是一种强大而又复杂的概念。
它允许我们直接访问内存中的数据,并对其进行操作。
然而,由于指针的灵活性和复杂性,很多初学者在使用指针时会遇到困惑和错误。
为了帮助大家更好地理解和应用指针,下面将给出一些C指针的练习题。
1. 交换两个变量的值这是一个经典的C指针练习题。
请编写一个函数,接受两个整数指针作为参数,并交换这两个指针所指向的变量的值。
例如,如果输入为a=3,b=5,调用函数后,a=5,b=3。
2. 求字符串的长度请编写一个函数,接受一个字符串指针作为参数,并返回该字符串的长度。
注意,字符串的长度是指字符串中字符的个数,不包括字符串结尾的空字符'\0'。
3. 查找数组中的最大值请编写一个函数,接受一个整型数组指针和数组的长度作为参数,并返回数组中的最大值。
提示:可以使用指针来遍历数组,并使用一个变量来保存当前的最大值。
4. 字符串拷贝请编写一个函数,接受两个字符指针作为参数,并将第一个字符串拷贝到第二个字符串中。
注意,第二个字符串必须具有足够的空间来存储第一个字符串的内容。
5. 动态分配内存请编写一个函数,接受一个整数作为参数,并动态分配一个大小为该整数的整型数组。
然后,将数组的每个元素初始化为其下标的平方,并返回指向该数组的指针。
注意,使用完数组后,必须释放动态分配的内存。
6. 字符串反转请编写一个函数,接受一个字符串指针作为参数,并将该字符串反转。
例如,如果输入为"hello",则函数应该将其改为"olleh"。
7. 指针数组排序请编写一个函数,接受一个字符串指针数组和数组的长度作为参数,并按照字母顺序对字符串进行排序。
提示:可以使用字符串比较函数strcmp来比较两个字符串的大小,并使用指针来交换字符串的位置。
8. 指向函数的指针请编写一个函数,接受一个整数和一个指向函数的指针作为参数,并使用该函数对整数进行处理。
指针测试题及答案大全

指针测试题及答案大全一、选择题1. 指针变量的声明方式正确的是()。
A. int *p;B. int *p[];C. int *p[10];D. int (*p)[10];答案:A2. 指针变量可以存储()。
A. 整型数据B. 浮点型数据C. 函数名D. 任意类型的地址答案:D3. 指针变量的值是()。
A. 它所指向的变量的值B. 它所指向的变量的地址C. 它自己的值D. 它自己的地址答案:B4. 指针变量的类型转换时,以下说法正确的是()。
A. 可以将任何类型的指针转换为void指针B. 可以将void指针转换为任何类型的指针C. 可以将char指针转换为int指针D. 可以将int指针转换为char指针答案:A5. 指针变量的算术运算中,以下说法正确的是()。
A. 指针变量可以进行加法运算B. 指针变量可以进行减法运算C. 指针变量可以进行乘法运算D. 指针变量可以进行除法运算答案:B二、填空题1. 指针变量的值是它所指向的变量的________。
答案:地址2. 指针变量的类型转换时,可以将void指针转换为________类型的指针。
答案:任何类型3. 指针变量的算术运算中,指针变量可以进行________运算。
答案:减法三、简答题1. 描述指针变量与数组之间的关系。
答案:指针变量可以指向数组的首元素,从而可以通过指针访问数组中的所有元素。
数组名在大多数情况下可以作为指向数组首元素的指针使用。
2. 解释指针变量的类型转换规则。
答案:指针变量的类型转换遵循C语言的类型转换规则,可以将任何类型的指针转换为void指针,也可以将void指针转换为任何类型的指针。
但是,不同类型的指针之间不能直接转换,除非它们指向的数据类型是兼容的。
结束语:以上是指针测试题及答案大全,希望对您的学习有所帮助。
函数指针练习题

函数指针练习题函数指针是一种特殊的指针类型,它指向可以被调用的函数。
函数指针可以用于实现代码的动态调用、跳转以及回调函数等功能。
本文将通过几个练习题,帮助读者更好地理解函数指针的用法和实际应用。
练习一:使用函数指针实现两个整数的加法```c#include <stdio.h>int add(int a, int b) {return a + b;}int main() {int (*func)(int, int);int a = 10, b = 20;func = add;int result = func(a, b);printf("%d + %d = %d\n", a, b, result);return 0;}```在这个例子中,我们定义了一个函数指针`func`,它指向了一个名为`add`的函数。
通过将函数指针赋值为`add`,我们可以使用函数指针调用`add`函数进行加法运算。
练习二:使用函数指针作为回调函数```c#include <stdio.h>typedef int (*CallbackFunc)(int);int square(int x) {return x * x;}void applyCallback(CallbackFunc callback, int x) {int result = callback(x);printf("Result: %d\n", result);}int main() {CallbackFunc func = square;int num = 5;applyCallback(func, num);return 0;}```在这个例子中,我们定义了一个函数指针类型`CallbackFunc`,它指向一个接受一个整数参数并返回一个整数结果的函数。
我们实现了一个`square`函数,它返回传入参数的平方。
指针练习题及答案

六、指针习题及答案一、单项选择题1. *p最终值是( D)int *p,b=10;static int a[]={2,3,4,1,5,6};p=a;p+=3;a[3]=b;A. 1B. 3C. 4D. 102. *p最终值是( A )char b[10]= "abcdefghi",*p;p=b+5;A. ’f’B. ’g’C. ’h’D. ’e’3. 有一个二维数组a[3][4],其2行3列元素a[2][3]的正确表示方法为( D )。
A. &a[2][3]B. a[2]+3C. *(a+2)+3D. *(a[2]+3)4. 指向一个包含4个整型元素的一维数组的行指针变量的定义形式为( D )。
A. int (*p)[]B. int *p[4]C. int *(p[])D. int (*p)[4]5. 4个指向int型元素的指针构成一个一维指针数组的定义形式为( B )。
A. int (*p)[]B. int *p[4]C. int *(p[])D. int (*p)[4]6. 若char *str1="china",char *str2="student";则语句strcpy(str2,str1)执行后,str2的值为( A )。
A. chinaB. studentC. studentchinaD. chinastudent7.若有以下定义和语句:int a[]={1,2,3,4,5,6,7,8,9,0}, *p=a;则值为3的表达式是( B )。
A. p+=2,*(++p)B.p+=2,*p++C.p+=3,p++D. p+=2,++*p8.若有以下定义:char s[20]="programming", *ps=s;则下列不能代表字符“o”的表达式是( A )。
A. ps+2B. s[2]C. ps[2]D.ps+=2,*ps9. 若有定义和语句:int **pp,*p, a=10,b=20;pp=&p;p=&a;p=&b;cout<<*p<<","<<**pp;则输出结果是: ( D )。
C++指针函数习题

C++指针函数习题一、选择题1.以下程序的运行结果是()。
sub(intx,inty,int*z){ *z=y-x;}voidmain(){ inta,b;sub(10,5,&a);sub(7,a,&b);2.)。
4.5.(去掉A)cdeB)字符'c'C)字符'c'的地址D)无确定的输出结果9.设有下面的程序段:则下列叙述正确的是()。
chars[]="china";char*p;p=s;A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)*p与s[0]相等D)s数组长度和p所指向的字符串长度相等10.若有定义inta[5],*p=a;则对a数组元素的正确引用是()。
A)*&a[5]B)a+2C)*(p+5)D)*(a+2)11.若已定义chars[10];则在下面表达式中不表示s[1]的地址的是()。
A)s+1B)s++C)&s[0]+1D)&s[1]12.下面程序的运行结果是()。
#include<iostream.h>#include<string.h>intmain(){ char*s1="AbDeG";char*s2="Abdeg";s1+=2;s2+=2;cout<<strcmp(s1,s2);}A)负数B)正数C)零D)不确定的值18A)p=max;B)*p=max;C)p=max(a,b);D)*p=max(a,b);19.下面程序段的运行结果是()。
chara[]="language",*p;p=a;while(*p!='u'){cout<<(*p-32);p++;}A)LANGUAGEB)languageC)LANGD)language20.关于语句int*ptr();以下说法正确的是()。
指针经典练习题(含答案版)二

17.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读
入 3 个整数分别赋给变量 a,b,c 的语句是( A )
A)scanf(“%d%d%d”,&a,&b,d);
B)scanf(“%d%d%d”,&a,&b,&d);
C)scanf(“%d%d%d”,a,b,c);
D)scanf(“%d%d%d”,a,b,*d);
#include<stdio.h>
#include<string.h>
fun (char *w,int n)
{ char t,*s1,*s2;
s1= w; s2=w+n-1;
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t}
}
main()
{char *p;
p=”12234567”;
2
A)1 2 3 4 B)4 3 2 1 C)0 0 0 0 D)4 4 4 4
27.说明语句 int *(*p)( )的含义(D)
A)p 是一个指向 int 型数组的指针
B)p 是指针变量,它构成了指针数组
C)p 是一个指向函数的指针,该函数的返回值是一个整
型
D)p 是一个指向函数的指针,该函数的返回值是一个
char str[ ]=”Hello”; char *ptr; ptr=str; 执行上面的程序段后,*(ptr+5)的值为( B) A)’o’ B)’/0’ C)不确定的值 D)’o’的地址 25.下面函数的功能是(B) sss(s,1) char *s,*t; { while((*s)&&(*t)&&(*t++=*s++));
第3章 数据类型——指针习题(有答案)

23.char *(*pfb)(const char *)=fb;
24.B
25.B
int(*pf1)(int);
pf1=f1;//或合并为:int(*pf1)(int)=f1;
char *(*pf2)(int,char *);
pf2=f2;//或合并为:char *(*pf2)(int,char*)=f2;
(2)函数指针的应用:
#include<iostream.h>
intadd(inta,intb){returna+b;}
20.已知变量a,b定义为:inta=99,&b=a;则cout<<a-1<<’,’<<b+1;的输出是()。
21.已知变量x,y定义为:intx[]={99,98,97},&y=x[1];则cout<<y-1<<’,’<<y*2;的输出是()。
22.已知函数fa的原形是:intfa(int,char*);,pfa是指向fa的指针,则pfa的定义是()
D.*(*(X+I)+j)
16.(单选)要使指针变量p指向2维数组A的第一个元素(0行0列元素),正确的赋值表达式是()。
A.p=A或p=A[0][0]
B.p=A[0]或p=A[0][0]
C.p=A[0]或p=&A[0][0]
D.p=A或p=&A[0][0]
17.下列程序功能是:将字符串中的小写字母都改成对应的大写字母,其他字母不变。请更改程序中的错误。
23.已知函数fb的原形是:char *fb(const char *);,pfb是指向fb的指针,则pfb的定义是()。
C语言指针练习题

C语言指针练习题指针练习题1 填空题【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add( int x, int y, ){ =x+y;}【2】若有定义: char ch;(1) 使指针p 可以指向变量ch的定义语句是。
(2) 使指针p指向变量ch的赋值语句是。
(3) 通过指针p给变量ch读入字符的scanf函数调用语句是。
(4) 通过指针p 给变量ch赋字符A的语句是。
(5) 通过指针p输出ch中字符的语句是。
(6) 在16位微机上,指针变量p在内存中所占字节数是,变量ch 在内在所占字节数是。
2 选择题【3】若有说明:int i,j=7,*p=&i则与i=j;等价的语句是()。
A.i=*p;B.*p=*&jC.i=&jD.i=**p;【4】若有定义:int x,*pb;则正确的赋值表达式是()。
A.pb=&xB.pb=xC. *pb=&xD.*pb=*x【5】对于类型相同的指针变量,不能进行的运算是()。
A.< B. = C. + D. –【6】以下程序的输出结果是()。
A.23 B. 24 C. 25 D. 26Void fun ( int *x){ printf(%d\n”,++*x); }main( ){ int a=25;fun (&a);}【7】以下程序的输出结果是()。
A.6 B. 7 C. 8 D. 9main(){int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);}【8】以下程序的输出结果是()。
A.100 B. 50 C. 101 D.200main(){int *v,b;v=&bb=100;*v+=b;printf("%d\n",b);}【9】以下程序的输出结果是()。
C语言指针经典练习题 及答案

C语言指针经典练习题及答案c语言指针经典练习题-及答案C语言指针练习和答案一、选择题1.指向变量的指针,表示变量a)值b)地址C)名称d)标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是___.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.如有;int*p,m=5,n;下面正确的部分是____;a)p=&n;b) p=&n;scanf(\scanf(\c)scanf(\d)p=&n;*p=n;*p=m;4.在下面的过程中,调用scanf函数向变量a输入数值是错误的。
main(){int*p,*q,a,b;p=&a;printf(“输入:”);scanf(“%d”,*p);…}a)*p表示的是指针变量p的地址b) *P代表变量a的值,而不是变量a.C的地址)*P代表指针变量P的值d)*p只能用来说明p是一个指针变量5.现有变量定义和函数调用语句:inta=25;打印值(&a);以下函数的输出为_voidprint_value(int*x){printf(“%d\\n”,++*x);}a) 23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是a)*p=&a;scanf(\,p);b) p=(长*)malloc(8);scanf(\,p);c)scanf(\,p=&a);d)scanf(\,&a);7。
有以下程序:#includemain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(\}程序运行后的输出结果是a) 1,2,1,2b)1,2,2,1c)2,1,2,1d)2,1,1,28。
指针练习题及答案

指针练习题及答案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) 函数名允许用数字开头B) 函数调用时,不必区分函数名称的大小写C) 调用函数时,函数名必须与被调用的函数名完全一致D) 在函数体中只能出现一次return语句2、函数调用语句:fun( ( exp1, exp2 ), ( exp1, exp2, exp3) ); 含有的实参个数是A) 2 B) 4 C) 5 D) 13、有以下程序#include <stdio.h>main(){ int findmax(int,int,int),m;┋m=findmax(a,b,c);┋}int findmax(int x,int y,int z){ … }则以下叙述正确的是A) 在main函数中声明了findmax函数B) 在main函数中定义了findmax函数C) 在main函数中两次调用了findmax函数D) 在main函数内、外重复定义了findmax函数4、以下叙述中正确的是A) 用户自己定义的函数只能调用库函数B) 实用的C语言源程序总是由一个或多个函数组成C) 不同函数的形式参数不能使用相同名称的标识符D) 在C语言的函数内部,可以定义局部嵌套函数5、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。
#include <stdio.h>void f(int b[], int n, int flag){int i,j,t;for (i=0; i<n-1; i++)for (j=i+1; j<n; j++)if (flag ? b[i]>b[j] : b[i]<b[j]){ t=b[i]; b[i]=b[j]; b[j]=t; }}main(){int a[10]={5,4,3,2,1,6,7,8,9,10}, i;f(&a[2], 5, 0);f(a, 5, 1);for (i=0; i<10; i++)printf("%d,", a[i]);}程序运行后的输出结果是A) 1,2,3,4,5,6,7,8,9,10,B) 3,4,5,6,7,2,1,8,9,10,C) 5,4,3,2,1,6,7,8,9,10,D) 10,9,8,7,6,5,4,3,2,1,6、有以下程序#include <stdio.h> int k=5;void f(int *s){ *s=k; }main(){ int m=3,*p=&m;f(p);printf("%d,%d", m, *p);}程序的运行结果是A) 5,5 B) 3,3 C) 3,5 D) 5,37、以下关于C语言函数参数传递方式的叙述正确的是A) 数据只能从实参单向传递给形参B) 数据可以在实参和形参之间双向传递C) 数据只能从形参单向传递给实参D) C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用8、有以下程序#include <stdio.h>void fun( int x, int y, int *z ){ *z = y-x; }main(){int a, b, c;fun(10,5,&a ); fun(7,a,&b ); fun(a,b,&c );printf("%d,%d,%d\n", a,b,c );}程序运行后的输出结果是A) -5,-12,-7 B) 5,2,3C) -5,-12,-17 D) 5,-2,-79、有以下程序:#include <stdio.h>void fun( int a,int b ){int t;t=a;a=b;b=t;}main(){int c[10]={1,2,3,4,5,6,7,8,9,0},i;for (i=0;i<10;i+=2) fun(c[i],c[i+1]);for (i=0;i<10;i++) printf("%d,",c[i]);printf("\n");}程序的运行结果是()。
c语言指针习题及答案

c语言指针习题及答案C语言指针习题及答案C语言作为一门广泛应用于软件开发和系统编程的编程语言,指针是其重要的特性之一。
掌握指针的使用对于理解和编写高效的C程序至关重要。
本文将介绍一些常见的C语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。
1. 习题一:交换两个变量的值请编写一个函数,接受两个整型指针作为参数,实现交换两个变量的值。
例如,如果输入a=10,b=20,函数执行后,a=20,b=10。
答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 习题二:查找数组中的最大值和最小值请编写一个函数,接受一个整型数组和数组长度作为参数,返回数组中的最大值和最小值。
例如,对于数组[5, 2, 9, 1, 7],函数应该返回最大值9和最小值1。
答案:```cvoid findMinMax(int *arr, int length, int *max, int *min) {*max = *min = arr[0];for (int i = 1; i < length; i++) {if (arr[i] > *max) {*max = arr[i];}if (arr[i] < *min) {*min = arr[i];}}}```3. 习题三:计算字符串长度请编写一个函数,接受一个字符串作为参数,返回字符串的长度。
例如,对于字符串"Hello, World!",函数应该返回12。
答案:```cint stringLength(char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;}```4. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
指针经典练习题(含答案版)一

指针一.填空题(20分)1. 指针变量是把内存中另一个数据的地址作为其值的变量。
2. 能够直接赋值给指针变量的整数是 0。
3. 如果程序中已有定义:int k;1)定义一个指向变量k的指针变量p的语句是 int* p = &k; 。
2)通过指针变量,将数值6赋值给k的语句是 *p = 6; 。
3)定义一个可以指向指针变量p的变量pp的语句是 int ** pp; 。
4)通过赋值语句将pp指向指针变量p的语句是 pp = &p; 。
5)通过指向指针的变量pp,将k的值增加一倍的语句是 *(*pp)*= 2; 。
4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是int型指针、 int型数组等。
4. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。
例如,输入的字符串为:556,则输出十进制整数366。
请填空。
45*8#include <stdio.h>main( ){ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';while( *++p != '\0') //先++ ,后*n=n*8+*p-'0';printf("%d \n",n);}二.选择题(22分)1. 以下count函数的功能是统计substr在母串str中出现的次数。
int count(char *str,char *substr){ int i,j,k,num=0;for(i=0; ①B ;i++){for( ②B ,k=0;substr[k]==str[j];k++,j++)if(substr[ ③C ]==’\0’){num++;break;}}return num;}①A) str[i]==substr[i] B) str[i]!=‘\0’C) str[i]==‘\0’ D) str[i]>substr[i]②A) j=i+1 B) j=i C) j=i+10 D) j=1③A) k B) k++ C) k+1 D) ++k2. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。
函数及指针练习题

函数练习题【1.54】对函数形参的说明有错误的是____。
A) int a(float x[],int n) B) int a(float *x,int n)C) int a(float x[10],int n) D) int a(float x,int n)【1.55】如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。
A)静态变量B) 动态变量C) 外部变量D) 内部变量【1.56】在一个C源程序文件中,•若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是。
A) extern B) register C) auto D) static【1.57】在C语言中,函数的数据类型是指____。
A)函数返回值的数据类型B) 函数形参的数据类型C) 调用该函数时的实参的数据类型D) 任意指定的数据类型【1.58】已知如下定义的函数:fun1(a){ printf("\n%d",a);}则该函数的数据类型是____。
A)与参数a的类型相同B) void型C) 没有返回值D) 无法确定【1.59】定义一个函数实现交换x和y的值,并将结果正确返回。
能够实现此功能的是____。
A) swapa(int x,int y) B) swapb(int *x,int *y){ int temp;{ int temp;temp=x;x=y;y=temp;temp=x;x=y;y=temp;} }C) swapc(int *x,int *y) D) swapd(int *x,int *y){ int temp;{ int *temp;temp=*x;*x=*y;*y=temp;temp=x;x=y;y=temp;} }【1.60】求一个角的正弦函数值的平方。
能够实现此功能的函数是____。
A) sqofsina(x)float x;{ return(sin(x)*sin(x));}B) double sqofsinb(x)float x;{ return(sin((double)x)*sin((double)x));}C) double sqofsinc(x){ return(((sin(x)*sin(x));}D) sqofsind(x)float x;{ return(double(sin(x)*sin(x)));【1.61】一个函数内有数据类型说明语句如下:double x,y,z(10);关于此语句的解释,下面说法正确的是____。
指针 练习题

指针练习题指针是C语言中非常重要的概念之一。
掌握指针的使用和理解对于C语言程序的编写至关重要。
本文将介绍一些指针的练习题,帮助读者巩固对指针的理解和应用。
练习题一:交换变量的值请编写一个函数,使用指针作为参数,交换两个整型变量的值。
函数原型为:void swap(int* p1, int* p2);在主函数中调用该函数进行测试,并输出交换后的结果。
练习题二:查找数组中的最大值和最小值请编写一个函数,使用指针作为参数,实现在一个整型数组中查找最大值和最小值的功能。
函数原型为:void findMinMax(int* arr, int size, int* max, int* min);其中,arr表示整型数组的首地址,size表示数组的大小,max和min分别表示最大值和最小值的指针。
在主函数中调用该函数进行测试,并输出最大值和最小值。
练习题三:统计字符出现次数请编写一个函数,使用指针作为参数,统计一个字符串中某个字符的出现次数。
函数原型为:int countChar(char* str, char ch);其中,str表示字符串的首地址,ch表示要统计的字符。
在主函数中调用该函数进行测试,并输出字符出现的次数。
练习题四:字符串反转请编写一个函数,使用指针作为参数,将一个字符串进行反转。
函数原型为:void reverseString(char* str);其中,str表示字符串的首地址。
在主函数中调用该函数进行测试,并输出反转后的字符串。
练习题五:动态分配内存并初始化请编写一个函数,使用指针作为参数,动态分配一块内存,并将其中的每个元素初始化为给定的初始值。
函数原型为:int* initArray(int size, int initialValue);其中,size表示要分配的内存块的大小,initialValue表示初始化的值。
在主函数中调用该函数进行测试,并输出分配的内存块中的元素。
通过以上的练习题,读者可以进一步巩固和提升对指针的理解和应用。
C语言指针习题及答案

C语言指针习题及答案1.变量的指针,其含义是指该变量的地址。
2.已有定义int k=2.int *ptr1.*ptr2.且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是ptr2=k。
3.若有说明:int *p。
m=5.n。
以下程序段正确的是p=*p=m。
4.已有变量定义和函数调用语句:int a=25.print_value(&a)。
下面函数的输出结果是26.void print_value(int *x){ printf("%d\n"。
++*x)。
}5.若有说明:int *p1.*p2.m=5.n。
以下均是正确赋值语句的选项是p1= p2=p1.6.若有语句:int *p。
a=4.和p=&a;下面均代表地址的一组选项是&*p。
&a。
p。
7.下面判断正确的是char *s="china"。
等价于char *s。
s="china";8.下面程序段中,for循环的执行次数是6.char*s="\ta\018bc"。
for (。
*s!='\0'。
s++) printf("*");9.下面能正确进行字符串赋值操作的是charstr[10]="china"。
1.strcmp1(char *s,char *t)改写为:int strcmp1(char *s。
char *t) { while (*s == *t) {if (*s == '\0') {return 0;s++;t++;return (*s - *t);2.strcmp2(char *s,char *t)改写为:int strcmp2(char *s。
char *t) {while (*s++ = *t++) {if (!*s) {return 0;return (*s - *t);3.strcmp3(char *s,char *t)改写为:int strcmp3(char *s。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数、指针练习题一、选择题1. 若有”fun(int a[],int n)”,以下说法正确的是( )。
A.函数的类型为单精度类型B.第一个实参应该是数组名C.实参和形参之间是一个值传递的过程D.以上说法都不对2. 下列有关函数调用的说法不正确的是( )。
A.若用值传递方式,则形式参数在函数被调用时才分配内存B.实际参数和形式参数不可以同名C.主调函数和被调用函数可以不在同一个文件中D.函数间传送数据可以使用外部全局变量3. 下列叙述中正确的是( )。
A.函数可以嵌套定义,但不能嵌套调用B.函数可以嵌套调用,也可以嵌套定义C.函数不可以嵌套定义,也不可以递归调用D.函数可以嵌套调用,但不能嵌套定义4. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。
A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元5. 函数中未指定存储类型的变量,其隐含的存储类型是( )。
A.static B.auto C.extern D.register6. 在一个C语言源程序文件中所定义的全局变量,其作用域为( )。
A.所在文件的全部范围B.所在程序的全部范围C.所在函数的全部范围D.由具体定义位置和extern 说明来决定范围7. 所谓静态存储即是在程序运行期间分配固定的( )。
A.变量名称B.变量值C.存储单元D.作用域8. 设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是( )。
A.auto B.register C.static D.auto或register9. 若变量定义时未初始化,则其值不确定的是( )。
A.静态全局变量B.静态局部变量C.局部变量D.全局变量10. 以下叙述中错误的是( )。
A.用户定义的函数中可以没有return 语句B.用户定义的函数中可以有多个return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有return 语句,则应当定义函数为void 类型D.函数的return 语句中可以没有表达式11. 下列关于指针定义的描述中不正确的是( )。
A.指针变量是一种变量,该变量是用来存放某个变量的地址值的B.指针变量的类型与它所指向的变量类型一致C.指针变量的命名规则与标识符相同D.在定义指针时,”*”号表示指针变量的指向12. 若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是( )。
A.*p=&a; scanf(“%lf”,p); B.*p=&a; scanf(“%f”,p);C.p=&a; scanf(“%lf”,*p); D.p=&a; scanf(“%lf”,p);13. 以下叙述中错误的是( )。
A.改变函数形参的值,不会改变对应实参的值B.函数可以返回地址值C.可以给指针变量赋一个整数作为地址值D.当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL 14. 下列程序的运行结果是( )。
#include "stdio.h"int f(int a){ switch (a){ case 0:return 0;case 1:case 2:return 1; }return(f(a-2)+f(a-3));}main(){ int b;b=f(9);printf(“%d\n”,b);} A.10 B.7 C.8 D.915. 以下程序的输出结果是( )。
int f(int b[] , int m, int n){ int i,s=1;for(i=m;i<n;i++){ b[i]=b[i-1]+b[i+1]; s+=b[i]; }return s; }main(){ int x,a[]={1,2,3,4,5,6,7,8,9,10};x=f(a,3,5);printf("%d\n",x); } A.23 B.26C.42D.3516. 下列程序的输出结果是( )。
#include "stdio.h"int f(int n){ static int k, s;n--;for(k=n; k>0; k--)s += k;return s; }main( ){ int k;k=f(2);printf("(%d, %d)\n ", k, f(k));} A.(3, 3)B.(1, 1)C.(3, 6)D.(6, 12) 17. 函数f定义如下,执行语句”m=f(5);”后,m的值应为( )。
int f(int k){ if(k==0||k==1) return 1;else return f(k-1)+f(k-2); } A.3B.8 C.5D.13 18. 下列程序段的输出结果是( )。
int c[ ]={1, 7, 12};int *k=c+1;printf("%d",*k++); A.2 B.7 C.8 D.1219. 下列程序的运行结果是( )。
main(){ int a=4,y;y=fun(a,++a);printf(“%d”,y);}int fun(int x,int c){ int b;if(x<c)b=1;else if(x==c)b=0;else b=-1 ;return (b);} A.4 B.-1C.1D.020. 下列程序的输出结果是( )。
int f(){ static int i=0;int s=1;s+=i; i++;return s;}main(){ int i, a=0;for(i=0;i<6;i++)a+=f();printf(“%d\n”,a);} A.21B.24C.25D.1521. 若有如下程序:void s(char *m,int n){*m=*m+3;n=n+3;printf("%c,%c,",*m,n);}main(){char p=’b’,q=’B’;s(&q,p);printf("%c,%c\n",p,q);}则程序运行后的输出结果是( )。
A.E,e,b,E B.e,E,b,F C.E,e,e,E D.e,E,b,E 22. 函数f定义如下,执行语句”sum=f(4)+f(2);”后,sum的值应为( )。
int f( int m){ static int i=0; int s=0;for(;i<=m;i++) s+=i; return s;}A.13B.16C.10 D.823. 若有以下调用语句,则不正确的fun函数的首部为( )。
main(){ …int a[50],n;…fun(n, &a[9]);…}A.void fun(int m, int x[ ])B.void fun(int s, int h[41])C.void fun(int p, int *s)D.void fun(int n, int a)24. 有以下程序#include <stdio.h>int f(int x){ int y;if(x==0||x==1) return(3);y=x*x-f(x-2);return y;}main(){ int z;z=f(3); printf("%d\n",z);}程序的运行结果是( )。
A.0 B.9 C.6 D.825. 有以下程序#include <stdio.h>void fun(int p){ int d=2;p=d++; printf(“%d”,p);}main(){ int a=1;fun(a); printf(“%d\n”,a);} 程序运行后的输出结果是( )。
A.32 B.12 C.21 D.22 26. 有以下程序#include <stdio.h>void fun( int *a,int *b){ int *c;c=a;a=b;b=c;}main(){int x=3,y=5,*p=&x,*q=&y;fun(p,q);printf(“%d,%d,”,*p,*q);fun(&x,&y);printf(“%d,%d\n”,*p,*q); } 程序运行后的输出结果是( )。
A.3,5,5,3 B.3,5,3,5 C.5,3,3,5 D.5,3,5,327. 有以下程序#include <stdio.h>void f(int *p,int *q);main(){ int m=1,n=2,*r=&m;f(r,&n);printf(“%d,%d”,m,n);}void f(int *p,int *q){ p=p+1; *q=*q+1; }程序运行后输出的结果是( )。
A.1,3 B.2,3 C.1,4 D.1,228. 以下函数按每行8个输出数组中的数据void fun( int *w,int n){ int i;for(i=0;i<n;i++){ _________________printf(“%d”,w);}printf(“\n”);} 下划线处应填入的语句是A.if(i/8==0)printf(“\n”); B.if(i/8==0)continue;C.if(i%8==0)printf(“\n”); D.if(i%8==0)continue;29. 有以下程序#include <stdio.h>int fun(int x,int y){ if(x==y) return(x);else return((x+y)/2);}main(){ int a=4,b=5,c=6;printf(“%d\n”,fun(2*a,fun(b,c))); } 程序运行后的输出结果是( )。
A.3 B.6 C.8 D.12 30. 已定义以下函数int fun(int *p){return *p; } fun函数返回值是( )。
A.不确定的值B.一个整数C.形参p中存放的值D.形参p的地址值二、填空题1. 在定义函数时指定的函数类型一般应和____________语句中的表达式类型一致。
2. 求字符串长度的标准库函数是。
3. 由于通过地址能找到所需要的变量单元,将地址形象化地称为_____________。
4. 从函数的形式看,函数分为__________和无参函数,从用户使用的角度看,函数分为________和用户自定义函数。