C语言第8章 字符串

合集下载

第8章 编译预处理-C语言程序设计-王晓峰-清华大学出版社

第8章   编译预处理-C语言程序设计-王晓峰-清华大学出版社
SSSV(sa,sb,sc,vv); printf("sa=%d\nsb=%d\nsc=%d\nvv=%d\n",sa,sb,sc,vv); return 0; }
【例8. 7】 带参宏定义的实参是表达式的情况。
【程序】 #include <stdio.h> #define SQ(y) (y)*(y) int main() { int a,sq; printf("input a number: ");
④90。表达式3*F( 3+2)被替换为3*(( 3+2)*( 3+2)+( 3+2))。
【例8. 6】 一个宏定义代表多个语句。
【程序】 #include <stdio.h> #define SSSV(s1,s2,s3,v) s1=l*w; s2=l*h; s3=w*h; v=w*l*h; int main() { int l=3,w=4,h=5,sa,sb,sc,vv;
printf("PI is %9.7f.\n",PI); return 0;
}
【运行】 PI is 3.1415926
【例8. 3】 用无参宏定义表示常用的数据类型和输出格式。
【程序】 #include <stdio.h> #define INTEGER int #define REAL float #define P printf #define D "%d\n“ #define F "%f\n" int main() { INTEGER a=5, c=8, e=11;
REAL b=3.8, d=9.7, f=21.08; P(D F,a,b); P(D F,c,d); P(D F,e,f); return 0; }

《C语言程序设计》第8章指针

《C语言程序设计》第8章指针
}
10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)

C语言程序设计知识点—第8章 指针结构体与预处理命令

C语言程序设计知识点—第8章 指针结构体与预处理命令
比较两个指针 #include<stdio.h> void main () { int *ptrnum1, *ptrnum2; int value = 1; ptrnum1 = &value; value += 10; ptrnum2 = &value; if (ptrnum1 == ptrnum2) printf("\n 两个指针指向同一个地址\n"); else printf("\n 两个指针指向不同的地址\n"); }
指针使用示例 2 void main() { int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); printf("\n num1 的地址是: %x \n", ptr1); ptr2 = &num2; printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x \n", ptr2); *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); }
C 语言程序设计知识点
主讲教师:杨剑
第 8 章:指针、结构体与预处理命令
1. 本章目标
理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的关系 理解结构体的概念和定义 理解预处理指令
2. 内存地址
内存是一个连续编址的空间,每一个存储单元都有一个固定的编号,称为内存地址。 内存地址通常用 16 进制数表示。

c语言第8章-编译预处理及位运算习题答案doc资料

c语言第8章-编译预处理及位运算习题答案doc资料

c语言第8章-编译预处理及位运算习题答案编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。

A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。

A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。

A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C 语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。

A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。

A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3D)64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。

C语言中如何进行字符串操作

C语言中如何进行字符串操作

C语言中如何进行字符串操作第一章:字符串介绍和初始化在C语言中,字符串是一个由字符组成的字符数组。

在使用字符串操作之前,我们需要了解字符串的初始化方式。

字符串可以通过以下几种方式进行初始化:1. 使用字符数组初始化字符串:可以直接创建一个字符数组,并将字符串赋值给它。

例如:char str[10] = "hello";2. 使用字符串常量初始化字符串:可以直接使用双引号将字符串括起来并赋值给字符串变量。

例如:char str[] = "world";3. 使用指针初始化字符串:可以使用指针指向字符串常量,并将指针赋值给字符串变量。

例如:char *str = "welcome";第二章:字符串输入和输出C语言提供了多种方式进行字符串的输入和输出操作。

可以使用printf()函数输出字符串,使用scanf()函数输入字符串。

1. 输出字符串:使用printf()函数并使用%s格式控制符。

例如:char *str = "hello";printf("String: %s\n", str);2. 输入字符串:使用scanf()函数并使用%s格式控制符。

例如:char str[10];scanf("%s", str);第三章:字符串长度和拷贝在C语言中,可以使用strlen()函数获取字符串的长度,并可以使用strcpy()函数将一个字符串拷贝到另一个字符串中。

