指针习题课
教材课后题答案-第6章_指针习题答案

习题解答一、单项选择题1.若定义了int n=2, *p=&n, *q=p;则下面【】的赋值是非法的。
A.p=qB. *p=*qC. n=*qD. p=n【答案】D2.若定义了double *p, a;则能通过scanf函数给输入项读入数据的程序段是【】。
A.p=&a; scanf(“%1e”,p);B. *p=&a; scanf(“%1f”,p);C. p=&a; scanf(“%f”,p);D. p=&a; scanf(“%1f”,a);【答案】C3.若定义了int a[10], i=3, *p; p=&a[5];下面不能表示为a数组元素的是【】。
A.p[-5]B. a[i+5]C. *p++D. a[i-5]【答案】D4.若有如下定义:int n[5]={1,2,3,4,5},*p=n;则值为5的表达式是【】。
A.*+5B. *(p+5)C. *p+=4D. p+4【答案】C5.设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【】。
A.b==&psB. b==psC. b==*psD. &b==&ps【答案】C6.设有以下定义和语句:int a[3][2]={1,2,3,4,5,6},*p[3];p[0]=a[1];则*(p[0]+1)所代表的数组元素是【】。
A.a[0][1]B. a[1][0]C. a[1][1]D. a[1][2]【答案】C7.若定义了char *str=”Hello!”;下面程序段中正确的是【】。
A.char c[ ], *p=c; strcpy(p,str);B.char c[5], *p; strcpy(p=&c[1],&str[3]);C.char c[5]; strcpy(c,str);D.char c[5]; strcpy(p=c+2,str+3);【答案】B8.若有下面的程序段,则不正确的fxy函数的首部是【】。
《电流电压》习题课

若L2短路,则 L1发光,变亮
A V
有示数,且变大 有示数,且变大
专题:故障分析
A
V
若L1断路,则 L2不发光 A 无示数 V 有示数, 为电源电压
若L2断路,则 L1不发光
A V
无示数 无示数
专题:故障分析
例1:电源电压为12V,两个小灯泡完全 相同,讨论电压表的读数 S断开时,V1为_____V, V2为____V, S闭合时,V1为_____V, V2为____V
专题:电压表测量对象的判断
例1:判断下图中电压表V1和V2的测量 对象
移位:
去表: 电压表当断开开关
导线一端或某元件可以在不过 节点和元件的前提下沿另一条 导线移动
1.如图所示的电路,当开关S闭合后,电压表V1 和V2的示数分别为10V和4V,则灯泡L2两端电 压为
6v
分析:本题电路较为复杂,做题时可采用“先摘 除后复原”的方法来判定电压表在电路中的作用 .如图去掉电压表V1和V2,不难看出灯泡L1和 L2是串联关系.先复原电压表V1,可以看出V1并 联在电源两端,即V1是测量灯泡L1和L2组成串联 电路的总电压.再复原电压表V2,可以看出V2并 联在灯泡L1两端,是测量灯泡L1两端的电压.
12:闭合开关后,会出现什么现象?
说明
)有表电路的识别,电流表当导线,电压表 当断开的开关,
例2.
如图,电源电压为3V,电压表____端为 正接线柱,测量的是____的电压,S闭 合时,电压表的示数为1V,则L1两端的 电压为___V,L2两端的电压为____V,S 断开时,电压表的示数为_____V。
例3.判断下图中电压表V1和V2的测量对 象
两点法:在图中沿电流流向依次标出与电压表相 连的点1和点2,看电流从点1流到点2经过了电路 中的哪一部分,电压表就测哪部分电路两端的电 压。
数据结构第二章习题课

数据结构第二章习题课1、试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
答:开始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。
链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。
头结点是我们人为地在链表的开始结点之前附加的一个结点。
有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。
而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。
2、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1) 基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
2) 基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等操作时,宜采用链表做存储结构。
并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。
3、在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点,删除一个结点需平均移动(n-1)/2个结点。
具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。
i越接近n 则所需移动的结点数越少。
4、为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。
计算机系统结构习题课(2012)-万继光

