指针题目
- 格式:ppt
- 大小:111.50 KB
- 文档页数:6
指针典型例题分析与解答1 对于变量x,其地址可以写成________;对于数组y[10],其首地址可以写成________或__________;对于数组元素y[3],其地址可以写成__________或_________。
【分析】变量的地址可以写成“&变量名”。
数组的首地址就是数组名,也可以写成第 1个元素的地址“&数组名[0]”。
数组元素的地址可以写成“&数组元素”,也可以写成“数组首地址十下标”。
【答案】&xy&y[0]&y[3]y+32 设有定义语句“int k,*p1=&k,*p2;”,能完成表达式“p2=&k”功能的表达式可以写成_______________。
【分析】注意原来表达式“p2=&k”的主要功能是将变量k的地址存放到指针变量p2中。
现在变量k的地址已经存放在指针变量pl中,所以完成“p2=&k”功能的表达式是:p2=p1.【答案】p2=p13 设有两条语句“int a,*p=&a;”和“*p= a;”,则下列说法中正确的是()①两条语句中的“*p”含义完全相同②两条语句中的“*p=&a”和“*p=a”功能完全相同③第 1条语句中的“*p=&a”是定义指针变量 p并对其初始化④第2条语句中的“*p=a”是将a的值赋予变量p【分析】分析备选答案①:第1条语句是数据定义语句,其中的“*p”表示定义的变量p是指针型变量;第2条语句是赋值语句,其中的“*p”代表它所指向的变量a,所以该备选答案是错误的,不符合题意。
分析备选答案②:第 1条语句中的“*p=&a”是将变量 a的地址以初值方式赋予指针变量 p;而第 2条语句中的“*p=a”是将变量 a中的值赋予指针变量 P指向的变量(注意也是 a,即该语句的作用和 a = a完全相同),显然该备选答案是错误的,不符合题意。
再分析备选答案③:显然该答案是正确的,符合题意。
至于备选答案④,显然是错误的“*p”是代表指针变量p指向的变量,不能代表指针变量p。
六、指针183.下程序的运行结果是( A )。
void ast (int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x—y;}main(){ int a=4,b=3,c,d;ast(a,b,&c,&d);printf(”%d,%d\n”,c,d);}A. 7,1B. 1,7C. 7,—1D. c、d未赋值,编译出错执行 ast(a,b,&c,&d);调用ast 函数,把a传递给x,b传递给y,c的地址传递给cp,d的地址传递给dp。
因为cp=&c(cp的值为c变量的地址),所以*cp等价于c,执行*cp=x+y ;后c=4+3=7同理,因为dp=&d,所以*dp等价于d,执行*dp=x—y;后d=4—3=1执行 printf("%d,%d\n",c,d);后输出7,1184.有以下语句:int a[5]={0,1,2,3,4,5},i;int *p=a;设0≤i<5,对a数组元素不正确的引用是( C )。
A.*(&a[i])B. a[p—a]C.*(*(a+i))D. p[i]1.指针运算符取地址运算符&:其功能是取变量的地址。
须是指针变量。
A . *(&a[i]) 等价于a[i]B. a[p—a]等价于a[0]C. 因为*(a+i)等价于a[i] 所以*(*(a+i))等价于*(a[i]) ,又因为在*运算符之后跟的变量必须是指针变量,我们断定*a[i]是错的,所以*(*(a+i))也是错.D。
因为P=a,所以P[i]等价于a[i]185.若有定义int *p1,*p2; 则错误的表达式是( A )。
A. p1+p2B. p1—p2C. p1<p2D. p1=p2两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小,但不能相加。
186.以下叙述错误的是( D )。
编程题1用指向数组的指针变量输出数组的全部元素2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出练习题:一判断题1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
2.指针的类型是它所指向的变量或对象的类型。
3.定义指针时不可以赋初值。
4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。
5.指针可以加上或减去一个int型数,也可以加上一个指针。
6.两个指针在任何情况下相减都是有意义的。
7.数组元素可以用下标表示,也可以用指针表示。
8.指向数组元素的指针只可指向数组的首元素。
9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。
10.引用是一种变量,它也有值和地址值。
11.引用是某个变量的别名,引用是被绑定在被引用的变量上。
12.创建引用时要用一个同类型的变量进行初始化。
13.指针是变量,它可以有引用,而引用不能有引用。
二单选题1.下列关于定义一个指向double型变量的指针,正确的是()。
A.int a(5);double *pd=a; B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d; D.double a(2.5),pd=d;2.下列关于创建一个int型变量的引用,正确的是()。
A.int a(3),&ra=a; B.inta(3),&ra=&a;C.double d(3.1);int &rd=d; D.int a(3),ra=a;3.下列关于指针概念的描述中,错误的是()。
A.指针中存放的是某变量或对象的地址值B.指针的类型是它所存放的数值的类型C.指针是变量,它也具有一个内存地址值D.指针的值是可以改变的4.下列关于引用概念的描述中,错误的是()。
A.引用是变量,它具有值和地址值B.引用不可以作数组元素C.引用是变量的别名D.创建引用时必须进行初始化5.已知:int a[5],*p=a;则与++*p相同的是()。
二、程序题1、计算字符串中子串出现的次数。
要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。
例如,China转换成密文为G l m r e。
要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。
3、字符替换。
要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。
4、编写一个程序,输入星期,输出该星期的英文名。
用指针数组处理。
5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。
要求:利用字符串指针和指针数组实现。
6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。
7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。
/*1、计算字符串中子串出现的次数。
要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
指针编程练习题指针是一种特殊的数据类型,在C语言中有着重要的作用。
通过指针,我们可以直接访问和操作内存中的数据。
为了熟悉和掌握指针的使用,下面将给出一些指针编程练习题供大家参考。
1. 交换两个变量的值请编写一个程序,使用指针来交换两个整数变量的值。
要求在程序中定义两个整数变量a和b,通过指针交换它们的值,并打印交换后的结果。
示例输入:a = 10,b = 20示例输出:交换前:a = 10, b = 20交换后:a = 20, b = 102. 求数组元素的和请编写一个程序,使用指针来计算一个整型数组中所有元素的和。
要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,计算它们的和,并打印结果。
示例输入:array = {1, 2, 3, 4, 5}示例输出:数组元素的和为:153. 查找数组中的最大值和最小值请编写一个程序,使用指针来查找一个整型数组中的最大值和最小值。
要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,找到数组中的最大值和最小值,并打印结果。
示例输入:array = {7, 4, 9, 2, 5}示例输出:最大值为:9最小值为:24. 字符串长度计算请编写一个程序,使用指针来计算一个字符串的长度。
要求在程序中定义一个字符数组string,并使用指针访问字符数组中的元素,计算字符串的长度,并打印结果。
示例输入:string = "Hello, World!"示例输出:字符串长度为:135. 动态内存分配请编写一个程序,使用指针来动态分配内存空间,并进行数据的读写操作。
要求在程序中使用malloc函数动态分配内存空间,读取用户输入的整数值并存储到动态分配的内存中,然后使用指针访问该内存中的数据,并打印结果。
示例输入:请输入一个整数: 10示例输出:读取到的整数为: 10以上是几个指针编程练习题的示例,通过练习这些题目,可以提高对指针的理解和使用技巧。
c语言指针题目及答案一选择题(7分,每小题0.5分)1.C语言源程序的基本单位是( )。
A 过程B 函数C 子程序D 标识符2.下列程序的输出结果是( )。
main( ){ int a=7,b=5;printf("%d",b=b/a);}A 5B 1C 0 D不确认值3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是( )。
A 7B 8C 9D 24.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。
a=125.534; a=(int)125.521%4; a=5<<2;A 125,31,1B 125,1,20C 125,31,20D 125.534,2,205.建有如下程序段,下面叙述中恰当的就是 ( )。
int k=10; while(k=0) k=k-1;A 循环继续执行一次 B循环就是无穷循环 C循环体语句一次也不继续执行 D循环体语句继续执行一次6.以下程序的输出结果为( )。
int i;void prt( ){ for(i=5;i<8;i++) printf("%c",'*');printf(" ");}main( ){ for(i=5;i<=8;i++) prt( );}A ***B *** *** *** ***C *** ***D * * *7.在C语言程序中,以下说法正确的是( )。
A函数的定义可以嵌套,但函数的调用不可以嵌套B函数的定义不可以嵌套,但函数的调用可以嵌套C函数的定义和函数的调用都不可以嵌套D函数的定义和函数的调用都可以嵌套8.以下函数调用语句中所含( )个实参。
func((e1,e2),(e3,e4,e5));A 2B 3C 5D 语法错误9.以下程序的输出结果为( )。
#define ADD(x) x*xmain( ){ int a=4,b=6,c=7,d=ADD(a+b)*c;printf("d=%d",d);}A d=70B d=80C d=140D d=70010.未知职工记录叙述如下,在Turbo C中,系统为变量w分配( )字节的空间。
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编一程序,用指针数组在主函数中输入十个等长的字符串。
(1)设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;(2)若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是()A)随机值B)0 C)x的地址D)p的地址(3) 以下定义语句中正确的是()A) char a='A'b='B'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a;(4) 有以下程序()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) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7(5) 设有定义:int a,*pA=&a;以下scanf语句中能正确为变量a读入数据的是()A) scanf(“%d”,pA) ;B) scanf(“%d”,a) ;C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是()A) p=1; B) *q=2; C) q=p; D) *p=5;(7) 有以下程序()以下是引用片段:void fun(char *a, char *b){ a=b; (*a)++; }main (){ char c1="A", c2="a", *p1, *p2;p1=&c1; p2=&c2; fun(p1,p2);printf(“%c%c\n”,c1,c2);}程序运行后的输出结果是A) Ab B) aa C) Aa D) Bb(8) 若程序中已包含头文件stdio.h, 以下选项中,正确运用指针变量的程序段是()A) int *i=NULL; B) float *f=NULL;scanf("%d",i); *f=10.5;C) char t="m", *c=&t; D) long *L;*c=&t; L=…\0‟;(9) 有以下程序()以下是引用片段:#inc1udemain(){ printf("%d\n", NULL); }程序运行后的输出结果是A) 0 B) 1 C) -1 D) NULL没定义,出错(10) 已定义以下函数()fun (int *p){ return *p;}该函数的返回值是A) 不确定的值B) 形参p中存放的值C) 形参p所指存储单元中的值D) 形参p的地址值(11) 下列函数定义中,会出现编译错误的是()A) max(int x, int y,int *z) B) int max(int x,y){ *z=x>y ? x:y; } {int z ;z=x>y? x:y;return z ;}C) max (int x,int y) D) int max(int x,int y){ int z; { return(x>y?x:y) ; }z=x>y?x:y; return(z);}(12) 有以下程序段()以下是引用片段:main(){ int a=5, *b, **c;c=&b; b=&a;……}程序在执行了c=&b;b=&a;语句后,表达式:**c的值是A) 变量a的地址B) 变量b中的值C) 变量a中的值D) 变量b的地址(13) 有以下程序()以下是引用片段:main(){ char a,b,c,*d;a=‟\‟; b=…\xbc‟;c=…\0xab‟; d="\017";print("%c%c%c\n",a,b,c,*d);}编译时出现错误,以下叙述中正确的是A) 程序中只有a=‟\‟;语句不正确B) b=…\xbc‟;语句不正确C) d="\0127";语句不正确D) a=‟\‟;和c=…\0xab‟;语句都不正确(14) 若有以下定义和语句()以下是引用片段:#includeint a=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是AA) *q=0; B) w=p; C) *p=a; D) *p=*w;(15) 有以下程序以下是引用片段:int *f(int *x,int *y){ if(*x<*y) return x;else return y;}main(){ int a=7,b=8,*p=&a,*q=&b,*r};r=f(p,q);printf(“%d,%d,%d”,*p,*q,*r); }执行后输出结果是()A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8(16) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()A) p=q; B) *p=*q; C) n=*q; D) p=n;(17) 有以下程序()以下是引用片段:void fun(char *c,int d){ *c=*c+1;d=d+1;printf(“%c,%c,”,*c,d);}main(){ char a=‟A‟,b=‟a‟;fun(&b,a); printf(“%c,%c\n”,a,b);}程序运行后的输出结果是A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b(18) 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);(19) 若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为()A) 无确定值B) a的地址C) 512 D) 511(20) 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是()A) i=*p; B) p*=*&j; C) i=&j; D) i=**p;(21) 下列程序段的输出结果是()A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2以下是引用片段:void fun(int *x, int *y){ printf(“%d %d”, *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf(“%d %d”,x, y);}(22) 下列程序的运行结果是()A) 6 3 B) 3 6 C) 编译出错D) 0 0以下是引用片段: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”, a, b);}(23) 有如下程序段()int *p,a=10,b=1p=&a; a=*p+b;执行该程序段后,a的值为A) 12 B) 11 C) 10 D) 编译出错(24) 有以下函数()char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值B) 一个临时存储单元的地址D) 形参p自身的地址值(25) 请选出正确的程序段()A) int *p; B) int *s, k;scanf("%d",p); *s=100;… …C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&c;*p='a'; s=p;… *s=1;…(26) 若有以下定义和语句:()double r=99,*p=&r;*p=r;则以下正确的叙述是A) 以下两处的*p含义相同,都说明给指针变量p赋值B) 在"double r=99,*p=&r;"中,把r的地址赋值给了p所指的存储单元C) 语句"*p=r;"把变量r的值赋给指针变量pD) 语句"*p=r;"取变量r的值放回r中(27) 以下程序运行后,a的值是()A) 4 B) 1 C) 0 D) 运行时出错,a无定值以下是引用片段:main(){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}(28) 有以下程序()以下是引用片段:int fun(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }main(){ int a, b, c, d;a=30; b=50;fun(a,b,&c,&d);printf("%d,%d\n", c, d);}输出结果是A) 50,30 B) 30,J50 C) 80,-20 D) 80,20(29) 若有定义和语句()int **pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);则输出结果是:A)10,20 B)10,10 C)20,10 D)20,20(30) 以下程序的输出结果是()以下是引用片段:#includesubl(char a,char b) {char c; c=a;a=b;b=c;}sub2(char* a,char b) {char c; c=*a;*a=b;b=c;}sub3(char* a,char*b) {char c; c=*a;*a=*b;*b=c;} { char a,b;a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);a='A';b='B';sub1(a,b);putchar(a);putchar(b);}A) BABBAB B) ABBBBA C) BABABA D) BAABBA(31) 若有说明:int i,j=7,*p=&i;,则与i=j;等价的语句是()A) I= *P; B) *P=*&J; C) i=&j; D) i=* *p;(32) 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。
幼儿园钟表整点半点的类型题
以下是一些幼儿园钟表整点和半点类型题的例子:
1. 请画出指示8点整的钟表。
你可以画一个圆形,然后在圆形上标出钟表的刻度:1、2、3、4、5、6、7、8、9、10、11和12点。
然后画两个指针,一个
小时指针指向8点的刻度,另一个分钟指针指向12点的刻度。
2. 现在是下午3点,请画出指示3点半的钟表。
同样,你可以画一个圆形并标出刻度。
然后使用两个指针,一个指向3点的刻度,另一个指向6点的刻度。
3. 现在是上午11点,请画出指示11点整的钟表。
你可以按照前面的步骤绘制钟表,但这次只需要一个指针,指向11点的刻度。
4. 现在是中午12点,请画出指示12点半的钟表。
同样地,在钟表上绘制刻度,并用两个指针指向12点和6点
的刻度。
这些题目可以帮助幼儿学习整点和半点的概念,通过绘制钟表来帮助他们理解时间的概念和刻度的意义。
关于指南针活动的题目一、选择题(1 - 10题)1. 指南针是我国古代四大发明之一,它能够指示方向是因为()- A. 指南针受到地球重力的作用。
- B. 指南针受到地球磁场的作用。
- C. 指南针能吸收太阳光。
- D. 指南针能发射无线电波。
- 答案:B。
- 解析:地球本身是一个大磁体,指南针能够指示方向是因为受到地球磁场的作用。
重力与物体的重量和下落方向有关,与指南针指示方向无关;指南针不能吸收太阳光来指示方向;它也不能发射无线电波指示方向。
2. 最早的指南针叫司南,司南的勺柄指向()- A. 南方。
- B. 北方。
- C. 东方。
- D. 西方。
- 答案:A。
- 解析:司南的勺柄指向南方,勺头指向北方。
这是根据古代对磁石特性的认识制作出的指示方向的仪器。
3. 在使用指南针时,应该()- A. 远离磁性物质。
- B. 靠近磁性物质。
- C. 放在水中使用。
- D. 用手握住指南针的指针。
- 答案:A。
- 解析:磁性物质会干扰指南针的磁场,使其指示不准确,所以在使用指南针时应该远离磁性物质。
靠近磁性物质会使指南针指针偏离正确方向;指南针放在水中使用可能会损坏指南针且不是正常使用方式;用手握住指南针的指针会影响指针转动,也无法准确指示方向。
4. 如果在野外迷路,利用指南针辨别方向后,应该()- A. 朝着指南针指示的方向一直走。
- B. 结合地图等其他信息确定路线。
- C. 随意改变方向。
- D. 按照与指南针相反的方向走。
- 答案:B。
- 解析:虽然指南针能指示方向,但在野外仅依靠指南针指示的方向一直走可能会遇到各种障碍,如河流、悬崖等。
所以要结合地图等其他信息确定合理的路线。
随意改变方向会导致迷失方向更严重;按照与指南针相反的方向走是错误的做法。
5. 现代指南针的指针通常涂成()- A. 红色和白色。
- B. 红色和蓝色。
- C. 黑色和白色。
- D. 绿色和黄色。
- 答案:A。
- 解析:现代指南针的指针通常涂成红色和白色,红色一端指向北方,白色一端指向南方。
C语言指针练习题指针练习题1 填空题【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add( int x, int y, ){ =x+y;}【2】若有定义: char ch;(1) 使指针p 可以指向变量ch的定义语句是。
(2) 使指针p指向变量ch的赋值语句是。
(3) 通过指针p给变量ch读入字符的scanf函数调用语句是。
(4) 通过指针p 给变量ch赋字符A的语句是。
(5) 通过指针p输出ch中字符的语句是。
(6) 在16位微机上,指针变量p在内存中所占字节数是,变量ch 在内在所占字节数是。
2 选择题【3】若有说明:int i,j=7,*p=&i则与i=j;等价的语句是()。
A.i=*p;B.*p=*&jC.i=&jD.i=**p;【4】若有定义:int x,*pb;则正确的赋值表达式是()。
A.pb=&xB.pb=xC. *pb=&xD.*pb=*x【5】对于类型相同的指针变量,不能进行的运算是()。
A.< B. = C. + D. –【6】以下程序的输出结果是()。
A.23 B. 24 C. 25 D. 26Void fun ( int *x){ printf(%d\n”,++*x); }main( ){ int a=25;fun (&a);}【7】以下程序的输出结果是()。
A.6 B. 7 C. 8 D. 9main(){int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);}【8】以下程序的输出结果是()。
A.100 B. 50 C. 101 D.200main(){int *v,b;v=&bb=100;*v+=b;printf("%d\n",b);}【9】以下程序的输出结果是()。
指针经典练习题(含答案版)⼀指针⼀.填空题(20分)1. 指针变量是把内存中另⼀个数据的地址作为其值的变量。
2. 能够直接赋值给指针变量的整数是 0。
3. 如果程序中已有定义:int k;1)定义⼀个指向变量k的指针变量p的语句是 int* p = &k 。
2)通过指针变量,将数值6赋值给k的语句是 *p = 6; 。
3)定义⼀个可以指向指针变量p的变量pp的语句是 int ** pp; 。
4)通过赋值语句将pp指向指针变量p的语句是 pp = &p 。
5)通过指向指针的变量pp,将k的值增加⼀倍的语句是 *(*pp)*= 2; 。
4. 当定义某函数时,有⼀个形参被说明成int *类型,那么可以与之结合的实参类型可以是int型指针、 int型数组等。
4. 以下程序的功能是:将⽆符号⼋进制数字构成的字符串转换为⼗进制整数。
例如,输⼊的字符串为:556,则输出⼗进制整数366。
请填空。
45*8#includemain( ){ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';while( *++p != '\0') //先++ ,后*n=n*8+*p-'0';printf("%d \n",n);}⼆.选择题(22分)1. 以下count函数的功能是统计substr在母串str中出现的次数。
int count(char *str,char *substr){ int i,j,k,num=0;for(i=0; ①B ;i++){for( ②B ,k=0;substr[k]==str[j];k++,j++)if(substr[ ③C ]==?\0?){num++;break;}}return num;}①A) str[i]==substr[i] B) str[i]!= 0C) str[i]==…\0? D) str[i]>substr[i]②A) j=i+1 B) j=i C) j=i+10 D) j=1③A) k B) k++ C) k+1 D) ++k2. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换⾏符)。
指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。
```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。
认识钟表的试卷题整点
一、选择题
1.在钟表上,粗的指针通常表示小时数,细的指针通常表示什么? A.
分钟数 B. 秒数 C. 毫秒数 D. 每周的天数
2.以下哪个选项表示钟表上最小的刻度? A. 小时 B. 分钟 C. 秒 D. 毫秒
3.如果钟表指针指向6和12之间的刻度,表示几点? A. 3点 B. 6点 C.
9点 D. 12点
二、填空题
1.当钟表的时针和分针同时指向12点,表示__点__分。
2.若钟表上的时针指向4,分针指向6,那么表示的时间是__点__分。
三、简答题
1.请简要介绍钟表的指针分为哪几种?各自代表的时间单位是什么?
2.如果钟表上的时针指向8,分针指向9,那么表示的时间是什么?请
说明如何计算出这一时间点。
四、解答题
1.请解释钟表的制作原理以及如何校准钟表的时间准确性。
2.请描述一下钟表背后的故事以及钟表在人类生活中扮演的角色。
以上题目为考试试卷题型,希望你能认真思考后给出答案,并在规定时间内完成答题。
祝好运!。
指针综合练习题一、选择题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)方式。
答案:(1)地址(2)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问2 以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
请填空。
void main(){int *a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;cou<<"输入3个整数:";cin>>a>>b>>c;cout<<*a<<*b<<*c;num=*a;if(*a>*b) __num=*b____;if(num>*c) _num=*c_____;cout<<"输出最小整数:"<<num<<endl;}3 下面程序段的运行结果是___ef_____.char str[]="abc\0def\0ghi",*p=str;cout<<p+5;4若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是___12______.5若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___. *(*(a+1)+0))的值是____8____.6以下程序将数组a中的数据按逆序存放,请填空。
c语言指针判断题
以下是一些关于C语言指针的判断题,让我们一起来看看:
1.指针变量只能存储整数值。
答案:错误。
指针变量可以存储指针地址,而不是整数值。
指针地址是内存地址,可以指向任何类型的变量。
2.指针变量的值可以改变,但是指针所指向的变量的值不能
改变。
答案:错误。
实际上,指针变量的值可以改变,指针所指向的变量的值也可以改变。
通过指针来修改变量的值是非常常见的操作。
3.指针变量可以被赋值为NULL,表示该指针不指向任何变
量。
答案:正确。
在C语言中,NULL是一个特殊的常量,表示空指针。
将指针变量赋值为NULL是一种常见的做法,用于初始化或表示指针不指向任何变量。
4.指针变量可以指向不同类型的变量。
答案:正确。
在C语言中,一个指针变量可以指向任何
类型的数据,只要该类型的大小能够存储在内存中。
不同类型的变量占用的内存大小不同,因此指针的大小也不同,但是不同类型的指针可以指向同一个地址。
5.指针变量的解引用操作可以直接访问其所指向的变量。
答案:正确。
在C语言中,通过解引用操作可以访问指针所指向的变量的值。
例如,如果p是一个指向整数的指针,那么*p就是该整数的值。
三年级日晷练习题日晷是一种用于测量时间的工具,它常常被用于学校教学中教授儿童如何读取时间。
作为三年级学生,我们需要通过日晷练习题来提高我们的时间读取能力。
本文将介绍一些适合三年级学生的日晷练习题,并给出详细解答。
请仔细阅读以下内容。
题目一:根据日晷上的指针,判断以下时间是上午还是下午。
1. 指针指向8:002. 指针指向12:003. 指针指向3:304. 指针指向6:45解答:1. 上午2. 下午3. 下午4. 下午题目二:根据日晷上的指针,判断以下时间是几点几分。
1. 指针指向10:002. 指针指向2:303. 指针指向4:454. 指针指向7:15解答:1. 10:002. 2:303. 4:454. 7:15题目三:根据日晷上的指针,计算以下时间间隔。
1. 指针从9:00指向到11:30,经过了多长时间?2. 指针从12:30指向到3:15,经过了多长时间?3. 指针从4:45指向到6:00,经过了多长时间?解答:1. 经过了2小时30分钟2. 经过了2小时45分钟3. 经过了1小时15分钟题目四:根据日晷上的指针,判断以下时间和小时的关系。
1. 指针指向1:45,是第几小时?2. 指针指向6:30,是第几小时?3. 指针指向11:15,是第几小时?解答:1. 第一小时2. 第六小时3. 第十一小时题目五:根据日晷上的指针,回答以下问题。
1. 当指针指向12:00时,是上午还是下午?2. 当指针指向6:00时,是上午还是下午?3. 当指针指向9:30时,是上午还是下午?解答:1. 上午2. 下午3. 上午通过以上练习题,我们可以加深对日晷的理解,提高时间读取的能力。
希望同学们能够认真完成每一道题目,并且在实际生活中多加练习,掌握时间的概念和读取能力。
祝大家学习进步!(本文以上所提到的时间为示例,实际读取时间以练习为准)。
指针主要内容的习题及答案一.选择题1.变量的指针,其含义是指该变量的 B 。
A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。
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);下面函数的输出结果是 D 。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是C 。
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;下面均代表地址的一组选项是D 。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。
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语言程序的编写至关重要。
本文将介绍一些指针的练习题,帮助读者巩固对指针的理解和应用。
练习题一:交换变量的值请编写一个函数,使用指针作为参数,交换两个整型变量的值。
函数原型为: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表示初始化的值。
在主函数中调用该函数进行测试,并输出分配的内存块中的元素。
通过以上的练习题,读者可以进一步巩固和提升对指针的理解和应用。