指针和结构体练习题

合集下载

C语言指针习题(共21张)

C语言指针习题(共21张)
char *p1=a,*p2=b; int k;
for(k=0;k<=7;k++) if(*(p1+k)= =*(p2+k))
printf(“%c”,*(p1+k));} A)gae B)ga C)language D)有语法错误
第17页0.,7共21页。
C程序设计
1.若有说明语句 : int a[10],*p=a; 则对数组元素的正确引用 是: A)a[10] B)p[a] C)*(p+2) D)p+2
B.*(*(a+i)) D.*(&a[i])
答案:B 分析:指针就变量p取得数组a的首地址,由指针与数组关系知,p[i]表示数组元素第i+1元素值, p[i]=a[i]正确,故A不能选。*(a+i)表示一维数组a第i+1元素值,*(*(a+i)表示对第i+1元 素值再取值是错误操作,所以选B。a[p-a]=a[0]正确,故不能选择C。*(&a[i])也正确, 也不能选D。
printf(“sum=%d”,s);}
第19页0.,9共21页。
C程序设计
3.下面程序的运行(yùnxíng)结果是: main( ) {int x[ ]={0,1,2,3,4,5,6,7,8,9}; int s,i,*p; s=0;p=&x[0];
for(i=1;i<10;i+=2) s+=*(p+i); printf(“sum=%d”,s);}
答案:25(1+3+5+7+9=25)
第1100页.1,0共21页。
C程序设计
4.下面程序的功能(gōngnéng)是删除字符串中的数字字符并输出,填空完成 序。 #include”stdio.h” void deln(char *s) {int i,j; for(i=0,j=0;s[i]!=‘\0’;i++) if(s[i]<‘0’ (1) s[i]>’9’) {s[j]=s[i];j++;}

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语言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

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循环‎的执行次数‎是。

第7章 结构体习题正

第7章 结构体习题正

一、单项选择题(vc编译环境)1.设有以下定义语句,下列叙述中不正确的是()。

struct ex{int x; float y;char z;}example;A. struct 是结构型的关键字B. example是结构型名C. x、y、z都是结构型成员名D. ex是结构型名2.若有定义语句:struct a{int a1;int a2;}a3;下列赋值语句中正确的是()。

A.a.a1=4B.a2=4C.a3={4,5}D.a3.a2=53.定义如下结构型变量和结构型指针:struct sk{int a;float b;}data,*p;若指针p已经通过p=&data;指向结构型变量data,则引用data中a域的正确方式是()。

A. (*p).data.aB. (*p).aC. p->data.aD.p.data.a4.若定义如下结构型和结构型数组,则能打印出字母M的语句是( )。

struct person{char name[5];int age;} class1[10]={ "John",17, "Paul",19, "Mary",18, "Adam",16};A. cout<<class1[3].name;B. cout<<class1[3].name[1];C.cout<<class1[2].name[1];D. cout<<class1[2].name[0];5..若有下面的说明和定义:struct test{int ml; char m2; float m3;union uu{char ul[5]; int u2[2]; } ua;}myaa;则sizeof(struct test)的值是( )。

A. 12B. 17C.14D.96.对于下列定义的枚举型enum colorl {yellow, green, blue=5, red, brown};则枚举常量yellow和red的值分别是( )。

