C指针函数习题文档格式.docx
- 文档编号:16897724
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:12
- 大小:20.82KB
C指针函数习题文档格式.docx
《C指针函数习题文档格式.docx》由会员分享,可在线阅读,更多相关《C指针函数习题文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
aD)&
a,&
*point,point
7.设char*s="
\ta\103bc"
;
则指针变量s指向的字符串所占的字节数是()。
A)9B)5C)6D)7
8.下面程序段的运行结果是()。
char*s="
abcde"
s+=2;
cout<
s;
A)cdeB)字符'
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>
string.h>
intmain()
{char*s1="
AbDeG"
char*s2="
Abdeg"
s1+=2;
s2+=2;
strcmp(s1,s2);
A)负数B)正数C)零D)不确定的值
13.若有定义:
int*p[4];
则标识符p()。
A)是一个指向整型变量的指针B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组D)说明不合法
14.若有inta[10],*p=a;
则p+5表示()。
A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值
15.设有以下定义:
则正确的叙述是()。
char*cc[2]={"
1234"
"
5678"
};
A)cc数组的两个元素中各自存放了字符串"
和"
的首地址
B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C)cc是指针变量,它指向含有两个数组元素的字符型一维数组
D)cc数组元素的值分别是"
16.若有以下定义,则能够正确表示数组元素x[1][2]的表达式是()。
intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int*p=&
x[0][0];
A)p[1][2]B)(*p+1)+2C)p+5D)p[5]
17.语句int(*ptr)();
的含义是()。
A)ptr是指向一维数组的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
18.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是()。
A)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)language
20.关于语句int*ptr();
以下说法正确的是()。
A)ptr是一个指针变量
B)*ptr是一个函数名
C)这个语句是定义函数的语句
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
21.以下叙述中正确的是( )。
A)局部变量说明为static存储类,其生存期将得到延长
B)全局变量说明为static存储类,其作用域将被扩大
C)任何存储类的变量在未赋初值时,其值都是不确定的
D)形参可以使用的存储类说明符与局部变量完全相同
22.有以下程序,程序运行后的输出结果是( )。
A)64,28B)4,4C)4,3D)64,64
#definef(x)(x*x)
intmain()
{inti1,i2;
i1=f(8)/f(4);
i2=f(4+4)/f(2+2);
cout<
i1<
i2;
}
23.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。
A)地址传递 B)单向值传递
C)由实参传给形参,再由形参传回实参 D)传递方式由用户指定
24.有以下程序,
intfun(intn)
{if(n==1)return1;
elsereturn(n+fun(n-1));
}
intmain()
{intx;
cin>
>
x;
x=fun(x);
}
程序执行时,给变量x输入10,程序的输出结果是()
A)55 B)54 C)65 D)45
25.已有定义:
xyz"
b[]={'
x'
'
y'
z'
以下叙述中正确的是( )。
A)数组a和b的长度相同 B)a数组长度小于b数组长度
C)a数组长度大于b数组长度 D)上述说法都不对
26.以下程序的输出结果是( )。
#include<
main()
{charst[20]=“hello\0\t\\”;
cout<
strlen(st)<
sizeof(st);
}
A)99 B)520 C)1320 D)2020
27.当说明一个结构体变量时系统分配给它的内存是()。
A)各成员所需内存量的总和B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需内存D)结构中最后一个成员所需内存量
28.C语言结构体类型变量在程序执行期间()。
A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中
C)部分成员驻留在内存中D)没有成员驻留在内存中
29.以下程序的结果是()。
structWWW{intX;
intY;
};
voidmain()
{structWWWA[3]={{7,8},{9,10},{12,13}};
inta;
a=A[1].X+A[2].Y;
cout<
A)17B)22C)16D)21
30.以下程序的输出结果是()。
strucSTU{
charname[10];
intnum;
voidf1(structSTUc)
{
structSTU
b={“LiSiGuo”,2042};
c=b;
voidf2(structSTU*c)
b={“SunDan”,2044};
*c=b;
main()
struct
STU
a={“YangSan”,2041},b={“WangYin”,2043};
f1(a);
f2(&
a.num<
”,”<
b.num;
执行后的输出结果是
A)20412044
B)20412043
C)2042
2044
D)2042
2043
二、填空题
1.若想输出b数组的十个元素,下面存在错误的程序行是。
(每个程序行前面的数字代表行号)
1intmain()
2{intb[10]={1,3,5,7,9,2,4,6,8,10},k;
3for(k=0;
k<
10;
k++,b++)
4cout<
*b;
5}
2.若有定义语句intx[10],*p=x;
在程序中引用数据元素x[i]的四种形是:
,
,和x[i](假设i已正确说明并赋值)。
3.C++语言中,数组名是一个不可改变的,不能对它进行赋值运算;
数组在内存中占用一段连续的存储空间,它的首地址由表示。
4.在C++语言中,形参的缺省存储类是。
三、读程序写结果。
1.#include<
inti=1;
test()
{inti;
i;
i=2;
return(i);
intmain()
{cout<
i=test();
i/3;
2.下面程序的运行结果是。
{intx[]={0,1,2,3,4,5,6,7,8,9};
ints,i,*p;
s=0;
p=&
x[0];
for(i=1;
i<
i+=2)s+=*(p+i);
“sum=”<
return0;
3.下面程序的运行结果是。
intmain()
{intx[4]={1,3,5,7};
int*p;
p=x;
Cout<
(++*p);
四、程序填空。
1.以下程序对数组a中的数据进行降序排序,请填空。
#defineN10
{inta[N],i,j,k=N;
“Enter“<
”datathatwillbesorted\n”;
for(i=0;
N;
i++)cin>
*(a+i);
for(k=0;
;
k++)
for(i=0;
N-k;
i++)
if(*(a+i)<
*(a+i+1))
{j=*(a+i);
*(a+i)=*();
*()=j;
i++)cout<
return0;
2.下面程序的功能是将两个字符串s1和s2连接起来,请填空。
{chars1[80],s2[80];
gets(s1);
gets(s2);
conj(s1,s2);
puts(s1);
voidconj(char*p1,char*p2)//此函数实现把字符串p2连接在p1的后面。
{while((*p1)!
=‘\0’);
while((*p2)!
=‘\0’)
{*p1=;
p1++;
p2++;
3.下面程序的功能是比较2个字符串的大小,请填空。
{chars1[80],s2[80];
“Resultis:
”<
comp(s1,s2);
//以下函数实现比较2个字符串的大小,若p1比p2大,返回数值1,否则返回数值-1,
intcomp(char*p1,char*p2)
{
while((*p1!
\0'
)&
&
(*p2!
))
{
if(*p1!
=*p2);
;
if()return1;
elsereturn-1;
五、编程题。
1.编写程序,把一个从键盘输入字符串间隔的输出,请用指针完成。
例如:
输入字符串:
hello,输出:
hlo
2.编写程序,把一个字符串中的第m个字符开始的全部字符复制生成另一个字符串。
要求从键盘输入字符串及m的值并输出生成的字符串。
3.请编写一个函数,它的功能是:
对一个数组进行从小到大的排序。
函数首部为voidsort(inta[],intn),其中a为数组名,n为数组元素的个数。
主函数如下,请把子函数补充完整。
{intnum[N],i=0;
num[i];
//输入数据
sort(num,N);
//调用子函数,对数组的元素进行排序。
printf("
\n排序之后:
"
);
num[i]<
””;
//输出数据
//以下为子函数部分。
一
选择题
1
2
3
4
5
6
7
8
9
10
C
B
A
D
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
二填空题
第1题
第2题
*(x+i)
*(p+i)
p[i]
第3题
地址常量
数组名
第4题
auto
三读程序写结果。
1.
1,随机数,0,
2.
Sum=25
3.
四程序填空。
N-1
a+i+1
P1++
*p2
*p1='
break
p2++
*p1>
五编程题
第一题:
思路
#defineN100
{
charstr[N];
voidfun(char*s);
//子函数说明
gets(str);
//读入字符串
fun(str);
//函数调用
/*
以下为子函数,请补充完整
把参数字符串间隔输出
要求使用指针,在这里,参数是指针,满足要求
在子函数中,使用一个while循环,使得指针每次递增2,输出它所指向的字符即可。
也就是说,子函数只需要一个while语句。
*/
voidfun(char*s){。
。
第二题:
charstr1[N],str2[N];
intm;
voidfun(char*s1,char*s2,intn);
//函数声明
gets(str1);
Cin>
m;
fun(str1,str2,m);
puts(str2);
/*以下为子函数部分
要求实现把字符串s1中从第n个字符开始的所有数据复制到字符串s2中
例如s1为“students”,n为4,则运算之后,s2应该是“dents”*/
voidfun(char*s1,char*s2,intn)
参考算法,
1、找到s1的第n个字符
2、开始复制:
从当前s1所对应的字符开始,逐个复制到s2里面
第三题:
intn=10;
//数组的成员个数
inta[N];
int*p=a;
//三个函数,分别是输入,输出,处理数组函数
voidscan(int*),print(int*),pro(int*);
scan(p);
//调用函数,给数组输入数据
\n原始数据为:
\n"
print(p);
//调用函数,输出数组
pro(p);
//调用函数,对数组进行处理
\n交换之后的数据为:
voidscan(int*p)//给数组输入数据,数组成员个数为全部变量n
{。
voidprint(int*p)//输出数组,数组成员个数为全部变量n
/*以下为子函数,处理函数,按照要求对数组进行处理,数组的成员个数为全局变量n*/
voidpro(int*p)
intmax=0,min=0;
inti,temp;
//以下循环求出数组的最大值放在max变量中
for(
//以下循环求出数组的最小值放在min变量中
/*以下为交换语句
最小的数和第一个数对换
把最大的数和最后一个对换。
*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 函数 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)