串 习题及答案
C语言练习题及其答案

C语言练习题及其答案C语言练习题及其答案C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。
C语言能以简易的方式编译、处理低级存储器。
下面是店铺帮大家整理的C语言练习题及其答案,仅供参考,大家一起来看看吧。
C语言练习题及其答案1一、选择题(7分,每小题0.5分)1.C语言源程序的基本单位是(B)。
A过程 B函数 C子程序 D标识符2.下列程序的输出结果是(C)。
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)的值是(B)。
A 7B 8 C9 D 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.设有如下程序段,下面描述中正确的是(C)。
int k=10;while(k=0) k=k-1;A循环执行一次 B循环是无限循环 C循环体语句一次也不执行 D 循环体语句执行一次6.下面选项中正确的赋值语句是(设char a[5],*p=a;)()。
A p="abcd";B a="abcd";C *p="abcd";D *a="abcd";13.设有以下程序段,则值为6的表达式是()。
struct st { int n; struct st *next;};static struct st a[3]={5,&a[1],7,&a[2],9,0},*p;p=&a[0];A p++->nB ++p->nC p->n++D (*p).n++14.C语言中的文件类型只有()。
(完整版)三相交流电路习题及参考答案

b o o 三相交流电路习题及参考答案一、填空题:1. 对称三相负载作Y 接,接在380V 的三相四线制电源上。
此时负载端的相电倍的线电压;相电流等于 1 倍的线电流;中线电流等于 0。
2. 有一对称三相负载成星形联接,每相阻抗均为22Ω,功率因数为0.8,又测出负载中的电流为10A ,那么三相电路的有功功率为 5280W ;无功功率为 3960var ;视在功率为 6600VA 。
假如负载为感性设备,则等效电阻是 17.6Ω ;等效电感量为 42mH 。
二、判断题:1. 中线的作用就是使不对称Y 接负载的端电压保持对称。
(对 )2. 三相电路的有功功率,在任何情况下都可以用二瓦计法进行测量。
(错 )3. 三相负载作三角形联接时,总有成立。
(错P 3I I l )4. 负载作星形联接时,必有线电流等于相电流。
(对)5. 三相不对称负载越接近对称,中线上通过的电流就越小。
(对)6. 中线不允许断开。
因此不能安装保险丝和开关,并且中线截面比火线粗。
(错)三、选择题:1. 三相对称电路是指( C )A 、三相电源对称的电路;B 、三相负载对称的电路;C 、三相电源和三相负载均对称的电路。
2. 三相四线制供电线路,已知作星形联接的三相负载中U 相为纯电阻,V 相为纯电感,W 相为纯电容,通过三相负载的电流均为10安培,则中线电流为( C )A 、30安;B 、10安;C 、7.32安。
3. 有“220V 、100W ”“220V 、25W ”白炽灯两盏,串联后接入220V 交流电源,其亮度情况是( B )A 、100W 灯泡最亮;B 、25W 灯泡最亮;C 、两只灯泡一样亮。
四、计算题3-1一台三相交流电动机,定子绕组星形连接于U L =380V 的对称三相电源上,其线电流I L =2.2A ,cosφ=0.8,试求每相绕组的阻抗Z 。
解:先由题意画出电路图(如下图),以帮助我们思考。
因三相交流电动机是对称负载,因此可选一相进行计算。
严蔚敏版数据结构习题及参考答案

