指针和结构体练习题

合集下载

C语言复习题指针结构体

C语言复习题指针结构体
C)系统会按最大成员大小分配空间
D)以上说法均不正确
7、指针是一种D。
A)标识符B)变量C)运算符D)内存地址
8、定义struct s {int x; char y[6];} s1;,请问正确的赋值是C。
A)s1.y=”abc”;
B)s1->y=”abc”;
C)strcpy(s1.y,”abc”);
{
int *t,k;
t=s+num;
while(3)
{
k=*s;
*s=*t;
*t=k;
4 ;
5 ;
}
}
答:(1)invert(a,n-1);(2)printf(“%4d”,a[i]) (3) s<t(4)s++ (5) t--
三、程序改错
1、以下程序的功能是:输入两实参a, b,调用函数fun后,输出a,b的值已进行交换。
void Fun(int *y);
int main ( )
{
int x = 10;
printf("x = %d\n", x);
Fun(&x);
printf("x = %d\n", x);
return 0;
}
void Fun(int *y)
{
printf("*y = %d\n", *y);
*y = 20;
scanf("%d", &n);
InputArray(a, n);
SortArray(a, n);
OutputArray(a, n);
return 0;
}
void InputArray(double *p, int n)

c语言练习题7(指针与结构体,有答案)

c语言练习题7(指针与结构体,有答案)

1、下列程序的运行结果是_B______。

void fun(int *a,int *b){int *k:k=a;a-b;b=k;}main(){int a=3,b=6,*x=&a,*y=&b;fun(x,y);printf[”%d%d.f,a,b);}A)6 3 B)36 C)编译出错 D)0 0PS:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。

2、若有定义:int*p[3];,则以下叙述中正确的是____B____。

A)定义了一个基类型为int的指针变量p,该变量有三个指针B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针C)定义了一个名为+p的整型数组,该数组含有三个int类型元素D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素PS:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p 的三个元素都是指针变量,且每个元素都是基类型为int的指针。

3、有以下程序:void swapl(int *a,int *b){int *c=a;a=b,b=c;}void swap2(int *a,int *b){int c=*a:*a=*b,*b=c;}main()(int a=lO,b=15;swapl(&a,&b);printf(”%d,%d,”,a,b);a=lO,b=15;swap2(&a,&b);printf(”%d,%dt.,a,b);}其输出结果为_10,15,15,10___。

A)15,10,10,15 B)15,10,15,10 C)10,15,10,15 D)10,15,15,10PS:C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。

C语言指针习题和答案精选文档

C语言指针习题和答案精选文档

C语言指针习题和答案精选文档TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include ""#include ""int main(int argc, char* argv[]){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("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}写一个函数,将3 3矩阵转置#include ""void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}用指向一维数组的指针做函数参数#include<>#include<>int main(){void sort(char (*s)[6]);3”n",*(month_name+n));elseprintf("It is wrong.\n");}运行结果:① Input month: 2↙It is February.② Input month: 8↙It is August.③ Input month: 13↙It is wrong.9.11c语言:将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。

c++指针类练习题及答案

c++指针类练习题及答案

c++指针类练习题及答案1、利用指针,编写用于交换两个整型变量值的函数。

程序运行结果如下:输入:5 6输出:6 5#includeusing namespace std;void swap(int *xp,int *yp){int tmp;tmp=*xp;*xp=*yp;*yp=tmp;}int main(){int a,b;cin>>a>>b;swap(&a,&b);cout<<a<<" "<<b<<endl;<="" bdsfid="81" p=""></a<<"> return 0;}2、编写主程序,将输入字符串反序输出。

程序运行结果如下:输入:ABCDEFGHIJK输出:KJIHGFEDCBA#include#includeusing namespace std;int main(){char str[100];cin>>str;int len;len=strlen(str);char *p=&str[len-1];while(p>=str){cout<<*p;p--;}cout<<endl;< bdsfid="105" p=""></endl;<>return 0;}3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。

