函数及指针练习题

合集下载

指针 习题九及参考答案

指针 习题九及参考答案

#include "string.h" main() {char s1[80],s2[30]; int n; gets(s1); gets(s2); printf("Input n(n<strlen(s1):\n"); do scanf("%d",&n); while(n>=strlen(s1)); insert(s1,s2,n); puts(s1); } insert(char *p1,char *p2,int k) {char tem[80]; strcpy(tem,p1+k); /*保存第k个字符开始的字符*/ *(p1+k)='\0'; /*使第k个字符之前的字符为一个独立字符串*/ strcat(p1,p2); /*将p2复制到p1之后*/ strcat(p1,tem);/*再将保存再tem中的字符串连接到p1末尾*/ } 3、用指针编写比较两个字符串s和t的函数strcmp(s,t)。要求s<t时返 回-1,s=t时返回0,s>t时,返回1。 解1: /* P279_3.C */ int strcmp(char *s1,char *t1) { while(*s1!='\0'&&*t1!='\0') {if(*s1>*t1)return 1; if(*s1<*t1)return -1; if(*s1++==*t1++)continue; } if(*s1>*t1)return 1; if(*s1==*t1)return 0; if(*s1<*t1) return -1; } main()
max=min=*p; for(q=________;________;q++) (q=p q<p+n) if(________)max=*q; (*q>max) else if (________)min=*q; (*q<min) } main() {int i,num[10]; printf("input 10 numbers:\n") for(i=0;i<10;i++) scanf("%d",&num[i]); find_max_min(num,10); printf("max=%d;min=%d\n",max,min); } 三、编程题 1、编写一函数,其功能是交换两个变量x、y的值。编程序实现对数组 a[100],b[100]调用此函数,交换a、b中具有相同下标的数组元素的 值,且输出交换后的a、b数组。 /*p279_1.c*/ #include "stdlib.h" void swap(int *pa,int *pb) {int t; t=*pa;*pa=*pb;*pb=t; } main() {int a[100],b[100],i; for(i=0;i<100;i++) /*产生数组a和b */ {a[i]=random(100); b[i]=random(100); } printf("before swap A:\n"); /*输出交换前数组a */ for(i=0;i<100;i++) printf("%3d",a[i]); printf("\n"); printf("before swap B:\n"); /*输出交换前数组b */ for(i=0;i<100;i++)

函数和指针题目1(带答案)

函数和指针题目1(带答案)

1、有以下程序Array char fun(char x , char y){if(x<y) return x;return y;}void main( ){int a='9',b='8',c='7';cout<<fun(fun(a,b),fun(b,c));}程序的执行结果是(D )A)函数调用出错 B)8 C)9 D)72、有以下程序int f(int b[][4]){int i,j,s=0;for(j=0;j<4;j++){i=j;if(i>2) i=3-j;s+=b[i][j];}return s;}void main( ){cout<<f(a)<<endl;}执行后的输出结果是(D )A)12 B)11 C)18 D)163、有以下程序void f(int a[],int i,int j){int t;if(i<j){t=a[i]; a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}void main( ){int i,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++) cout<<aa[i]<< ",";cout<<endl;}执行后输出结果是(A)A)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,2,3,4,5,7、以下能正确定义数组并正确赋初值的语句是(D)A) int N=5,b[N][N];B) int a[1][2]={{1},{3}};C) int c[2][]={{1,2},{3,4}};D) int d[3][2]={{1,2},{3,4}};8、以下叙述中正确的是(B)A) 全局变量的作用域一定比局部变量的作用域范围大B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间C) 函数的形参都属于全局变量D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值9、下面rotate函数的功能是:将n行n列的矩阵A转置为A’,例如:1 2 3 4 1 5 9 135 6 7 8 2 6 10 14当 A=9 10 11 12 则 A’= 3 7 11 1513 14 15 16 4 8 12 16请填空const int N =4void rotate(int a[][N]){ int i,j,t;for(i=0;i<N;i++)for(j=0;_____________;j++) j<=i{t=a[i][j];____________;a[i][j]=a[j][i]a[j][i]=t;}}10、若有以下程序void main(){int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}};int i,j,s=0;for(i=0;i<4;i++)for(j=0;j<4;j++){if(a[i][j]<0) continue;if(a[i][j]==0) break;s+=a[i][j];}cout<<s<<endl;}执行后输出结果是______________。

指针练习题

指针练习题

编程题1用指向数组的指针变量输出数组的全部元素2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出练习题:一判断题1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。

2.指针的类型是它所指向的变量或对象的类型。

3.定义指针时不可以赋初值。

4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。

5.指针可以加上或减去一个int型数,也可以加上一个指针。

6.两个指针在任何情况下相减都是有意义的。

7.数组元素可以用下标表示,也可以用指针表示。

8.指向数组元素的指针只可指向数组的首元素。

9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。

10.引用是一种变量,它也有值和地址值。

11.引用是某个变量的别名,引用是被绑定在被引用的变量上。

12.创建引用时要用一个同类型的变量进行初始化。

13.指针是变量,它可以有引用,而引用不能有引用。

二单选题1.下列关于定义一个指向double型变量的指针,正确的是()。

A.int a(5);double *pd=a; B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d; D.double a(2.5),pd=d;2.下列关于创建一个int型变量的引用,正确的是()。

A.int a(3),&ra=a; B.inta(3),&ra=&a;C.double d(3.1);int &rd=d; D.int a(3),ra=a;3.下列关于指针概念的描述中,错误的是()。

