2021年山东省济宁市全国计算机等级考试C语言程序设计测试卷(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2021年山东省济宁市全国计算机等级考试C语言程序设计测试卷(含答案) 学校:________ 班级:________ 姓名:________ 考号:________
一、单选题(12题)
1.下列哪个算法是对一个list排序的最快方法()
A.快速排序
B.冒泡排序
C.二分插入排序
D.线性排序
2. 以下叙述中错误的是()。
A.c语言是一种结构化程序设计语言
B.使用三种基本结构构成的程序只能解决简单问题
C.结构化程序设计提倡模块化的设计方法
D.结构化程序由顺序、分支、循环三种基本结构组成
3.
4. 若执行下列的程序时,从键盘上输入1和2,则输出结果是( )。
#include<stdio.h>
main()
{ int a,b,s;
scanf("%d%d",&a,&B) ;
S=a;
if(a<B) s=b;
s=s*s;
printtf("%d\n",s);
}
A.1
B.4
C.2
D.9
5.在一个单链表HL中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行____。
A.q一>next=p一>next;p一>next=q;
B.q一>next=p一>next;p一>next=q;
C.p一>next=q一>next;q=p;
D.p一>next=q一>next;q一>next=p;
6.若已知一个栈的进栈序列是1,2,3,,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为()。
A.i
B.n-i
C.n-i+1
D.不确定
7.设单链表中结点的结构为非空的循环单链表first的尾结点(由p所指向)满足:______
A.p->link==NULL;
B.p==NULL;
C.p->link==first;
D.p==first;8.
9.当用户要求输入的字符串中含有空格时,应使用的输入函数是( )。
A.scanf
B.getchar
C.gets
D.getc
10.若有定义“double a; float b; short c;”,若想把1.2赋给变量a,3.4赋给变量b,5678赋给变量c,程序运行时键盘输入:1.2 3.4 5678<回车>则以下正确的读入语句是()。
A.scanf("%If%If%d",&a,&b,&c) ;
B.scanf("%If%If% hd",&a,&b,&c) ;
C.scanf("%If%f%hd",&a,&b,&c) ;
D.scanf("%f%f%d",&a,&b,&c);
11.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是()。
A.预定义标识符(如库函数中的函数名)可用做用户标识符,但失去原有含义
B.用户标识符可以由字母和数字任意顺序组成
C.在标识符中大写字母和小写字母被认为是相同的字符
D.关键字可用做用户标识符,但失去原有含义
12.在E-R图中,用来表示实体的图形是______。
A.矩形
B.椭圆形
C.菱形
D.三角形
二、2.填空题(12题)
13. 以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表带头结点)。
请在下划线内填入正确内容。
struct link
{ char data;
struct link*next;};
…
struct link*p,*first;
int c=0;
p=first;
while(【】)
{ c++;
p=【】;}
14. “printf("%d\n",strlen("\t\"\023\xABC\n"));”语句的输出结果是______。
15. 下面程序
main()
{ int i,j,m,n;
i=5;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
运行后,i,j,m,n的值分别是_______。
16. 软件的需求分析阶段的工作,可以概括为四个方面:【】、需求分析、编写需求规格说明书和需求评审。
17. 在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间______的信息。
18. 以下sum函数的功能是计算下列级数之和。
请给函数中的各变量正确赋初值。
double sum( double x, int n )
{ int i; double a,b,s;
for(i=1;i<=n;i++)
{ a=a*x; b=b*i; s=s+a/b; }
return s;
}
19. 以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。
#define N 4
void rotade (int a[][N],int b[][N])
{ int i,j;
for(i=0;i<N;i++)
{ b[i][N-1]=【】;【】=a[N-1][i];}}
20. 以下程序中,for循环体执行的次数是______。
#define N 2
#define M N+1
#define K M+1*M/2
main()
{
int i;
for (i-1;i<K;i++)
{ ... }
...
}
21. 若已知a=10,b=20,则表达式! a<b的值为【】。
22. 下程序的输出结果是【】。
# include<stdio.h>
# define MAX_COUNT4
void fun( )
main( )
{ int count;
for(count=1;count<=MAX_COUNT;coun+ +)fun( );
}
void fun( )
{ staic int i;
i + =2;
printf(”%d,i);
}
23. 软件的【】设计又称为总体结构设计,其主要任务是建立软件系统的总体结构。
24. 以下程序输出的结果是【】。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
三、3.程序设计题(10题)
25. 请编写一个函数fun(),它的功能是:根据以下公式求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。
π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…
+1*2*3*…*n/(3*5*7*…*(2n+1))
程序运行后,如果输入精度0.0005,则程序输出3.14…。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<math.h>
double fun(double eps)
{
}
main()
{
double x;
printf("Input eps: ");
scanf("%1f", &x);
printf("\neps=%1f,PI=%1f\n",x,fun(x));
}
26.请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。
注意:要求n的值不大于100。
部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括
27. 请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较K的字符串。
若两个字符串长度相等,则返回第1个字符串。
例如,输入beijing<CR>shanghai<CR>(<CR>为回车键),函数将返回shanghai。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括
试题程序:
#include<stdio.h>
char *fun(char *s, char *t)
{
}
main()
{
char a[20],b[10],*p,*q;
int i;
printf ("Input 1th string: ");
gets(a);
printf{"Input 2th string: ");
gets(b);
printf("%s",fun(a,b));
}
28. 请编写函数fun(),其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,输入17,则应输出4 6 8 9 10 12 14 15 16。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
void fun(int m, int *k, int xx[])
{
}
main ( )
{
int m, n, zz[100];
clrscr();
printf("\nPlease enter an integer number
between 10 and 100: ");
scanf("%d",&n);
fun(n,&m, zz);
printf("\n\nThere are %d non-prime
numbers less than %d: ",m,n);
for(n-0;n<m;n++)
printf("\n %4d",zz[n]);
}
29. 请编写函数fun(),该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,若二维数组中的数据为:
W WWW
S S S S
H H H H
则字符串中的内容应是WSHWSHWSHWSH。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#define M 3
#define N 4
void fun(char (*s)[N],char *b)
{
}
main()
{
char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},
{'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};
int i,j;
printf("The matrix:\n");
for(i=0;i<M;i++)
{ for(j=0;j<N;j++)
printf("%3c",w[i][j]);
printf("\n");
}
fun(w,a);
printf("The A string:In");
puts(a);
printf("\n\n");
}
30. 请编写函数fun(),其功能是:计算并输出给定10个数的方差。
其中
例如,给定的10个数为95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。
注意;部分源程序给出如下.
请勿改动主函数mam和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<math.h>
#include<stdio.h>
double fun(double x[10])
{
}
main()
{
double s,x[i0]={95.0,89.0,76.0,65.0,
88.0,72.0,85.0,81.0,90.0,56.0};
int i;
printf("\nThe original data is:\n");
for(i=0;i<10;i++)
printf("%6.1f ",x[i]);
printf("\n\n ");
s=fun(x);
printf("s=%f\n\n ",s);
}
31. 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。
数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
32. 假定输入的字符串中只包含字母和*号。
请编写函数fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不
删除。
例如,字符串中的内容为****A*BC*DEF*G*******,若n的值为2,删除后,字符串中的内容则应当是**A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G******。
n的值在主函数中输入。
在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include <conio.h>
void fun (char Aa, int n)
{
}
main ()
{ char s[81];int n;
printf ("Enter a string : \n") ;gets (s);
printf ("Enter n : "); scanf ("%d", &n);
fun( s,n );
printf("The string after deleted :\n");
puts (s);
}
33. 请编写函数fun,函数的功能是:移动一维数组中的内容:若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10:p 的值为3。
移动后,一维数组中的内容应为:5,6,7,8,9,10,
1,2,3,4。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
34. 请编一个函数fun,函数的功能是使实型数保留2位小数,并对第
三位进行四舍五入(规定实型数为正数)。
例如:实型数为1234.567,则函数返回1234.572000;
实型数为1234.564,则函数返回1234.562000。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
四、单选题(0题)
35.结构化分析方法是面向()的自顶向下、逐步求精进行需求分析的方法
A.A.对象
B.数据结构
C.数据流
D.目标
五、单选题(0题)
36. 若有下列说明语句int(* p)();则标识符p代表的是( )
A.一个用于指向函数的指针变量,函数返回值的类型为int型
B.一个带回值类型为整型的函数名
C.一个用于指向整型数据的指针变量
D.一个带回值类型为指针类型的函数名
六、单选题(0题)
37. 以下有关宏的描述不正确的是( )。
A.宏定义不做语法检查
B.双引号中出现的宏名不进行替换
C.宏名无类型
D.宏名必须用大写字母表示
参考答案
1.A
2.B
C语言是一种结构化程序设计语言。
结构化程序设计是以模块化设计为中心的,有三种基本结构:顺序、选择和循环结构。
各模块相互独立,因而可将原来较为复杂的问题化简为一系列简单模块并充分利用现有模块搭建新系统,提高程序的重用性和可维护性。
3.C
4.B解析:本题考查if语句。
scanf函数通过键盘读入a、b的值,a=1,b=2。
第一个if语句,先判断条件,发现a<b条件成立,则s=b=2,s=s*s=4。
5.D
6.C
7.C
8.C
9.C
解析:C语言提供了许多输入函数,其中有:getchar(输入字符)、scanf(格式输入)和gets\u3000(输入字符串)等。
题目要求输入的是字符串,所以可以排除getchar,而且要求输入的字符串中包含空格,而scanf函数默认将输入的空格字符作为分割符,所以空格不会被输入,故可排除scanf。
getc的作用是从文件中输入一个字符,故也不可取。
gets函数可以输入一整行作为一个字符串,其中也包括空格字符,故应该选择C。
10.C
scanf函数用于输入数据。
第1个参数表示输入格式控制。
本题变量a 是double类型,使用格式控制符%If;变量b是float类型,使用%If;变量c是short类型,使用%hd,选项C正确。
本题答案为C选项。
11.A
用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键
字不能用做用户标识符。
12.A
解析:在E-R图中,用三种图框分别表示实体、属性和实体之间的联
系,其规定如下:用矩形框表示实体,框内标明实体名;用椭圆状框
表示实体的属性,框内标明属性名;用菱形框表示实体间的联系,框
内标明联系名。
所以,选项A正确。
13.p!=NULL p->nextp!=NULL\r\np->next 解析:结构体变量构成链表
需要每个节点中都有一个指向下一个结点的指针,就像本题中的next指
针一样。
注意:掌握可以对链表进行的操作。
14.66 解析:strlen()函数的作用是计算字符串的长度并作为函数的返回
值,这里的长度不包括串尾的结束标志\'\\0\'。
\'\\t\'是转义字符,代表横向跳若干格:\'\\\''是转义字符,代表双引号:
\'\\023\'只代表一个字符,而不管转义字符后面有几个字符;\'\\xAB\'是以
两位+六进制数AB表示的ASCII码字符,只代表一个字符;\'\\n\'是转
义字符,代表回车换行。
5个字符常量各代表一个字符,再加上字母C,所以返回的长度是6。
15.611610。
6,11,6,10。
解析:本题考查自加的前置和后置的区别。
16.需求获取需求获取解析:软件的需求分析阶段的工作,可以概括为四个方面:需求获取、需求分析、编写需求规格说明书和需求评审。
需求获取的目的是确定对目标系统的各方面需求;需求分析是对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型;编写需求规格说明书作为需求分析的阶段成果,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进度的依据;需求评审是对需求分析阶段的工作进行的复审,验证需求文档的一致性、可行性、完整性和有效性。
17.前后件关系前后件关系解析:在数据存储结构中,除了要存储数据,还要存储数据的前后件关系,对于顺序存储的数据结构,前后件之间的关系,是通过存储空间的位置来实现的,而对于链式存储来说,数据元素之间的前后件关系是通过指针来实现的。
18.a=1;b=1;s=1;或a=b=s=1;或a=1.b=1s=1或给abs赋1或1.0或1.a=1;b=1;s=1;或a=b=s=1;或a=1.b=1,s=1或给a,b,s赋1或1.0或1. 解析:sum函数的功能是求表达式s的级数之和,该函数的大致思路是:在该函数中,定义了—个整型变量i用作循环计数器,定义一个变量a用来表示各个子项的分子,初始为第一个子项的分子,故为1,定义了一个变量b用来表示各个子项大分母,初始为第一个子项的分母,故为1,定义一个变量s存放累加和,初始为第一个子项的值即为1,然后给各个定义的变量初始化,然后通过一个for循环将题目中的数学表达式的各个子项求出来并累加到s中,所以说,在该题的空格处应该填写将a、b和s赋初值的语句,即为a=1;b=1;s=1:(说
明:语句的顺序可任意) 或a=b=s=1;(说明:变量的顺序可任意) 或a=1,b=1,s=1 (说明:赋值表达式的顺序可任意) 给a,b,s赋1或1.0或1都可以。
19.a[0][i] b[i][0]a[0][i]\r\nb[i][0] 解析:b[i][N-1]=a[0][i]实现把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b[i][0]=a[N-1][i]实现将a所指N行N列的二维数组中的最后一行放到b所指二维数组中的第0列。
20.44 解析:将程序中所有的宏替换掉可得:M=2+1,K=2+1*2+1/2=4,所以for循环共循环了K-1+1次,即4-1+1共4次。
21.11 解析:计算表达式!a<b,先计算!a,因a的值为10,!a的值为0,而关系表达式0<20为真,所以表达式!a<b的值为1。
22.2468(若字符间有空格扣1分)2468(若字符间有空格扣1分)
23.概要概要
24.00 解析:本题的关键在于对变量c的赋值运算:
d=(a>b>c)
d=(5>4>3)
先算5>4,为真,得1,即:d=(1>3),此时1>3,为假,得0。
25.double fun(double eps) { double s=1.0s1=1.0; int n=1; while(s1>=eps) /*当某项大于精度要求时继续求下—项*/ {s1=s1*n/(2*n+1); /*求多项式的每—项*/ s=s+s1; /*求和*/ n++; } return 2*s; }double fun(double eps)\r\n {\r\n double s=1.0,s1=1.0;\r\n int n=1;\r\n while(s1>=eps) /*当某项大于精度要求时,继续求下—项*/\r\n {s1=s1*n/(2*n+1); /*求多项式的每—项
*/\r\n s=s+s1; /*求和*/\r\n n++;\r\n }\r\n return 2*s;\r\n } 解析:从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。
要注意s1,s的初值都为1.0,返回时要乘以2即return 2*s,这跟数学思想有关系,学习者理解后就很简单了。
26.
解析:该程序功能是计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
解题过程首先求出能被5或9整除的所有自然数,然后在此基础上求得这些数的倒数之和。
27.char *fun(char *s char *t) { int ii; for(i=0;s[i]!= '\0';i++); /*求字符串的长度*/ for(j=0;t[i]!= '\0';j++); if(i>=j) /*比较两个字符串的长度*/ return s; /*函数返回较长的字符串若两个字符串长度相等则返回第1个字符串*/ else return t; }char *fun(char *s, char *t)\r\n {\r\n int i,i;\r\n for(i=0;s[i]!= '\\0';i++); /*求字符串的长度*/\r\n for(j=0;t[i]!= '\\0';j++);\r\n if(i>=j) /*比较两个字符串的长度*/\r\n return s; /*函数返回较长的字符串,若两个字符串长度相等,则返回第1个字符串*/\r\n else\r\n return t;\r\n } 解析:本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环条件后面必须要有一个分号。
本题也可用如下技巧:
char *fun(char *s,char *t)
{if(strlen(s)>=strlen(t) return s;
else return t;
}
28.void fun(int m int *k int xx[]) { int ijn=0; for (i=4; i<m; i++) /*找出大于1小于整数m的非素数*/ {for(j=2;j<i;j++) if{i%j==0) break; if(j<i) xx[n++]=i; } *k=n; /*反回非素数的个数*/ }void fun(int m, int *k, int xx[])\r\n {\r\n int i,j,n=0;\r\n for (i=4; i<m; i++) /*找出大于1小于整数m 的非素数*/\r\n {for(j=2;j<i;j++)\r\n if{i%j==0) break;\r\n if(j<i) xx[n++]=i;\r\n }\r\n *k=n; /*反回非素数的个数*/\r\n} 解析:这道题是考查一个数是不是素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决,请学习者以此题为例,搞清判断素数的方法。
29.void fun(char (*s) [N]char *b) { int i j k=0; for (i=0; i<N; i++) /*按列的顺序依次放到一个字符串中*/ for (j=0; j<M; j++) b [k++] =s [j] [i]; b[k]='\0'; }void fun(char (*s) [N],char *b)\r\n {\r\n int i, j, k=0;\r\n for (i=0; i <N; i++) /*按列的顺序依次放到一个字符串中*/\r\n for (j=0; j<M; j++)\r\n b [k++] =s [j] [i];\r\n b[k]='\\0';\r\n } 解析:看到程序后,我们很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。
注意其中第1个循环条件为i<N(即列),第2个循环的条件为J<M(即行),这是因为在循环的嵌套中越在内层,循环变化就越快。
另外,在编写程序中注意是s[j][i]而非s[i][j]。
30.double fun(double x[10]) { double xl=0.0s=0.0; int i; for(i=0;i<10;i++) xl=xl+x[i]; xl-xl/10; /*求10个数的平均值*/ for(i=0;i<l0;i++) s=s+(x[i]-xl)*(x[i]-x1); return sqrt(s/l0);/*求10个数的方差*/ }double fun(double x[10])\r\n {\r\n double xl=0.0,s=0.0;\r\n int i;\r\n
for(i=0;i<10;i++)\r\n xl=xl+x[i];\r\n xl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\ u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\ u3000\u3000\u3000/*求10个数的平均值*/\r\n for(i=0;i<l0;i++)\r\n s=s+(x[i]-xl)*(x[i]-x1);\r\n return sqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u30 00\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求
10个数的方差*/\r\n } 解析:又是一道算式表达题,程序中用第1个循
环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。
31.解析:该程序功能是求一维整型数组元素中最大的值和它所在的下标。
其中,求最大元素的方法:用最大值变量nax标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记其当前最大值及其所在位置,从而找出最大值。
32.void fun(char *aint n) { int i=0k=0;char *p*t;p=t=a;/*开始时p
与t同时指向数组的首地址*/ while(*t==‘*’) /*用k来统计前部星号的个
数*/ {k++;t++;} if(k>n) /*如果k大于n则佼p的前部保留n个星号
其后的字符依次存入数组a中*/ {while(*P) {a[i]=*(p+ k-n);i++ p++;}
a[i]=‘\0’;/*在字符串最后加上结束标志位*/ } }void fun(char *a,int n)\r\n
{\r\n int i=0,k=0;\r\n char *p,*t;\r\n p=t=a;/*开始时,p与t同时
指向数组的首地址*/\r\n while(*t==‘*’) /*用k来统计前部星号的个数*/\r\n {k++;t++;}\r\n if(k>n) /*如果k大于n,则佼p的前部保留n个星号,其后的字符依次存入数组a中*/\r\n {while(*P)\r\n {a[i]=*(p+ k-n);\r\n i++\r\n p++;\r\n }\r\n a[i]=‘\\0’;/*在字符串最后加上结束标志位*/\r\n }\r\n } 解析:while() 循环的作用是计算出前部星号的个数;if()的作用是判断星号个数是否多于n个,若是则只保留n个星号,即从字符串前部的倒数第n个星号开始,到最后一个字符都存入数组a中,最后记得在字符串最后加上结束标志位。
33.
解析:该程序功能是移动一维数组中的内容。
解题思路首先将字
符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由
于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。
34.解析:该程序功能是进行四舍五入。
其中,通常求实数x保留m位小数,首先将x扩大10(m+1)倍,扩大后的x加上5后,进行截取判断,最后进行恢复。
35.C
C。
【解析】结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典
为主要工具,建立系统的逻辑模型。
36.A
37.D解析:本题考查宏的使用规则:①字符替换格式:#define标识符字符串.标识符称为宏名,无类型;②双引号中出现的宏名不替换;③宏名的定义通常用大写字母,但不是必须用大写;④宏定义不是赋值语句,不做语法检查。