c语言指针编程练习题
- 格式:doc
- 大小:36.50 KB
- 文档页数:18
c语言指针编程练习题
2. 从命令行输入两个实型数据,请比较大小并输出。
参考答案
3. 输入3个数a,b,c,按大小顺序输出。
利用指针方法参考答案
4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案
5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案
6. 有n个人围成一圈,顺序排号。
从第一个人开始报数,凡报到3的人
退出圈子,问最后留下的是原来第几号的那位。
参考答案
7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案
8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调
用函数1/1+1/3+…+1/n 参考答案
9. 八进制转换为十进制参考答案
10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之
和以及所有偶数之和。
形参n给了数组中数据的个数:
利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案
11. 复制字符串。
参考答案
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #include
void swap
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
void main
{
int a,b,c,temp;
scanf;
if
swap;
if
swap;
if
swap;
printf;
}
二、C语言用指针方法输入3个字符串按由小到大顺序输出
#include “stdio.h”
#include “string.h”
int main
{
char *t;
char *p1=NULL,*p2=NULL,*p3=NULL;
char ch1[20]={0},ch2[20]={0},ch3[20]={0};
p1=ch1;
p2=ch2;
p3=ch3;
printf;
scanf;
fflush;
printf;
scanf;
fflush;
printf;
scanf;
}
fflush; if>0) {t=p1;p1=p2;p2=t;} if>0) {t=p1;p1=p3;p3=t;} if>0) {t=p2;p2=p3;p3=t;} printf; return 0;
9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数
#include
void main
{
int a=0,b=0,c=0,d=0,e=0,i=0;
char *p,s[20];
while)!=‘\n’)i++;
p=s;
while
{
if
a++;
else if
b++;
else if
c++;
else if
d++;
else e++;
p++;
}
printf;
printf;
}
9.5写一个函数,将3矩阵转置 #include “stdio.h”
void Transpose[3])
{
int temp;
int i, j;
for/*转置*/
{
for
{
temp = *+i);
*+i) = *+j);
*+j) = temp;
}
}
}
void main
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose;
for
{
for
{
printf;
}
printf;
}
}
}.6用指向一维数组的指针做函数参数
#include
#include
int main
{
void sort[6]);//一维数组的指针做函数参数
int i;
char str[10][6]; char [6];//定义一维数组的指针做函数参数
printf;
for
scanf;
p=str;//将str一维数组指针,赋值给p;
sort;
printf;
for
printf;
return 0;
}
void sort[6])//s指向一维数组的指针做函数参数; {
int i,j;
char temp[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个已排好序的字符串
//用指针数组处理
#include
#include
int main
{
void sort;
int i;
char str[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];
}
void sort
{
char *temp;
int i,j;
for
for
if,*)>0)
{
temp=*;//*指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;
*=*;
*=temp;
}
}
9.8指针将n个数按输入时顺序的逆序排列,用函数实现
#include
一、选择题
1. 变量的指针,其含义是指该变量的_________.
a)值 b)地址
c)名 d)一个标志
2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&a
b)&*a,&a,*point
c)*&point,*point,&a d)&a,&*point ,point
3.若有说明;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;
……
}
a)*p表示的是指针变量p的地址
b)*p表示的是变量a的值,而不是变量a的地址
c)*p表示的是指针变量p的值
d)*p只能用来说明p是一个指针变量
5. 已有变量定义和函数调用语句:int a=25; print_value; 下面函数的正确输出结果是________.
void print_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.有以下程序
#include
main
{ int m=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 { int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*;printf; }
执行后的输出结果是
A)1
9. 有以下程序
main
{int a,k=4,m=4,*p1=&k,*p2=&m;
a=p1==&m;
printf;
}
程序运行后的输出结果是
A)4
10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是
A)p向高地址移了一个字节
C)p向高地址移了两个字节
B)p向高地址移了一个存储单元 D)p与a+1等价 B)1C)0 D)运行时出错,无定值 B)2C)3D)B)1,2,2,1 D)2,1,1,2
11.有以下程序段
int a[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数组元素的正确引用是_________.
int a[5],*p=a;
a)*&a[5]b)a+ c)* d)*
13.若有以下定义,则p+5表示_______.
int a[10],*p=a;
a)元素a[5]的地址 b)元素a[5]的值
c)元素a[6]的地址 d)元素a[6]的值
14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是
A) for;a++);
B) for;p++);
C) for;
D) for;
15.有以下程序段
#include
int main
{int x[] = {10,0,0};
int *px = x;
printf; printf;
px = x;
printf++); printf;
px = x;
printf; printf;
px = x;
printf; printf;
return 0;
}
程序运行后的输出结果是
A)11,11,11,12,12,20,20,20
B)20,10,11,10,11,10,11,10 C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20 16.设有如下定义:
int arr[]={6,7,8,9,10};
int *ptr;
ptr=arr;
*+=2;
printf );
则程序段的输出结果为
A)8,10 B)6,8C)7,D)6,10
17.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*的值是______. *的值是_________.
18.若有以下说明和语句,int c[4][5],[5];p=c;能正确引用c数组元素的是______.
A) p+1B) *C) *+3D) *)
19.若有定义:int a[2][3],则对a数组的第i行j 列元素地址的正确引用为______.a)*b)c)* d)a[i]+j
20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____. *+0)的值是________.
21.有以下定义
char a[10],*b=a;
不能给数组a输入字符串的语句是
A)getsB)gets C)gets; D)gets;
22.下面程序段的运行结果是_________.
char *s=“abcde”;
s+=2;printf;
a)cde b)字符’c’ c)字符’c’的地址 d)无确定的输出结果
23.以下程序段中,不能正确赋字符串的是
A) char s[10]=“abcdefg”; B) char t[]=“abcdefg”,*s=t;
C) char s[10];s=“abcdefg”; D) char s[10];strcpy;
24.设已有定义: char *st=“how are you”; 下列程序段中正确的是
A) char a[11], *p; strcpy;
B) char a[11];strcpy;
C) char a[11];strcpy;
D) char a[], *p; strcpy;
25.有以下程序
main
{
char a[]=“programming”,b[]=“language”;
char *p1,*p2;
int i;
p1=a;p2=b;
for
if==*)
printf);
}
输出结果是
A)gmB)rgC)or D)ga
26.设p1和p2是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是________.
a)c=*p1+*p2; b)p2=c c)p1=p2d)c=*p1*;
27.以下正确的程序段是_________.
a)char str[20]; b)char *p;
scanf; scanf;
c)char str[20]; d)char str[20],*p=str;
scanf; scanf;
28.若有说明语句
char a[]=“It is mine”;
char *p=“It is mine”;
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
29.下面程序的运行结果是_______.
#include #include。