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

【例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; }
第8章习题答案

4
大学 C 语言程序设计教程
4. 从键盘输入一个字符串, 编写一个函数, 将此字符串中从第 m 个字符开始的 n 个字 符复制成另一个字符串,请编程。 分析:设置两个指针,使得指针一指向数组一的第 m 个元素,再从第 m 个元素开始复 制到第 n 个元素给第二个数组。 程序: #include"stdio.h" #define N 80 void copy_string(char *from, char *to,int k) { int t=0; for (;*from!='\0';from++,to++) { *to=*from; t++; if(t>k) break; } *to='\0'; } void main() { char a[N+1],b[N+1],*p,*q; int m,n; gets(a); scanf("%d",&m,&n); p=a+m1; q=b; copy_string(p,q); puts(q); } 运行结果: student↙ 3,4↙ uden 5. 输入 8 个整数,将其中最大的数与第一个数对换,最小的数与最后一个数对换。 分析:查找数组中最大值和最小值,用指针记下其位置并调整。 。 程序: #include"stdio.h" #define M 8
第 8 章 指针
3
运行结果: The last number is 4 3. 输入三个整数,按由小到大的顺序输出,请用指针编程实现。 分析:定义三个指向整型变量的指针。 程序: #include "stdio.h" void main() { int a,b,c,*p1,*p2,*p3,*t; scanf("%d,%d,%d",&a,&b,&c); p1=&a; p2=&b; p3=&c; if(*p1>*p2) { t=p1; p1=p2; p2=t; } if(*p1>*p3) { t=p1; p1=p3; p3=t; } if(*p2>*p3) { t=p2; p2=p3; p3=t; } printf("%d,%d,%d\n",*p1,*p2,*p3); } 运行结果: 4,2,5↙ 2,4,5
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.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
第八章 字符数据处理

第八章字符数据处理到现在为止,我们讨论的主要是数值数据的表示和处理。
本章将专门讨论字符数据的表示与处理,如字符常量、字符串常量、字符变量、字符数组、字符数据的输入输出以及字符处理函数等。
上一页下一页8.1 字符与字符串8.1.1 字符型数据第三章已经介绍了字符型数据的基本概念、表示方式和简单的使用问题。
这里再简单回顾一下其主要知识点。
字符型数据包括字符常量、转义字符常量、字符串常量、字符变量和符号常量。
字符常量:由单引号括起的单个字符。
如:'a','A','G','?'。
转义字符常量:以反斜杆'\'开头的特殊字符序列。
意思是把反斜杆后面的字符序列转换成特定的含义,而不是原来的含义。
例如:'\n'表示换行,而不是小写字母'n'。
'\r'表示回车;'\b'表示退格;'\\'表示'\'等等。
字符串常量:用双引号括起来的字符序列。
例如,"China","12234"等。
字符串常量的长度没有限制,系统在字符串的末尾自动加上'\0' ,以示字符串的结束。
字符变量:存放字符常量的内存变量。
字符变量用关键字char来说明。
可以在定义字符变量的同时进行初始化。
符号常量:以指定的符号代表其后的"一串字符"。
用于简化程序的编写和修改。
以下程序段就是符号常量应用例子。
#define PAI 3.14#define N 10main( ){int a[N]; /*等价于int a[10]; */……printf("%f\n",PAI); /*等价于printf("%f\n",3.14);*/printf("s=%f\n",PAI*r*r); /*等价于printf("s=%f\n",3.14*r*r);*/}上一页下一页8.2 字符数组C语言中有字符常量和字符变量,有字符串常量,但没有字符串变量。
第八章 字符数据处理

