c语言指针编程练习题doc.docx
《c语言指针编程练习题doc.docx》由会员分享,可在线阅读,更多相关《c语言指针编程练习题doc.docx(14页珍藏版)》请在冰豆网上搜索。
c语言指针编程练习题doc
C语言指针编程练习题
2.从命令行输入两个实型数据,请比较大小并输出。
参考答案
3.输入3个数a,b,c,按大小顺序输出。
利用指针方法参考答案
4.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案
5.有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案
6.有n个人围成一圈,顺序排号。
从第一个人开始报数,凡报到3的人
退出圈子,问最后留下的是原来第几号的那位。
参考答案
7.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案
8.编写一个函数,输入n为偶数时,调用函数求
1/2+1/4+当输入n为奇数时,调
用函数l/l+l/3+-+l/n参考答案
9.八进制转换为十进制参考答案
10.编一个函数fun,函数的功能是分别求出数组中所有奇数之
和以及所有偶数之和。
形参n给了数组中数据的个数:
利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:
数组中的值依次为:
1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案
11.复制字符串。
参考答案
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出^include
voidswap
(
inttemp:
temp-*pa;
*pa-*pb;
*pb-temp:
}
voidmain
(
inta,b,c,temp;
scanf;
if
swap;
if
swap;
if
swap;
printf;
}
二、C语言用指针方法输入3个字符串按由小到大顺序输出
ttinclude“stdio.h"
ttinclude“string,h"
intmain
(
char*t;
char*pl=NULL,*p2二NULL,*p3二NULL;
charchi[20]={0},ch2[20]={0},ch3[20]={0};
pl-chl:
p2-ch2;
p3-ch3;
printf;
scanf;
fflush;
printf;
scanf;
fflush;
printf;
scanf;
}
fflush:
if>0)(t-pl;pl-p2;p2-t:
}if>0)(t-pl:
pl-p3;p3-t:
}if>0){t-p2:
p2-p3;p3-t:
}printf:
return0:
9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数
ttinclude
voidmain
(
inta-0,b-0,c-0,d-0,e-0,i-0:
char*p,s[20];
while)!
-'\n')i++;
P二s;
while
(
if
a++;
elseif
b++;
elseif
C++;
elseif
d++;
elsee++;
p++;
}
printf;
printf;
}
9.5写一个函数,将3矩阵转置
ttinclude“stdio.h"
voidTranspose[3])
(
inttemp;
inti,j;
for/*转置*/
(
for
(
temp-*+i);
*+i)=*+j);
*+j)-temp:
voidmain
inta⑶⑶={{1,2,3},{4,5,6},{7,8,9}};
Transpose;
for
(
for
(
printf;
}
printf;
}
}
}.6用指向一维数组的指针做函数参数
^include
^include
intmain
voidsort[6]);〃一维数组的指针做函数参数
inti:
charstr[10][6]:
char[6];//定义一维数组的指
针做函数参数
printf;
for
scanf;
p=str;//将str—维数组指针,赋值给p;
sort;
printf;
for
printf;
return0:
}
voidsort[6])//s指向一维数组的指针做函数参数;
(
inti,j;
chartemp[6],*t;
t-temp;
for//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for//第一次比较需要9次就是i=0到i二8共九次;第二次需要比较8次;依次类推;
if>0)
strcpy;
strcpy;
strcpy;
}
}
9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
用另一函数对它们排序,然后在主函数中输出10个己排好序的字符串
〃用指针数组处理
ttinclude
ttinclude
intmain
(
voidsort:
inti:
charstr[10][6],*p[10];
printf;
for//首先将10个str的首地址赋值给10个p[i];
p[i]=str[i];//将第i个字符串的首地址赋予指针数组p的第i个元素;
for
scanf:
//scanf输入到&p[i]
sort;
printf;
for
printf;//输出到p[i];
}
voidsort
(
char*temp;
inti,j;
for
for
if,*)>0)
(
temp=*;//*指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;
*二*;
*=temp;
9.8指针将n个数按输入时顺序的逆序排列,用函数
实现
ttinclude
一、选择题
1.变量的指针,其含义是指该变量的.
a)值b)地址
c)名d)一个标志
2.若有语句intpoint,a=4;和point=&a;下面均代表地址的一组选项是.a)a,point,*&a
b)&*a,&a,*point
c)*&point,*point,&ad)&a,&*point,point
3.若有说明;int*p,m=5,n;以下正确的程序段的是
scanf;
a)*p表示的是指针变量p的地址
b)*p表示的是变量a的值,而不是变量a的地址
c)*p表示的是指针变量p的值
d)*p只能用来说明p是一个指针变量
5.己有变量定义和函数调用语句:
inta=25;print_value;下面函数的正确输出结果是.
voidprint_value
(printf;}
a)23b)c)d)26
6.若有说明:
long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是
A)*p=&a;scanf;
B)p-malloc;scanf;
C)scanf;
D)scanf;
7.有以下程序
ttinclude
main
{intm-1,n-2,*p=&m,*q=&n,*r;
r=P;P=q;q=r;
printf;
}
程序运行后的输出结果是
A)1,2,1,2
C)2,1,2,1
8.有以下程序
main{inta-1,b-3,c-5:
int*pl=&a,*p2=&b,*p=&c;*p二*pl*;printf;}
执行后的输出结果是
A)1
9.有以下程序
main
{inta,k=4,m=4,*pl=&k,*p2=&m;
printf;
}
程序运行后的输出结果是
A)4
10.在16位编译系统上,若有定义inta[]={10,20,30},*p=&a;,当执行p++;后,下列说法错误的
A)p向高地址移了一个字节
C)p向高地址移了两个字节
B)p向高地址移了一个存储单元D)p与a+1等价B)1C)0D)运行时出错,无定值B)203D)B)1,2,2,1D)2,1,1,2
11.有以下程序段
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b:
b=p[5];
b中的值是
A)5B)C)D)9
12.若有以下定义,则对a数组元素的正确引用是
inta[5],*p=a;
a)*&a[5]b)a+c)*d)*
13.若有以下定义,则p+5表示.
inta[10],*p=a;
a)元素a[5]的地址b)元素a[5]的值
c)元素a[6]的地址d)元素a[6]的值
14.设已有定义:
inta[10]={15,12,7,31,47,20,16,28,13,19},*p;下列语句中正确的是
A)for:
a++);
B)for:
p++);
C)for:
D)for:
15.有以下程序段
ttinclude
intmain
{intx□={10,0,0};
int*px-x;
printf:
printf:
px-x;
printf++):
printf:
px-x;
printf:
printf:
px-x;
printf:
printf:
return0:
}
程序运行后的输出结果是
A)11,11,11,12,12,20,20,20
B)20,10,11,10,11,10,11,10C)
11,11,11,12,12,13,20,20D)20,10,11,20,11,12,20,20
16.设有如下定义:
intarr[]=(6,7,8,9,10};
int*ptr;
ptr=arr;
*+=2;
printf);
则程序段的输出结果为
A)8,10B)6,8C)7,D)6,10
17.若有定义:
inta□={2,4,6,8,10,12},*p=a;则*的值是•*的值是.
18.若有以下说明和语句,intc[4][5],[5];p=c;能正确引用c数组元素的是.
A)p+lB)*C)*+3D)*)
19.若有定义:
inta[2][3],则对a数组的第i行j列元素地址的正确引用为.a)*b)c)*d)a[i]+j
20.若有以下定义:
inta[2][3]={2,4,6,8,10,12};则的值是.*+0)的值是.
21.有以下定义
chara[10],*b=a;
不能给数组a输入字符串的语句是
A)getsB)getsC)gets;D)gets;
22.下面程序段的运行结果是.
char*s="abcde";
c)字符'c'的地址d)无确
s+-2;printf;
a)cdeb)字符,c
定的输出结果
23.以下程序段中,不能正确赋字符串的是
char
char
卜列
A)chars[10]-"abcdefg";B)t[]-"abcdefg",*s=t;
C)chars[10]:
s-"abcdefg";D)s[10];strcpy;
24.设已有定义:
char*st二“howareyou";程序段中正确的是
A)chara[ll],*p;strcpy;
B)chara[l1]:
strcpy:
C)chara[ll]:
strcpy;
D)chara[],*p;strcpy;
25.有以下程序
main
(
chara[]-"programming",b[]-"language"
char*pl,*p2;
inti:
pl-a;p2-b;
for
if=*)
printf);
输出结果是
A)gmB)rgC)orD)ga
26.设pl和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是.
a)c二*pl+*p2;b)p2-cc)pl二p2d)c二*pl*;
27.以下正确的程序段是.
a)charstr[20]:
b)char*p;
scanf;scanf;
c)charstr[20];
d)charstr[20],*p-str:
scanf;scanf;
28.若有说明语句
chara□二“Itismine";
char*p="Itismine";
则以下不正确的叙述是.
a)a+l表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
29.下面程序的运行结果是
ttinclude
ttinclude