习题1一、单项选择题A1.数据结构是指()。
A.数据元素的组织形式B.数据类型C.数据存储结构D.数据定义C2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。
A.存储结构B.逻辑结构C.链式存储结构D.顺序存储结构D3.树形结构是数据元素之间存在一种()。
A.一对一关系B.多对多关系C.多对一关系D.一对多关系B4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。
for(i=1; i<=n; i++)for(j=i; j<=n; j++)x++;A.O(1)B.O(2n)C.O(n)D.O(3n)CA5.算法分析的目的是(1),算法分析的两个主要方面是(2)。
(1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性(2) A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。
(1) A.计算方法 B.排序方法C.解决问题的有限运算序列D.调度方法(2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性C.确定性,有穷性和稳定性D.易读性,稳定性和安全性7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。
A.低B.高C.相同D.不好说8.数据结构作为一门独立的课程出现是在()年。
A.1946B.1953C.1964D.19689.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。
A.正确B.错误C.前半句对,后半句错D.前半句错,后半句对10.计算机内部数据处理的基本单位是()。
A.数据B.数据元素C.数据项D.数据库二、填空题1.数据结构按逻辑结构可分为两大类,分别是______________和_________________。
串并联电路题及答案

串并联电路练习题基础知识 一、填空题1判断下列电路元件的连接是串联还是并联的。
(1) 教室里的几盏日光灯是 ______ 的。
(2) 手电筒里两节干电池是 ______ 的。
(3) 教室里的一只开关控制一盏电灯,开关和灯是 _________ 的。
(4) 马路上排成一行的路灯是 _______ 的。
(5) 节日里大楼周围一排排彩灯是 ________的。
2•如图1所示的电路图中:(1) _____________________ 灯泡EL1和EL2是 (选填“串联”、“并联”)。
⑵ 开关SA1控制 ______ ,开关SA2控制 _______ ,开关SA3控制 ______ 。
⑶当开关SA1 SA2 SA3都闭合时,EL1灯泡的灯丝断了,灯泡 EL1 ____________ 光”)。
3•图2所示的电路图中:(1) 灯泡EL1和EL2是_______ 联。
(2) 闭合开关,灯泡 EL1 ______ ,灯泡EL2 _____ (选填“发光”、“不发光”)。
(3) 灯泡EL1的灯丝断了,闭合开关,灯泡EL2 _____ (选填“发光”、“不发光”)。
A. 两灯泡一定是串联连接;B. 两灯泡一定是并联连接;C. 以上两种情况都有可能。
3.图7中,闭合开关SA 后,两电灯不是并联的电路图是 [4.在图8所示的电路图中,错误的是 []A. 图(a)中开关SA 能控制两个灯,图(b)中开关SA 仅控制一个灯B.闭合开关后,图(a)和图(c)中灯泡同时发光;断开开关时,同时熄灭,而图(b)中灯泡EL1先发光,灯泡 EL2后发4. 如图5. 如图 合开关_6. 在连接电路过程中,八-验。
7 .图5中,有三个开关 (1) 闭合开关 (2) 断开开关 3所示的■电路图中,属于串联电路的是| 4所示,要使灯 I ;]如果 的关应该是「 串覽只闭合全闭合忌 ⑹T 勺。
电路接好后, 和两电灯 。
两电灯 ,两电灯 (3)如果把三个开关都闭合,那么电路处于 填“允许”、“不允许”)。
串 习题及答案

第四章串习题及答案一、基础知识题简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。
假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数stlen(strcat(s1,s2))的返回值是什么?设T[0..n-1]="adaabaabcaabaa",P[0..m-1]="aab".当用模式串匹配目标串T时,请给出所有的有效位移。
算法NaiveStrMatch(T,P)返回的位移是哪一个位移。
二、算法设计题:利用C的库函数strlen,strcpy和strcat写一算法void StrInsert(char *S,char *T,int i),将串T插入到串S的第i个位置上。
若i大于S的长度,则插入不执行。
利用C的库函数strlen 和strcpy(或strncpy)写一算法void StrDelete(char*S,inti,int m)删去串S中从位置i开始的连续m个字符。
若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均删去。
电路的基本分析方法 练习题及答案第2章