1. 获取字符串长度:使用strlen()函数可以获取字符串的长度。

例如:char str[] = "hello";int length = strlen(str);printf("Length: %d\n", length);2. 拷贝字符串:使用strcpy()函数可以将一个字符串拷贝到另一个字符串中。

C语言程序设计(李圣良)章 (8)

C语言程序设计(李圣良)章 (8)

第8单元 文 件 (3) 关闭文件。关闭文件即表示文件使用完毕,让操作系 统撤消缓冲区。应注意,当文件使用完毕时,必须执行关闭文 件操作,否则数据有可能丢失。原因是在写文件过程中,当缓 冲区没有写满时,系统就不会将数据存到外存文件中,这时若 没有执行关闭文件操作,则关闭操作系统时数据便会丢失。若 执行了正常关闭文件操作,系统就会在撤消缓冲区之前把没有 写满缓冲区中的数据存到外存文件中,就不会造成数据的丢失。
第8单元 文
文件使用方式 "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+"
"rb+" "wb+" "ab+"

表 8-1 文件使用方式
含义 只读,为输入打开一个文本文件 只写,为输出新建一个文本文件 追加,向文本文件尾添加数据 只读,为输入打开一个二进制文件 只写,为输出新建一个二进制文件 追加,向二进制文件尾添加数据 读写,为读/写打开一个文本文件 读写,为读/写新建一个文本文件 读写,向文本文件尾添加数据,同时可读 读写,为读/写打开一个二进制文件 读写,为读/写新建一个二进制文件 读写,向二进制文件尾添加数据,同时可读
第8单元 文 件 8.1.2 文件的基本操作
1. 文件指针变量 在缓冲文件系统中,关键的概念就是“文件指针”。对于 每一正在被使用的文件,都会在内存中开辟一个区,专门用来 存放文件的相关信息。其中包括文件的名字、文件的状态以及 文件的当前位置等信息,而这些信息都是保存在一个结构体的 变量中,该结构体类型是由系统定义的,取名为FILE。而在C 语言中,这些文件类型的声明均在“stdio.h”头文件中。

高树芳C语言程序设计--第八章


30
8.5 知识拓展
案例8-11 指针的高级应用 [案例任务] 阅读下列程序 ,分析运行结果,了解指 针的各种应用。
程序代码
31
8.5 知识拓展
相关知识:
1.有关指针的数据类型小结 2.案例说明 3.main函数的参数
32
12
8.2 指针变量
[课堂训练8-1] void swap(int *p1,int *p2) { int *t; t=p1; p1=p2; p2=t; }
1.分析下面的程序,写出运行结果。 #include <stdio.h> void main() { void swap(int *p1,int *p2); int *p1,*p2,a=6,b=8; p1=&a; p2=&b; printf(" 交换前:*p1=%d,*p2=%d\n",*p1,*p2); swap(p1,p2); printf(" 交换后:*p1=%d,*p2=%d\n",*p1,*p2); }
17
8.3 指针与数组
案例8-6 [案例任务]
冒泡排序
使用指针指向一维整型数组,使用冒泡排 序法对数组元素从小到大排序并输出。
程序代码
18
8.3 指针与数组
相关知识: 1.冒泡排序法 2.指针变量的其他运算
19
8.3 指针与数组
案例8-7 [案例任务]
逆置一维数组
使用数组名或指针变量作为函数形参与实 参,完成一维数组元素的逆置。请分析程 序运行结果,并对两个方法进行比较。
6
8.2 指针变量
案例8-2 用指针交换两整数 案例8-3 用指针比较两数大小 案例8-4 用指针参数交换两整数

浙大版《c语言程序设计(第4版)》讲解

浙大版《c语言程序设计(第4版)》讲解《C语言程序设计》是国内C语言教材的重要书籍,高校中的计算机专业等都有教授。

浙大版《C语言程序设计(第4版)》是由著名计算机科学家袁春风编写的C语言教材,该书主要介绍了C语言基础、字符串、数组、指针、结构体、文件操作等内容。