(完整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 指针练习题1. 介绍在C语言中,指针是一种非常重要的概念。

通过指针,我们可以直接访问和操作内存中的数据。

本文将为您提供一些C指针练习题,以帮助您更好地理解和掌握指针的用法。

2. 指针基础题2.1 编写一个程序,声明一个整型变量x,并定义一个指向该变量的指针p。

通过指针p修改变量x的值,并输出修改后的结果。

2.2 编写一个程序,声明一个整型数组a,并定义一个指向数组元素的指针p。

通过指针p遍历数组,并输出每个元素的值。

2.3 编写一个程序,声明一个字符型数组str,并定义一个指向字符串的指针p。

通过指针p遍历字符串,并输出每个字符。

3. 指针与函数题3.1 编写一个函数swap,交换两个整型变量的值。

在主函数中调用该函数,并输出交换后的结果。

3.2 编写一个函数reverse,接受一个字符型字符串作为参数,并将其逆序存储。

在主函数中调用该函数,并输出逆序后的字符串。

4. 动态内存分配题4.1 编写一个程序,使用malloc函数动态分配一个包含10个整型元素的数组,并通过指针遍历数组,并输出每个元素的值。

4.2 编写一个程序,使用calloc函数动态分配一个包含5个双精度浮点数的数组,并通过指针遍历数组,并输出每个元素的值。

4.3 编写一个程序,使用realloc函数动态分配一个包含5个整型元素的数组,并增加3个元素。

然后通过指针遍历数组,并输出每个元素的值。

5. 多级指针题5.1 编写一个程序,声明一个字符型变量c,并定义一个指向该变量的一级指针p1和一个指向p1的二级指针p2。

通过p2修改变量c的值,并输出修改后的结果。

6. 总结通过以上指针练习题,我们可以加深对C指针的理解和应用。

掌握指针的用法对于C语言编程非常重要,它能够提高程序的效率和灵活性。

希望本文能够帮助您更好地理解和运用C指针的知识。

祝您在C语言的学习中取得更好的成果!。

函数、指针与结构体练习题_参考答案

函数、指针与结构体练习题_参考答案

函数(一)选择题1.以下正确的说法是_________.建立函数的目的之一是 a)提高程序的执行效率b)提高程序的可读性c)减少程序的篇幅d)减少程序文件所占存2.以下正确的函数原型声明形式是________.a)double fun(int x,int y)b)double fun(int x; int y)c)double fun(int x, int y);d)double fun(int x,y);3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______.A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)由用户指定传递方式4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______.a)floatb)intc)longd)double5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array 的错误定义方式为________.int a[3][4];f(a);a)f(int array[][6])b)f(int array[3][])c)f(int array[][4])d)f(int array[2][5])6.以下程序的正确运行结果是_________.#include <stdio.h>void num(){ extern int x,y;int a=15,b=10;x=a-b;y=a+b;}int x,y;main(){int a=7,b=5;x=a+b;y=a-b;num();printf("%d,%d\n",x,y);}a)12,2 b)不确定 c)5,25 d)1,127.以下正确的描述是____________.a)C语言的预处理功能是指完成宏替换和包含文件的调用b)预处理指令只能位于C源程序文件的首部c)凡是C源程序中行首以"#"标识的控制行都是预处理指令d)C语言的编译预处理就是对源程序进行初步的语法检查8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______.a)仅仅搜索当前目录b)仅仅搜索源程序所在目录c)直接按系统设定的标准方式搜索目录d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索9.当调用函数时,实参是一个数组名,则向函数传送的是_____.A.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值10.函数的值通过return语句返回,下面关于return语句的形式描述错误的是_____.A.return 表达式;B.return(表达式);C.一个return语句可以返回多个函数值D.一个return语句只能返回一个函数值11.设函数fun的定义形式为void fun(char ch,float x){…}则以下对函数fun的调用语句中,正确的是_____.A.fun("abc",3.0);B.t=fun('D',16.5);C.fun('65',2.8);D.fun(32,32);12.以下程序的输出结果是_____.void reverse(int a[],int n){ int i,t;for(i=0;i<n/2;i++){ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}}main( ){ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf(" %d\n ",s);}A.22B.10C.34D.3013.阅读下列程序,则运行结果为_____.fun( ){ static int x=5;x++;return x;}main( ){ int i,x;for(i=0;i<3;i++)x=fun( );printf("%d\n",x);}A.5B.6C.7D.814.若使用一维数组名作函数实参,则以下正确的说法是_____.A.必须在主调函数中说明此数组的大小B.实参数组类型与形参数组类型可以不匹配C.在被调用函数中,不需要考虑形参数组的大小D.实参数组名与形参数组名必须一致15.在C语言中,定义函数时函数的类型可以缺省,此时函数的隐含类型是_____.A.voidB.intC.floatD.double16.在C语言中,形参的缺省存储类别是( ).A.autoB.registerC.staticD.extern 17.以下关于字符串的叙述中正确的是_____.A.C语言中有字符串类型的常量和变量B.两个字符串中的字符个数相同时才能进行字符串大小的比较C.可以用关系运算符对字符串的大小进行比较D.空串一定比空格打头的字符串小18.阅读程序,选择程序的运行结果。

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]);}程序运行后的输出结果是()。

结构体练习题

结构体练习题

结构体练习题:第1 题:计算日期的差值(1)编写一函数,计算两个日期之间的时间差,并将其值返回。

日期以年、月、日表示。

“时间差”以天数表示。

注意考虑日期之间的闰年。

函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。

