好文档 - 专业文书写作范文服务资料分享网站

2013年全国计算机等级考试二级C语言复习资料 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

聪智学校

{ char a[30],b[30]; scanf(\gets(b);

printf(\

1,“012xy”中的数字字符只有三个,所以选择B。

9.知识点:字符串处理函数

例1:(2011-09-32)有以下程序: #include #include main()

{ char a[5][10]={“china”,”beijing”,”you”,”tiananmen”,”welcome”}; int i,j; char t[10];

}程序运行时若输入:how are you? I am fine<回车>则输出结果是(B) A)how are you? B)how I am fine

are you?I am fine

C)how are you? I am fine D)row are you?

【解析】:scanf以空格作为字符串输入结束的标志,而gets(s)不会。所以a得到的for(i=0;i<4;i++) 是“how”,b得到的是剩下的“are you? I am fine”。故选择B。 例3:(2011-03)有以下程序 main() {

char s[]=\int i, n=0; for(i=0;s[i]!=0;i++)

if(s[i]>='0'&&s[i]<='9') n++;

for(j=i+1;j<5;j++) if(strcmp(a[i],a[j])>0)

{ strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[i],t);} puts(a[3]);

}程序运行后的输出结果是 (C) A.beijing B.china

C.welcome

D.tiananmen

【解析】双层for循环部分是典型的排序方法,通过strcmp比较两个字符串的大小,然后借助t数组作为中转数组,通过strcpy函数完成a[i]和a[j]两个字符串的交换,使a数组按从小到大排序,即{”beijing” , “china” , ”tiananmen”,”welcome” ,”you” } 例1:(2010-09-23)有以下程序

printf(\

} 程序运行后的输出结果是 (B)

A)0 B)3 C)7 D)8

【解析】:for循环读取字符数组s中的字符,当读到0时退出循环,注意0和‘0’#include 的区别,字符‘0’的ASCII码为48,‘\\0’的ASCII 码才是0,所以读取的字符#include 为“012xy”中的字符,for循环读取到字符后判断是不是数字字符,如果是n自增main()

第 26 页 共 61 页

聪智学校

{char x[]=”STRING”; x[0]=0;x[1]=?\\0?;x[2]=?0?;

printf(“%d %d\\n”,sizeof(x),strlen(x)); 【解析】若字符串s1等于字符串s2,strcmp(s2,s1)==0,故答案是A。

}程序运行后的输出结果是(B) A)6 1 B)7 0 C)6 3 D)7 1

【解析】经过x[0]=0;x[1]=?\\0?;x[2]=?0?;后,x[]=”0\\00ING”。strlen测字符串的实际长度,不含字符串结束标志?\\0?,故strlen(x)为0。sizeof测字符串所占的存储空间,包含字符串结束标志,故sizeof(x)为7。 例2:(2010-09-33)有以下程序 #include #include main()

{char a[20]=”ABCD\\0EFG\\0”,b[]=”IJK”; strcat(a,b); printf(“%s\\n”,a); }程序运行后的输出结果是(B)

A)ABCDE\\0FG\\0IJK B)ABCDIJK C)IJK D)EFGIJK

【解析】把字符数组b中的字符串连接到字符数组a中字符串的后面,并删去字符串a后的第一个字符串结束标志?\\0?。故输出结果为ABCDIJK。

例3: (2010-09-31)下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST”要求的是 (A)

A)if(strcmp(s2,s1)==0)ST; B)if(s1==s2)ST; C)if(strcpy(s1,s2)==1)ST; D)if(s1-s2==0)ST;

第 27 页 共 61 页

聪智学校

第四课 指针

第 28 页 共 61 页

聪智学校

本课重要知识点: 1.知识点:指针的概念与指针变量

第 29 页 共 61 页

聪智学校

? 指针就是地址。指针变量是用来存储地址,而一般变量是用来存储数值。 读入数据的程序段是 (D)

A)*p=&a; scanf(\%lf\,p); B)*p=&a; scanf(\%f\,p); C)p=&a; scanf(\%lf\,*p); D)p=&a; scanf(\%lf\,p);

【解析】对于scanf函数,输入数据列表必须是合法地址表达式(可以使地 址常量、指针),A选项、B选项*使用错误。

例3.(09-03-16)若有定义语句 doule x,y,*px,*py;执行了px=&x;py=&y;之后,正确的

例1.(09-09-26)有如下程序输出结果为 1,2,2,1 #include main() { }

int m=1,n=2,*p=&m,*q=&n,*r; r=p ;p=q ;q=r ;

printf(“%d,%d,%d,%d\\n”,m,n,*p,*q) ;

【解析】p、q为指针,初始化时p指向m,q指向n。执行r=p ;p=q ;q=r ;p和q的输入语句是(C) 值交换,从而p指向n,q指向m。指针的改变不会应用m、n的值,最后输出*p 和*q的值分别为n、m的值。

A) scanf(\%f%f\ C) scanf(\%f%le\

B) scanf(\%f%f\D) scanf(\%lf%lf\

2.知识点:指针的引用

?

指针的引用是通过两个运算符实现“&”和“*”实现的

【解析】A,D选项中的x,y缺少取地址符,B项中&x之前缺少逗号,格式不正确。

3.知识点:指针变量的初始化

指针变量在使用前必须要初始化,把一个具体的地址赋给它,否则引用时会出错,如果不指向任何数据就赋“空值”NULL。 ?

指针变量两种初始化方法:方法一:int a=2,*p=&a;(定义的同时初始化) 方法二:int a=2,*p;p=&a;(先定义后初始化)

&是取地址符号,它的一半格式是:&变量名。例如:int i ; &i表示取i的地址。 ? *是取值运算符,它的一般格式:*指针变量名。例如:int i=10,*p=&i; *p表示取i的值10

例1.(2011-09-25)若定义语句:int year=2009,*p=&year;,以下不能使变量year中的值 增至2010的语句是 (D)

A.*p+=1;

B.(*p)++;

C.++(*p);

D.*p++;

例1.(07—04—29)设已有定义:float x;则以下对指针变量P进行定义且赋初值的语句中正确的是 (D)

【解析】*和++同级别,按自左向右的结合方向,因此D选项可转变为*(p++),A)float *p=1034; B)int *p=(float)x; C)float p=&x; D)float *p=&x; 从而只是使指针发生移动,而不能将p所指变量增1

【解析】可以给一个指针赋值的只能是一个与该指针同类型的指针(或地址值);故

例2.(06—04—24)若有说明语句:double *p,a;则能通过scanf语句正确给输入项A、B选项错误;C选项声明指针出错,P前面的指针说明符*不能省略。

第 30 页 共 61 页

9a6vy17nnd0wekt4q39j
领取福利

微信扫码领取福利

微信扫码分享