指针和结构体练习题
C语言指针习题(共21张)

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(指针与结构体,有答案)

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

第 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语言入门练习题一、基础知识篇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.已有定义in 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_value(&a);下面函数的输出结果是。
void print_value(int *x){ printf(“%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章 结构体习题正

一、单项选择题(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语言指针练习+答案+讲解

第七章指针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 指针练习题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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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可以 ________________ 。