(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。

为了计算简便,假设用户输入的日期1总是早于日期2。

参考代码:#include<stdio.h>struct date{int year;int month;int day;};int isLeap(int year);int dif(struct date a, struct date b);void main(){struct date a, b;printf("请输入日期1(空格分隔,年月日):\n");scanf("%d%d%d", &a.year, &a.month, &a.day);printf("请输入日期2(空格分隔,年月日,晚于日期1):\n");scanf("%d%d%d", &b.year, &b.month, &b.day);printf("相差天数为:");printf(" %d 天\n", dif(a, b));}int isLeap(int year) //判断一个年份是否是闰年的函数{if(year%400==0 || (year%4==0 && year%100!=0))return 1;elsereturn 0;}int dif(struct date a, struct date b){int i;long day=0, day1=0, day2=0;intd[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}};// day变量为年份a到年份b前一年的年份总天数for(i=a.year; i<b.year; i++)if(isLeap(i))day += 366;elseday += 365;// day1变量为年份a年初到当天的年内总天数for(i=1; i<a.month; ++i)day1 += d[isLeap(a.year)][i];day1 += a.day;// day1变量为年份b年初到当天的年内总天数for(i=1; i<b.month; ++i)day2 += d[isLeap(b.year)][i];day2 += b.day;return day + day2 - day1;}参考截图:第2 题:结构体数组应用请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。

c语言指针练习题

c语言指针练习题

c语言指针练习题C语言是一门广泛应用于系统开发和嵌入式设备编程的高级编程语言。

它具有灵活性和效率高的特点,而指针是C语言中一个重要的概念。

本文将以练习题的形式介绍一些常见的C语言指针练习题,以帮助读者更好地理解和掌握指针的应用。

1. 编写一个程序,交换两个整数的值。

请使用指针而不是中间变量来实现交换。

```cvoid swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;}int main() {int x = 5;int y = 10;printf("交换前:x = %d, y = %d\n", x, y);swap(&x, &y);printf("交换后:x = %d, y = %d\n", x, y);return 0;}```2. 编写一个函数,将一个字符串反转。

请使用指针而不是中间变量来实现反转。

```cvoid reverseString(char* str) {int length = strlen(str);char* start = str;char* end = str + length - 1;while (start < end) {char temp = *start;*start = *end;*end = temp;start++;end--;}}int main() {char str[] = "Hello, World!";printf("反转前:%s\n", str);reverseString(str);printf("反转后:%s\n", str);return 0;}```3. 编写一个函数,统计一个字符串中某个字符出现的次数。

```cint countChar(char* str, char c) {int count = 0;while (*str != '\0') {if (*str == c) {count++;}str++;}return count;}int main() {char str[] = "Hello, World!";char c = 'l';int result = countChar(str, c);printf("%c在字符串中出现的次数:%d\n", c, result); return 0;}```4. 编写一个函数,将一个整型数组中的元素逆序排列。

指针 练习题

指针 练习题

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

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

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

(2021年整理)指针综合练习题(带答案).

(2021年整理)指针综合练习题(带答案).

(完整)指针综合练习题(带答案).编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)指针综合练习题(带答案).)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)指针综合练习题(带答案).的全部内容。

指针综合练习题一、选择题1.若有以下定义,则对a数组元素的正确引用是____d_____。

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列元素地址的正确引用为__d____.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j3.若有以下定义,则p+5表示___a____。

int a[10],*p=a;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值4.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是____b____。

a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);5.若有说明语句char a[]="It is mine";char *p=”It is mine”;则以下不正确的叙述是___d_____。

a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符二、填空题1 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它 (2)和(3)的地址。

使用变量名来访问变量,是按(4)来直接存取变量称为 (5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6) 方式。

C语言复习题指针结构体

C语言复习题指针结构体

C语言复习题指针结构体c语言复习题_指针&结构体一、选择1、若有以下定义:chars[20]=\则不能代表字符'o'的表达式是a。

a)ps+2b)s[2]c)ps[2]d)ps+=2,*ps2.如果有以下定义和陈述:inta[10]={1,2,3,4,5,6,7,8,9,10},*P=a;不能表示a 的数组元素的表达式是B。

a)*pb)a[10]c)*ad)a[p-a]3.已知int*P,a;p=&a;这里的运算符表示D.a)位和操作b)逻辑和操作C)获取指针内容4、定义结构体如下:structstudent{intnum;charname[4];摄入;};则printf(“%d”,sizeof(structstudent))的结果为:12。

5、若有定义如下:inti=3,*p=&i;显示i的值的正确语句是b。

a)printf(“%d”,p);b)printf(“%d”,*p);c)printf(“%p”,*p);d) printf(“%p”,p);6、在定义结构体时,下列叙述正确的是a。

a)系统不会分配空间b)系统根据成员大小分配空间c)系统根据最大成员大小分配空间d)以上说法均不正确7、指针是一种d。

a)标识符b)变量C)运算符D)内存地址8、定义structs{intx;chary[6];}s1;,请问正确的赋值是c。