第2章 电路的基本分析方法习题答案2-1 在8个灯泡串联的电路中,除4号灯不亮外其它7个灯都亮。
当把4号灯从灯座上取下后,剩下7个灯仍亮,问电路中有何故障?为什么?解:4号灯灯座短路。
如开路则所有灯泡都不亮。
2-2 额定电压相同、额定功率不等的两个白炽灯能否串联使用,那并联呢? 解:不能串联使用,因其电阻值不同,串联后分压不同,导致白炽灯无法正常工作。
在给定的电压等于额定电压的前提下,可以并联使用。
2-3 如图2-34所示,R 1=1Ω,R 2=5Ω,U =6V ,试求总电流强度I 以及电阻R 1、R 2上的电压。
图2-34 习题2-3图解:A 151621=++=R R U I=,V 551= V 111=2211=⨯==⨯=IR U IR U2-4 如图2-35所示,R 1=3Ω,R 2=6Ω,U =6V ,试求总电流I ;以及电阻R 1,R 2上的电流。
图2-35 习题2-4图解:总电阻为:Ω263632121=+⨯+=R R R R R=A 326=∴=R U I=由分流公式得:A 13633A 2363621122121=⨯++=⨯++I=R R R =I I=R R R =I2-5 电路如图2-36(a)~(f)所示,求各电路中a 、b 间的等效电阻R ab 。
(a) (b) (c)(d) (e) (f)2-36 习题2-5图解:(a) Ω4.3)6//4()2//2(ab =+=R(b) Ω2)33//()66//4ab =++(=R (c)Ω2)]6//3()6//3//[(13ab =++)(=R(d) Ω2)6//1)6//3(ab =+)(=R (e) Ω7)10//10(}6//6//]2)8//8{[(ab =++=R (f) Ω6}6//]64)4//4{[()4//4(ab =+++=R2-6 求图2-37所示电路中的电流I 和电压U 。
图2-37 习题2-6电路图解:图2-37等效变换可得:由上图可得;Ω8)816//)]}99//(6[5.7{=+++(总=RA 5.1812==总I 则根据并联电路分流作用可得:A 5.05.1)816()]99//(6[5.7)]99//(6[5.7=1=⨯++++++I则A 15.05.1=13=-=-I I I 总 I 3再次分流可得:A 75.0169999=4=⨯+++IA 25.016996=2=⨯++I所以I =0.75A ,U = U +-U - =9×I 2-8×I 1 = 9×0.25-8×0. 5=-1.75V2-7 电路如图2-38(a)~(g)所示,请用电源等效变换的方法进行化简。
指针字符串练习题及答案