程序的运行结果如下所示:输入(第一个数是序列的长度):62 7 2 23 1输出:1 2 2 2 3 7#includeusing namespace std;void selectsort(int *list,int count){for(int i=0;i<count-1;i++)< bdsfid="122" p=""></count-1;i++)<>{int k=i;for(int j=i+1;j<count;j++)< bdsfid="126" p=""></count;j++)<>if(*(list+j)<*(list+k))k=j;if(k!=i){int tmp=*(list+i);*(list+i)=*(list+k);*(list+k)=tmp;}}}int main(){int n;cin>>n;int array[20];for(int j=0;j<n;j++)< bdsfid="142" p=""></n;j++)<>cin>>array[j];selectsort(array,n);for(int i=0;i<n;i++)< bdsfid="146" p=""></n;i++)<>cout<<array[i]<<" ";<="" bdsfid="148" p=""></array[i]<<"> return 0;}4、用指针编写一个对整型数组进行冒泡排序函数。

c语言2019课外作业4

c语言2019课外作业4
2019 C 语言课外作业 四
第 8、9、11 章 结构体、指针、文件练习题
一、选择题 1.下面对结构数据类型的错误叙述是______。
A.结构变量可以在说明结构类型后定义,也 可在说明结构时定义。
B.结构可由若干个成员组成,各成员的数据 类型可以不同。
C.定义一个结构类型后,编译程序要为结构 的各成员分配存储空间。
s2 的长,函数值为 1,否则函数值为 0
B.FILE *fp ; fp = fopen( "file1.txt" , "r+" ) ;
15.下列关于 C 语言数据文件的叙述中正确的是
C.FILE *fp ; fp = fopen( "file1.txt" , "rb" ) ;
_______。
D.FILE *fp ; fp = fopen( "file1.txt" , "rb+" ) ;
A.printf( "%c\n" , stu[2].name ) ; B.printf( "%c\n" , stu[2].name[1] ) ; C.printf( "%c\n" , stu[1].name[1] ) ; D.printf( "%c\n" , stu[1].name[0] ) ; 6.若已定义 int a = 5 ; 下面对 ①、② 两个语句的 正确解释是_______。 ① int *p = &a ; ② *p = a ; A.语句①和②中的*p 含义相同,都表示给指
24.读取二进制文件的函数调用形式为:
exit( 0 ) ; }
fread( buffer , size , count , fp ) ;其中参数 buffer

指针测试题及答案大全

指针测试题及答案大全

指针测试题及答案大全一、选择题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语言入门练习题

c语言入门练习题

C语言入门练习题一、基础知识篇1.1 变量与常量1. 定义一个整型变量并赋值为10。

2. 声明一个浮点型常量,其值为3.14。

3. 将字符型变量 'A' 赋值给另一个字符型变量。

1.2 数据类型1. 将一个整型变量转换为浮点型变量。

2. 将一个长整型变量赋值给一个短整型变量。

3. 编写一个程序,输出不同数据类型所占的字节数。

1.3 运算符1. 计算5加3乘2的结果。

2. 判断两个整型变量是否相等。

3. 使用自增运算符使变量i的值增加1。

二、控制结构篇2.1 顺序结构1. 编写一个程序,输出1到10的整数。

2. 输出用户输入的两个整数中的较大值。

3. 计算并输出圆的面积(给定半径)。

2.2 选择结构1. 判断一个整数是正数、负数还是零。

2. 根据用户输入的成绩,输出对应的等级(A、B、C、D、E)。

3. 编写一个程序,实现石头剪刀布的游戏。

2.3 循环结构1. 计算1到100所有整数的和。

2. 输出所有的水仙花数(一个三位数,其各位数字的立方和等于该数本身)。

3. 使用循环结构输出九九乘法表。

三、函数篇3.1 函数定义与调用1. 编写一个函数,计算两个整数的和。

2. 定义一个函数,实现字符串的复制。

3. 创建一个函数,判断一个数是否为素数。

3.2 递归函数1. 使用递归函数计算斐波那契数列的第n项。

2. 编写一个递归函数,实现字符串的逆序输出。

3. 利用递归函数求解汉诺塔问题。

四、数组篇4.1 一维数组1. 初始化一个包含10个整数的数组,并输出其元素。

2. 计算一维数组中所有元素的和。

3. 找出一维数组中的最大值和最小值。

4.2 二维数组1. 创建一个3行4列的二维数组,并输出其元素。

2. 计算二维数组对角线元素的和。

3. 实现矩阵的转置。

五、指针篇5.1 指针基本操作1. 声明一个整型变量和一个指向该变量的指针,并输出指针所指向的值。

