whatsapp网页版短信收不到
您可以随时重置您的 WhatsApp 二维码。WhatsApp 将为您创建新的专属二维码,先前的二维码将失效。一旦您删除自己的 WhatsApp 帐号,您的 WhatsApp 二维码也将被删除。
2012年3月全国计算机等级考试二级C语言真题及答案如下:
(考试时间90分钟,满分100分)
一、 选择题
1、 下列叙述中正确的是:
A、循环队列是队列的一种顺序存储结构
B、循环队列是队列的一种链式存储结构
C、循环队列是非线性结构
D、循环队列是一直逻辑结构
1)【答案】A
【解析】为了充分利用存储空间,可以把顺序队列看成一个环状空间,即把顺序队列的头尾指针相连,这样的队列称之为循环队列。它是对顺序队列的改进,故循环队列是队列的一种顺序存储结构
2、 下列叙述中正确的是
A、栈是一种先进先出的线性表
B、队列是一种后进先出的线性表
C、栈和队列都是非线性结构
D、以上三种说法都不对
(2)【D】
【解析】栈是一种后进先出的线性表,队列是一种先进先出的线性表,二者均是线性结构,故选项A)、B)、C)均不对,答案为选项D)。
3、 一棵二叉树共有25个节点,其中5个时子节点,那么度为1的节点数为
A、4 B、6 C、10 D、16
【D】
【解析】由二叉树的性质n0=n2+1可知,度为0的结点数(即叶子结点数)=度为2的结点数+1,根据题意得知,度为2的结点数为4个,那么25-5-4=16即为度为1的结点数,选项D)正确
4、 在下列模式中,能够给出数据库物理存储结构与物理存取方法的是
A、内模式 B、外模式 C、概念模式 D、逻辑模式
【答案】A
【解析】内模式也称存储模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述。所以选项A)正确。
5、 在满足实体完整性约束的条件下
A、一个关系中可以没有候选关键词
B、一个关系中只能有一个候选关键词
C、一个关系中必须有多个候选关键词
D、一个关系中应该有一个或者多个候选关键词
【答案】D
【解析】在关系R中如记录完全函数依赖于属性(组)X,则称X为关系R中的一个候选关键字。在一个关系中,候选关键字可以有多个且在任何关系中至少有一个关键字。所以在满足数据完整性约束的条件下,一个关系应该有一个或多个候选关键字,所以选项D)正确。
6、 有三个关系R、S和T如下:
R
A B C
a 1 2
b 2 1
c 3 1
则由关系R和S得到关系T的操作是
A、自然连接 B、并 C、差 D、交
【答案】C
【解析】R和S的差是由属于R但不属于S的元组组成的集合,运算符为“-”。记为T=R-S。根据本题关系R和关系S运算前后的变化,可以看出此处进行的是关系运算的差运算
7、 软件生命周期中的活动不包括
A、软件维护 B、市场调研 C、软件测试 D、需求分析
【答案】B
【解析】通常把软件产品从提出、实现、使用、维护到停止使用(退役)的过程称为软件生命周期。可以将软件生命周期分为软件定义、软件开发及软件运行维护三个阶段。软件生命周期的主要活动阶段是可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行和维护。软件生命周期不包括市场调研。
8、 下面不属于需求分析阶段任务的是
A、确定软件系统的功能需求 B、确定软件系统的系统的系能需求
B、制定软件集成测试计划 D、需求规格说明书审评
【答案】C
【解析】需求分析是对待开发软件提出的需求进行分析并给出详细的定义。主要工作是编写软件需求规格说明书及用户手册。需求分析的任务是导出目标系统的逻辑模型,解决“做什么”的问题。制定软件集成测试计划是软件设计阶段需要完成的任务
9、 在黑盒测试方式中,设计测试用例的主要根据是
A、程序外部功能 B、程序内部逻辑
C、程序数据结构 D、程序流程图
【答案】A
【解析】黑盒测试也称功能测试或数据驱动测试,设计测试用例着眼于程序外部结构、不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
10、 在软件设计中不使用的工具是
A、系统结构图 B、程序流程图
C、PAD图 D、数据流图(DFD图)
【答案】D
【解析】软件设计包括概要设计和详细设计,软件概要设计中,面向数据流的设计方法有变换型系统结构图和事务型数据流两种。软件详细设计,程序流程图(PDF)和PAD(问题分析图)是过程设计的常用工具。数据流图(DFD图)是软件定义阶段结构化分析方法常用的工具。
11、针对简单程序设计,以下叙述的实施步骤正确的是
A、确定算法和数据结构、编码、调试、整理文档
B、编码、确定算法和数据结构、调试、整理文档
C、整理文档、确定算法和数据结构、编码、调试
D、确定算法和数据结构、调试、编码、整理文档
【答案】A)
【解析】简单程序设计的步骤是首先要确定算法和数据结构,然胡编码、调试,最后整理相关文档。
12、关于C语言中数的表示,以下叙述正确的是
A、只有整型数在允许范围内能精确无误的表示,实型数会有误差
B、只要在在允许范围内整型和实型都能精确表示
C、只有实型数在允许范围内能精确无误的表示,整型数会有误差
D、只有八进制表示的数在不会有误差
【答案】A)
【解析】实型数据在内存中存储的二进制位数是有限的,例如float型数据在内存中有24位二进制尾数。而一个十进制实数转化为二进制实数时,其有效数字位数有可能会超过尾数的存储长度,从而导致有效数字丢失而产生误差
13、以下关于算法叙述错误的是
A、算法可以用伪代码、流程图等多种形式来描述
B、一个正确的算法必须有输入
C、一个正确的算法必须有输出
D、用流程图可以描述的算法可以用任何一种计算机高级语言编写成程序代码
【答案】B)
【解析】一个正确的算法可以有零个或者多个输入,必须有一个或者多个输出
14、以下叙述错误的是
A、一个C程序可以包含多个不同名的函数
B、一个C程序只能有一个主函数
C、C程序在书写时,有严格的缩进要求,否则不能编译通过
D、C程序的主函数必须用main作为函数名
【答案】C)
【解析】一个C程序有且只有一个主函数 main()。一个C 程序可以包含多个不同名字的子函数。C程序在书写时没有严格的缩进要求。
15、设有以下语句
Char ch1,ch2, scanf(”%c%c”,&ch1,&ch2);
若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是
A、A和B之间用逗号间隔 B、A和B之间不能有任何间隔符
C、A和B之间可以用回车间隔 D、A和B之间用空格间隔
【答案】B)
【解析】考察C语言中输入格式,因为在输入格式中定义好了”%c%c”,其中没有任何符号,所以中间不能加任何字符,包含不能加逗号、回车和空格,因为这些也算是字符。所以在输入时也不可以有任何间隔符号。
16、以下选项中非法的字符常量是
A、’\102’ B、’\65’ C、’\xff’ D、’\019’
【答案】D)
【解析】字符常量有两种表示方法:
一种是用该字符的图形符号,如'b' ,'y','*'。另外还可以用字符的ASCII码表示,即用反斜符(\)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式:一种是用字符的八进制ASCII码,表示为:\odd.这里,ddd是八进制值(o可以省略)。另一种使用字符的十六进制ASCII码值,表示为 \0xhh或0Xhh 这里hh是两位十六进制值。
本题中D)选项‘\019'使用是八进制表示,不应该出现9,所以错误
17、有以下程序
#include <sthio.h>
Main()
{
Int A=0,B=0,C=0;
C=(A-=A-5);(A=B,B+=4);
Printf(“%d, %d, %d\n”,A,B,C)
}
程序运行后输出的结果是
A 0,4,5 B 4,4,5 C 4,4,4 D 0,0,0
【答案】A)
【解析】考察C语言关于赋值的应用,首先执行a-=a-5,即a=a-(a-5),使得a的值为5,然后执行c=(a-=a-5),即将a的值5赋给变量c,使得c的值也为5。然后执行下句逗号表达式中的a=b,把b的值0赋给a,此时a的值为0,然后执行b=b+4,使得b的值为4。最后打印输出。
18、设变量均已正确定义并且赋值,以下与其他三组输出结构不同的一组语句是
A、x++; printf((“%d\n”,x); B、n=++x; printf((“%d\n”,n);
C、++x; printf((“%d\n”,x); D、n=x++; printf((“%d\n”,n);
【答案】D)
【解析】本题考察自增运算符,++x表示先将x值加1后再用,x++表示先使用x值,用后加1,所以本题中ABC选项都会输出x+1的值,只有D选项会输出x值。
19、以下选项中,能表示逻辑值“假”的是
A 1 B 0.000001 C 0 D 100.0
【答案】C)
【解析】在C语言中非0的值表示真,0表示假
20、有以下程序
#include <sthio.h>
Main()
{ int a;
Scanf(“%d”,&a);
If(a++<9) printf((“%d\n”,a);
Else printf((“%d\n”,a--);
}
程序运行时键盘输入9<回车>,则输出的结构是
A、10 B 11 C 9 D 8
【答案】A)
【解析】考察if语句和自增自减运算符,判断条件中if(a++<9)是先用后加,即a的值为9,所以条件不成立,但是a已经进行了自增1操作,a的值此时为10。执行else语句时,因为打印a--,是先用后减,所以先输出10,然后a的值变为9。
21、有以下程序
#include <sthio.h>
Main()
{int s=0,n;
For (n=0;n<3;n<++)
{switch(s)
{ case 0;
Case 1;s+=1;
Case 2;s+=2;break;
Case 3;s+3;
Case 4;s+=4;
}
printf((“%d\n”,s);
}
}
程序运行后的结果是
A 1,2,4 B 1,3,6 C 3,10,14 D 3,6,10
【答案】C)
【解析】本题考察switch语句的应用,case分支后面如果没有break,那么就会顺序执行下面的case,直到遇到break跳出。所以第一次循环后s的值为3打印输出。第二次s的值为:s=s+3,s=s+4,即为10,打印输出。第三次没有匹配成功直接执行default语句,s=s+4,所以s的值为14,打印输出。
22、若k是int类型变量,且有以下for语句
For(k=-1;k<0;k++) printf(****\n”);
下面关于语句执行情况的叙述中正确的是
A、循环体执行一次 B、循环体执行两次
C、循环体一次也不执行 D、构成无限循环
【答案】A)
【解析】考察for循环语句,本题中k初始值为-1,执行一次循环体,执行完后k值为0,不满足k<0条件,推出循环,所以执行了一次。
23、有以下程序
#include <sthio.h>
Main()
{char A,B,C;
B=’1’;C=’A’
For(A=0;A<6;A++)
{if(A%2) putchar(B+A);
Else putchar(C+A);
}
}
程序运行后输出的结果是
A 1B3D5F B ABCDFE C A2C4E6 D 123456
【答案】C)
【解析】考察for语句和if语句,第一次循环a的值为0 ,a%2也为0 ,条件不满足所以打印的是(c+a)即变量c的值“A”。第二次a的值为1,条件a%2的值为1,条件满足打印字符(b+a)即字符 “2”。第三次a的值为2,条件不满足,打印(a+c)即字符”C”。同理打印后续字符为“4E6”。
24、设有如下定义语句
Int m[ ]={2,4,6,8},*k=m;
以下选项中,表达式的值为6的是
A *(k+2) B k+2 C *k+2 D *k+=2
【答案】A)
【解析】考察数组和指针的概念,本题中*k指向数组m的首地址。*(k+2)现将指针后移两个元素,即为m[2]的首地址,然后取出m[2]的值6,所以选择A选项。选项B的值是一个地址无意义。选项C的值为4。选项D使得m[0]的值为4。
25、fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下列划线处应该填写的是
#include <sthio.h>
#define N 5
Viod fun(int x[N])
{int m;
For(m=N-1;m>0;m--) scanf(“%d\n”, );
}
A &x[++m] B &x[m+1] C x+(m++) D x+m
【答案】D)
【解析】考察指针的概念和应用,数组名本身就是地址,所以不需要在用&符号。C选项不能对所有元素赋值而是反复再给一个数值赋值且是死循环。
26、若有函数
Viod fun(double a[], int *n)
{………}
以下叙述中正确的是
A、 调用fun函数时只有数组执行按值传送,其他实参和形参之间执行按地址传送
B、 形参a和n都是指针变量
C、 形参a是一个数组名,n是指针变量
D、 调用fun函数时将把double型实参数组元素一一对应地传送给形参a数组
【答案】B)
【解析】函数中的形参a[]已经退化为一个指针,所以AC都不对,D选项中只是传入一个指针,并没有把数组的元素挨个赋值,正确选项为B。
27、有以下程序
#include <sthio.h>
Main()
{int a,b,k,m,*p1,*p2;
k=1,m=8;
p1=&k,p2=&m;
a=/*p1-m; b=*p1+*p2+6;
printf(“%d ”,a); printf(“%d\n”,b);
}
编译时编译器提示错误信息,你认为出错的语句是
A、a=/*p1-m B、b=*p1+*p2+6
C、k=1,m=8; D、p1=&k,p2=&m;
【答案】A)
【解析】选项A中a = /*p1-m;表示方式不正确,未能正确表示出含义
28、以下选项中有语法错误的是
A char *str[ ]={“guest”}; B、char str[10 ]={“guest”};
C、char *str[3] *str[1]={“guest”}; D、char str[3][10];str[1]={“guest”};
【答案】D)
【解析】考察指针数组的概念,D选项中str为二维字符数组,不能够直接把一个字符串赋值到二维数组的某一行中。
29、avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过10,则下列函数说明语句错误的是
A、int avg(int *a,int n); B、int avg(int a[10],int n);
C、int avg(int a,int n) ; D、int avg(int a[],int n);
【答案】C)
【解析】考察函数声明基本用法,C选项中函数的第一形参没有指名是数组,代表的是一个整型数,声明不正确。
30、有以下函数
#include <sthio.h>
#include <string.h>
main()
{ printf(“%d\n”,strren”ATS\n012\1”) );}
程序运行后的输出结果是
A 3 B 8 C 4 D 9
【答案】B)
【解析】考察转义字符的用法,strlen函数的作用是求得字符串长度,\n与\1均是反义字符各表示一个字符所以打印值为8。
31、有以下函数
#include <sthio.h>
main()
{ char a[20],b[20],c[20];
scanf(”%s%s”,a,b);
get(c);
printf(”%s%s\n”,a,b,c);
}
程序运行时从第一行开始输入 this is a cat!<回车>,则输出结果是
A thisisacat! B this is a C thisis a cat! D thisisa cat!
【答案】C)
【解析】考察scanf和gets输入字符串的区别,scanf语句接收字符时遇到空格就作为一个字符串的结束,所以a数组中为this ,b数组中为is,但是getchar函数见到回车才认为结束所以c数组为 a cat!。所以打印结果如选项C。
32、有以下函数
#include <sthio.h>
viod fun(char c)
{if(c>’x’) fun(c-1);
printf (“%c”,c);
}
main()
{fun”z”;}
程序运行输出结果是
A xyz B wxyz C zyxw D zyx
【答案】A)
【解析】考察函数的嵌套调用,当运行fun(‘z’),调用fun(‘y’),然后嵌套调用fun(‘x’),输出结果为先输出x,然后输出y,最后输出z。
33、有以下函数
#include <sthio.h>
viod func(int n)
{int i;
for(i=0;i<=n;i++) printf(“*”);
printf(“#”);
main()
{ func(3); printf(“????”); func(4); printf(“\n”); }
程序运行输出结果是
A ****#????***# B ***#????*****#
C **#????*****# D ****#????*****#
【答案】D)
【解析】考察for循环函数调用,执行fun(3)是输出****,然后输出#,执行fun(4)时输出*****,然后输出#,所以选项D)正确。
34、有以下函数
#include <sthio.h>
viod fun(int *s)
{staic int j=0;
do {s[j]=s[j]+s[j+1];} wihle(++j<2);
}
main()
{int k,a[10]={1,2,3,4,5};
for(K+1;k<3;k++) fun(a);
for(K+1;k<5;k++) printf(“%d”,a[k]);
printf(“\n”);
}
程序运行输出结果是
A 12345 B 23445 C 34756 D 35745
【答案】D)
【解析】考察静态局部变量,静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义,它的生存期为整个源程序。
(2)静态局部变量只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。
(4) 根据静态局部变量的特点, 可以看出它是一种生存期为整个源文件的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。
根据这个特点,函数第一次调用时,会将数组a变为35345,当第二次调用时,函数内的j值为2,所以会将数组a的第三个元素更改为7,所以最终结果为35745,选项D)正确。
35、有以下函数
#include <sthio.h>
#define S(x) (x)*x*2
main()
{int k=5,j=2;
printf(“%d,”,S[k+j]); printf(“%d\n”,S(k-j)));
}
程序运行输出结果是
A 98,18 B 39,11 C39,18 D98,11
【答案】B)
【解析】考察宏定义的使用,根据该宏的定义,S(k+j)=(k+j)*k+j*2=39, S(k-j)=(k-j)*k-j*2=11,所以答案为39,11选项B)正确。
36、有以下函数
#include <sthio.h>
Viod exch(int t[ ])
{t[0]=t[5];}
{int x[10]={1,2,3,4,5,6,7,8,9,10},i=0;
While(i<=4) {exch(&x[i])’i++;}
for(i=0;i<5;i++) printf(“%d”,x[i]);
printf(“\n”);
}
程序运行输出结果是
A 2 4 6 8 10 B 1 3 5 7 9 C 1 2 3 4 5 D 6 7 8 9 10
【答案】D)
【解析】通过分析代码,可以看出来,函数的作用就是把数组某个元素的变为这个元素位置加5后对用的元素值,所以执行完之后输出数组x的前五个元素的值,其实就是数组x的后五个元素的值,即6 7 8 9 10
37、设有以下程序段
Struct MP3
{char name[20];
Char color;
Float price;
}std,*ptr;
ptr=& std;
若要引用结构体变量std中的color成员,写法错误的是
A std.color B ptr-> color C std-> color D (*ptr) .color
【答案】C)
【解析】考察结构体的用法,在引用结构体中的成员变量时,可以使用’.’来引用,当指针指向结构体时,可以使用’->’来指向结构体重的成员,C选项引用错误
38、有以下函数
#include <sthio.h>
struct stu
{int mun; char name[10]; int age;};
viod fun(struct stu *p)
{ printf(“%s\n”,p->name);}
mian()
{ struct stu x[3]={{01,”zhang”,20},{02,”wang”,19},{03,”zhao”,18}};
fun(x+2);
}
程序运行输出结果是
A zhang B zhao C wang D 19
【答案】B)
【解析】考察结构体的用法,结构体数组存储了三个人的信息,x+2代表了指向第三个元素,所以输出name为Zhao。
39、有以下函数
#include <sthio.h>
mian()
{int a=12,c;
c=(a<<2)<<1;
printf(“%d\n”,c):
}
程序运行输出结果是
A 3 B 50 C 2 D 96
【答案】D)
【解析】考察移位操作,执行c=(a<<2)<<1语句时,首先是 a左移两位,其等效于将a乘以4,得到48,然后将48左移一位,相当于是乘以2,所以结果为c=96,选项D正确
40、以下函数不能用于向文件写入数据的是
A ftell B fwrite C fputc D fprintf
【答案】A)
【解析】考察文件的操作,函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。调用函数ftell()就能非常容易地确定文件的当前位置。不能写入数据,其他三个选项都可以向文件中写入。
2011年计算机二级考试C语言十套上机题
1.填空题
请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面。
例如:str1=“How do”,str2=“ you do?”,结果输出:How do you do?
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 40
void fun(char *str1,char *str2)
{
int i=0;
char *p1=str1;
char *p2=str2;
while(【1】)
i++;
for( ;【2】;i++)
*(p1+i)=【3】;
*(p1+i)='\0';
}
main()
{
char str1[N],str2[N];
clrscr();
printf("*****Input the string str1 &
str2*****\n");
printf(" \nstr1:");
gets(str1);
printf(" \nstr2:");
gets(str2);
printf("**The string str1 & str2**\n");
puts(str1);
puts(str2);
fun(str1,str2);
printf("*****The new string *****\n");
puts(str1);
}
答案及评析:
【1】*(p1+i) 【2】*p2 【3】*p2++
【解析】填空1:变量i用来记录字符串str1的长度,当指针指到字符串str1结束标志符‘\0'时,while循环结束,变量i停止累加。填空2:指针p2指向字符串str2,通过for循环将字符串str2接在str1后面,循环结束的条件是指针p2所指的字符是字符串结束标志符‘\0'。填空3:指针p2最初指向字符串str2的首字符,通过自加1,使指针p2依次向后移动,指向str2的各个字符,实现将字符串str2接在str1后面的功能。
1.填空题
请补充函数fun(),该函数的功能是求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。
例如:当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,
10.0,16.0},结果为:avg=15.030000。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
double fun(double x[10])
{
int i;
long t;
double avg=0.0;
double sum=0.0;
for(i=0;i<10;i++)
【1】;
avg=sum/10;
avg=【2】;
t=【3】;
avg=(double)t/100;
return avg;
}
main()
{
double avg,x[10]={15.6,19.9,16.7,15.2,
18.3,12.1,15.5,11.0,10.0,16.0};
int i;
clrscr();
printf("\nThe original data is :\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
avg=fun(x);
printf("average=%f\n\n",avg);
}
答案及评析:
【1】sum+=x[i] 【2】avg*1000 【3】(avg+5)/10
【解析】填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除以10,实现四舍五入的功能。
1.填空题
请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。注意:不区分大小写,不能使用字符串库函数。
例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 100
void fun(char *tt,int alf[])
{
int i;
char *p=tt;
for(i=0;i<26;i++)
【1】;
while(*p)
{
if(*p>='A'&&*p<='Z')
【2】;
if(*p>='a'&&*p<='z')
alf[*p-'a']++;
【3】;
}
}
main()
{
char str[N];
char a='a';
int alf[26],k;
clrscr();
printf("\nPlease enter a char string:");
scanf("%s",str);
printf("\n**The original string**\n");
puts(str);
fun(str,alf);
printf("\n**The number of letter**\n");
for(k=0;k<26;k++)
{
if(k%5==0)
printf("\n");
printf("%c=%d ",a+k,alf[k]);
}
printf("\n");
}
答案及评析:
【1】alf[i]=0 【2】*p+=32 【3】p++
【解析】填空1:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。填空2:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。填空3:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。
1.填空题
请补充函数fun(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。
例如,输入aeiouAOUpqrt,结果为A:2 E:1 I:1 O:2 U:2 other:4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#define N 100
void fun(char *str,int bb[])
{
char *p=str;
int i=0;
for(i=0;i<6;i++)
【1】;
while(*p)
{
switch(*p)
{
case 'A':
case 'a':bb[0]++;break;
case 'E':
case 'e':bb[1]++;break;
case 'I':
case 'i':bb[2]++;break;
case 'O':
case 'o':bb[3]++;break;
case 'U':
case 'u':bb[4]++;break;
default:【2】;
}
【3】
}
}
main()
{
char str[N],ss[6]="AEIOU";
int i;
int bb[6];
clrscr();
printf("Input a string: \n");
gets(str);
printf("the string is: \n");
puts(str);
fun(str,bb);
for(i=0;i<5;i++)
printf("\n%c:%d",ss[i],bb[i]);
printf("\nother:%d",bb[i]);
}
答案及评析:
【1】bb[i]=0 【2】bb[5]++ 【3】p++;
【解析】填空1:数组bb[6] 用来存放5个元音字母和其他字符的个数,在使用之前需要清零。
填空2:数组元素bb[5] 用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。
1.填空题
str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。
例如:str=“how do you do”,结果为:num=4。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#define N 80
void fun(char *s,int *num)
{
int i,n=0;
for(i=0;【1】;i++)
{
if(s[i]>=’a’&&s[i]<=’z’&&(s[i+1]==
’ ’||s[i+1]==’\0’))
【2】;
}
【3】;
}
main()
{
char str[N];
int num=0;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
fun(str,&num);
printf("The number of word is :
%d\n\n",num);
}
答案及评析:【1】i<*num 【2】n++ 【3】*num=n
【解析】填空1:*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。填空2:如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。填空3:题目要求结果由变量num传回,所以要将n的值赋给指针num所指的单元。
1.填空题
str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。
例如:str=“Bcd123e456hui890”,结果为:123456890。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#define N 80
int bb[N];
int fun(char s[],int bb[],int num)
{
int i,n=0;
for(i=0;i<num;i++)
{
if(【1】)
{
bb[n]=【2】;
n++;
}
}
return 【3】;
}
main()
{
char str[N];
int num=0,n,i;
printf("Enter a string:\n");
gets(str);
while(str[num])
num++;
n=fun(str,bb,num);
printf("\nbb= ");
for(i=0;i<n;i++)
printf("%d",bb[i]);}
答案及评析:【1】s[i]>= ′0′ &&s[i]<= ′9′ 【2】s[i]- ′0′ 【3】n
【解析】填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。
1.填空题
从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。
例如:当xx[8]={123,11,25,222,42,333,14,5451}时,
bb[4]={25,42,333,5451}。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#define N 1000
int fun(int xx[],int bb[],int num)
{
int i, n=0;
int g, s;
for(i=0;i
{
g=【1】;
s=xx[i]/10 ;
if((g+s)>5)
【2】;
}
return【3】;
}
main()
{int xx[N];
int yy[N];
int num=0,n=0,i=0;
printf("Input number :\n");
do
{
scanf("%u",&xx[num]);
}
while(xx[num++]!=0);
n=fun(xx,yy,num);
printf("\nyy=");
for(i=0;i
printf("%u ",yy[i]);
}答案及评析:【1】xx[i]【2】bb[n++]=xx[i] 【3】n
【解析】填空1:将一个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。填空2:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时,变量n记录了满足条件的无符号整数的个数。填空3:题目要求满足条件的无符号整数的个数由fun函数返回,所以函数返回n。
1.填空题
请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#include <conio.h>
char *fun(int n)
{
int g,s,b;
g=n%10;
s=n/10%10;
b=【1】;
if((g+b)==s)
return【2】;
else
return【3】;
}
main()
{
int num=0;
clrscr();
printf("******Input data *******\n");
scanf("%d",&num);
printf("\n\n\n");
printf("****** The result *******\n");
printf("\n\n\n%s",fun(num));
}
答案及评析:【1】n/100%10 【2】″yes!″ 【3】″no!″
【解析】填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,则返回″yes!″。填空3:当个位数字和百位数字之和不等于十位数字时,则返回″no!″。
1.填空题
请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。
例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdio.h>
#include<conio.h>
#define LEN 80
main()
{
char str1[LEN],str2[LEN];
int n,i;
clrscr();
printf("Enter the string:\n");
gets(str1);
printf("Enter the position of the string
deleted:");
scanf(【1】);
for(i=0;i<n;i++)
【2】
str2[i]=’\0’;
printf("The new string is:%s\n",【3】);
}
答案及评析:【1】″%d″,&n 【2】str2[i]=str1[i]; 【3】str2
【解析】填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符‘ &’。填空2:截取前n个字符,就是将字符串str1的前n个字符依次赋给字符串str2的前n个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。
1.填空题
请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。例如,当str1=“cdefghij”,则str2=“cegi”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#define LEN 80
main()
{
char str1[LEN],str2[LEN];
char *p1=str1,*p2=str2;
int i=0,j=0;
clrscr();
printf("Enter the string:\n");
scanf(【1】);
printf("***the origial string***\n");
while(*(p1+j))
{
printf("【2】",*(p1+j));
j++;
}
for(i=0;i<j;i+=2)
*p2++=*(str1+i);
*p2=’\0’;
printf("\nThe new string is:%s\n",【3】);
}
答案及评析:【1】″%s″,str1 【2】%c 【3】str2
【解析】填空1:本题考查对标准输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为″%s″,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。填空2:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为″%c″。填空3:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以printf()函数的输出表列是str2
你也想得太天真的了呵,二级考试有很多种类型,再说谁会把笔试和机试题弄到网上,哪里记得那么多题
二级有七个类别,请问你要哪一个呢?
whatsapp網頁版登錄沒驗證碼
军事家
一块
玩法
期内
后置
whatsapp老版本下載
中不
前来
whatsapp網頁版註冊不發驗證碼
分为四个
黑寡妇
增长速度
怎麽安裝
whatsapp消息發布出去
有限责任公司
尾气
意味着
whatsapp網頁版官方下載網站
大秦
执业
whatsapp联系人如何删除
whatsapp官方团队联系方式
消息群发
头象
中油
whatsapp网页版api群发
发热
目怎麽轉發
梦幻