a)s1.y=”abc”;b)s1->y=”abc”;c) strcpy(s1.y,“abc”);d) s1。

strcpy(y,“abc”);9、已知定义“intx=1,*p”,则合法的赋值表达式是a。

a)p=&xb)p=xc)*p=&xd)*p =*xd)以变量地址10为例。

在C语句中,&后跟指针变量名表示指针变量的C。

a)值b)别名C)地址d)类型二、程序填空1.以下程序的功能是实现数组元素#include值的倒序voidinvert(int*s,intnum);intmain(){inti,n=5,a[5]={1,2,3,4,5};1;// 对(I=0;I<5;I++)2//以相反顺序调用函数,并以相反顺序返回0;}voidinvert(int*s,intnum){int*t,k;t=s+num;while(3){k=*s;*s=*t;*t=k;4;5;}}。

指针测试题_百度文库.

指针测试题_百度文库.

复习题一、选择题1.变量的指针,其含义是指该变量的().A值 B地址 C名 D一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. Aa,point,*&a B&*a,&a,*point C*&point,*point,&a D&a,&*point ,point3.若有说明;int *p,m=5,n;以下正确的程序段的是().Ap=&n; Bp=&n;scanf("%d",&p; scanf("%d",*p;Cscanf("%d",&n; Dp=&n;*p=n; *p=m;4.下面程序段的运行结果是().char *s="abcde";s+=2;printf("%d",s;Acde B字符’c’ C字符’c’的地址 D无确定的输出结果5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.Ac=*p1+*p2; Bp2=c Cp1=p2 Dc=*p1*(*p2;6.以下正确的程序段是().Achar str[20]; Bchar *p;scanf("%s",&str; scanf("%s",p;Cchar str[20]; Dchar str[20],*p=str;scanf("%s",&str[2]; scanf("%s",p[2];7.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是()Aa+1表示的是字符t的地址Bp指向另外的字符串时,字符串的长度不受限制Cp变量中存放的地址值可以改变Da中只能存放10个字符8.下面程序的运行结果是()#include#includemain({char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2;}A正数 B负数 C零 D不确定的值9.下面程序的运行结果是()#include#includefun(char *w,int n{char t,*s1,*s2;s1=w;s2=w+n-1;while(s1}main({char *p;p="1234567";fun(p,strlen(p;puts(p;}A7654321 B1714171 C1711717 D717717110.若有以下定义,则对a数组元素的正确引用是()int a[5],*p=a;A*&a[5] Ba+2 C*(p+5 D*(a+211.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为()A*(a[i]+j B(a+i C*(a+j Da[i]+j12.若有以下定义,则p+5表示().int a[10],*p=a;A元素a[5]的地址 B元素a[5]的值C元素a[6]的地址 D元素a[6]的值13.设 int *p , i ;以下正确合理的语句是()。

2021年C语言考试指针知识习题及答案(精选)

2021年C语言考试指针知识习题及答案(精选)

void main() {
int a=25;prtv(&a);
·4·
} 9、以下程序的输出结果是(B)。 A、运行出错 B、100 C、a 的地址 D、b 的地址 #include<stdio.h> void main() { int **k,*a,b=100; a=&b;k=&a; printf(“%d\n”,**k); } 10、以下程序运行后,输出结果是(D)。 A) 8 B) 7 C) 6 D) 5 #include<stdio,h> ss(char *s) { char *p=s; while(*p) p++; return(p-s);
·1·
2021 年 C 语言考试指针知识习题及答案(精选)
1 选择题 1、若有定义:int x,*pb;则以下正确的表达式是(A) A、pb=&x B、pb=x C、*pb=&x D、*pb=*x 2、以下程序的输出结果是(B) A、因变量无定义输出不定值 B、0 C、-1 D、1 #include<stdio.h> void main() {printf(“%d\n”,NULL);} 3、以下程序的输出结果是(B) A、5,2,3 B、-5,-12,-7 C、-5,-12,-17 D、5,-2,-7 #include<stdio.h> void sub(int x,int y,int *z) {*z=y-x;} void main() { int a,b,c;
·2·
sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);
printf(“%d,%d,%d\n”,a,b,c);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十章指针一•选择题1.变量的指针,其含义是指该变量的 _______________ A )值 B )地址 C )名 D )一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2 均已指向变量k ,下面不能正确执行 的赋值语句是。

A ) k=*ptr1+*ptr2B ) ptr2=kC ) ptr1=ptr2D ) 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_value(&a);下面函数的输出结果void prin t_value(i nt *x) { printf( %d\n ”++*x); } A)23B )24C ) 25D )265.若有说明:int *p1, *p2,m=5,n; _____________ 以下均是正确赋值语句的选项是B) p 仁&m; p2=&n; *p1 =* p2 ;C) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*p2 ;6. 若有语句:int *p,a=4; 和p=&a ;下面均代表地址的一组选项是 _A) a,p,*&aB )&*a,&a,*pC )*&p,*p,&aD ) &a,&*p,p7. 下面判断正确的是 ______________ 。

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