M W B S S S S S S E X M W B S S S E X I D I F M W B E X I D I F M W B S S S S E X I D I F M W B S S S E M W X B S S S I F
CPU时间 = IC ×CPI×时钟周期时间 n = (CPIi×ICi)×时钟周期时间
i=1
n (CPIi×ICi) n ICi 时钟周期数 i=1 CPI = = = (CPIi× IC ) IC IC i=1
f MIPS速 率 CPI 10 6
▲ 2/101
习题1.7
对于一台400MHz计算机执行标准测试程序,程序中指令类型, 执行数量和平均时钟周期数如下:
习题2.14
IEEE754
e N m rm
为便于软件的移植,浮点数的表示格式应该有统一标准 (定义)。1985年IEEE提出了IEEE754标准。 该标准规定基数为2,阶码E用移码表示,尾数M用原码表 示,根据原码的规格化方法,最高数字位总是1,该标准 将这个1缺省存储,使得尾数表示范围比实际存储的多一 位。
采用定向技术消除数据相关
习题3.11(1)
1 LOOP: LW R1 0(R2) IF ADDI R1 R1 #1 SW 0(R2) R1 ADDI R2 R2 #4 SUB R4 R3 R2 BNZ R4 LOOP 2 ID IF 3 EX ID IF 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 1 1 1 1 5 6 7 8 9
微机原理习题课

微机原理习题课第二章习题答案一、填空题1、MOV AX,7896HADD AL,AH上述指令执行后,标志位CF和OF的值是()。
2、MOV SP,3210HPUSH AX 执行上述指令序列后,SP寄存器的值是( )3、重复前缀指令REP的重复次数由()决定。
4、在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是()。
5、下面指令序列执行后完成的运算,正确的算术表达式应是()。
MOV AL,BYTE PTR XSHL AL,1DEC ALMOV BYTE PTR Y,AL6、下面程序段执行后,AL中的内容是()MOV AX,8833HADD AL,AHDAA7、如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是____ IP____,而后两个字节存放的是____ CS____。
8、执行下面的程序段后,AX=_________ 。
MOV CX,5;MOV AX,50;NEXT:SUB AX,CX;LOOP NEXT;HLT9、MUL WORD PTR [SI] ,原操作数__________;目标操作数__________;10、设AL=-18,CL=2,则执行SAR AL,CL 后,AL=__________ 。
11、设AH=0,AL=06H,BL=09H,执行指令ADD AL,BLAAA之后,其结果应是()。
12、指令LOOPNZ 退出循环的条件是()。
13、MOV AX, 65A3;AND AX, 0FA03AX=___5FA6_______,若作为无符号数,其十进制值为___24486_______,若作为带符号数,其十进制值为____+24486______.14、(西安交大)写出一条能完成下述操作的指令(1)将AH的最高3位清零,其他位不变()(2)AH的低半字节置1,其他位不变()(3)AH的最低位取反,其他位不变()15、(西南交大) 8086 CPU在基址-变址寻址方式中,基址寄存器可以是( )和( ),变址寄存器可以是( )和( )。
软件技术基础之指针和结构体课件ppt课件

