指针和结构体练习题
- 格式:docx
- 大小:26.05 KB
- 文档页数:9
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语言入门练习题一、基础知识篇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循环的执行次数是。
一、单项选择题(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的值分别是( )。
第七章指针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 指针练习题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语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。
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. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
第十章指针一•选择题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可以 ________________ 。