本文将对该书内容做简要概括。

第一部分:C语言基础第一章:概述该章主要介绍了计算机语言的发展与演化,C语言的历史和主要特点,以及C语言的应用领域和发展前景。

第二章:初识C语言该章节主要介绍了C语言的基本概念,例如标识符、关键字、注释等。

并且结合一些简单的例子介绍了C语言的语法格式和执行规则。

第三章:数据类型该章节主要介绍了C语言的数据类型,包括整型、实型、字符型、布尔型等。

并且介绍了类型转换及其规则。

第四章:运算符与表达式该章节主要介绍了C语言的基本运算符及其优先级、结合性和作用。

并且通过实例来介绍了使用运算符和表达式的方法及注意事项。

第五章:分支结构该章节主要介绍了C语言中的分支结构,包括if、if-else、switch等,以及运用分支结构解决问题的方法和技巧。

第二部分:数组、字符串和指针第七章:数组该章节主要介绍了C语言中的数组,包括一维数组、二维数组等,并结合例子介绍了数组的定义、初始化、遍历、赋值等操作。

第八章:字符串该章节主要介绍了C语言中的字符串,包括字符串的定义、初始化、输入、输出等。

并且介绍了使用字符串解决问题的方法和技巧。

第九章:指针第三部分:函数与结构体该章节主要介绍了C语言中的结构体,包括结构体的定义、初始化、访问、结构体数组、结构体指针等。

并且介绍了结构体在程序中的应用。

第四部分:文件操作与其他第十二章:文件操作第十三章:其他语言特性与扩展该章节主要介绍了C语言扩展的特性,包括宏定义、预处理指令、变长参数等。

并且介绍了C语言与其他语言的异同点。

总结:《C语言程序设计(第4版)》是一本权威的C语言教材,该书系统全面地介绍了C语言的基本概念、语法格式、运算符、控制语句、数组、指针、函数、结构体、文件操作等方面的内容,让读者对C语言的掌握更加深入。

C语言程序设计基础 第8章 数据文件处理技术