8.1 字符与字符串
8.1.1 字符型数据
1.字符常量:由单引号括起的单个字符如: ' 一' , '一', 'G','?。’。 2.转义字符常量:以反斜杆’\’开头的特殊字符序列意思是把反 。 斜杆后面的字符序列转换成特定的含义.而不是原来的含义。 3.字符串常量:用双引号括起来的字符序列其长度没有限制,系统 在末尾自动加上‘\n' 以示结束。。 例如, "Ch5nJr","1 x34" 等。 4.字符变量:存放字符常量的内存变量字符变量用关键字零碎工作 来说明在定义字符变量的同时可进行初始化。。。 5.符号常量:以指定的符号代表其后的“一串字符”用于简化程序 的编写和修改。。 例如:#定义 PAI 13.14 #定义 N 10
2. 整个字符串变量一次输入输出: %s
//字符变量引用
char a[10] , b[7]="abcde" ; scanf(“%s" , a); /*键盘输入的字符串存人a数组*/ printf(“%s=%s” , “a[10]=” , a) ; /*输出常量串和a数组中的字符串*/ printf(“%s” , &b[1]); /*输出字符串:bcde*/ a 数组 存储: b 数组
3. 常用的联合使用 例 1 : putchar(getchar());等同 printf("%c",getchar()); 例 2 :作为字符输入结束的判断条件 (c=getchar())!=‘\ n'; 表示若读入的字符不为“回车” 例:每读入一个字符输出该字符直到输入一个 "回车" 止 回车" 主要部份()。 回车后 { 烧焦 c ; 才读 为 () ; (c=getchar())!=‘\ n'; printf;("%c",c) 一 以下程序执行结果正确的是: (? ) (一)计算机 计算机 (B)CCoommppuutteerr
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.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。
第八章 判断题-字符串
第八章判断题1.用= =比较字符串对象时,如果字符串包含的是同一个值时,结果为true。
()2.字符串在创建后可以被修改。
()3.String类的charAt方法返回字符穿串中字符的个数。
()4.String类的compareTo方法在所比较的字符串相等时返回0。
()5.运算符“==”用于比较引用时,如果两个引用指向内存中同一个对象,则返回true。
()6.StringBuffer类的indexOf方法在字符串中定位某个字符或子串第一次出现的位置。
()7.String类的substring方法拷贝并返回字符串对象的一部分。
()8.String类的replace方法只返回一个新的字符串对象。
()9.String类的valueOf方法由它的参数转换成的字符串。
()10.StringTokenizer类的hasMoreTokens方法确定在字符串中是否还有语言符号返回。
()第八章选择题1.下面语句书写错误的是:A.String s = “Gone with the wind”;String t = “good”;String k = s + t;B.Stri ng s = “Gone with the wind”;String t;t = s[3] + “one”;C.String s = “Gone with the wind”;String standard = s.toUpperCase( );D.String s = “home directory”;String t = s - “directory”;2.请看下面的代码String s = “hello”;String t = “hello”;String c[ ] = {…h‟,‟e‟,‟l‟,‟l‟,‟o‟};下面哪一选项的语句返回值为真:A.s .equals(t);B.t .equals(c);C.s==t;D.t .equals(new String(“hello”));E. t==c;3.请看下面的代码String s = “story”;下面选项语句书写正确的是:A.s += “books”;B.char c = s[1];C.int len = s .length;D.String t = s.toLowerCase( );4.请看下面的代码1.class Example {2. String str;3. public Example( ){4. str = “example”;5. }6. public Example(String s){7. str = s;8. }9..}10.class Demo extends Example {11.}12.public class Test{13. public void f(){14. Example ex = new Example(“good”);15. Demo d = new Demo(“Good”);16. }17.}那一行将导致发生错误:A.3B.6C.10D.14E.155.请看下面的代码public class Example{String str = new String(“hello”);Char ch[ ]={…d‟,‟b‟,‟c‟};public static void main(String args[ ]){Example ex=new Example( );ex.change(ex.str,ex.ch);System .out .println(ex.str +“and”+ex.ch);}public void change(String str,char ch[ ]){str=”world”;ch[0]=‟a‟;}}该程序的输出结果是:A.hello dbcB.hello abcC.world dbcD.world abc6.下面选项正确创建一个字符型数组(含有4个元素)的是:A.String a[ ] = new String[4];for(int i=0;i<4;a[i++]=””);B.String a[ ]={“”,””,””,””};C.String a[4];D.String [4]a;E. String [ ]a = new String[4];For(int i=0;i<4;a[i++]=null);7.下面选项正确的是:A.String temp[ ]= new String{“j””a””z”}; B.String temp[ ]= {“j””a””z”};C.String temp= {“j”,”a”,”z”};D.String tem p[ ]= {“j”,”a”,”z”};8.请看下面的代码1.StringBuffer sb = new StringBuffer(“abc”);2.String s = new String(“abc”);3.sb.append(“def”);4.s.append(“def”);5.sb.inser(1,”zzzz”);6.s.concat(sb);7.s.trim( );下面说法正确的是:A.编译时在第一行发生一个错误B.编译时在第二行发生一个错误C.编译时在第三行发生一个错误D.编译时在第四行发生一个错误E. 编译时在第五行发生一个错误F. 编译时在第六行发生一个错误G. 编译时在第七行发生一个错误9.请看下面的代码String s1=new String(“hello”);String s2=new String(“there”);String s3=new String( );下面选项中语句正确的是:A.s3=s1+s2;B.s3=s1-s2;C.s3=s1&s2;D.s3=s1&&s2;10.请看下面的代码public class StrEq{public static void main(String argv[ ]){ StrEq s = new StrEq( );}private StrEq( ){String s = “Marcus”;String s2 = new String(“Marcus”);If(s == s2){System .out .println(“we have a match”);}else{System .out .pritln(“Not equal”);}}}下面说法正确的是:A.由于使用“private StrEq”编译时会出现错误B.输出“we have a match”C.输出“Not equal”D.由于使用“==”操作符导致编译时出现错误第八章程序设计题1.编写Applet程序,接受用户输入的一个字符串和一个字符,把字符串中所有指定的字符删除后输出。
第8章 python用户输入和if语句_python入门基础课件
布尔运算符
car = ‘Audi’ car.lower() == ‘audi’ (True) car != ‘auto’ (True) age = 18 age == 18 (True) age <= 21 (True) age >= 16 (True)
如果if语句的布尔表达式值为True,python就会执行紧跟在if语句后面的代码;否则就忽略这些代 码。
<class 'float'>
布尔表达式 SECTION
布尔表达式
if语句的一个示例 cars = [‘audi’, ‘bmw’, ‘lexus’, ‘toyota’] for car in cars:
if car == ‘bmw’: #布尔表达式 | 条件表达式 print(car.upper())
print(“pepper is a fruit”) else:
print(“pepper is not a fruit”)
关键字not in
关键字not in用于判断特定的值是否不包含在元组或者列表之中 fruits = [‘apple’, ‘banana’, ‘pineapple’, ‘orange’] if ‘pepper’ not in fruits:
另外, 在python中,True和整数1等价,而False和整数0等价。 True == 1 #True True + False + 1 #2
布尔运算符 SECTION
布尔运算符
在条件表达式中,最基本的运算是布尔比较运算符,用于执行同类型数据的比较。以下为常见
的布尔比较运算符。
表达式
描述
x == y
if request_topping in available_toppings: print(“Adding” + request_topping)
高树芳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 用指针参数交换两整数
第八章字符数据处理
\0
§8-3 二维字符数组(续2)
将程序改为:
char str[13];
scanf(“%s”,str);
同样输入: How are You?
结果是: H o w \0
( 表示空格)。
原因是系统将w和a之间的空格作为分割符。
第八章 字符数据处理
第一节 第二节 第三节 第四节 第五节
字符与字符串 字符数组 字符串处理函数 二维字符数组 应用举例
§8-1 字符与字符串
字符型数据 字符型数据的输入输出
◆ ◆ ◆ ◆
◆
◆
getchar() getche() getch() gets() putchar() puts();
例C8_502
s a b c m n o p \0 t a b c d e f g h i \0
§8-5 应用举例(续1)
例C8_502:将一个字符串接在另一个字符串后边。 main() { char s[100],t[100]; int i,j; for(i=0;(s[i++]=getchar())!=„\n‟;); for(i=0;(t[i++]=getchar())!=„\n‟;); for(i=0;s[i++]!=„\0‟;) ; for(j=0;(s[i++]= t[j++];); puts(s); }
例C8_201
§8-3 二维字符数组
例C8_301:用多维数组存放学生姓名,并进行排序。 ◆ 多维数组赋初值 Char name[ ][10]={“ ZhangHong ”,“ WangMing ”, “ LiHua ”, “ ZhaoNing ”}; ◆ 排序 for(i=0;i<3;i++) for(j=i+1;j<4;j++) 观察 if(strcmp(name[i],name[j])>0) 内存分 { strcpy(temp,name[i]); strcpy(name[i],name[j]); 配情况 和排序 strcpy(name[j],temp); 结果。 }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章字符串一、选择题1. 以下合法的字符型常量是( )A) ’\x13’B) ’\018’C) ’65’D) ’\n’【答案】 A【解析】本题考查的知识点是:字符常量和转义序列。
字符常量是以单引号作为起止符号,中间有一个或若干个字符。
因此,选项D可以排除。
但是,无论字符常量包含一个还是多个字符.每个字符常量只能表示一个字符,当字符常量的一对单引号内多于一个字符时,则将按照一定的规则解释为一个字符.这就是转义字符,其含义是:用反斜线“\”引导的下一个字符失去了原来的含义,而转义为具有某种控制功能的字符。
本题中,选项A就使用了转义字符。
“\”后紧跟x表示X后两位为此字符的ASCII码的十六进制值,即整个\xl3代表一个字符,其ASCII值转换为十进制后是19。
故本题应该选择A。
而选项B和C均违反了“每个字符常量只能表示一个字符”这个条件,而且它们都不是转义字符。
故应排除2.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,以下不能将变量c中大写字母转换为对应小写字母的语句是( )A)c=(c-A)&+'a' B)c=c+3 C)c=c-'A'+'a' D)c=('A'+c)&-'a'【答案】D【解析】本题主要考查的知识点是:字符的算术运算。
字符类型(char)数据在参与运算时可视为整型,与整型的区别仅在于所占内存字节数不同。
在Tc中整型占2字节;VC中整型占4字节.而字节型始终只占1个字节。
故字符型数据表示范围是-128~127。
本题中已告知“大写字母A的ASCII码是65,小写字母a的ASCII码是97”,故可知在表达式中‘A’就等价于65,而‘a’就等价于97。
另外,大小写字母在ASCII中的排列是连续的,即‘A’是65,那么‘B’就是66这样连续排列。
由此可知,将大写字母转换为小写字母,只需让c加上‘a’与‘A’之差(97-65=32)即可。
所以,选项B 和C都可以实现转换。
因为,题目已告知c中为大写字母,所以,选项A中将c先减去‘A’结果肯定在26之内(因为最大值‘z’-‘A’=25),所以%26不会影响该值,故可省略不看,则选项A和选项C是一样的,因此也可以实现转换。
故本题中只有选项D不能实现转换。
3.若有语句:char *line[5];,以下叙述中正确的是A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组C)定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函数的指针【答案】A【解析】本题考查的是对复杂定义的理解。
理解复杂定义要掌握两点:一、右结合原则。
本题中的定义char *line[5];等价于char *(1ine[5]);;二、自外向内分解成typedef语句。
Char *(1ine[5]);等价于typedef char *A;A line[5];,其中A被typedef定义成字符指针的别名,然后line被定义成A的一维数组,即字符指针的一维数组。
再来看看行指针的定义char(*line)[5];,它应该被分解成typedef charB[5];B *line;,其中B被定义成包含5个元素的一维字符数组,然后line被定义成指向B的指针.即指向包含5个元素的一维字符数组的指针。
所以两者切不可混淆了.后者的括号不能省略。
故本题应该选择A。
4.设函数fun的定义形式为void fun(char ch, float x ) { … }则以下对函数fun的调用语句中,正确的是A)fun("abc",3.0); B)t=fun('D',16.5); C)fun('65',2.8); D)fun(32,32);【答案】D【解析】本题考查了函数的定义。
题目中定义的函数fun()有两个参数,一个是字符型变量ch,另一个是浮点型变量x,函数类型是void即无返回值。
选项A调用fun的第1个参数是字符串常量与字符变量不匹配,所以不正确。
选项B是有返回值函数的调用形式,不正确。
选项C的第1个参数是错误的字符常量,字符常量是用单引号起来的一个字符(是转义字符可能有多个字符),故也不正确。
选项D使用两个整型常量调用fun这在C语言中是允许的。
因为整型到字符型可以自动转换,整型到浮点型也可以自动转换。
故应该选择D5.有以下程序main(){ char p[]={'a', 'b', 'c'}, q[]="abc";printf("%d %d\n", sizeof(p),sizeof(q));};程序运行后的输出结果是A)4 4 B)3 3 C)3 4 D)4 3【答案】C【解析】本题考查的是字符数组的初始化。
字符数组即可以用{初始化列表}来初始化,也可以用一个字符串常量来初始化。
但字符串常量系统会自动为其添加结束标‘\0’,故比实际长度要多一位,所以本题输出为3 4,应该选择C。
6.有以下程序#includemain(){ char c1='1',c2='2';c1=getchar(); c2=getchar(); putchar(c1); putchar(c2);}当运行时输入:a<回车> 后,以下叙述正确的是A)变量c1被赋予字符a,c2被赋予回车符B)程序将等待用户输入第2个字符C)变量c1被赋予字符a,c2中仍是原有字符2D)变量c1被赋予字符a,c2中将无确定值【答案】A【解析】本题考查的是getchar()函数。
getchar()函数执行时将从键盘缓冲区中读取用户的输入,而不管输入的是否可打印字符。
所以当输入a<回车>后,键盘缓冲区被输入的实际上是两个字符:‘a’和‘\n’。
故选项A的说法是正确的。
7.有以下程序#include “stdio.h”main(){ char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};printf("%d %d\n", strlen(p), strlen(q));}以下叙述中正确的是A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3D)由于p和q数组中都没有字符串结束符,故长度都不能确定【答案】B【解析】本题考查了对字符数组赋初值。
使用初始化列表对字符数组赋初值,系统不会自动为其添加字符串结束符,使用字符串初始化时才会自动添加,所以选项A是错的。
数组长度在未指定的情况下由初始化列表项中数据的个数决定,若已指定且初始化项数不足时,多出部分会自动初始化为0,0等价于字符串结束符‘\0’。
所以选项B是正确的,C和D都是错误的。
本题应该选B。
8.有以下程序main(){ char str[]="xyz",*ps=str;while(*ps) ps++;for(ps--;ps-str>=0;ps--) puts(ps);}执行后输出结果是______。
A)yz B)z C)z D)xxyz yz yz xyxyz xyz【答案】C。
【解析】本题的考查点是指向字符串的指针变量。
程序定义了一个字符指针变量ps,并把字符串的首地址赋给它,要注意的是该指针变量只能指向一个字符变量或其它字符类型数据,不能同时指向多个字符数据。
程序执行while循环后,ps指向字符串"xyz"的结束字符'\0',接着执行for循环,在循环变量赋初值时,执行ps--,此时ps便指向了字符z,判断出条件ps-str>=0为真,通过字符串输出函数puts输出ps,即z,继续循环,ps--;,此时ps指向字符y,然后地址减1,判断出条件为真,输出字符串yz,继续循环判断,最后输出字符串xyz。
9.有以下程序#include <stdio.h>void f(char *s, char *t){ char k;k=*s; *s=*t; *t=k;s++; t--;if (*s) f(s, t);}main(){ char str[10]="abcdefg", *p ;p=str+strlen(str)/2+1;f(p, p-2);printf("%s\n",str);}程序运行后的输出结果是A)abcdefg B)gfedcba C)gbcdefa D)abedcfg【答案】B【解析】本题考查的是递归函数。
在一个函数中直接或间接地调用了自身,则称此函数为递归函数。
本题定义的函数f()就是一个递归函数。
它先交换两个字符指针所指的内容,然后将第1个指针往后移动一位,第2个指针往前移动一位,如果第1个指针所指内容不是字符串结束标志,则递归调用自身。
主函数中首先定义了一个字符数组str[10]=“abcdefg”,然后定义了一个字符指针p=str+strlen(str)/2+1,即让P指向str+4(或&str[4])的位置。
然后调用f(P,p-2);,这使得P所指的str[4]及其以后的2个位置Str[5]、str[6]中的内容同p-2所指的str[2]及其以前的2个位置str[1]、str[0]中的内容互相交换。
即让整个字符串逆序。
所以本题应该选择B。
(1)10.有以下程序(2)main( )(3){ char a[]=”abcdefg”,b[10]=”abcdefg”;(4)printf(“%d %d\n”,sizeof(a),sizeof(b));(5)} 执行后输出结果是()(6)A)7 7 B)8 8 C)8 10 D)10 10【答案】C【解析】本题考核的知识点是字符数组的定义、赋初值以及函数sizeof()的应用。
本题中定义两个字符型数组,其中a省略了长度,定义了b的长度为10,并赋初值分别为“abcdefg”和“abedefg”。
所以a的长度为赋值给它的字符串的字符个数7加上一个结束转义字符,即a的长度为7+1为8。
定义时b的长度定义为10,故b的长度为lO,因此最后通过函数sizeof()求得的数组a和数组b的长度分别为8和10,所以,4个选项中选项C符合题意。