A.指针中存放的是某变量或对象的地址值B.指针的类型是它所存放的数值的类型C.指针是变量,它也具有一个内存地址值D.指针的值是可以改变的4.下列关于引用概念的描述中,错误的是()。

A.引用是变量,它具有值和地址值B.引用不可以作数组元素C.引用是变量的别名D.创建引用时必须进行初始化5.已知:int a[5],*p=a;则与++*p相同的是()。

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

指针数组函数练习(含参考答案).
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++

指针练习题

指针练习题

指针一、选择题1、若有定义:intx,*pb;则以下正确的赋值表达式是()。

A)pb=&x B)pb=x C)*pb=&x D)*pb=*x2、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()。

A)20 B)30 C)21 D)313、已知指针p的指向如图所示,则表达示*++p的值是()。

A)20 B)30 C)21 D)314、已知指针p的指向如图所示,则表达示++*p的值是()。

A)20 B)30 C)21 D)315、以下程序的输出结果是()。

A)23 B)24 C)25 D)26void prtv(int *x){ printf(“%d\n”,++*x);}main(){ int a=25;prtv(&a);}6、以下程序的输出结果是()。

a)17 b)18 c)19 d)20main(){ int a[]={2,4,6,8,10},y=1,x,*p;p=&a[1];for(x = 0;x < 3;x++)y+=*(p+x);printf(“%d\n”,y);}7、以下程序的输出结果是( )。

A)6 B)8 C)4 D)2main(){ int a[]={2,4,6,8},*p=a,i;for(i = 0;i < 4;i++)a[i]=*p++;printf(“%d\n”,a[2]);}8、以下程序的输出结果是()。

A)4 4 B)2 2 C)2 4 D)4 6main(){ int a[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf(“%d”,*(p++));printf(“%d\n”,**k);}9、若已定义: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[I])C)p[i] D)&a[++i]10、以下程序的输出结果是()。

函数指针习题

函数指针习题

函数、指针练习题一、选择题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. 下列关于指针定义的描述中不正确的是( )。

指针经典练习题及答案

指针经典练习题及答案

二、程序题1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为G l m r e。

要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

3、字符替换。

要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。

4、编写一个程序,输入星期,输出该星期的英文名。

用指针数组处理。

5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。

要求:利用字符串指针和指针数组实现。

6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。

/*1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

函数指针练习题

函数指针练习题

函数指针练习题函数指针是一种特殊的指针类型,它指向可以被调用的函数。

函数指针可以用于实现代码的动态调用、跳转以及回调函数等功能。

本文将通过几个练习题,帮助读者更好地理解函数指针的用法和实际应用。

练习一:使用函数指针实现两个整数的加法```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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数练习题
【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);
关于此语句的解释,下面说法正确的是____。

A) z是一个数组,它有10个元素。

B) z是一个函数,小括号内的10是它的实参的值。

C) z是一个变量,小括号内的10是它的初值。

D)语句中有错误。

【1.62】已知函数定义如下:
float fun1(int x,int y)
{ float z;
z=(float)x/y;
return(z);
}
主调函数中有int a=1,b=0;可以正确调用此函数的语句是____。

A) printf("%f",fun1(a,b));B) printf("%f",fun1(&a,&b));
C) printf("%f",fun1(*a,*b));D)调用时发生错误
【1.63】下面函数的功能是____。

a(s1,s2)
char s1[],s2[];
{ while(s2++=s1++) ;
}
A)字符串比较B) 字符串复制C) 字符串连接D) 字符串反向
【1.64】在下列结论中,只有一个是错误的,它是。

A) C语言允许函数的递归调用
B) C语言中的continue语句,可以通过改变程序的结构而省略
C) 有些递归程序是不能用非递归算法实现的
D) C语言中不允许在函数中再定义函数
指针练习题
1.若有以下定义,则对a数组元素的正确引用是_________.
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列元素地址的正确引用为______.
a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j
3.若有以下定义,则p+5表示_______.
int a[10],*p=a;
a)元素a[5]的地址b)元素a[5]的值
c)元素a[6]的地址d)元素a[6]的值
4.下面程序段的运行结果是_________.
char *s="abcde";
s+=2;printf("%d",s);
a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果
5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确
执行的赋值语句是________.
a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);
6.以下正确的程序段是_________.
a)char str[20]; b)char *p;
scanf("%s",&str); scanf("%s",p);
c)char str[20]; d)char str[20],*p=str;
scanf("%s",&str[2]); scanf("%s",p[2]);
7.若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
8.下面程序的运行结果是_______.
#include <stdio.h>
#include <string.h>
main()
{
char *s1="AbDeG";
char *s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(s1,s2));
}
a)正数b)负数c)零d)不确定的值
9.下面程序的运行结果是_______.
#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="1234567";
fun(p,strlen(p));
puts(p);
}
a)7654321 b)1714171 c)1711717 d)7177171
10.变量的指针,其含义是指该变量的_________.
a)值b)地址
c)名d)一个标志
11.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.
a)a,point,*&a b)&*a,&a,*point
c)*&point,*point,&a d)&a,&*point ,point
12.若有说明;int *p,m=5,n;以下正确的程序段的是________.
a)p=&n; b)p=&n;
scanf("%d",&p); scanf("%d",*p);
c)scanf("%d",&n); d)p=&n;
*p=n; *p=m;。

相关文档
最新文档