2. 使用指针实现两个整数的交换。

3. 编写一个函数,通过指针参数修改传入的字符串。

指针和结构体练习题

指针和结构体练习题

第十章指针一.选择题1.变量的指针‎,其含义是指‎该变量的。

A)值B)地址C)名D)一个标志2.已有定义i‎n t k=2;int *ptr1,*ptr2;且ptr1‎和ptr2‎均已指向变‎量k,下面不能正‎确执行的赋‎值语句是。

A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明: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 ;4.已有变量定‎义和函数调‎用语句:int a=25;print‎_valu‎e(&a);下面函数的‎输出结果是‎。

void print‎_valu‎e(int *x){ print‎f(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正‎确赋值语句‎的选项是。

A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表‎地址的一组‎选项是。

A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正‎确的是。

A)char *a=”china‎”; 等价于char *a; *a=”china‎” ;B)char str[10]={“china‎”}; 等价于char str[10]; str[ ]={“china‎”;}C)char *s=”china‎”; 等价于char *s; s=”china‎” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段‎中,for循环‎的执行次数‎是。

C语言指针单元练习

C语言指针单元练习

《C程序设计》函数单元练习学号姓名一、选择题1、对于同类型的指针变量P1和P2,不可能进行的运算是A.p1-p2 B. p1=p2C. p1+p2D. p1==p22、下列不正确的定义是A. int *p=&i,i;B. int *p=0, i;C. int i, *p=&i;D. int t, *p=0;3、下列正确的定义是A. int x=3,*p=1;B. int x=3,*p=0;C. int x=3,*p=x;D. int *p=&x=3;4、下列语句定义p为指向float类型变量d的指针,其中正确的是A. float d=0,*p=d;B. float d=0,*p=&d;C. float *p=&d,d=0;D. float d=0,p=d;5、对语句“int a[10],*p=a;”,下列表述中正确的是A. *p被赋初值为a数组的首地址B. *p被赋初值为数组元素a[0]的地址C. p被赋初值为数组元素a[1]的地址D. p被赋初值为数组元素a[0]的地址6、设有定义 int a=1, b, *p=&a; 则下列语句中使b不等于a的语句是A. b=*&a;B. b = *p;C. b=a;D. b = *a;7、p1指向某个整型变量,要使指针p2也指向同一变量,语句正确的是A. p2=p1;B. p2=**p1;C. p2=&p1;D. p2=*p1;8、假如指针p已经指向变量x,则&*p相当于A. xB. *pC. &xD. **p9、若有说明:int i, j=7,*p=&i; 则与 i=j;等价的语句是A. i=*p;B. *p=*&j;C. i=&j;D. i=**p;10、若有说明语句 int a[5], *p=a; 对数组元素的正确引用是A. a[p]B. p[a]C. *(p+2)D. p+211、假如指针p已经指向某个整型变量x,则(*p)++相当于A. p++B. x++C. *(p++)D. &x++12、若有以下定义,且0<=i<5, 则对数组元素地址的正确表示是int a[ ]={1,2,3,4,5},*p=a, i;A. &(a+i)B. a++C. &pD. &p[i]13、若有以下定义,则 *(p+5) 的值为char s[ ]=”Hello”, *p=s;A. '0'B. '\0'C. '0'的地址D. 不确定的值14、数组定义为“int a[4][5];”,引用“a+3”表示A. a数组第3列的首地址B. a数组第0行第3列元素的值C. 数组第3行的首地址D. a数组第0列第3行元素的值15、数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示A. a[1][0]+2B. a数组第1行第2列元素的地址C. a[0][1]+2D. a数组第1行第2列元素的值16、设指针x指向的整型变量值为25,则printf("%d\n",++*x);的输出是A. 23B. 24C. 25D. 2617、下面各语句中,能正确进行赋字符串操作的语句是A. char s[5] ="ABCDE";B. char s[5] ={'A','B', 'C','D', 'E'};C. char *s; s="ABCDE";D. char *s; scanf("%s",&s);18、有定义如下:int a[5], *p; 则下列描述错误的是A.表达式p=p+1是合法的B.表达式a=a+1是合法的C.表达式p-a是合法的D.表达式a+2是合法的19、执行完C程序中的下列三条语句之后c指向int a, b, *c=&a; int *p= c; p= &b;A.p B. c C. b D.a20、字符串常量"ME"的字符个数为A.4 B. 3 C. 2 D. 121、下列对字符数组进行初始化的语句正确的是A.char a[]= “Hello”;B. char a[][]= {'H’,’e’,’l’,’l’,’o’};B.char a[5]=“Hello”;D. char a[2][5]= {"Hello","World"}22、下列关于指针运算的描述错误的是A.在一定条件下,两个指针可以相加B. 在一定条件下,两个指针可以进行逻辑判断C. 在一定条件下,指针可以为空值D. 在一定条件下,两个指针可以相互赋值23、int a= 10,*p=&a;语句中,p的值是A.10 B. 变量p的地址值C. 变量a的地址值D.无意义24、在下列四种字符串说明或赋值方式中,不正确的是:A. char *p;p=“I am a student”;B. char p1[8]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’};C. char p2[20] ;p2=“I am a student”;D. char p3[ ]=“student”,p4[ ]=“teacher”;25、有说明语句char *name="newspaper"; 则可获取串中字符's'A. name[0]+3B. *name+3C. *(name+3)D. name[4]26、设有变量定义:int aval=2005;int *ap;double *dp;下面赋值正确的是A. ap=aval;B. *ap=&aval;C. dp=ap;D. *dp=*ap27、int a[ 3] [ 3] , *p, i; p=&a[0] [0] ; for(i=0; i<9; i++) p[i] =i; for(i=0;i<3; i++) printf("%d ", a[1] [i] ) ; 程序运行后的输出结果是A. 0 1 2B.1 2 3C. 2 3 4D.3 4 528、有以下程序int a[ 3] [ 3] , *p, i; p=&a [0] [0] ; for ( i=0 ; i<9 ; i++) p[i]=i+1; printf("%d\n", a[1] [2] ) ; 程序运行后的输出结果是A. 3B. 6C. 9D. 229、 int i, x[3] [3] ={ 9, 8, 7, 6, 5, 4, 3, 2, 1} , *p=&x[ 1] [ 1] ;for(i=0; i<4; i+=2) printf("%d ", p[i] ) ;的输出结果是A. 5 2B. 5 1C. 5 3D. 9 730、执行以下程序段后, int a[2] [3] ={ { 1, 2, 3} , { 4, 5, 6} } ; int m, *p; p=&a[0][0] ; m=(*p) *(*(p+2) ) *(*(p+4) ) ; m的值为A. 15B. 14C. 13D. 1231、指针可以用来表示数组元素,下列表示中____________是错误的。

C语言指针精选习题和答案

C语言指针精选习题和答案

C语言指针精选习题和答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb) {int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c); if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c); }二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){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("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20];while((s[i]=getchar())!='\n')i++; p=s;while(*p!=10){if(*p>='A'&&*p<='Z') a++;else if(*p>='a'&&*p<='z') b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9') d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }9.5写一个函数,将3 3矩阵转置 #include "stdio.h"void Transpose(int (*matrix)[3]) {int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数 #include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。

指针经典练习题(含答案版)二

指针经典练习题(含答案版)二

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++));

