1、Lesson 11 深入研究字符指针,,字符指针,2006.4.47设有以下定义和语句char st20 = “Program“, *p;p = st;则以下叙述中正确的是A)*p与st0的值相等B)st与p的类型完全相同C)st数组长度和p所指向的字符串长度相等D)数组st中存放的内容和指针变量p中存放的内容相同,字符指针10-1,2007.9.29若有:char s =1,2,3, *p = s; 则以下不能计算出一个char型数据所占字节数的表达式是A)sizeof(s) B)sizeof(char)C)sizeof(*p) D)sizeof(s0),字符指针10-2,2005.3.42
2、以下程序的运行结果是char s = “159“, *p = s;printf(“%c“, *p+);printf(“%c“, *p+);,15,2006.9.37以下程序的运行结果是 char s = “aeiou“, *p = s; printf(“%cn“, *p + 4);,字符指针10-3,2007.4.44以下程序的运行结果是 char s = “aeiou“, *p = s;printf(“%cn“, *(p + 4);,e,u,2010.9.22以下程序的运行结果是char s = “aeiou“;printf(“%c“, *s + 2);,c,2009.9.20以下程序运行后
3、n的值是 char *s = “012xy“;int i, n = 0;for (i = 0; si != 0; i+)if (si = a ,字符指针10-4,2,2004.9.42以下程序的运行结果是 char s = “Yesn/No“, *p = s;puts(p + 4);*(p + 4) = 0;puts(s);,/No Yes,2004.9.36以下程序的运行结果是char s = “ABCD“, *p;for (p = s+1; *p; p+) puts(p);,字符指针10-5,BCD CD D,2009.3.21以下程序的运行结果是char *s = “ABC“;dopri
4、ntf(“%d“, *s % 10);s+; while (*s);,567,2004.9.35以下程序的运行结果是char st 10 = “China“, “Beijing“;char *p = st;printf(“%sn“, p + 10);,字符指针10-6,Beijing,2004.9.11以下程序的运行结果是 char a = “Language“, b = “Programe“;char *p1 = a, *p2 = b; int k;for (k = 0; k = 7; k+)if (*(p1 + k) = *(p2 + k)printf(“%c“, *(p1 + k);,g
5、ae,例以下程序的运行结果是char st = “xyz“, *p = st;while (*p) p+;for (p-; p - st = 0; p-)printf(“%s“, p);,字符指针10-7,zyzxyz,例以下程序的运行结果是 char st = “Game“;st += 2; printf(“%d“, st0);A)输出G的ASCII码 B)输出m的ASCII码C)输出I的ASCII码 D)程序有错,2004.9.12以下程序的运行结果是char a = “123456789“, *p;int i = 0;p = a;while (*p)if (i % 2 = 0) *p =
6、 *;p+; i+;puts(a);,字符指针10-8,*2*4*6*8*,例以下程序的运行结果是 char st 20 = “I“,“Love“,“You“, *p;p = (char *)st;printf(“%dn“, strlen(p + 20);,字符指针10-9,4,例以下程序的运行结果是char sa = “ABCDEFG“, sb80, *p;p = sa + 3;while (-p = sa)strcpy(sb, p);printf(“%dn“, strlen(sb);,7,例以下程序的运行结果是char fun(char ch)if (ch = A ,字符指针10-10,i
7、 love you!,例以下程序的运行结果是 char s = “ATM“, *p = s;while (*p) printf(“%c“, *p+);,输出字符串,ATM,例以下程序的运行结果是char s = “ATM“;for (i = 0; i strlen(s); i+)printf(“%c“, si);,ATM,例以下程序的运行结果是char s = “ATM“; int i = 0;while (si) printf(“%c“, si+);,ATM,字符数组名作函数参数,例以下程序的运行结果是int fun(char *p)int k = 0;while (pk) k+;retur
8、n k;main()char a = “NBA“;printf(“%d“, fun(a);,3,字符数组名作参数11-1,例以下程序的运行结果是int fun(char *p)char *s = p;while (*p) p+;return p - s;main()char a = “NBA“;printf(“%d“, fun(a);,3,字符数组名作参数11-2,例以下程序的运行结果是void fun(char *p)int i;for (i = 0; i = a ,CHINA!,字符数组名作参数11-3,2005.3.14以下程序的运行结果是void fun(char *s, int p,
9、 int k)int i;for (i = p; i k-1; i+)si = si+2;main()char s = “abcdefg“;fun(s, 3, strlen(s); puts(s);,字符数组名作参数11-4,abcfg,2010.3.12以下程序的运行结果是void f(char *s)int i, n = strlen(s);char t = sn-1;for (i = n - 1; i 0; i-)si = si-1;s0 = t;main()char s = “abcdef“; f(s); puts(s);,字符数组名作参数11-5,fabcde,2010.9.34以下
10、程序的运行结果是void fun(char *p) int i = 0;while (pi) if (pi= ,字符数组名作参数11-6,aB cD EFG !,2007.9.35以下程序的运行结果是int fun(char s )int n = 0;while (*s = 0) n = 10 * n + *s - 0; s+; return n;void main()char s10 = “61*4*9*0*“;printf(“%dn“, fun(s);,字符数组名作参数11-7,61,2006.4.37以下程序的运行结果是void fun(char *p)char *q = p;while
11、 (*q != 0) (*q)+; q+; main()char a = “Program“, *p = ,Prohsbn,字符数组名作参数11-8,字符数组名作参数11-9,将a所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的新串放在t所指的数组中。 void fun(char *a, char *t),int i, j = 0;for (i = 0; i strlen(a); i += 2)if (ai % 2 = 0) tj+ = ai;tj = 0;,字符数组名作参数11-10,字符串中只包含字母和*号,删除字符串中所有的*号,不得使用
12、C语言提供的字符串函数。void fun(char s ),int i = 0, j = 0;while (si)if (si != *) sj+ = si;i+;sj = 0;,字符数组名作参数11-11,字符串中只包含字母和*号,删除串尾部所有的*号,不得使用C语言提供的字符串函数。void fun(char s ),char *p = s;while (*p) p+;p-;while (*p = * ,实现字符串函数,2 strcat函数,3 strcmp函数,1 strcpy函数,实现strcpy函数4-1,N,B,A,sb,2,0,1,0,3,int i; for (i = 0; i
13、 = strlen(sb); i+)sai = sbi;,N,B,A,sa,0,实现strcpy函数4-2,N,B,A,sb,0,p = sa, w = sb; while (*w) *p = *w;w+; p+; ,N,B,A,sa,0,w,p,*p = 0;,*p = 0;,w,w,w,p,p,p,*p = *w;,实现strcpy函数4-3,N,B,A,sb,0,p = sa, w = sb; while (*p = *w) p+, w+; ,N,B,A,sa,0,w,p,w,w,w,p,p,p,实现strcpy函数4-4,N,B,A,sb,0,p = sa, w = sb; while
14、 (*p+ = *w+);,N,B,A,sa,0,w,p,w,w,w,p,p,p,w,p,实现strcat函数2-1,m,e,0,sa,int i, a = strlen(sa), b = strlen(sb); for (i = 0; i = a; i+)sbb+i = sai;,L,O,V,sb,E,0,2,0,1,m,e,0,实现strcat函数2-2,m,e,0,sa,char *p = sa, *w = sb + strlen(sb);,L,O,V,sb,E,0,m,e,0,p,w,p,p,p,w,w,w,while (*w+ = *p+);,2004.4.14以下fun()函数实现
15、字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。void fun(char *s, char *t) while (*s+ = _);main()char st130, st2 = “abcdefgh“;fun(st1, st2);printf(“%sn“, st1);,习题演练4-1,*t+,2010.9.32以下不能将s所指字符串正确复制到t所指存储空间的是A)while (*t = *s) t+; s+; B)for (i = 0; ti = si; i+);C)do *t+ = *s+; while (*s);D)for (i = j = 0; ti
16、+ = sj+; );,习题演练4-2,2009.9.32下列函数的功能是fun(char *a, char *b)while (*b = *a) != 0) a+; b+; A)将a所指字符串赋给b所指空间B)使指针b指向a所指字符串C)将a所指字符串和b所指字符串进行比较D)检查a和b所指字符串中是否有0,习题演练4-3,习题演练4-4,字符串中只包含字母和*号,删除字符串中的前导*号,不得使用C语言提供的字符串函数。void fun(char s )char *p = s, *w = s;while (*w = *)w+;while (*p+ = *w+) ;,实现strcmp函数4-1
17、,A,B,C,sa,D,int i = 0; while (sai = sbi)i+;,A,T,M,sb,0,if (sai sbi) return 1; else return 0;,0,2,0,1,3,4,0,2,1,3,实现strcmp函数4-2,A,B,0,sa,?,int i = 0; while (sai = sbi)i+;,A,B,0,sb,?,2,0,1,3,0,2,1,3,if (sai sbi) return 1; else return 0;,实现strcmp函数4-3,A,B,0,sa,int i = 0; while(sai=sbi ,A,B,0,sb,2,0,1,3
18、,0,2,1,3,if (sai sbi) return 1; else return 0;,实现strcmp函数4-4,A,B,C,sa,D,char *p = sa, *w = sb; while (*p = *w ,A,T,M,sb,0,if (*p *w) return 1; else return 0;,0,p,w,p,w,2005.3.43以下函数的功能是fun(char *a, char *b)while (*a A)计算a和b所指字符串的长度之差B)将b所指字符串复制到a所指字符串中C)将b所指字符串连接到a所指字符串后面D)比较a和b所指字符串的大小,习题演练,常用I/O函数
19、,getchar函数8-1,2004.4.10运行时输入:12,则以下程序的输出结果是char ch1, ch2;int n1, n2;ch1 = getchar();ch2 = getchar();n1 = ch1 - 0;n2 = n1 * 10 + (ch2 - 0);printf(“%dn“, n2);,12,getchar函数8-2,2005.9.35程序运行时输入:a,则叙述正确的是char c1 = 1, c2 = 2;c1 = getchar();c2 = getchar();putchar(c1);putchar(c2);A)变量c1被赋予字符a,c2被赋予回车符B)程序将等
20、待用户输入第2个字符C)变量c1被赋予字符a,c2中仍是原有字符2D)变量c1被赋予字符a,c2中将无确定值,getchar函数8-3,2010.3.15运行时输入:1234,则以下程序的输出结果是char a,b,c,d;scanf(“%c%c“, A)1234 B)12 C)12 D)123 34,getchar函数8-4,2006.4.29运行时输入:123456,则以下程序的输出结果是char c1, c2, c3, c4, c5, c6;scanf(“%c%c%c%c“, A)1267 B)1256 C)1278 D)1245,getchar函数8-5,2006.4.22通过whil
21、e循环不断读入字符,当读入字母N时结束循环。以下正确的程序是A)while (ch = getchar() != N)printf(“%c“, ch);B)while (ch = getchar() != N)printf(“%c“, ch);C)while (ch = getchar() = N)printf(“%c“, ch);D)while (ch = getchar() = N)printf(“%c“, ch);,getchar函数8-6,2009.3.22若有int n = 0; ,以下不能统计一行输入字符个数(不含回车符)的程序段是A)while (ch = getchar() !
22、= n) n+;B)while (getchar() != n) n+;C)for ( ; getchar() != n; n+);D)for (ch = getchar(); ch != n; n+);,2007.4.7运行时输入:1234567890,则while循环体将执行的次数是while (ch = getchar() = 0)printf(“#“);,0,getchar函数8-7,2009.3.10运行时输入:1abcedf2,则程序的输出结果是char a = 0, ch;while (ch = getchar() != n)if (a%2 != 0 ,1AbCeDf2,getc
23、har函数8-8,2005.4.11已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33。输出结果是char a, b;a = getchar();scanf(“%d“, ,1,B,scanf函数6-1,2007.9.62010.9.7输入:1234567,则程序的输出结果是int a = 1, b; scanf(“%2d%2d“, ,12,34,2006.9.18运行时输入:876 543.0,则变量a和b的值分别是int a; float b; scanf(“%2d%f“, A)876和543.000000 B)87和6.000000C)87和543.000000 D)7
24、6和543.000000,scanf函数6-2,2009.3.23使m的值为12,n的值为34,c1的值为字符a,c2的值为字符b,正确的输入格式是int m, n; char c1, c2;scanf(“%d%c%d%c“, A)12a34b B)12 a 34 bC)12,a,34,b D)12 a34 b,2007.9.18输入:55566 7777abc,则程序运行后y的值为int j; float y; char name50;scanf(“%2d%f%s“, ,566.0,scanf函数6-3,2005.4.19有以下程序,若想从键盘上输入数据,使变量m中的值为123,n中的值为4
25、56,p中的值为789,则正确的输入是 int m, n, p;scanf(“m=%dn=%dp=%d“, A)m=123n=456p=789B)m=123 n=456 p=789C)m=123,n=456,p=789D)123 456 789,scanf函数6-4,2004.9.26有以下程序char a, b, c, d; scanf(“%c,%c,%d,%d“, 运行输入:6,5,65,66。则以下程序的输出结果是 A)6,5,A,B B)6,5,65,66C)6,5,6,5 D)6,5,6,6,scanf函数6-5,2005.4.18有定义语句:int b; char c10;则正确的
26、输入语句是A)scanf(“%d%s“, ,2005.4.6若输入:10 20 30,则输出int i = 0, j = 0, k = 0;scanf(“%d%*d%d“, ,10,30,0,scanf函数6-6,2009.3.8运行时输入: 65,则以下程序的输出结果是char c1, c2;scanf(“%c“, A)A,a B)a,A C)6,5 D)无输出结果,11,本课小结,常用输入输出函数,字符数组名作函数参数,实现strcpy函数,实现strcat函数,实现strcmp函数,课后题:统计子串个数,编写函数fun,统计长度为2的字符串a在另一个字符串b中出现的次数。例如:若 a = “he“ b = “There are spots in the sun.“ 则函数返回2。 int fun(char a , char b ) . ,