2022-2023学年河南省安阳市全国计算机等级考试C语言程序设计真题一卷(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022-2023学年河南省安阳市全国计算机等级考试C语言程序设计真题一卷(含答
案)
学校:________ 班级:________ 姓名:________ 考号:________
一、单选题(12题)
1.下列叙述中正确的是:()
A.C语言程序中,main()函数必须在其它函数之前,函数内可以嵌套定义函数
B.C语言程序中,main()函数的位置没有限制,函数内不可以嵌套定义函数
C.C语言程序中,main()函数必须在其它函数之前,函数内不可以嵌套定义函数
D.C语言程序中,main()函数必须在其它函数之后,函数内可以嵌套定义函数
2. 若变量已正确定义,要求程序段完成5!的计算,不能完成此操作的程序段是______。
A.for (i=1,p=1; i<=5; i+ +)p* = i;
B.for (i=1;i<=5; i+ +) {p=1;p*=i;}
C.i=1;p= 1;while( i<=5) { p* =i;i+ +; }
D.i=1;p=1;do{ p*=i;i+ +; } while (i<=5);
3.有下列程序:
程序执行后的输出结果是()。
A.654321
B.65432
C.65453452
D.654534521
4.有下列程序:
fun(int x,int y)
{ static int m=0,i=2;
i+=m+1;m=i+x+y;return m;
}
main()
{ int j=1,m=1,k;
k=fun(j,m);print S(”%d,”,k);k=fun(j,m);printf(”%d\n”,k);
)
执行后的输出结果是()。
A.5,5
B.5,11
C.11,11
D.11,5
5.若有定义“int x=12, y=8, z;”,在其后执行语句“z=0.9+x/y;”,则z的值为()。
A.1
B.1.9
C.2
D.2.4
6.以下叙述中错误的是()。
A.在同一源文件中,函数名必须唯一
B.凡是带有返回值的库函数,都不能通过加分号而作为独立的语句出现
C.不同函数中的形式参数可以同名
D.返回基本数据类型的库函数的调用,均可以出现在赋值号右边的表达式中
7.同一个关系模型的任意两个元组值()。
A.可以全相同
B.不能全相同
C.必须全相同
D.以上都不对
8.fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。
在下划线处应填写的是()。
#include<stdio.h>
#define N 5
void fun(int x[N])
{ int m;
for(m=N-t;m>=O;m-)scanf("%d",____);
}
A.%&X[++m]
B.&x[m+1]
C.x+(m++)
D.x+m
9.算法的空间复杂度是指()。
A.算法在执行过程中所需要的计算机存储空间
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
10.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()。
A.O(0)
B.O(1)
C.O(n)
D.O(n2)
11. 下列对于线性链表的描述中正确的是()。
A.存储空间不一定连续,且各元素的存储顺序是任意的
B.存储空间不一定连续,且前件元素一定存储在后件元素的前面
C.存储空间必须连续,且前件元素一定存储在后件元素的前面
D.存储空间必须连续,且各元素的存储顺序是任意的
12.数据库设计包括两个方面的设计内容,它们是()。
A.概念设计和逻辑设计
B.模式设计和内模式设计
C.内模式设计和物理设计
D.结构特性设计和行为特性设计
二、2.填空题(12题)
13. 在循环中,continue语句与break语句的区别是:______语句只是结束本次循环,然后进行循环的条件判定。
14. 函数my_cmp( )的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,s<t时返回负值。
请填空。
My_cmp(char*s,char*t)
{ while (*s == *t)
{ if (*s == ′ \0)return0;
++s; ++t;
} return【】;
}
15. 函数sstrcmp()的功能是对两个字符串进行比较。
当s所指字符串和t所指字符串相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。
请填空。
#include <stdio.h>
int sstrcmp(char *s,char *t)
{
while(*s && *t && *s==【】)
{ s++;t++;}
rerurn 【】;
}
16. 下面程序把从终端读入的10个整数以二进制方式写入一个名为bi.dat的新文件中。
#include<stdio.h>
FILE *fp;
main()
{ int i,j;
if(fp=fopen(【】)==NULL) exit(0);
for(i=0;i<10;i++)
{scanf("%d",&j);
fwrite(&j,sizeof(int),1,【】;
}
fclose(fp);
}
17. 设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。
(注:try_me() 函数在a:\myfile.txt中有定义。
)
______
main( )
{ printf("\n");
try_me( );
printf("\n");}
18. 下列程序的运行结果是______。
#define POWER(x) ((x)*(x))
main()
{ int i=1;
printf("%d,%d",POWER(i++),i);
}
19. 以下程序运行后的输出结果是______。
fun(int a)
{ int b=0; static int c=3;
b++; c++;
return(a+b+c);
}
main()
{ int i,a=5;
for(i=0;i<3;i++) printf("%d %d",i,fun(a));
printf("\n");
}
20. fun1函数的功能是将3个整数按由大到小的顺序调整后依次放入a、
b、c3个变量中,a中放最大数,fun2函数的功能是交换两个变量中的值。
补足所缺语句。
fun2(int*x,int*y)
{ int t;
t=*x;*x=*y;*y=t;
}
fun1(int*p1,int*p2,int*p3)
{if(*p3>*p2) fun2(*P2,*p3);
if(*p1<*p3) fun2(______);
if(*p1<*p2) fun2(______);
}
main()
{ int a,b,c;
scanf("%d%d%d",&a,&b,&c) ;
fun1(&a,&b,&c) ;
printf("%d,%d,%d\n",a,b,c) ;
}
21. 函数pi的功能是根据以下公式近似求得的:
pi*pi/6=1+1/(2*2)+1/(3.3)+...+1/(n*n)
请在下面的函数中天空,完成求pi的功能。
#include<math.h>
double pi(long n)
{ double s=0.0,long i;
for(i=1;i<<=n;i++)s=s+【】;
return(sqrt(6*s));
}
22. 一个模块直接调用的其他模块的模块个数称为______。
23. 数据库技术的主要特点为数据的集成性、数据的高【】和低冗余性、数据独立性和数据统一管理与控制。
24. 若有定义语句char s[100],d[100];int j=0,i=0;且s中已赋字符串,请填空以实现拷贝。
(注:不使用逗号表达式)
while(s[i]){d[j]=【】;j++;}
d[j]=0;
三、3.程序设计题(10题)
25. 请编写一个函数fun(),它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fan的花括号中填入所编写的若干语句。
试题程序:
#define M 4
#include <stdio.h>
fun(int a[] [M])
{
}
main()
{
int arr[2][M]={5, 8, 3, 45, 76, -4, 12, 82};
printf("max=%d\n",fun(arr));
}
26. N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun(),它的功能是:找出学生的最高分,由函数值返回。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include <stdlib.h>
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun(STREC *h)
{
}
STREC * creat (double *s)
{
STREC *h, *p, *q;
int i=0;
h=p=(STREC*)malloc(sizeof(STREC));
p->s=0;
while(i<N)
/*产生8个节点的链表,各分数存入链表中*/ {q=(STREC*) malloc(sizeof(STREC));
p->s=s[i]; i++; p->next=q; p=q;
}
p->next=0;
return h; /*返回链表的首地址* /
}
outlist (STREC *h)
{
STREC *p;
p=h->next;
printf("head");
do
{printf("->%2.0f ",p->s);p=p->next;}
/*输出各分数* /
while (p!=0);
printf("\n\n ");
}
main()
{
double s[N]={85,76,69,85,91,72,64,87}, max;
STREC *h;
h=creat(s);
outlist(h);
max=fun (h);
printf("max=%6.1f\n ",max);
}
27. 请编写一个函数,函数的功能是删除字符串中的所有空格。
例如,主函数中输入“asd af aa z67”,则输出为“asdafaaz67”。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
28. 函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。
合并的方式是:将a中的十位和个位数依次放在变量c 的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。
例如,当a=45,b=12。
调用该函数后,c=5241。
注意:部分源程序存在文件.PROGl.C中。
数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
29. 假定输入的字符串中只包含字母和*号。
请编写函数fun(),它的功
能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。
试题程序;
#include <stdio. h>
#include <conio. h>
void fun (char *a)
{
}
main()
{
char s[81];
printf("Enter a string :\n");
gets (s);
fun (s);
printf ("The string after deleted: \n");
puts (s);
}
30. 编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:
FirstString--
SecondString
程序输出:
FirtString--SecondStdng
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
31. 下列程序定义了N×N的二维数组,并在主函数中赋值。
请编写一个
函数fun(),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。
例如,若数组a中的值为
0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后s的值应为310。
[注意] 部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
[试题源程序]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
int fun(int w[][N])
{
}
main()
{
int a[N][N]=(0, 1, 2, 7, 9, 1, 11, 21, 5, 5, 2, 21, 6, 11, 1, 9, 7, 9, 10, 2, 5, 4, 1, 4, 1);
int i, j;
int s;
clrscr()
printf("*****The array*****\n");
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
s=fun(a);
printf("*****THE RESULT*****\n");
printf("The sum is: %d\n", s);
}
32. 请编写函数fun(),它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<coio.h>
#include<stdio.h>
#define M 81
int fun(char *ss,char c)
{
}
main()
{ char a[M],ch;
clrscr();
printf("\nPlease enter a string:");
gets(a);
printf("\nPlease enter a char:");
ch=getchar();
printf("\nThe number of the char is:%d \n",fun(a,ch));
}
33. 编写函数int fun(int lim, int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#define MAX 100
int fun(int lim, int se[MAX])
{
}
main()
{
int limit,i,sum;
int aa[MAX];
clrscr();
printf("输入一个整数");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0;i<sum;i++)
{
if(i%10==0&&i!=0) /*每行输出10个数*/
printf("\n");
printf("%5d ",aa[i]);
}
}
34. 下列程序定义了NXN的二维数组,并在主函数中赋值。
请编写函数fun(),函数的功能是求出数组周边元素的平方和并作为函数值返回给主函数中的S。
例如:若a数组中的值为
a=0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后s的值应为310。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define N 5
int fun (int w[][N])
{
}
main()
{
int a[N)[N]={0,1,2,7,9,1,1l,2l,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};
int i,j;
int S;
clrscr( );
printf("*****The array***+*\n");
for (i=0;i<N;i++)
{for(j=0;j<N;i++)
{printf(“%4d”,a[i][j]);}
printf("\n");
}
s=fun(a);
printf(“*****THE RESULT*****\n”);
printf("The sum is:%d\n",s);
}
四、单选题(0题)
35. 数据库设计包括两个方面的设计内容,它们是()
A.概念设计和逻辑设计
B.模式设计和内模式设计
C.内模式设计和物理设计
D.结构特性设计和行为特性设计
五、单选题(0题)
36.
有以下程序:
main
{ int num[4][4]={1,2,3,4},{5,6,7,8},{9,10,11,12,},{13,14,15,16}},i,j;
for(i=0;i<4;i++)
{ for(j=0;j<i;j++)printf("%4c",);
for(j=________;J<4;j++)printf("%4d",num
[i][j]);
printf("\n");}}
若要按以下形式输出数组右上半三角
1 2 3 4
6 7 8
11 12
16
则在程序下划线处应填入的是( )。
A.i-1
B.i
C.i+1
D.4一i
六、单选题(0题)
37.
参考答案
1.B
每个C 程序有且只有一个主函数main,C程序总是从main函数开始执行,main函数后面的一对圆括号不能省略,main函数可以位于程序的任意位置。
函数不可以嵌套定义,但函数可以嵌套调用。
2.B解析:选项B中每次执行循环体都要执行p=1,无法保存上次的运算结果,执行完while循环后p=5。
3.C程序首先定义整型变量a和b,a的初值为123456。
接着通过while 循环,判断a的值是否为0,若不为0,则执行循环体。
每次循环将a当前值的个位数字(a%10)赋给b,a自身除以10。
再通过switch语句判断b的值执行对应分支语句。
所以对应a的每个个位数,b的取值为6,5,4,3,2,1。
当b取值为6时,执行default,输出6,接着继续执行case1,通过break退出switch。
执行下一次循环,当b取值为5时,执行case5输出5。
执行下一次循环,当b取值为4时,执行case4输出4,继续执行case5输出5。
接着执行下一次循环,当b取值为3时,执行case3输出3,执行case4输出4,执行case5输出5;当b取值为2时,执行case2输出2,通过break退出switch;当b取值为1时,执行break,此时a的取值为0,循环终止。
综上,程序输出结果为:65453452。
本题答案为C选项。
4.B
子函数fun(int x,int y),将变量m和i声明为局部静态变量,因此第l 次调用主函数后,局部静态变量m和i的值为5和3,第l次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i 的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,因此最终m的值为11。
5.A在表达式“z=0.9 +x/y”中,先计算“3.6-2”,结果为1;再计算“0.9+1”,结果为1.9。
因为变量z为整型,所以z的值为1。
故本题答案为A选
项。
6.B在同一源文件中,函数名必须唯一,选项A正确。
函数的调用有两种形式:①出现在表达式中,可以出现在赋值号右边的表达式中;②作为独立的语句完成某种操作。
因此选项B错误,选项D正确。
不同函数中的形参可以同名,它们的作用域都限制在各自的函数体内,选项C 正确。
故本题答案为B 选项。
7.B关系具有以下7个性质。
①元组个数有限性:二维表中元组的个数是有限的。
②元组的唯一性:二维表中任意两个元组不能完全相同。
③元组的次序无关性:二维表中元组的次序,即行的次序可以任意交换。
④元组分量的原子性:二维表中元组的分量是不可分割的基本数据项。
⑤属性名唯一性:二维表中不同的属性要有不同的属性名。
⑥属性的次序无关性.二维表中属性的次序可以任意交换。
⑦分量值域的同一性:二维表属性的分量具有与该属性相同的值域,或者说列是同质的。
满足以上7个性质的二维表称为关系,以二维表为基本结构所建立的模型称为关系模型。
本题答案为B选项。
8.D
D【知识点】宏定义与数组地址的考察【解析】数组名本身就是地址,所以不需要在用&符号。
C选项不能对所有元素赋值而是反复再给一个数值赋值且是死循环。
9.A算法的空间复杂度是指算法在执行过程中所需要的内存空间。
所以选择A项。
10.C
11.A解析:在链式存储结构中,存储数据的存储空间可以不连续,各数
据结点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系,是由指针域来确定的。
由此可见,选项A的描述正确。
因此,本题的正确答案为A。
12.A解析:模式设计和内模式设计是概念设计的两种方法。
物理设计是根据特定的计算机系统,对数据的存储结构和存取方法进行设计,从而实现从逻辑结构到物理结构的转换。
从系统开发的角度来看,结构特性设计和行为特性-设计是数据库应用系统所具有的两个特性。
结构特性的设计,设计各级数据库模式(静态特性):行为特性的设计,改变实体及其特性,决定数据库系统的功能(动态特性)。
13.continuecontinue 解析:continue语句只是结束本次循环,然后进行循环的条件判定。
break语句是终止整个循环的执行,不再进行条件判定。
14.*s-*t*s-*t 解析:两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。
相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。
对应字符不相同,循环结束。
循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s > t时,返回正值,当s < t时,返回负值。
15.*t或t[0] *s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]*t或t[0]\r\n *s-*t或*s-t[0]或s[0]-*t或s[0]-t[0] 解析:比较两个字符串的大小方法是:从第一个字符开始依次向后比较,若对应的字符相等则接着比较下一个字符,一直到两个字符串中对应字符不等,或者有一个为“\\0”,此对应字符的ASCII 码大的字符串就大。
故循环条件是*s和*t不为“\\0”,且*s和*t相同,第
一处应填“*t”或其他等价形式。
根据题意可知第二处应填“*s-*t”或其等价形式。
16."bi.dat" fp'bi.dat'\r\nfp 解析:打开文件函数fopen的参数是文件名,因此有fopen('bi.dat');而写文件的参数是文件指针,因此有fwrite(&j,sizeof(int),1,fp);
17.#include <a:\myfile.txt>#include <a:\\myfile.txt>解析:本题考查了函数的存储分类的概念。
如果没有特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用ginclude文件包含命令将定义函数的文件包含进来。
18.111,1 解析:POWER(i++)中先引用i的值1,再将i的值加1,POWER(i++)=1*1=1。
19.0 10 1 11 2 120 10 1 11 2 12 解析:本题考查的是静态局部变量的运用。
静态局部变量的作用域与普通局部变量一样,但它的生存期将延长到程序运行结束。
本题的主函数中使用一个for循环输出循环变量i和fun(a)的值,由于a的值一直没被修改过,所以三次调用的都是fun(5)。
第1次调用,b=0,c=3,所以返回值为5+1+4=10;第2次调用,因为c 是静态局部变量,它仍然保存着上次调用结束时的值4,而b重新被创建和初始化为0,所以返回值为5+1+5=11;同理,第3次调用返回的是12。
所以,程序最终输出为:010111212。
20.*p1*p3 *p1*p2。
*p1,*p3 *p1,*p2。
解析:本题考查的知识点有3个,
①指针变量作为形参,②函数的嵌套调用,③排序的基本方法。
21.1.0/i/i 或1.0/(i*i)1.0/i/i 或1.0/(i*i) 解析:由题面中提供的计算pi的公式可知:在第i项其值为1/(i*i),考虑到运算结果为浮点数,故必须
要将1转化为浮点数或采用1.0/(i*i)的形式。
故本题应填1.0/(i*i)或其等效形式。
22.扇出扇出解析:在结构图中,调用一个给定模块的模块个数称为扇入,一个模块直接调用的其他模块个数称为扇出。
23.共享性共享性解析:数据库技术的主要特点有以下几个方面:数据的集成性,数据的高共享性与低冗余性,数据的独立性,数据统一管理与控制。
24.s[i++]s[i++] 解析:本题中为了能实现字符串的拷贝,需要使字符数组s从头到尾依次遍历其所有元素。
本题应使用i的自增后置来实现。
25.fun (int a[] [M]) { int ijmax=a[0][0];for(i=0;i<2;i++) for(j=0;j<M;j++) if(max<a[i][j]) max=a[i][j];/*求出二维数组的最大值*/ return max;}fun (int a[] [M])\r\n {\r\n int i,j,max=a[0][0];\r\n for(i=0;i<2;i++)\r\n for(j=0;j<M;j++)\r\n if(max<a[i][j])\r\n max=a[i][j];/*求出二维数组的最大值*/\r\n return max;\r\n } 解析:此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。
要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使max存放数组中的第一个元素的值。
可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。
即行下标在外层循环列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。
26.double fun(STREC *h) { double max=h->s; while(h!=NULL) /*通过循环找到最高分数*/ {if(max<h->s) max=h->s; h=h->next; } return max; }double fun(STREC *h)\r\n {\r\n double max=h->s;\r\n
while(h!=NULL) /*通过循环找到最高分数*/\r\n {if(max<h->s) max=h->s;\r\n h=h->next;\r\n }\r\n return max;\r\n } 解析:在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符“->”。
由于是链表,所以要使h逐一往后移动,使用的是h=h->next。
27.解析:该程序功能是删除字符串中的所有空格。
本题的解题思路是首先利用一个指向字符串的指针,查找不是空格的字符,然后将不是空格的字符赋值到字符串,如果是空格,则跳过该字符,这样就实现了空格字符的删除。
28.解析:该程序功能是将两个正整数合并形成一个整数的题型。
本题类型首先要考虑整数的位数分离,然后要进行位数合成。
也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。
29.void fun (char *a) { char*p=a;while(*P==‘+’) p++; /*指针p指向字符串第一个字母*/ for(;*p!=‘\0’;p++a++) *a=*p;/*从第—个字母开始其后的字符都放入指针a所指的字符串中*/ *a=‘\0’;/*在字符串最后加上结束标记符*/ }void fun (char *a)\r\n {\r\n char*p=a;\r\n while(*P==‘+’) p++; /*指针p指向字符串第一个字母*/\r\n for(;*p!=‘\\0’;p++,a++)\r\n *a=*p;/*从第—个字母开始,其后的字符都放入指针a所指的字符串
中*/\r\n *a=‘\\0’;/*在字符串最后加上结束标记符*/\r\n } 解析:在前面的改错题和编程题中,相关试题已经出现好多次了,我们在此提供另一种解答方法。
#include<string.h>
void fun (char *a)
{char *p=a;
while (*p==‘*’)p++;
strcpy (a,p);
}
30.解析:该程序功能是实现两个字符串的连接。
本题要把串2连接到串1之后,则需要把串2的第一个字符放到串1的尾符的位置上,把串2的后面的字符放到串1的后面的位置。
31.int fun(int w[][N]) { int i j k=0; int s=0; for(i=0; i<N; i++) for(j=0; j<N; j++) if(i==0||i==N-1||j==0||j==N-1) { s=s+w[i][j]*w[i][j]; } return s; }
int fun(int w[][N])\r\n {\r\n int i, j, k=0;\r\n int s=0;\r\n for(i=0; i<N;
i++)\r\n for(j=0; j<N; j++)\r\n if(i==0||i==N-1||j==0||j==N-1)\r\n {\r\n
s=s+w[i][j]*w[i][j];\r\n }\r\n return s;\r\n }
32.int fun(char *sschar c) { int i=0;for (;*ss!='\0';ss++) if(*ss==c) i++; /*求出ss所指字符串中指定字符的个数*/ return i; }int fun(char *ss,char c)\r\n {\r\n int i=0;\r\n for (;*ss!='\\0';ss++)\r\n if(*ss==c)\r\n i++; /*求出ss 所指字符串中指定字符的个数*/\r\n return i;\r\n } 解析:从字符串ss中
找出子字符串的方法是:从第1个字符开始,对字符串进行遍历:若ss 串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若“串的字符和c串的字符不对应相同,则继续对,s串的下一个字符进行处理。
本程序是采用逐一比较的方式找出出现的次数。
循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与c相同则表示又出现一次.
33.int fun(int lim int aa[MAX]) { int ijk=0; for(i=2;i<=lim;i++) /*求出小于或等于lim的全部素数*/ { for(j=2;j<i;j++) if(i%j==0) break; if(j>=i) aa[k++]=i;; /*将求出的素数放入数组aa中*/ } return k; /*返回所求出的素数的个数*/ }int fun(int lim, int aa[MAX])\r\n {\r\n int i,j,k=0;\r\n for(i=2;i <=lim;i++) /*求出小于或等于lim的全部素数*/\r\n { for(j=2;j<i;j++)\r\n if(i%j==0) break;\r\n if(j>=i)\r\n aa[k++]=i;; /*将求出的素数放入数组aa 中*/\r\n }\r\n return k; /*返回所求出的素数的个数*/\r\n } 解析:在做这道题时,我们只需掌握素数的基本算法就可以了,一般表示素数的方法如下:
for (j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
34.int fun(int w[])[N]) { int ijk=0;int s=0;for(i=0;i<N;i++) for(j=0;j<N;j++) if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1则它一定是周边元素*/ {s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/ } return s; /+返回周边元素的平方和*/ }int fun(int w[])[N])\r\n { \r\n int i,j,
k=0;\r\n int s=0;\r\n for(i=0;i<N;i++)\r\n for(j=0;j<N;j++)\r\n if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1,则它一定是周边元素*/\r\n {s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/\r\n }\r\n return s; /+返回周边元素的平方和*/\r\n } 解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。
35.A解析:模式设计和内模式设计是概念设计的两种方法。
物理设计是根据特定的计算机系统,对数据的存储结构和存取方法进行设计,从而实现从逻辑结构到物理结构的转换。
从系统开发的角度来看,结构特性设计和行为特性-设计是数据库应用系统所具有的两个特性。
结构特性的设计,设计各级数据库模式(静态特性):行为特性的设计,改变实体及其特性,决定数据库系统的功能(动态特性)。
36.B
\n本题中要求输出右上半角的数,对角线上的数的下标相同,所以j=i。
\n
37.D。