(完整word版)C语言指针练习+答案+讲解

(完整word版)C语言指针练习+答案+讲解

第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。

A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。

除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。

A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。

A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。

c语言指针习题及答案

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. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。

C语言(指针与结构体)习题与答案

C语言(指针与结构体)习题与答案

1、设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()。

A.p=q;B.*p=&n1;C.p=*q;D.*p=*q;正确答案:D2、有以下程序main( ){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf("%d,%d,%d,%d\n",*p,*q,a,b);}程序运行后的输出结果是()。

A.7,8,8,7B.8,7,7,8C. 8,7,8,7D.7,8,7,8正确答案:B3、程序中对fun函数有如下说明void *fun( );此说明的含义是()。

A.fun函数的返回值可以是任意的数据类型B. fun函数的返回值是无值型的指针类型C.指针fun指向一个函数,该函数无返回值D.fun函数无返回值正确答案:B4、有以下程序main(){ int a[]={2,4,6,8,10},y=0,x,*p; p=&a[1];for(x=1;x<3;x++) y+=p[x]; printf("%d\n",y);}程序运行后的输出结果是()。

A.15B.10C.14D.11正确答案:C5、有以下程序:main(){int a[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d ",a[1][i]);}程序运行后的输出结果是()。

A.1 2 3B.2 3 4C.3 4 5D.0 1 2正确答案:C6、有以下程序prt(int *m,int n){ int i;for(i=0;i<n;i++)m[i]++;}main( ){ int a[]={1,2,3,4,5},i;prt(a,5);for(i=0;i<5;i++)printf("%d,",a[i]);}程序运行后的输出结果是()。

c 指针练习题

c 指针练习题

c 指针练习题C指针练习题在C语言中,指针是一种强大而重要的数据类型。

它们提供了对内存地址的直接访问,使我们能够更高效地操作数据。

为了加深对指针概念的理解,并培养对指针的熟练应用能力,下面将提供一些C指针练习题。

通过完成这些练习题,您将更好地掌握C指针的使用方法。

1. 将两个整数互换编写一个C程序,通过使用指针将两个整数的值互换。

程序应该接收两个整数作为输入,并输出互换后的结果。

```C#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int num1, num2;printf("请输入两个整数: ");scanf("%d %d", &num1, &num2);printf("交换前: num1 = %d, num2 = %d\n", num1, num2);swap(&num1, &num2);printf("交换后: num1 = %d, num2 = %d\n", num1, num2);return 0;}```2. 计算数组元素之和编写一个C程序,计算给定整数数组中所有元素的和。

程序应接收一个整数数组并返回数组元素之和。

```C#include <stdio.h>int getArraySum(int *arr, int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += *(arr + i);}return sum;}int main() {int arr[] = {1, 2, 3, 4, 5};int size = sizeof(arr) / sizeof(arr[0]);int sum = getArraySum(arr, size);printf("数组元素之和: %d\n", sum);return 0;}```3. 查找数组中的最大值和最小值编写一个C程序,查找给定整数数组中的最大值和最小值。

c语言结构体试题及答案

c语言结构体试题及答案

c语言结构体试题及答案1. 定义一个结构体,包含学生的姓名、学号和成绩。

```cstruct Student {char name[50];int id;float score;};```2. 编写一个函数,计算结构体数组中所有学生的平均成绩。

```cfloat calculateAverageScore(struct Student students[], int size) {float sum = 0.0;for (int i = 0; i < size; i++) {sum += students[i].score;}return sum / size;}```3. 给定一个结构体数组,编写一个函数,返回成绩最高的学生。

```cstruct Student* findHighestScoreStudent(struct Student students[], int size) {struct Student* highest = students;for (int i = 1; i < size; i++) {if (students[i].score > highest->score) {highest = &students[i];}}return highest;}```4. 编写一个函数,将结构体数组中的学生信息打印出来。

```cvoid printStudents(struct Student students[], int size) { for (int i = 0; i < size; i++) {printf("Name: %s, ID: %d, Score: %.2f\n", students[i].name, students[i].id, students[i].score);}}```5. 如何定义一个结构体,其中包含另一个结构体类型的成员?```cstruct Inner {int a;float b;};struct Outer {struct Inner inner;char c[100];};```6. 编写一个函数,交换两个结构体变量的值。

指针 练习题

指针 练习题

指针练习题指针是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表示初始化的值。

在主函数中调用该函数进行测试,并输出分配的内存块中的元素。

通过以上的练习题,读者可以进一步巩固和提升对指针的理解和应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
D)cc数组元素的值分别维”1234”和”5678”
28.已有定义int (*p)( );指针p可以。
A)代表函数的返回值B)指向函数的入口地址
C)表示函数的类型D)表示函数返回值的类型
29.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是。
A)p=max; B)p=max(a,b); C)*p=max; D)*p=max(a,b);
A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)
21.若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是。
A)p+5 B)*a+1 C)&a+1 D)&a[0]
22.若有定义:int a[5];则a数组中首元素的地址可以表示为。
A)&a B)a+1 C)a D)&a[1]
C)strcpy3(char *p1,char *p2)
{ while (*p1++=*p2++) ; }
D)strcpy4(char *p1,char *p2)
{ while (*p2) *p1++=*p2++ ; }
14.下面程序段的运行结果是。
char a[ ]=”language”, *p ;
void print_value(int *x)
{ printf(“%d\n”,++*x); }
A)23 B)24 C)25 D)26
5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是。
A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;
{ for ( ; *t= =*s; )
{ if (!*t) return 0 ; t++ ; s++ ; }
return (*s-*t) ;
}
D)strcmp4(char *s,char *t)
{ for ( ; *s==*t; s++, t++ )
if (!*s) return 0 ;
return (*t-*s) ;
3.若有说明: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 ;
4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是。
第十章指针
一.选择题
1.变量的指针,其含义是指该变量的。
A)值B)地址C)名D)一个标志
2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)
C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;
6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p
7.下面判断正确的是。
A)char *a=”china”;等价于char *a; *a=”china”;
8.下面程序段中,for循环的执行次数是。
char *s=”\ta\018bc”;
for ( ; *s!=’\0’; s++) printf(“*”) ;
A)9 B)7 C)6 D)5
9.下面能正确进行字符串赋值操作的是。
A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’};
t1++ ; t2--;
}
}
main ( )
{ char s[12];
int i;
for (i=0; i<12 ; i++) s[i]=’A’+i+32 ;
sub(s,7,11);
for (i=0; i<12 ; i++) printf (“%c”,s[i]);
printf(“\n”);
}
abcdefglkjih
30.若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是。
A)(*p)max(a,b) B)*pmax(a,b); C)(*p)(a,b); D )*p(a,b);
31.以下正确的叙述是。
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定
C)char *s ; s=”ABCDE”; D)char *s; scanf(“%s”,s) ;
10.下面程序段的运行结果是。
char *s=”abcde”;
s+=2 ; printf(“%d”,s);
A)cde B)字符’c’C)字符’c’的地址D)不确定
11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是。
{ for ( ; *s++=*t++; )
if (*s= =’\0’) return 0 ;
return (*s-*t) ;
}
B)strcmp2(char *s,char *t)
{ for ( ; *s++=*t++; )
if (!*s) return 0 ;
return (*s-*t) ;
}
C)strcmp3(char *s,char *t)
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
19.若已定义char s[10];则在下面表达式中不表示s[1]的地址是。
A)s+1 B)s++ C)&s[0]+1 D)&s[1]
20.若有定义:int a[5],*p=a;则对a数组元素的正确引用是。
}
17.以下说明不正确的是。
A)char a[10]=”china”; B)char a[10],*p=a; p=”china”;
C)char *a; a=”china”; D)char a[10],*p; p=a=”china”;
18.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是。
fun(s,c); puts(s) ;
}
第十一章 结构
一.选择题
1.如下说明语句,则下面叙述不正确的是。
struct stu {
int a ; float b ;
} stutype ;
A)struct是结构类型的关键字
B)struct stu是用户定义的结构类型
C)stutype是用户定义的结构类型名
A)strcpy(s1,”string2”); B)strcpy(s4,”string1”);
C)strcpy(s3,”string1”); D)strcpy(s1,s2);
16.以下与库函数strcmp(char *s,char *t)功能相等的程序段是。
A)strcmp1(char *s,char *t)
{ char *a=”abcdef”;
printf(“%d\n”,fun(a)) ;
}
3.写出下面程序的运行结果。
sub(char *a,int t1,int t2)
{ char ch;
while (t1<t2) {
ch = *(a+t1); *(a+t1)=*(a+t2) ; *(a+t2)=ch ;
D)a和b都是结构成员名
2.以下对结构类型变量的定义中不正确的是。
A)#define STUDENT ct student B)struct student {
3.若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是。
4.若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是,*(a[1]+2)的值是。
5.若有程序段:
int *p[3],a[6],i;
for (i=0; i<3; i++) p[i]=&a[2*i] ;
23.以下与int *q[5];等价的定义语句是。
A)int q[5] B)int *q C)int *(q[5]) D)int (*q)[5]
24.以下选项中,对指针变量p的不正确操作是。
A)int a[3], *p; B)int a[5], *p; C)int a[5]; D)int a[5]
p=&a; p=a; int *p=a; int *p1,*p2=a;
则*p[0]引用的是a数组元素,*(p[1]+1)引用的是a数组元素。
三.程序阅读题
1.写出下面程序的运行结果。
func(char *s,char a,int n)
相关文档
最新文档