单项选择==================================================题号:4074若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是().A、p=aB、p=&a[2][1]C、q[i]=a[i]D、p=a[i]答案:A题号:4333执行下列语句后的结果为().int x=3,y;int *px=&x;y=*px++;printf("x=%d,y=%d\n",x,y);A、x=3,y=3B、x=4,y=4C、x=3,y不知D、x=3,y=4答案:A题号:4876下列程序的运行结果是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);}A、0 0B、3 6C、编译出错D、6 3答案:B题号:4116若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是().A、scanf("%d",n);B、p=&n;scanf("%d",&p);C、p=&n;scanf("%d",*p);D、p=&n;scanf("%d",p);答案:D题号:4120下面程序:int aa[3][3]={{2},{4},{6}};main(){int i,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}的输出是().A、25B、30C、26D、23答案:D题号:4124若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是().A、i=*p;B、*p=*&j;C、i=**p;D、i=&j;答案:B题号:4165阅读下面程序,程序执行后的结果为().#include"stdio.h"main(){ char *str="abcdefghijklmnopq";while(*str++!='e');printf("%c\n",*str);}A、fB、qC、eD、a答案:A题号:4167关于指针概念说法不正确的是().A、指针变量可以由整数赋,不能用浮点赋B、只有同一类型变量的地址才能放到指向该类型变量的指针变量之中,C、一个指针变量只能指向同一类型变量D、一个变量的地址称为该变量的指针答案:A题号:4173设有以下定义:int w[2][3],(*pw)[3];pw=w;,则对w数组元素非法引用是().A、pw[0][0]B、*(pw[1]+2)C、*(pw+1)[2]D、*(w[0]+2)答案:C题号:4532若有定义:char s[3][10],*k[3],*p;,则以下赋值语句正确的是().A、k=s;B、p=k;C、p=s;D、p=s[0];答案:D题号:4174当运行以下程序时输入OPEN THE DOOR<CR>,则输出结果是#include<stdio.h>char fun(char *c){if(*c<='Z' && *c>='A')*c -='A' - 'a';return *c;}main(){char s[8],*p=s;gets(s);while(*p){*p=fun(p);putcahr(*p);p++;}putchar('\n');}A、Open The DoorB、OPEN THE DOORC、open the doorD、oPEN tHE dOOR答案:C题号:4175下列程序执行后的输出结果是().void func(int *a,int b[]){b[0]=*a+6;}main(){int a,b[5]={0};a=0; b[0]=3;func(&a,b); printf("%d\n",b[0]);}A、8B、9C、7D、6答案:D题号:4390已知有声明"char a[]="prongram",*p=a+1;",则执行以下语句不会输出字符a的是()oA、putchar(*p+4);B、putchar(*(p+4));C、putchar(a[sizeof(a)-3]);D、putchar(*(a+5));答案:A题号:4181定义语句int *swap();指的是A、其他说法都不对B、swap是一个返回指向整型值指针的函数C、swap是一个返回整型值的函数D、swap是一个指向函数的指针答案:B题号:4184有以下程序:#include<stdio.h>void swap(char *x,char *y){char t;t=*x;*x=*y;*y=t;}main(){char *s1="abc",*s2="123";swap(s1,s2);printf("%s,%s\n",s1,s2); }程序执行后的输出结果是().A、1bc,a23B、123,abcC、321,cbaD、abc,123答案:A题号:4211若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,则输出结果不为5 的语句为().A、printf("%d",p[5]);B、printf("%d",*p[5]);C、printf("%d",*(a+5));D、printf("%d",*(p+5));答案:B题号:4215有以下程序:void fun(int *a,int i,int j){int t;if(i<j){t=a[i];a[i]=a[j];a[j]=t;fun(a,++i,--j);}}main(){int a[]={1,2,3,4,5,6},i;fun(a,0,5);for(i=0;i<6;i++)printf("%d",a[i]);}执行后输出结果是().A、6 5 4 3 2 1B、2 1 4 3 6 5C、3 2 4 1 5 6D、1 2 3 4 5 6答案:A题号:4113以下程序运行后的输出结果是(). main(){char ch[]="uvwxyz",*pc; pc=ch;printf("%c\n",*(pc+5));}A、字符y的地址B、0C、元素ch[5]地址D、z答案:D题号:4695有以下程序#include<stdio.h>main(){int a[]={1,2,3,4},y,*p=&a[3]; --p; y=*p; printf("y=%d\n",y); }程序的运行结果是().A、y=0B、y=2C、y=1D、y=3答案:D题号:4298若有语句:char *line[5];下列叙述中正确的是().A、定义line是一个指针数组,语句中的*号称为间址运算符B、定义line是一个数组,每个数组元素是一个基类型为char 的指针变量C、定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组D、定义line是一个指向字符型函数的指针答案:B题号:2457设有数组定义:char array[]="China";,则数组 array所占的空间为().A、5个字节B、4个字节C、6个字节D、7个字节答案:C题号:2468下述对C语言字符数组的描述中错误的是().A、字符数组中的字符串可以整体输入,输出.B、不可以用关系运算符对字符数组中的字符串进行比较.C、字符数组中可以存放字符串.D、可以通过赋值运算符"="对字符数组整体赋值.答案:D题号:2479以下程序:#include<stdio.h>#include<string.h>main(){ char str[]="abcd\n\123\xab";printf("%d",strlen(str));}运行后的输出结果是().A、10B、9C、14D、7答案:D题号:2485已知有声明"char s[20]="Hello";",在程序运行过程中若要想使数组s中的内容修改为"Good",则以下语句能够实现此功能的是().A、strcpy(s,"Good");B、strcat(s,"Good");C、s[20]="Good";D、s="Good";答案:A题号:2499以下程序段的输出结果是pritnf("%d\n",strlen("ATS\n012\1\\"));A、11B、8C、9D、10答案:C题号:2510char a1[]="abc",a2[80]="1234";将a1串连接到a2串后面的语句是().A、strcat(a2,a1);B、strcpy(a2,a1);C、strcpy(a1,a2);D、strcat(a1,a2);答案:A题号:2530设有以下语句,若0<k<4,下列选项中对字符串的非法引用是().char str[4][2]={"aaa","bbb","ccc","ddd"},*strp[4];int j;for(j=0;j<4;j++)strp[j]=str[j];A、*strpB、strpC、strp[k]D、str[k]答案:B题号:2543选择正确的输入语句().(其中:char string[10];)使得string的内容为"Hello".A、scanf("%s",&string);B、scanf("%c",string);C、scanf("%c",&string);D、scanf("%s",string);答案:D题号:2874下列数组说明中正确的是().A、static char str1[5],str2[]={"China"};str1=str2;B、static char str[];str="China";C、static char str1[],str2[];str2={"China"};strcpy(str1,str2);D、static char str[]="China";答案:D题号:2633已定义char string[20];使得string的内容为"You are student"的正确输入语句是().A、scanf("%c",&string);B、gets(string);C、scanf("%s",&string);D、scanf("%s",string);答案:B填空题==================================================题号:4875若有定义: char ch;定义指针p,并使其指向变量ch的初始化语句是_____。
小学生奥数等差数列练习题及答案