offset为long型的位移量,以ptname为基准,移动 的字节数。
函数返回值:成功移动返回0,否则返回非0。
10. 函数fseek-例 【例1】 fseek (fp, 40L, SEEK_SET); 表示:将当前位置移到离文件头40个字节处。 【例2】 fseek(fp, 20L, SEEK_CUR); 表示:将当前位置移到离当前位置20个字节处。 【例3】 fseek(fp, -30L, SEEK_END);
文件不能打开时,函数 fopen()将返回空指针值 NULL。 程序应考虑到文件不能正常打开的极端情况,应用以下形式 的代码描述打开一个文件的要求: if ((fp = fopen(fname, "r")) == NULL) { printf("不能打开文件 %s。\n", fname); return; }
fputc()和fgetc()函数-例2
【例2】将一个文件中的数据复制到另一个文件中。 #include <stdio.h>
void main()
{ FILE *in, *out; char ch, infile[40], outfile[40]; gets (infile); if (( in = fopen(infile, "r")) == NULL) { printf ("不能打开源文件 %s\n", infile); scanf ("%*c"); return; } /* 起暂停作用 */
12. 成批读数据函数fread() 形式指向的文件读入count*size个字节,存入buffer。 函数返回值:读取成功返回count值,否则返回0。
说明:常用于二进制文件的读。

C语言字符串数组详解

C语⾔字符串数组详解C语⾔字符串数组字符串是连续的字符序列,最后以空字符'\0'作为终⽌符。

⼀个字符串的长度指所有字符的数量,但不包括终⽌符。

在 C 语⾔中,没有字符串类型,⾃然也就没有运算符以字符串为操作数。

字符串被存储在元素类型为 char 或宽字符类型数组中(宽字符类型指 wchar_t、char16_t 或 char32_t)。

宽字符组成的字符串也称为宽字符串(wide string)。

C 标准库提供了⼤量的函数,它们可以对字符串进⾏基本操作,例如字符串的⽐较、复制和连接等。

在这些传统的字符串函数以外,C11 新增了这些函数的“安全”版本,它们能确保字符串操作不会超出数组的边界。

可以使⽤字符串字⾯量来初始化任何字符类型数组。

例如,下⾯两个数组的定义是等价的:char str1[30] = "Let's go"; // 字符串长度:8;数组长度:30char str1[30] = { 'L', 'e', 't', '\'', 's',' ', 'g', 'o', '\0' };存储字符串的数组⼀定⽐字符串长度多⼀个元素,以容纳下字符串终⽌符(空字符'\0')。

因此,str1 数组能够存储的字符串最⼤长度是 29。

如果定义数组长度为 8,⽽不是 30,就会发⽣错误,因为它⽆法包含字符串终⽌符。

如果在定义⼀个字符数组时,没有显式地指定长度,但使⽤了字符串字⾯量来对它进⾏初始化,该数组的长度会⽐字符串长度多 1。

如下列所⽰:char str2[] = " to London!"; // 字符串长度:11 (注意开头的空格);// 数组长度:12下⾯的语句使⽤标准函数 strcat()把字符串 str2 附加到字符串 str1 的后⾯(str1 数组长度必须⾜够⼤以容纳连接后的全部字符)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十一章字符串1 D解析:字符串在C语言中年干存储时,应该用数组或者是指针进行存储数据。

A选项中str为数组,但是后面的赋值的对象中的’\064’为一个字符,不能构成一个字符串,字符串必须有一个结束符,即:’\0’。

故A答案是错误的。

B答案中的str为一个字符变量,变量不能用来存储字符串。

故B选项是错误的。

C答案同理。

只有D答案中符合字符串的定义规则。

2 A解析:A选项中ss[1]可以看作是一个地址常量,其值不能改变,所以不可以对其赋值。

但是在定义二维数组的时候,对其进行初始化是允许的,如选项B。

选项C中定义的值指针数组,数组中的每一个元素都是指针,所以ss[1]代表的是一个指针,所以指针可以指向一个字符串,即让该指针变量指向该字符串。

选项D中的ss为一个指针数组,所以指针数组中元素都为指针,此时为让该变量指向了“right?”字符串。

3 A解析:str是地址常量,p是指针变量,两者类型不一致,选项B错误。

str 数组的长度是20,而p所指的字符串遇到’\0’就结束,本题中其长度应该为7,选项C错误。

同理,既然str数组的长度与p所指字符串长度不同,所以D答案中的str中的内容为在存储字符串以后的后面为13个‘\0’。

p的内容为:7个有效字符。

4 C解析:对于数组p,只有三个元素,分别是’a’,’b’,’c’,所以sizeof(p)的输出结果应该是3 ,对于数组q,存储了四个元素,分别是’a’,’b’,’c以及’\0’。

所以 sizeof(q)的输出结果是4。

5 C解析:对于数组a,只有四个元素,分别是’x’,’y’,’z’ 以及’\0’,所以sizeof(a)的输出结果应该是4,对于数组b,存储了三个元素,分别是’x’,’y’,’z’。

所以 sizeof(b)的输出结果是3。

所以数组a 的长度大于b 数组的长度。

6 C解析:数组a中存储了7个字符,分别是’a’,’0’,’\0’,’0’,’a’,’0’,’\0’,当使用sizeof(a)统计计数的时候,会统计计算这7个字符,但是当用strlen(a)统计数组元素个数的时候,遇到’\0’的时候就会结束,所以最终的输出结果是7 2 。

7 B解析:ps=s语句使ps指向数组s的首地址,即指向元素a,对于表达式*p+4,由于*的优先级高于+,所以进行间接访问运算,*p得到a,再+4,根据ASCII码的顺序,最后的输出结果应该是e,答案为B。

8 B解析:选项A的getc()函数完成的是从文件中读入一个字符,而不是题目所要求的从键盘读入一个字符串,错误。

选项C的getchar()函数每次读入的是一个字符变量,而不是字符串,错误。

选项D的scanf()函数,通过格式控制符%s可以读入字符串变量,但是遇到空格会作为输入数据的分隔符,不会被作为数据读入。

选项B :gets()函数的功能是从键盘中获得一个字符串,并且在获得字符串的时候可以接受空格字符。

9 D解析:选项A中的参数2的类型应该为指针或者是地址,x[4]为一个数组中的元素,数据类型不匹配,应改为&x[4],选项B中的y是数组名,为常量,不能进行++运算,错误。

选项C中参数1对应的数组长度小于参数2的数组长度,错误。

故只有D答案的结果正确。

10 B解析:strlen()函数统计字符串长度的时候,是在遇到’\0’的时候结束统计。

所以对于数组q来说,定义了数组的长度为10,并给前三个字符赋了初值,则从第4个字符开始,系统将数组元素的值置为’\0’,所以strlen(q)的结果是3 。

而对于数组p来说,数组长度为3,但是何时遇到’\0’无法确定,所以strlen(p)的值也无法确认。

11 D解析:函数f(char *p[],int n)完成的功能就是对字符串进行字典排序,所谓的字典顺序就是根据字母的大小顺序,strcmp函数中的功能是:将两个字符串进行比较,比较的原则是从第一个字符开始,如果第一个字符串相同的话,进行第二个字符的比较,一直往后,如果第一个字符不相同的话,直接返回第一个字符减第二个字符的值。

在f函数中的语句为两个for循环的嵌套。

那么执行过程为:1) i=0,i<4真值,执行内循环。

