实验十一指针应用二daan
- 格式:doc
- 大小:38.50 KB
- 文档页数:4
实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。
如键入any boy并回车,则2。
补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。
下面给出部分程序的内容,请将程序补充完整,然后上机调试。
部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。
实验十一练习使用多用电表一、基本原理与操作原理电路图操作要领原理:闭合电路欧姆定律I=ER+r+R g+R x(1)机械调零(2)测量定值电阻①先机械调零后欧姆调零②每换一挡重新欧姆调零(3)测量小灯泡的电压和电流(4)测量二极管的正、反向电阻(5)探索黑箱内的电学元件注意事项1.(1)操作:测量过程中严禁双手捏住两表笔金属杆。
(2)电流方向:红表笔进,黑表笔出。
2.测电阻时(1)指针指中值附近较准,否则换挡。
(2)读出示数要乘以倍率。
3.使用完毕,选择开关置于“OFF”挡或交流电压最高挡,长期不用应取出电池。
误差分析1.偶然误差(1)估读时易带来误差。
(2)表头指针偏转过大或过小都会使误差增大。
2.系统误差(1)电池用旧后,电动势会减小,致使电阻测量值偏大,要及时更换电池。
(2)测电流、电压时,由于电表内阻的影响,测得的电流、电压值均小于真实值。
教材原型实验命题角度利用多用电表测电阻、电压、电流【例1】(1)用如图1所示的多用电表测量电阻,要用到选择开关K和两个部件S、T请根据下列步骤完成电阻测量。
图1①旋动部件________,使指针对准电流的“0”刻线。
②将K旋转到电阻挡“×100”的位置。
③将插入“+”“-”插孔的表笔短接,旋动部件________,使指针对准电阻的________(选填“0刻线”或“∞刻线”)。
④将两表笔分别与待测电阻两端相接,发现指针偏转角度过小。
为了得到比较准确的测量结果,请从下列选项中挑出合理的步骤,并按________的顺序进行操作,再完成读数测量。
A.将K旋转到电阻挡“×1 k”的位置B.将K旋转到电阻挡“×10”的位置C.将两表笔的金属部分分别与被测电阻的两端相接D.将两表笔短接,旋动合适部件,对电表进行调零(2)如图2所示为多用电表的表盘,测电阻时,若用的是“×100”挡,则图示的电阻值为________Ω;测直流电流时,用的是0~100 mA的量程,此时图示的电流值为__________mA;测直流电压时,用的是0~50 V量程,此时图示的电压值为________V。
实验一函数、指针及其应用(一)函数的基本应用1.验证性实验⑴思考回答:可以将函数的形参看作一局部变量,函数在执行时,形参才被分配内存,执行函数时实参并没有参加运算,它只是将值传递给形参,由形参参加运算.而在函数结束后,形参的内存被释放,但实参的内存并没有被释放(要等到main函数结束时才被释放),因而执行完函数后,实参不变,而形参就不复存在了.2.程序填空⑴①sele(k)②k③n%3==0&&n%7==0⑵①1②flag③num%n④flag⑶①return n②n%10③x④sum(x)3.程序改错⑴将unsigned k=0;改为unsigned k=1;将k*=num/10;改为k*=num%10;将while(k);改为while(num);将scanf(“%d”,x)改为scanf(“%d”,&x);⑵将j=(n/10/10);改为j=(n/10)%10;将scanf(“%f”,&n);改为scanf(“%d”,&n);将if(flower(n))改为if(flower(n)==0)4.设计性实验⑴#include<stdio.h>int Isleap(int year){if((year%4==0&&year%100!=0)||year%400==0)return 1;return 0;}void main(){int year;printf(“Please input the year:”);scanf(“%d”,&year);if(Isleap(year))printf(“%d is a leap year!”,year);elseprintf(“%d is not a leap year!”,year);}⑵①/*方法1:递归版*/#include<stdio.h>int gy(int a,int b)/*求最大公约数函数*/{if(a%b==0)return b;else gy(b,a%b);}int gb(int a,int b)/*求最小公倍数函数*/{return a*b/gy(a,b);}void main(){int a,b;printf(“请输入两个数字:(例如\”4,5\”)\n”); scanf(“%d,%d”,&a,&b);p rintf(“\n最大公约数为: %d”,gy(a,b));printf(“\n最小公倍数为: %d”,gb(a,b));}②/*方法2:辗转相除法*/#include<stdio.h>int gy(int a,int b)/*求最大公约数函数*/{int r;while((r=a%b)!=0){a=b;b=r;}return b;}int gb(int a,int b)/*求最小公倍数函数*/{return a*b/gy(a,b);}void main(){int a,b;printf(“请输入两个数字:(例如\”4,5\”)\n”); scanf(“%d,%d”,&a,&b);printf(“\n最大公约数为: %d”,gy(a,b));printf(“\n最小公倍数为: %d”,gb(a,b));}③/*方法3:位运算版,奇妙的算法*/#include<stdio.h>int gy(int a,int b)/*求最大公约数函数*/{while(b^=a^=b^=a%=b);return a;}int gb(int a,int b)/*求最小公倍数函数*/{return a*b/gy(a,b);}void main(){int a,b;printf(“请输入两个数字:(例如\”4,5\”)\n”); scanf(“%d,%d”,&a,&b);printf(“\n最大公约数为: %d”,gy(a,b));printf(“\n最小公倍数为: %d”,gb(a,b));}⑶#include<stdio.h>int sum(int i){if(i==1)return i;elsereturn i+sum(i-1);}void main(){printf("sum=%d",sum(100));}⑷①/*方法1:递归版*/#include<stdio.h>int Fib(int n){if(n==0) return 0;else if(n==1) return 1;else return Fib(n-1)+Fib(n-2); }void main(){int n;printf("please input n:");scanf("%d",&n);printf("Fib(%d)=%d",n,Fib(n)); }②/*方法2:非递归版*/#include<stdio.h>int Fib(int n){int x,a=0,b=1,i;if(n==0) return a;else if(n==1) return b;else{for(i=1;i<=n-1;i++){x=a+b;a=b;b=x;}return x;}}void main(){int a=0,b=1,x,n,i;printf("Please input n:");scanf("%d",&n);printf("Fib(%d)=%d",n,Fib(n));}(二)指针与数组2.程序填空⑴①p②*p③%d⑵①x②i--③i<=10&&i>=13.程序改错⑴将double fun[3],r;改为double fun[3],*r;将scanf(“%f%f%f”,&fun[0],&fun[1],&fun[2]);scanf(“%lf%lf%lf”,&fun[0],&fun[1],&fun[2]);将r=quadratic(fun[3])改为r=quadratic(fun);⑵将scanf(“%d”,*p);改为scanf(“%d”,p);在for(;p>=a;p--)前添加语句p--;将if(p%2==0)改为if(*p%2==0)4.设计性实验⑴#include<stdio.h>#define N 10void main(){int a[N],*max,*min,*p,q;printf("Please input the array:\n");for(p=a;p<a+N;p++)scanf("%d",p);max=min=a;for(p=a;p<a+N;p++){if(*max<*p) max=p;if(*min>*p) min=p;}printf("Max=%d\n",*max);printf("Min=%d\n",*min);q=*max;*max=*min;*min=q;for(p=a;p<a+N;p++)printf("%d",*p);}⑵#include<stdio.h>#define M 3#define N 10void main(){char a[M][N],(*p)[N] ,(*q)[N],*temp="temp";/*注意:(*p)[N]不是指针数组,而是指向数组的行指针*/printf("Please input thr string:\n");for(p=a;p<a+M;p++)gets(p);for(p=a;p<a+M-1;p++)for(q=p+1;q<a+M;q++)if(strlen(p)-strlen(q)<0){strcpy(temp,p);strcpy(p,q);strcpy(q,temp);}for(p=a;p<a+M;p++)puts(p);}⑶#include<stdio.h>#define N 10void main(){char a[N],*p;printf("Please input the string:\n");gets(a);p=a;while(*p)p++;/*移动指针到最末尾处*/for(p--;p>=a;p--)/*p--的作用是让p由'\0'指向字符串最后一个字母*/printf("%c",*p);}⑷#include<stdio.h>#define N 10void input(int a[],int n){int i;for(i=0;i<n;i++)scanf("%d",&a[i]);}void process(int a[],int n){int i;int *p,*max,*min,t;max=min=a;for(p=a+1;p<a+n;p++){if(*max<*p) max=p;if(*min>*p) min=p;}{t=*min;*min=*a;*a=t;}/*交换最小数与第一个数*/{t=*max;*max=*(a+n-1);*(a+n-1)=t;}/*交换最大数与最后一个数*/ }void output(int a[],int n){int i;for(i=0;i<n;i++)printf("%d",a[i]);}void main(){int a[N];input(a,N);process(a,N);output(a,N);}⑸#include<stdio.h>char *find(char a[],char b[],char c[]){char *p,*q,*k;k=c;for(p=a,q=b;(*p)!='\0'&&(*q)!='\0';p++,q++)if(*p-*q==0){*k=*p;k++;}*k='\0';return c;}void main(){char a[N],b[N],c[N],*i;printf("Please input two strings:\n");scanf("%s%s",a,b);i=find(a,b,c);while(*i)i++;for(i--;i>=find(a,b,c);i--)putchar(*i);}(三)指针与函数二、实验内容2.程序填空⑴①min=*p1②min=*p2③min=*p3⑵①switch②add③(*funp)3.程序改错⑴将void swap(int,int);改为void swap(int *p,int *q)或void swap(int *,int *)将scanf(“%d%d%d”,i1,i2,i3)改为scanf(“%d%d%d”,&i1,&i2,&i3);将p1=i1;p2=i2;p3=i3;改为p1=&i1;p2=&i2;p3=&i3;⑵将p=s改为p=&s将unsigned x,p;改为unsigned x,*p;将printf(“%d”,p)改为printf(“%d”,*p);4.设计性实验⑴#include<stdio.h>int add_num(long num){int s=0,a;a=num;while(a>0){s+=a%10;a=a/10;}return &s;/*这类题告诉我们,函数执行完后,其内部形参并不是马上被释放内存,我们暂时可以通过指针继续访问它的值*/}void main(){long num;int *p;printf("Please input a number:");scanf("%ld",&num);p=add_num(num);printf("The sum of every digit is %d",*p);}⑵#include<stdio.h>int *gy(int a,int b){static int gys;/*把形式参数设定为静态变量,在函数结束时其内存就不会被释放,这样我们就可以用指针随时访问它了*/int r;while(r=a%b){a=b;b=r;}gys=b;return &gys;}int *gb(int a, int b){static int gbs;int *p;p=gy(a,b);gbs=a*b/(*p);return &gbs;}void main(){int a,b,*c,*d;printf("Please input two integer:\n");scanf("%d,%d",&a,&b);c=gy(a,b);d=gb(a,b);printf("The greatest common divisor is %d\nThe lease common multiple is %d",*c,*d);}。
指针编程练习二1.使用“指向数组的指针”完成:定义15*20的二维字符数组,随机生成300个a~z的字符并使用指针按行填入数组中。
统计各字母的出现次数并输入一个一维数组中。
输出这两个数组。
#include<iostream.h>#include<time.h>#include<stdlib.h>void main(void){char a[15][20],(*p)[20]=a;unsigned i,j,n[26]={0},*q=n;srand(time(0));for(i=0;i<15;i++){for(j=0;j<20;j++){cout<<(*(*(p+i)+j)=rand()%26+97);n[*(*(p+i)+j)-97]++;}cout<<endl;}for(i=0;i<26;i++)cout<<*q++<<' ';cout<<endl;}2.使用“返回值为指针的函数”求一维数组{1,3,9,5,8,4,2,6,10,7}中的最大值。
#include<iostream.h>unsigned a[10]={1,3,9,5,8,4,2,6,10,7};unsigned *m(unsigned *p){unsigned *q,*t=p,i;for(i=0,q=t;i<10;i++,t++)if(*q<*t)*q=*t;return q;}void main(void){cout<<*m(a);}3.定义求两浮点数加减乘除的四个函数,使用“指向函数的指针”调用这四个函数来计算24.9和3.6的加减乘除结果。
#include<iostream.h>float add(float a,float b){return a+b;} float sub(float a,float b){return a-b;} float mul(float a,float b){return a*b;} float div(float a,float b){return a/b;} void main(void){float (*p)(float,float);p=add;cout<<(*p)(24.9,3.6)<<' ';p=sub;cout<<(*p)(24.9,3.6)<<' ';p=mul;cout<<(*p)(24.9,3.6)<<' ';p=div;cout<<(*p)(24.9,3.6)<<' '; }。
指针测试题及答案大全一、选择题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指针转换为任何类型的指针。
但是,不同类型的指针之间不能直接转换,除非它们指向的数据类型是兼容的。
结束语:以上是指针测试题及答案大全,希望对您的学习有所帮助。
第十一章电路及其应用第五节实验:练习使用多用电表学习目标1.认识多用电表表盘刻度和各种测量功能,会根据测量需要正确选择档位。
2.通过实验操作学会使用多用电表测量电流、电压和电阻,牢记多用电表的使用注意事项。
3.会用多用电表测量二极管的正反电阻,能够判断二极管的正负极。
重点难点重点:1.认识多用电表表盘刻度和各种测量功能并选择正确的档位。
2.使用多用电表测量电流、电压和电阻。
3..会用多用电表测量二极管的正反电阻。
难点:1.会根据测量需要正确选择档位。
2.能够判断二极管的正负极。
自主探究一.认识多用电表表的上半部分为①,下半部分为②,开关周围有测量功能的区域和③。
二.使用多用电表在使用前都应先调节④,使指针指向左侧0刻度线。
使用时,先将选择开关旋钮调节到对应物理量,选择合适的⑤。
再把多用表连入电路中。
在多用表使用完毕后,需要把选择开关旋转到⑥位置。
1.测量小灯泡两端电压:首先把小灯泡、电源、开关、导线按连接要求安装好,调节多用表指针,并把选择开关旋转到测量电压的位置,根据电源电压选择合适的量程。
测量时用两只表笔分别接触灯泡两端的接线柱,注意⑦。
根据表盘上相应⑧的直流电压刻度进行读数,记录小灯泡两端的电压值。
2.测量通过小灯泡的电流:在直流电源对小灯泡正常供电的情况下,断开电路开关,把小灯泡的一个接线柱上的导线卸开。
将多用电表的选择开关旋至直流电流挡,注意选择⑨。
把多用电表从导线断开处⑩在电路中,注意电流应该从⑪流入多用电表。
闭合开关,根据表盘上相应量程的直流电流刻度进行读数,记录通过小灯泡的电流值。
3.测量电阻:测量电阻前,我们应该先进行欧姆调零:1.红、黑表笔⑫(红、黑表笔短接)2.调节“欧姆调零旋钮”,使表笔短接时,指针指向⑬刻度线。
注意:改变不同倍率时,都需要⑭欧姆调零。
使用多用电表的欧姆挡测电阻时,如果指针示数过大,则应⑮ 欧姆档的倍率;如果指针示数⑯ ,则应减小欧姆档的倍率,使测量时表针落在刻度盘的中间区域。
第1篇一、实验背景指针是C语言中非常重要的一个概念,它提供了对内存的直接访问,使得程序能够高效地操作数据。
在指针实验中,同学们可能会遇到各种问题。
本文将对指针实验中常见的几个问题进行总结和分析。
二、常见问题及解答1. 指针概念理解不清问题:如何理解指针的概念?解答:指针是存储变量地址的变量,通过指针可以访问内存中的数据。
简单来说,指针就是一个指向另一个变量的地址的变量。
2. 指针变量的定义和使用问题:如何定义指针变量,并使用它访问数据?解答:定义指针变量需要使用星号(),例如:int p;。
使用指针访问数据时,需要使用取地址符(&)和间接访问符()。
例如,访问指针p指向的变量a的值,可以使用p。
3. 指针与数组的关系问题:指针与数组有何关系?解答:数组名本身就是一个指向数组首元素的指针。
通过数组名可以访问数组元素,也可以通过指针操作数组元素。
4. 指针与函数的关系问题:指针在函数调用中有什么作用?解答:指针在函数调用中可以传递数据的地址,使得函数能够直接修改调用者的数据。
此外,指针还可以用于函数返回多个值。
5. 指针数组与指向数组的指针问题:指针数组与指向数组的指针有何区别?解答:指针数组是一组指针元素的集合,每个元素都存储一个变量的地址。
指向数组的指针是指向整个数组的指针,它存储的是数组的起始地址。
6. 字符指针与字符串操作问题:如何使用字符指针操作字符串?解答:字符指针可以指向字符串中的任意位置。
使用字符指针可以遍历字符串、获取字符串长度、比较字符串等。
7. 动态内存分配与释放问题:如何使用指针进行动态内存分配和释放?解答:使用malloc、calloc、realloc等函数进行动态内存分配,使用free函数释放内存。
8. 指针与指针运算问题:指针可以进行哪些运算?解答:指针可以进行加减运算、比较运算等。
加减运算用于移动指针,比较运算用于判断指针是否指向相同的地址。
9. 指针与递归函数问题:如何在递归函数中使用指针?解答:递归函数中使用指针可以方便地访问和修改调用者的数据。
上机实验十一指针班级学号姓名一.目的要求1.掌握指针的基本概念。
2.掌握指针变量的定义和初始化。
3.掌握用下标、数组名或指针等不同方式引用数组元素;4.掌握数组名作函数参数的方法5.掌握常用的字符串处理函数和字符处理函数;二.实验内容【实验题1】程序填空,交换指针变量p1,p2的指向。
# include <stdio.h>int main ( ){ int a=1,b=2, *p1, *p2, *pt;p1=&a; p2=&b;printf(“p1=%d, p2=%d \n”, p1,p2);//交换指针变量p1,p2的指向,即让p1指向b、p2指向apt= p1 ; p1=p2 ; p2=pt ; //注意:这三个指针变量前均无间接引用符* printf(“p1=%d, p2=%d \n”, p1,p2);}运行结果:(注意:输出的是p1、p2所指变量的地址,即变量a或b的地址)【实验题2】程序填空,交换指针变量p1,p2所指变量的值。
# include <stdio.h>int main ( ){ int a=1,b=2, *p1, *p2, temp;p1=&a; p2=&b;printf(“*p1=%d, *p2=%d \n”, *p1,*p2);//交换p1,p2所指向的变量的值, 即交换a、b的值temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符*printf(“*p1=%d, *p2=%d \n”, *p1,*p2);}运行结果:(注意:指针前加*, 代表指针所指变量)【实验题3】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。
# include <stdio.h>int main ( ){ int a,b,c, *p1, *p2, *p3;scanf(“%d%d%d”,&a,&b,&c);// 令p1指向最大值p1=a>b? &a: &b ; //p1指向a,b中较大者if(c> *p1 ) p1=&c;//令p2指向最小值p2=a<b? &a:&b ; //p2指向a,b中较小者if(c< *p2 ) p2=&c;printf(“max=%d, min=%d”, *p1,*p2 );}运行结果:输入 1 2 3输出max=3, min=1【实验题4】程序填空:请用下标、数组名、指针等不同方法来输出数组元素。
2021届高考物理必考实验十一:练习使用多用电表一、电流表与电压表的改装1.改装方案改装为电压表改装为大量程的电流表原理串联电阻分压并联电阻分流改装原理图分压电阻或分流电阻U=I g(R g+R)故R=UI g-R gI g R g=(I-I g)R故R=I g R gI-I g改装后电表内阻R V=R g+R>R g R A=RR gR+R g<R g2.校正(1)电压表的校正电路如图所示,电流表的校正电路如图所示.(2)校正的过程是:先将滑动变阻器的滑动触头移到最左端,然后闭合开关,移动滑动触头,使改装后的电压表(电流表)示数从零逐渐增大到量程值,每移动一次记下改装的电压表(电流表)和标准电压表(标准电流表)的示数,并计算满刻度时的百分误差,然后加以校正.二、欧姆表原理(多用电表测电阻原理)1.构造如图所示,欧姆表由电流表G、电池、调零电阻R和红、黑表笔组成.欧姆表内部:电流表、电池、调零电阻串联.外部:接被测电阻R x .全电路电阻R 总=R g +R +r +R x . 2.工作原理闭合电路欧姆定律,I =ER g +R +r +R x .3.刻度的标定红、黑表笔短接(被测电阻R x =0)时,调节调零电阻R ,使I =I g ,电流表的指针达到满偏,这一过程叫欧姆调零.(1)当I =I g 时,R x =0,在满偏电流I g 处标为“0”.(图甲) (2)当I =0时,R x →∞,在I =0处标为“∞”.(图乙)(3)当I =I g2时,R x =R g +R +r ,此电阻值等于欧姆表的内阻值,R x 叫中值电阻.三、多用电表1.多用电表可以用来测量电流、电压、电阻等,并且每一种测量都有几个量程.2.外形如图所示:上半部分为表盘,表盘上有电流、电压、电阻等多种量程的刻度;下半部分为选择开关,它的四周刻有各种测量项目和量程.3.多用电表面板上还有:欧姆表的欧姆调零旋钮(使电表指针指在右端零欧姆处)、指针定位螺丝(使电表指针指在左端的“0”位置)、表笔的正、负插孔(红表笔插入“+”插孔,黑表笔插入“-”插孔). 四、二极管的单向导电性1.晶体二极管是由半导体材料制成的,它有两个极,即正极和负极,它的符号如图甲所示.2.晶体二极管具有单向导电性(符号上的箭头表示允许电流通过的方向).当给二极管加正向电压时,它的电阻很小,电路导通,如图乙所示;当给二极管加反向电压时,它的电阻很大,电路截止,如图丙所示.3.将多用电表的选择开关拨到欧姆挡,红、黑表笔接到二极管的两极上,当黑表笔接“正”极,红表笔接“负”极时,电阻示数较小,反之电阻示数很大,由此可判断出二极管的正、负极.1.实验器材多用电表、电学黑箱、直流电源、开关、导线若干、小灯泡、二极管、定值电阻(大、中、小)三个.2.实验步骤(1)观察:观察多用电表的外形,认识选择开关的测量项目及量程.(2)机械调零:检查多用电表的指针是否停在表盘刻度左端的零位置.若不指零,则可用小螺丝刀进行机械调零.(3)将红、黑表笔分别插入“+”、“-”插孔.(4)测量小灯泡的电压和电流.①按如图甲所示的电路图连好电路,将多用电表选择开关置于直流电压挡,测小灯泡两端的电压.②按如图乙所示的电路图连好电路,将选择开关置于直流电流挡,测量通过小灯泡的电流.(5)测量定值电阻①根据被测电阻的估计阻值,选择合适的挡位,把两表笔短接,观察指针是否指在欧姆表的“0”刻度,若不指在欧姆表的“0”刻度,调节欧姆调零旋钮,使指针指在欧姆表的“0”刻度处;②将被测电阻接在两表笔之间,待指针稳定后读数;③读出指针在刻度盘上所指的数值,用读数乘以所选挡位的倍率,即得测量结果;④测量完毕,将选择开关置于交流电压最高挡或“OFF”挡.1.多用电表使用注意事项(1)表内电源正极接黑表笔,负极接红表笔,但是红表笔插入“+”插孔,黑表笔插入“-”插孔,注意电流的实际方向应为“红入”、“黑出”.(2)区分“机械零点”与“欧姆零点”.机械零点是表盘刻度左侧的“0”位置,调整的是表盘下边中间的指针定位螺丝;欧姆零点是指刻度盘右侧的“0”位置,调整的是欧姆调零旋钮.(3)欧姆表读数时注意乘以相应挡位的倍率.(4)使用多用电表时,手不能接触表笔的金属杆,特别是在测电阻时,更应注意不要用手接触表笔的金属杆.(5)测量电阻时待测电阻要与其他元件和电源断开,否则不但影响测量结果,甚至可能损坏电表.(6)测电阻时每换一次挡必须重新欧姆调零.(7)使用完毕,选择开关要置于交流电压最高挡或“OFF”挡.长期不用,应把表内电池取出.2.多用电表对电路故障的检测(1)断路故障的检测方法①用直流电压挡:a.将电压表与电源并联,若电压表示数不为零,说明电源良好,若电压表示数为零,说明电源损坏.b.在电源完好时,再将电压表与外电路的各部分电路并联.若电压表示数等于电源电动势,则说明该部分电路中有断点.②用直流电流挡:将电流表串联在电路中,若电流表的示数为零,则说明与电流表串联的部分电路断路.③用欧姆挡检测将各元件与电源断开,然后接到红、黑表笔间,若有阻值(或有电流)说明元件完好,若电阻无穷大(或无电流)说明此元件断路.(2)短路故障的检测方法①将电压表与电源并联,若电压表示数为零,说明电源被短路;若电压表示数不为零,则外电路的部分电路不被短路或不完全被短路.②用电流表检测,若串联在电路中的电流表示数不为零,故障应是短路.【典例1】(2019·安徽皖江名校联盟摸底大联考)某实验小组在练习使用多用电表时,他们正确连接好电路如图7甲所示.闭合开关S后,发现无论如何调节电阻箱R0,灯泡都不亮,电流表无读数,他们判断电路可能出现故障.经小组讨论后,他们尝试用多用电表的欧姆挡来检测电路.已知保护电阻R=15Ω,电流表量程为0~50mA.操作步骤如下:①将多用电表挡位调到欧姆×1挡,再将红、黑表笔短接,进行欧姆调零;②断开图甲电路开关S,将多用电表两表笔分别接在a、c上,多用电表的指针不偏转;③将多用电表两表笔分别接在b、c上,多用电表的示数如图乙所示;④将多用电表两表笔分别接在c、e上,调节R0=20Ω时,多用电表示数如图丙所示,电流表的示数如图丁所示.回答下列问题:(1)图丙中的多用电表读数为________Ω;图丁中的电流表读数为________mA.(2)操作步骤④中,多用电表红表笔应接________(选填“c”或“e”)点.(3)电路的故障可能是________.A.灯泡短路B.灯泡断路C.保护电阻R短路D.保护电阻R断路(4)根据以上实验得出的数据,同学们还计算出多用电表内部电源的电动势E′=________V(结果保留三位有效数字).【答案】(1)24 38.0 (2)e(3)B (4)1.48【解析】(1)欧姆表的读数为24×1Ω=24Ω,电流表的最小分度是1mA,需估读到0.1mA,所以图丁中的电流表读数为38.0mA.(2)根据电流必须从电流表正接线柱流入,电流从欧姆表的红表笔流入,黑表笔流出,电路中电流表在e端为负极,即电流经过电流表的方向为d→e,则操作步骤④中,多用电表黑表笔应接c 点,红表笔应接e点.(3)将多用电表两表笔分别接在a、c上,多用电表的指针不偏转,说明ac间有断路.将多用电表两表笔分别接在b、c上,多用电表的示数不为零,所以电路的故障是灯泡断路.(4)由操作步骤③中多用电表指针正好指在中间刻度,根据欧姆表的中值电阻等于其内阻,则知欧姆表的内阻为R欧=15Ω.根据闭合电路欧姆定律得:I=E′R0+R mA+R欧,又R0+R mA=24Ω,故E′=I(R0+R mA+R欧)=38.0×10-3×(24+15) V≈1.48V.变式1(2017·全国卷Ⅲ·23)图(a)为某同学组装完成的简易多用电表的电路图.图中E是电池;R1、R2、R3、R4和R5是固定电阻,R6是可变电阻;表头的满偏电流为250μA,内阻为480Ω.虚线方框内为换挡开关,A端和B端分别与两表笔相连.该多用电表有5个挡位,5个挡位为:直流电压1V挡和5V挡,直流电流1mA挡和2.5mA挡,欧姆×100Ω挡.(1)图(a)中的A端与________(填“红”或“黑”)色表笔相连接.(2)关于R6的使用,下列说法正确的是________(填正确答案标号).A.在使用多用电表之前,调整R6使电表指针指在表盘左端电流“0”位置B.使用欧姆挡时,先将两表笔短接,调整R6使电表指针指在表盘右端电阻“0”位置C.使用电流挡时,调整R6使电表指针尽可能指在表盘右端电流最大位置(3)根据题给条件可得R1+R2=________Ω,R4=________Ω.(4)某次测量时该多用电表指针位置如图(b)所示.若此时B端是与“1”相连的,则多用电表读数为__________;若此时B端是与“3”相连的,则读数为________;若此时B端是与“5”相连的,则读数为____________.(结果均保留3位有效数字)【答案】(1)黑(2)B (3)160 880 (4)1.47mA1.10kΩ 2.94V【解析】(1)当B 端与“3”连接时,内部电源与外部电路形成闭合回路,电流从A 端流出,故A 端与黑色表笔相连接.(2)在使用多用电表之前,调整表头螺丝使电表指针指在表盘左端电流“0”位置,选项A 错误;使用欧姆挡时,先将两表笔短接,调整R 6使电表指针指在表盘右端电阻“0”位置,选项B 正确;使用电流挡时,电阻R 6不在闭合电路中,调节无效,选项C 错误.(3)根据题给条件可知,当B 端与“2”连接时,表头与R 1、R 2组成的串联电路并联,此时为量程1mA 的电流挡,由并联电路两支路电流与电阻成反比知,R gR 1+R 2=1-0.250.25=31,解得R 1+R 2=160Ω. 当B 端与“4”连接时,表头与R 1、R 2组成的串联电路并联后再与R 4串联,此时为量程1V 的电压挡,表头与R 1、R 2组成的串联电路并联后的总电阻为120Ω,两端电压为0.12V ,由串联电路中电压与电阻成正比知:R 4两端电压为0.88V ,则R 4电阻为880Ω.(4)若此时B 端是与“1”连接的,多用电表作为直流电流表使用,量程为2.5mA ,读数为 1.47mA.若此时B 端是与“3”连接的,多用电表作为欧姆表使用,读数为11×100Ω=1.10kΩ. 若此时B 端是与“5”连接的,多用电表作为直流电压表使用,量程为5V ,读数为2.94V.【典例2】(2019·辽宁大连市第二次模拟)如图9甲所示是多用电表欧姆挡内部的部分原理图,已知电源电动势E =1.5V ,内阻r =1Ω,灵敏电流计满偏电流I g =10mA ,内阻r g =90Ω,表盘如图丙所示,欧姆表表盘中值刻度为“15”.(1)多用电表的选择开关旋至“Ω”区域的某挡位时,其内部电路为图甲所示.将多用电表的红、黑表笔短接,进行欧姆调零,调零后多用电表的总内阻为________Ω.某电阻接入红、黑表笔间,表盘如图丙所示,则该电阻的阻值为________Ω.(2)若将选择开关旋至“×1”,则需要将灵敏电流计________(选填“串联”或“并联”)一阻值为________Ω的电阻,再进行欧姆调零.(3)某同学利用多用电表对二极管正接时的电阻进行粗略测量,如图乙所示,下列说法中正确的是________(填选项前的字母).A .欧姆表的表笔A 、B 应分别接二极管的C 、D 端 B .双手捏住两表笔金属杆,测量值将偏大C .若采用“×100”倍率测量时,发现指针偏角过大,应换“×10”倍率,且要重新进行欧姆调零D .若采用“×10”倍率测量时,发现指针位于刻度“15”与“20”的正中央,测量值应略大于175Ω 【答案】(1)150 70 (2)并联 10 (3)AC【解析】(1)设欧姆表总内阻为R ,短接时有:E =I g R ,代入数据计算得:R =150Ω;当半偏时有:E =12I g (R+R 中),所以R =R 中,所以选择的是“×10”挡位,根据题图丙可知读数为70Ω. (2)开关旋至“×1”,此时内阻R ′=R 中=15Ω,短接时电流I m =ER ′=100mA ,所以给表头并联一个分流电阻R 0,根据欧姆定律:R 0=I g r gI m -I g=10Ω. (3)二极管具有单向导电性,由于表笔A 与欧姆表内部电源正极相连,故需要表笔A 、B 应分别接二极管的C 、D 端,A 正确;实验测量时,手不能触碰金属杆,否则会将自身电阻并联进电路,测量值偏小,B 错误;若采用“×100”倍率测量时,发现指针偏角过大,说明电阻对该挡位太小,所以应该换小挡位,即“×10”倍率,且要重新进行欧姆调零,C 正确;欧姆表表盘刻度不均匀,“左密右疏”且越往左阻值越大,所以测量值应小于175Ω,D 错误.变式2 如图甲为一个多用电表的表盘,图中S 、K 、T 为三个可调节部件,该多用电表用作欧姆表的原理图如图乙.(1)现用此多用电表测量一个阻值约为十几欧的定值电阻,主要操作步骤如下:①调节可调部件________,使电表指针停在表盘左侧零刻度位置;②调节可调部件________,选择“×1”挡位置;③将红、黑表笔分别插入“+”“-”插孔,笔尖相互接触,调节可调节部件________,使表笔指针指向右侧零刻度位置;④将红、黑表笔的笔尖分别接触电阻的两端,由表头指针示数得出该电阻的阻值.(2)选择欧姆表的“×1k”挡,两表笔笔尖相互接触且调零时,图乙中电源电动势和内阻分别为E、r,表头G的内阻为R g,滑动变阻器的阻值为R,则表头G的满偏电流I g=________(用题给符号表示);再把表笔的笔尖和某电阻接触,欧姆表的示数如图丙,若电源电动势E=6V,则通过表头G的电流I=________mA.【答案】(1)①S②K③T(2)ER+R g+r0.2【解析】(1)①多用电表的使用首先进行机械调零:调节可调部件S,使电表指针停在表盘左边的零刻度位置;②调节可调部件K选择合适的挡位:因电阻约为十几欧,为使指针指在中央刻度附近,则选择欧姆表的“×1”挡位即可.③欧姆表选好挡后要进行欧姆调零,短接红、黑表笔,调节T,使得电表指针指向右边的零刻度位置.(2)两表笔笔尖相互接触且调零时R x=0,此时电流为满偏电流I g,由闭合电路的欧姆定律E=I g(r+R+R g),则可得I g=ER+R g+r;欧姆表选择的“×1k”挡,中值电阻值为15×1000Ω,则RΩ=R g+R+r=15×1000Ω,而E=6V,则I g=ERΩ=615000A=0.4mA,现接待测电阻后指针所在位置读得R x=15×1000Ω,则I=ERΩ+R x=0.2mA.【典例3】在“练习使用多用电表”的实验中,某同学用多用电表的欧姆挡测量阻值为十几千欧的电阻R x。
实验十一指针应用(二)
一、实验目的
1.了解指针与函数的关系并能够初步利用指针处理函数问题。
2.了解指向数组的指针的概念及其使用方法。
3.了解指向指针的指针的概念及其使用方法。
二、实验学时数
1学时
三、实验步骤
(一)阅读程序
#include <stdio.h>
#include <string.h>
fun(char *s)
{char a[7];
s=a;
strcpy(a,"look");
puts(s);
}
main()
{char *p;
fun(p);
2.#include <stdio.h>
main()
{int a[5]={2,4,6,8,10},*p,**pp;
p=a;
pp=&p;
printf("%d",*p++);
printf("%3d\n",**pp);
}
3. #include <stdio.h>
main()
{char *str[]={"Pascal","C language","Cobol","Dbase"};
char **p;
int k;
p=str;
for(k=0;k<4;k++)
printf("%s\n",*(p++));
4.
#include <stdio.h> main() {int a[2][3]={2,4,6,8,10,12},(*p)[3],i,j;
p=a;
scanf("%d,%d",&i,&j);
printf("a[%d][%d]=%d",i,j,*(*(p+i)+j));
}
(二)调试程序
要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果如何?上机调试之。
1.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:⑴ 2个数的和,⑵ 2个数交换值。
要求用函数指针调用这两个函数,结果在主函数中输出。
行号sum(int a,int b,int c)
1{ c=a+b;
2 return c;
3 }
4 swap(int a,int b)
5 { int t;
6 t=a;
7 a=b;
8 b=t;
9 printf("a=%d,b=%d\n",a,b);
10 }
11 main()
12 { int a,b,c,(*p)();
13 scanf("%d,%d",&a,&b);
14 p=sum;
15 c=*p (a,b,c);
16 p=swap;
17 *p(a,b);
18 printf("sum=%d\n",c);
19 printf("a=%d,b=%d\n",a,b);
20 }
{ c=a+b;
return c;
}
swap(int a,int b)
{ int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d\n",a,b);
}
main()
{ int a,b,c,(*p)();
scanf("%d,%d",&a,&b);
p=sum;
c=(*p)(a,b,c);
p=swap;
(*p)(a,b);
printf("sum=%d\n",c);
printf("a=%d,b=%d\n",a,b); }。