小学生奥数等差数列练习题及答案1.小学生奥数等差数列练习题及答案1、下面是按规律排列的一串数,问其中的第1995项是多少?解答:2、5、8、11、14、……。
从规律看出:这是一个等差数列,且首项是2,公差是3,这样第1995项=2+3×(1995-1)=59842、在从1开始的自然数中,第100个不能被3除尽的数是多少?解答:我们发现:1、2、3、4、5、6、7、……中,从1开始每三个数一组,每组前2个不能被3除尽,2个一组,100个就有100÷2=50组,每组3个数,共有50×3=150,那么第100个不能被3除尽的数就是150-1=149。
3、把1988表示成28个连续偶数的和,那么其中的那个偶数是多少?。
解答:28个偶数成14组,对称的2个数是一组,即最小数和数是一组,每组和为:1988÷14=142,最小数与数相差28-1=27个公差,即相差2×27=54,这样转化为和差问题,数为(142+54)÷2=98。
4、在大于1000的整数中,找出所有被34除后商与余数相等的数,那么这些数的和是多少?解答:因为34×28+28=35×28=980<1000,所以只有以下几个数:34×29+29=35×2934×30+30=35×3034×31+31=35×3134×32+32=35×3234×33+33=35×33以上数的和为35×(29+30+31+32+33)=54255、盒子里装着分别写有1、2、3、……134、135的红色卡片各一张,从盒中任意摸出若干张卡片,并算出这若干张卡片上各数的和除以17的余数,再把这个余数写在另一张黄色的卡片上放回盒内,经过若干次这样的操作后,盒内还剩下两张红色卡片和一张黄色卡片,已知这两张红色的卡片上写的数分别是19和97,求那张黄色卡片上所写的数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章串习题及答案
一、基础知识题
简述下列每对术语的区别:
空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。
假设有如下的串说明:
char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;
(1)在执行如下的每个语句后p的值是什么
p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');
(2)在执行下列语句后,s3的值是什么
strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);
(3)调用函数strcmp(s1,s2)的返回值是什么
(4)调用函数strcmp(&s1[5],"ton")的返回值是什么
(5)调用函数stlen(strcat(s1,s2))的返回值是什么
设T[0..n-1]="adaabaabcaabaa",P[0..m-1]="aab".当用模式串匹配目标串T时,请给出所有的有效位移。
算法NaiveStrMatch(T,P)返回的位移是哪一个位移。
二、算法设计题:
利用C的库函数strlen,strcpy和strcat写一算法void StrInsert(char *S, char *T, int i),将串T插入到串S的第i个位置上。
若i大于S的长度,则插入不执行。
利用C的库函数strlen 和strcpy(或strncpy)写一算法void StrDelete(char *S,int i, int m)删去串S中从位置i开始的连续m个字符。
若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均删去。
以HString为存储表示,写一个求子串的算法。
一个文本串可用事先给定的字母映射表进行加密。
例如,设字母映射表为:
a b c d e f g h i j k l m n o p q r s t u v w x y z
n g z q t c o b m u h e l k p d a w x f y i v r s j
则字符串"encrypt"被加密为"tkzwsdf".试写一算法将输入的文本串进行加密后输出;另写一算法,将输入的已加密的文本串进行解密后输出。
写一算法void StrReplace(char *T, char *P, char *S),将T中首次出现的子串P替换为串S。
注意:S和P的长度不一定相等。
可以使用已有的串操作。
将NaveStrMatch改写为输出目标串中所有也模式串匹配的有效位移。
* 利用的结果写一算法void StrReplaceAll(char *T, char *P, char *S),将T中出现的所有与P相等的不重叠子串替换为S,这里S和P的长度不一定相等。
若S和T是用结点大小为1的单链表存储的两个串,试设计一个算法找出S中第一个不在T中出现的字符。
答案:
简述下列每对术语的区别:
空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。
答:空串是指不包含任何字符的串,它的长度为零。
空白串是指包含一个或多个空格的串,空格也是字符。
串常量是指在程序中只可引用但不可改变其值的串。
串变量是可以在运行中改变其值的。
主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。
静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。
动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。
目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。
有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。
4、2
解:(1) stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。
因此:
执行p=stchr(s1,'t');后p的值是指向字符t的位置, 也就是p==&s1[5]。
执行p=strchr(s2,'9');后p的值是指向s2串中第一个9所在的位置,也就是p==&s2[9]。
执行p=strchr(s2,'6');之后,p的返回值是NULL。
(2)strcpy函数功能是串拷贝,strcat函数的功能是串联接。
所以:
在执行strcpy(s3,s1); 后,s3的值是"Stocktom,CA"
在执行strcat(s3,","); 后,s3的值变成"Stocktom,Ca,"
在执行完strcat(s3,s2);后,s3的值就成了"Stocktom,Ca,March 5,1999"
(3) 函数strcmp(串1,串2)的功能是串比较,按串的大小进行比较,返回大于0,等于0或小于0的值以表示串1比串2 大,串1等于串2 ,串1小于串2。
因此在调用函数strcmp(s1,s2)后,返回值是大于0的数(字符比较是以ascii码值相比的)
(4) 首先,我们要知道&s1[5]是一个地址,当放在函数strcmp中时,它就表示指向以它为首地址的一个字符串,所以在strcmp( &s1[5],"ton")中,前一个字符串值是"tom,CA",用它和"ton"比较,应该是后者更大,所以返回值是小于0的数。
(5)strlen是求串长的函数,我们先将s1,s2联接起来,值是"Stocktom,CAMarch 5,1999",数一数有几个字符是不是23个(空格也是一个) 所以返回值是23。
4、3解:所有的有效位移i的值如下:2,5,9。
算法NaveStrMatch(T,P)的返回值是第一个有效位移,因此是2。
二、算法设计题:
解:算法如下:
void StrInsert(char *S, char *T, int i)
{
;
char B[Maxsize]="very cool ";
StrInsert( A,B,7);
printf("%s",A);
}
void StrInsert(char *S, char *T, int i)
{
,17};
HString B={"am",2};
printf("%s\n",;
printf("%s\n",;
printf("\n%s",StringMatch( &A,&B));
}
char* StringMatch( HString *T, HString *P)
{ ;
}
解:这个算法是具有实用性的,但是做起来比较难,简单的算法应是这样的,利用的算法在串T中找到一个P的匹配成功,马上进行串替换,然后从替换后的下一个位置进行匹配,直到查找完所有的有效位移或者所有合法位移考查完毕也没有匹配成功。
算法如下:
void StrReplaceAll(char *T, char *P, char *S)
{
;
char B[]="good";
char C[]="very cool";
printf("The original string is: %s",A);
printf("\n%s---%s",B,C);
StrReplaceAll( A,B,C);
printf("\nThe new String is:%s",A);
}
void StrDelete(char *S, int i ,int m)
{
char Temp[Maxsize];;
return NULL;
}
解:查找过程是这样的,取S中的一个字符(结点),然后和T中所有的字符一一比较,直到比完仍没有相同的字符时,查找过程结束,否则再取S中下一个字符,重新进行上述过程。
算法如下:
char SearchNo( LinkString S, LinkString T)
{
;
return NULL;
}。