\j=1;j<5真值,执行后的结果为p[0]=”aabdfg”,p[1]=”abc”.j++后,j=2;j=2;j<5 真值,执行后的结果为p[0]= ”aabdfg”,p[2]=”abbd”,j++后,j=3;j=3;j<5 真值,执行后的结果为p[0]= ”aabdfg”,p[3]=”dcdbe”,j++后,j=4;j=4; j<5 真值,执行后的结果为p[0]= ”aabdfg”,p[4]=”cd”,j++后,j=5;j=5; j<5 假值。

i++后变量的值为12)i=1,i<4真值,执行内循环。

j=2;j<5 真值,执行后的结果为p[1]= ” abbd”,p[2]=” abc”, j++后,j=3;j=3;j<5 真值,执行后的结果为p[1]= ” abbd”,p[3]=”dcdbe”,j++后,j=4;j=4; j<5 真值,执行后的结果为p[1]= ” abbd”,p[4]=”cd”, j++后,j=5;j=5; j<5 假值。

i++后变量的值为23)i=2,i<4真值,执行内循环。

j=3;j<5 真值,执行后的结果为p[2]= ” abc”,p[3]=”dcdbe”,j++后,j=4;j=4; j<5 真值,执行后的结果为p[2]= ” abc”,p[4]=”cd”, j++后,j=5;j=5; j<5 假值。

i++后变量的值为34)i=3, i<4真值,执行内循环。

j=4; j<5 真值,执行后的结果为p[3]= ” cd”,p[4]= ”dcdbe”, j++后,j=5;j=5; j<5 假值。

i++后变量的值为45) i=4, i<4假值,退出循环。

最后strlen(p[1])的值为:4。

12 A解析:*运算符和++运算符的优先级相同,且结合方向都是自右向左,所以在进行运算时,先计算++的值,再计算*的值,p=s,p指向了字符串中的第一个元素。

即‘1’。

第一个*p++的计算为:变量p往后指一个位置,即指向了变量‘5’。

表达式p++的值为变量原来的值,即指向的还是‘1’,所以*p++得到的值为‘1’。

所以最后的输出的结果的1。

第二个表达式的*p++,由于在前面的运算中,p指向了字符变量‘5’。

*p++的计算为:变量p往后指一个位置,即指向了变量‘9’。

表达式p++的值为变量原来的值,即指向的还是‘5’,所以*p++得到的值为‘5’。

所以最后的输出的结果的5。

13 D解析:该题中的while语句中的功能是在a所指的字符串不结束,b所指的字符串不结束,同时两个字符串所指的字符的都相同时,继续往后判断,直到两个字符不相同,或者是其中的一个字符串结束时,退出该循环,所以最后返回的两个所对应位置上的字符的AscII值,功能和strcmp()功能是相同的。