变
从右图可知,指 针变量和一般变量一 指针变量pi 变量地址(指针)
量 地 址
样,仅仅是变量旳内
指
存
向
入
容为变量地址旳变量
变量i
变量值
指
而已。这里变量和指针变量旳类型必须一致。
针 变
量
一般而言,指针变量只能存储某一种数据类型旳 变量旳地址,由此可将指针变量分为:整型指针变量、 实型指针变量和字符型指针变量等等,指针变量旳类 型表白了其指向旳存储单元中存储旳数据旳类型。
另一种引用旳形式: 构 造指针变量名 组员名 定义:struct data * today; today 为指向该构造旳指针
可见,“”和“·”操作符分别使用在用指向构造旳 指针和用构造变量来访问构造中旳数据项(组员)时。
例:构造例程。
结 构 体小结
构造体是C语言中旳一种复杂(构造)类型,它是一种 被命名为一种标识符旳多种变量旳集合。构造旳定义拟定了 构造变量或构造指针旳格式,构造是软件设计中实现数据抽 象旳基础。
3、程序中一旦定义了一种变量,该变量在内存中就将 占用一定旳存储单元。变量占用旳存储单元总是n(n>0) 个连续旳字节,开始字节旳地址,就是变量旳地址也可 称为该存储单元旳首地址。
二、指针旳基本概念:
指针就是变量旳地址。与此相应,在C语言中使
用一类专门旳变量即指针变量来存储变量旳地址。
所以,指针变量是存储地址数据旳变量。
四、指针旳“&”、“*”和赋值运算:
1 、& 取地址运算和 * 引用运算 取地址运算符&旳作用是取变量旳地址。如:
& i 表达求变量 i 旳地址。 引用运算符 * 旳作用是取指针指向变量旳内容。
第五章3指针(11--33)
第五章3指针(11--33)⼗⼀指针的运算1、作为⼀种特殊的变量,指针可以进⾏⼀些运算,但并⾮所有的运算都是合法的,指针的运算主要局限在加减算术和其他⼀些为数不多的特殊运算。
2、把a的值5作为地址 0x00000005赋值给*p是发⽣访问冲突。
整数与指针最好不要直接运算。
3、地址的赋值和指针的赋值。
num,p1,p2 他们中⼀个改变,其他的两个都会跟着改变4、 a被编译器解析为数组的⾸地址通过下标循环进⾏遍历通过指针循环进⾏遍历5、通过dll注⼊的⽅式修改另⼀个进程的数据通过定义并初始化⼆级指针p,使其改变另⼀个程序的指针p的指向,从⽽改变它的值。
外挂⼯具:cheat engine注意不会实时刷新⼗⼆指针的算数运算1、使⽤递增/递减运算符(++ 和 --)将指针递增或递减指针++就是按照指针类型的⼤⼩,前进⼀个类型的⼤⼩,int,前进四个字节指针 ++ 和 -- 只有在数组的内部才有意义。
2、指针++ 就是指针每次向前移动sizeof(指针类型)个字节通过指针循环的⽅式初始化数组a的每⼀个元素(从头到尾扫描数组)(注:格式控制符“%p”中的p是pointer(指针)的缩写。
指针的值是语⾔实现(编译程序)相关的,但⼏乎所有实现中,指针的值都是⼀个表⽰地址空间中某个存储器单元的整数。
printf函数族中对于%p⼀般以⼗六进制整数⽅式输出指针的值,附加前缀0x。
)3、指针加上2,在数组内部等价于向后移动两个元素的⼤⼩指针减去3,等价于数组内部,向前移动3个元素的⼤⼩此时此刻,就会打印出 3 5 24、指针的加减法在⾮数组内部没有任何意义,⽽且很容易越界报错⼀个exe不能读写其他exe进程的内存。
⼗三指针之间的⽐较1、对两个毫⽆关联的指针⽐较⼤⼩是没有意义的,因为指针只代表了“位置”这么⼀个信息,但是,如果两个指针所指向的元素位于同⼀个数组(或同⼀块动态申请的内存中),指针的⼤⼩⽐较反映了元素在数组中的先后关系。
vc课程设计指针
vc 课程设计指针一、教学目标本章节的教学目标是让学生掌握指针的基本概念、运算和应用。
具体包括:1.知识目标:学生能够理解指针的定义、特点和作用,掌握指针的赋值、解引用和指针运算。
2.技能目标:学生能够运用指针解决实际问题,如通过指针访问数组元素、修改内存数据等。
3.情感态度价值观目标:学生能够认识到指针在编程中的重要性,培养对指针操作的兴趣和自信心。
二、教学内容本章节的教学内容主要包括以下几个部分:1.指针的概念:介绍指针的定义、特点和作用,使学生理解指针的基本概念。
2.指针的运算:讲解指针的赋值、解引用和指针运算,让学生掌握指针的基本操作。
3.指针与数组:通过实例展示如何使用指针访问数组元素,修改数组数据,使学生学会指针与数组的结合应用。
4.指针与函数:介绍指针作为函数参数的使用,让学生理解指针在函数调用过程中的作用。
三、教学方法为了达到本章节的教学目标,将采用以下教学方法:1.讲授法:通过讲解指针的概念、运算和应用,让学生掌握指针的基本知识。
2.案例分析法:通过分析实际案例,让学生学会指针在解决问题中的具体运用。
3.实验法:安排课堂实验,让学生亲自动手操作,加深对指针的理解和记忆。
四、教学资源为了支持本章节的教学内容和教学方法,将准备以下教学资源:1.教材:选择合适的编程教材,提供指针相关知识的学习支持。
2.参考书:推荐一些关于指针操作的参考书籍,供学生课后深入学习。
3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更直观地理解指针的概念和操作。
4.实验设备:准备计算机、编程环境等实验设备,让学生能够进行指针操作的实践。
五、教学评估本章节的评估方式将包括以下几个方面:1.平时表现:通过学生在课堂上的参与度、提问回答和小组讨论等表现进行评估。
2.作业:布置相关的指针操作练习题,评估学生的理解和应用能力。
3.考试:安排一次针对本章节内容的考试,包括选择题、填空题和编程题,全面测试学生的掌握程度。
c程序设计第二版谭浩强课后答案
c程序设计第二版谭浩强课后答案C程序设计第二版是谭浩强教授编写的一本广泛使用的计算机程序设计教材,它以C语言为基础,深入浅出地介绍了程序设计的基本概念、语法规则和编程技巧。
这本书的课后习题对于加深理解C语言的知识点非常有帮助。
以下是部分课后习题的答案,供参考:第一章程序设计和C语言概述1. 问题一:简述程序设计的基本步骤。
- 答案:程序设计的基本步骤包括需求分析、设计、编码、测试和维护。
2. 问题二:C语言的主要特点是什么?- 答案:C语言的主要特点包括简洁高效、结构化、可移植性、丰富的运算符、灵活的数据类型和内存管理能力。
第二章 C语言程序的结构1. 问题一:C语言程序的基本结构是什么?- 答案:C语言程序的基本结构包括预处理指令、函数定义和主函数。
2. 问题二:什么是函数?C语言中函数的定义规则是什么?- 答案:函数是一段具有特定功能的代码块,可以被重复调用。
C 语言中函数的定义规则包括返回类型、函数名和参数列表。
第三章数据类型、运算符和表达式1. 问题一:C语言中的基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)。
2. 问题二:算术运算符有哪些?它们的优先级是怎样的?- 答案:算术运算符包括加(+)、减(-)、乘(*)、除(/)和模(%)。
它们的优先级从高到低依次是乘除、模、加减。
第四章控制语句1. 问题一:C语言中的条件语句有哪些?- 答案:C语言中的条件语句包括if语句、if...else语句和switch语句。
2. 问题二:循环语句有哪些?它们的基本结构是什么?- 答案:C语言中的循环语句包括while循环、do...while循环和for循环。
它们的基本结构是初始化、条件判断和迭代。
第五章数组1. 问题一:什么是数组?数组的声明方式有哪些?- 答案:数组是相同数据类型元素的集合。
数组的声明方式包括在函数内部声明和全局声明。
C语言程序设计课堂练习题7-9章-学生用2
C语言程序设计课堂练习题第7章指针一、选择题1.已知p是一个整型指针变量,且p指向的是整型变量a的地址,则下列哪个语句是错误的?()A.*p=a;B. p=&a;C.p=&*p;D.p=*&p;2.下列哪一项是不正确的字符串赋值或不正确的赋初值的方式?()A. char *str;str=“string“;B.char str[7]={‟s‟, ‟t‟, ‟r‟, ‟i‟, ‟n‟, ‟g‟ };C. char str1[10];str1= “string“;D.char str1[]=“string“,*str2=”1234567”;3.对于类型相同的指针变量,不能进行()运算。
A. +B. -C. =D.==4.已知p是一个整型指针变量,a为一个一维整型数组,且p=a;则下列哪个语句是错误的?()A.*p=a[0];B. *p=*a;C. p=a+1;D.p=*a;5.若有以下说明语句,则p2-p1的值为()int a[10],*p1,*p2;p1=a;p2=&a[5];A. 5B. 6C. 10D.没有指针与指针的减法6.下列定义中不正确的是()A.int *p;B. int p[10];C.int (*p)()D.int *(p(n));7.以下程序的输出结果是()main(){int a[]={1,2,3,4,5,6},*p;p=a;printf(“%d,%d\n”,*p,*(p+4));}A. 0,5B.1,5C.0,6D.1,68.若有以下说明和语句,且0<=i<10,则下面哪个不是对数组元素地址的正确表示()。
int a[]={1,2,3,4,5,6,7,8,9,10},*p,i;p=a;A.&(a+1)B.a++C. &pD.&p[i]二、写出程序的输出结果1.main(){int a=10,b=20,s,t,m,*pa,*pb;pa=&a;pb=&b;s=*pa+*pb;t=*pa-*pb;m=*pa**pb;printf“s=%d\nt=%d\nm=%d\n“,s,t,m);}2.int a[][3]={9,7,5,3,1,2,4,6,8};int i,j,s1=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++){if (i==j) s1=s1+a[i][j];if(i+j==2) s2=s2+a[i][j];}printf(“%d\n%d\n”,s1,s2);}3.main(){int a[5]={1,3,5,7,9},*p,**k;p=a;k=&p;printf(“%d”,*(p+2));printf(“%d”,**k);}4.main(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int (*p)[4],i=2,j=2;p=a;printf(“%d”,*(*(p+i)+j)+*((a+i)+j)+**(p+i)+**p);}三、填空1.在空格地方填上语句,以实现字符串复制的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
写出程序的运行结果:
#include <stdio.h> fun(char *s) { int i; for(i=0;i<4;i++) *(s+i)='a'; } main() { char *p="1234"; fun(p); printf("%s\n",p); }
写出程序的运行结果: fun(char *s) {char a[10];
例8:指针的指针
main( ) {int i; char *name[]={"Ann","Hare","Jack","Mary"}; char **p; printf("\n Students's names are:\n"); for(i=0;i<4;i++) { p=name+i; printf("%6s\t",*p); } name指针数组 二维字符数组 }
abcdef
写出程序的运行结果: main() {char *p[ ]={"BOOL","OPK","H","SP"}; int i ; for(i=3; i >=0; i--,i--)printf("%c",*p[i]); printf("\n"); }
so
[例1] 输入a和b两个整数,按先大后小的顺序输出a和b。
以下conj函数的功能是将两个字符串s和t连接起来。
char *conj(char *s,char *t) { char *p=s; while(*s) B ; while(*t) {*s= A ;s++;t++;} *s=‘\0’; C ; } ① A) s-B) s++ C) s D) *s ② A) *t B) t C) t-D) *t++ ③ A) return s B) return t C) return p D) return p-t
习题(指针)
• • • • • • • •
int i; 定义整型变量i int *p; p是指向整型数据的指针变量 int a[n]; 定义数组a,元素类型为int,元素个数是n int *p[n]; p是指针数组,包含n个指针,每一个指针可 以指向整型数据 int f(); f是函数,返回值是int int (*p)(); p是函数指针,所指向的函数返回整型数 据 int *p(); p是函数,返回值是指针,该指针指向整型 数据 int **p; p是指针,指向一个指向整型数据的指针
}
例11:编一个学生管理系统,在主函数中输 入和输出,在自定义函数中进行求总成绩等。
#define N 3 main() { int i,a[N],b[N],c[N],zong[N],*p1,*p2,*p3,*z; char *stu[N]; for(i=0;i<N;i++) {printf("请输入学生姓名"); scanf("%s",stu[i]); printf("请输入%s学生的成绩\n",stu[i]); printf("数学 语文 英语\n"); scanf("%d,%d,%d",&a[i],&b[i],&c[i]); printf("*---------------------*\n"); } p1=a;p2=b;p3=c;z=zong; zcj(p1,p2,p3,zong); printf("姓名 数学 语文 英语 总分\n"); for(i=0;i<N;i++) {printf("%s %d %d %d %d\n",stu[i],a[i],b[i],c[i],zong[i]); } printf("*---------------------------------*\n"); }
例10: 编写函数实现,将一个字符串中的字母全部转换为大写。
#include <stdio.h> #include <string.h> char *Upper(char *s); char *Upper(char *s) { char *ps; ps=s; while(*ps) {if(*ps>='a' && *ps<='z') *ps=*ps-32; ps++; } return s; } void main() { char string[81]; printf("enter a string:\n"); gets(string); printf("before convert: string=%s\n",string); printf(" after convert: string=%s\n",Upper(string)); }
[例6] 求a和b中的大者。 用函数名调用函数max() • int max(int x, int y); /*原型*/ • {int z; • if (x>y) z = x; • else z = y; • return z; • }
• main () • {int a,b,c; • scanf("%d,%d", &a, &b); • c = max(a, b); • printf("a=%d,b=%d,max=%d",a,b,c); • } •
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的值增加一倍的include <stdio.h> main() {int **k,*a,b=100; a=&b; k=&a; printf(“%d\n”,**k);} A) 运行出错 B) 100 C) a的地址 D) b的地址
。
写出程序的运行结果: f(int b[ ],int n) {int i,r; r=1; for(i=0;i<n;i++)r=r*b[i]; return r; } main() {int x,a[ ]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d\n”,x); }
[例2] 题目要求同[例10.2],输入a和b两个整数, 按先大后小的顺序输出a和b。
swap( int* p1,int *p2 ) /*交换指针p1、p2所指向的变量的值 */ { int p; p = *p1; *p1 = *p2; *p2 = p; } main () { int a, b; int *pointer_1, *pointer_2; scanf("%d,%d",&a,&b); pointer_1 = &a; pointer_2 = &b; if (a<b) swap(pointer_1, pointer_2) ; printf("\n%d,%d\n",a,b); }
[例4] 将字符串a复制到字符串b。 main () 用数组名计算数组元素的地址 { char a[ ] = "I am a boy."; char b[20]; 数组a 数组b int i; a I b for (i=0; *(a+i) !='\0'; i++) *(b+i) = *(a+i); a *(b+i) = '\0'; m printf("string a is: %s\n",a); a printf("string b is:"); for (i=0; b[i] !='\0'; i++) b printf("%c",b[i]); o printf("\n"); y } .
例11:写一个函数,求一个字符串的长度,在main函数 中输入字符串,并输出其长度。
main(){ int len; char *str[20]; printf("please input a string:\n"); scanf("%s",str); len=length(str); printf("the string has %d characters.",len);} length(char *p) { int n; n=0; while(*p!='\0') { n++; p++; return n; }
p
运行结果: Ann Hare Jack Mary
name[0] name[1] name[2] name[3]
Ann Hare Jack mary
例9:编一个程序,输入月份号,输出该月份的英文月名. main() {char *month[13]={"january","february","march","april", "may","june","july","august","september","octobe r","november","decenber"}; int n; printf("input month:"); scanf("%d",&n); printf(“\t%s”,*(month+n-1)); /*可该为printf("\t%s",month[n-1]);*/ }