char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++) printf( *”A) 9B ) 79. 下面能正确进行字符串赋值操作的是 A) char s[5]={ ABCDE ”; C ) char *s ; s= "ABCDE ";10. 下面程序段的运行结果是 ________char *s= "abcde"; s+=2 ; printf( %d",s); A) cde B )字符''C )字符’c'的地址D )不确定11. 设pl 和p2是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是 ________________ 。

A) c=*p1+*p2B ) p2=cC ) p 仁p2D ) c=*p1*(*p2)A ) p 仁&m; p2=&p1 ; C ) 6D ) 5B ) char s[5]={ A \'\'C','D','E '; D ) char *s; scanf( %s",s);12. _____________________________________________________________________ 设有程序段:char s[ ]="c hina";char *p ; p=s ;则下面叙述正确的是 __________________________ 。

A) s和p完全相同B) 数组s中的内容和指针变量p中的内容相等C) s 数组长度和p 所指向的字符串长度相等 D) *p 与s[0]相等13. 以下与库函数 strcpy(char *p1,char *p2) 功能不相等的程序段是 ________A) strcpy1(char *p1,char *p2){ while ((*p1++=*p2++)!= ''); } B) strcpy2(char *p1,char *p2){ while ((*p1=*p2)!= '){ p1++; p2++ } } C) strcpy3(char *p1,char *p2){ while (*p1++=*p2++); } D) strcpy4(char *p1,char *p2){ while (*p2) *p1++=*p2++ ; }14. 下面程序段的运行结果是 _____________ 。

char a[ ]= ”anguage ", *p ; p=a ;while (*p!= ''){ printf( %c ”*p-32); p++ ; } A ) LANGUAGEB ) IanguageC ) LANG15. 若有语句:char s1[ ]= "string ",s2[8],*s3,*s4= "string2";则库函数 A ) strcpy(s1, "string2 ”; C ) strcpy(s3, "string1");16. 以下与库函数 strcmp(char *s,char *t) A) strcmp1(char *s,char *t){ 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){ 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);}17. 以下说明不正确的是 __________ 。

A ) char a[10]= "china "; C ) char *a; a= "ch in a ";18.设有说明语句: char a[]= ” It is mine ” ;char *p= ” It is mine ” ;贝U 以下不正确的叙D ) IangUAGEstrcpy 的错误调用B ) strcpy(s4, "string1"; D ) strcpy(s1,s2);功能相等的程序段是 ______________B ) char a[10],*p=a; p= ”china ";D ) char a[10],*p; p=a= ”china ";述是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数组兀素的止确引用是。

A)*&a[5] B)a+2 C) *(p+5) D)*(a+2)21.若有定义:int a[5],*p=a; 则对a数组兀素地址的止确引用是。

C) &a+1 D)&a[0]A)p+5 B)「*a+1、比乙z.r-t 、 r . 、—22.右有疋乂:int a[5]; 贝a数组中自兀素的地址可以表示为。

A)&a B)a+1 C) a D)&a[1]23. 以下与int * q[5]; 等价的定义语句是。

A)int q[5] B)int *q C) int *(q[5]) D)in t (*q)[5]24. 以下选项中,对指针变量p的不正确操作是。

A)int a[3], *p; B) i i nt a[5], *p; C) int a[5]; D)i nt a[5]p=&a; p=a; int *p=a; int*p1,*p2=a*卩仁*p2;25. 若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1; 则数值不为3的表达式是 ___________A) x[3] B) p1=x+3,*p1++C) p1=x+2,*(p1++) D) p1=x+2,*++p126. 若有说明:char *language[]={ FORTRAN ”,”BASIC ”,”PASCAL ”,”JAVA ”,”C”};贝UIan guage[2]的值是______________ 。

A )一个字符B )一个地址C) 一个字符串D) 一个不定值27. 设有定义:char *cc[2]={ 1234”,”5678”};则正确的叙述是_____________ 。

A) cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址B) cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C) cc是指针变量,它指向含有两个数组元素的字符型一维数组D) cc数组元素的值分别维”1234”和”5678”28. 已有定义int (*p)(); 指针p可以 ________________ 。

相关文档
最新文档