所以选择答案D。

14 A解析: point()函数传递的是指针变量的值,而不是指针变量本身的地址,仍然是一个传值而不是传地址的过程,实参的值没有改变,所以指针p仍然指向字符串的首地址,输出结果为a。

15 D解析:比较字符串大小的时候,应该调用函数strcmp(),而不是直接进行比较,选项A错误。

对于选项B,只要s1和s2不相等,无论s1所指串是大于或是小于s2所指串,其结果非0(真值),都会执行语句S,与题意不符,错误。

选项C的函数实参顺序错误。

16 B解析:对于二维数组,每一行中含有的元素的个数为:10。

第二行的首元素是接着第一行的最后一个元素的。

所以p+10是指向字符串“Beijing”字符串的首地址,所以正确答案是B。

17 D解析:对于格式控制符%s,在输出的时候遇到’\0’才结束输出。

即输出的是一个字符串。

执行循环。

1) p=s+1;p<s+4为真值,输出的结果为:BCD。

p++后,p指向了‘C’。

2) p<s+4为真值,输出的结果为: CD。

p++后,p指向了‘D’。

3) p<s+4为真值,输出的结果为: D。

p++后,p指向了‘\0’。

4) p<s+4为假值,退出该循环。

18 B解析:gets()函数需要的参数是指针类型的。

所以ACD都满足条件,答案B中的a[0]是数组中的元素,是一个字符,不是指针类型,错误。

19 A解析:char *p[4],即定义一个指针数组,数组中的每一个元素都为指针,p[4]指向的是下标为4的这一个字符串。

即:指向的是第5个字符串的首地址,即字符串“cd”,所以strlen(p[4])的结果是2。

20 C解析:数组名是指针常量,不能对其进行整体赋值和整体使用,所以选项C错误,需要注意一点:在定义字符数组的时候可以初始化,如选项A。

21 C解析: char *s1=”abc”,即定义了一个指针变量s1,并且s1指向的是这个字符串的第一个元素,即指向了字符‘a’。

同样的s2指向了字符‘1’。

swap 函数中的语句的功能是交换变量*x和*y两个变量的值,则最后输出的结果为s1所指的字符串的内容为:1bc,s2所指的字符串的内容为:a23。

22 B解析:fun函数统计首字符是’T’的字符串的个数,所以符合条件的有”Tue”和”Thu”,输出结果为2.fun函数中的功能为:1) i=0;i<7;p[i][0]==’T’为假值,n=0;i++。

变量i的值为1;2)i=1;i<7;p[i][0]==’T’为真值,n=1;i++。

变量i的值为2;3)i=2;i<7;p[i][0]==’T’为假值,n=1;i++。

变量i的值为3;4)i=3;i<7;p[i][0]==’T’为真值,n=2;i++。

变量i的值为4;5)i=4;i<7;p[i][0]==’T’为假值,n=2;i++。

变量i的值为5;6)i=5;i<7;p[i][0]==’T’为假值,n=2;i++。

变量i的值为6;7)i=6;i<7;p[i][0]==’T’为假值,n=2;i++。

变量i的值为7;8)i=7;i<7;假值。

退出循环。

所以最后输出的是fun(str)即返回的就是n的值,即2.23 A解析:fun1函数中的(*q)++将指针q所指向的字符进行一次自加运算,所以输出结果为A.p=&a[3],即变量p得到的是字符‘g’的首地址。

(*q)++代表的是,先计算出*q的值,然后计算变量的自加。

执行循环:1)*q!=’\0’为真值,(*q)++得到的结果为h,q++,指向了字符‘r’.2) *q!=’\0’为真值,(*q)++得到的结果为s,q++,指向了字符‘a’.3) *q!=’\0’为真值,(*q)++得到的结果为b,q++,指向了字符‘m’.4) *q!=’\0’为真值,(*q)++得到的结果为n,q++,指向了字符‘\0’.5) *q!=’\0’为假值,退出循环。

相关文档
最新文档