2023年广东省广州市全国计算机等级考试C语言程序设计测试卷(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2023年广东省广州市全国计算机等级考试C语言程序设计测试卷(含答案) 学校:________ 班级:________ 姓名:________ 考号:________
一、2.填空题(10题)
1. 阅读下面程序,则执行后的输出结果是【】。
#include "stdio.h"
main()
{ int x,y,z;
x=1;y=2;z=3;
if(x>y)if(x>z)printf("%d",x);
else printf("%d",y);
printf("%d\n",z);}
2. 对软件是否能达到用户所期望的要求的测试称为【】。
3. 面向对象的模型中,最基本的概念是对象和______。
4. 以下程序的输出结果是【】。
main()
{ int y=9;
for(;y>0;y--)
if(y%3==0)
{printf("%d",--y);continue;}}
5. 下面程序的运行结果是【】。
#include<stdio.h>
#define SIZE 12
main()
{ char s[SIZE]; int I;for(I=0;I<SIZE;I++) s[I]=′A′+I+321; sub(s,7,SIZE-1);
for(I=0;I<SIZE;I++) printf("%c",s[I]);
printf("\n");}
sub(char*a,int t1,int t2)
{ char ch;
while (t1<t2)
{ ch=*(a+t1);
*(a+t1)=*(a+t2);
*(a+t2)=ch;
t1++;t2--; } }
6. 当运行以下程序时,从键盘输入abcdabcdef<CR>cde<CR>
(<CR>表示回车),则下面程序的运行结果是【】。
#include<stdio.h>
main()
{ int a;char s[80],t[80];
gets(s);gets(t);
a=fun(s,t);
printf("a=%d\n",a);}
fun(char*p,char*q)
{ int i;
char*p1=p;
char*q1;
for(i=0;*p!='\0';p++,i++)
{ p=p1+i;
if(*p!=*q)continue;
for(q1=q+1,p=p+1;*p!='\0'&&*q1!='\0';q1++,p++)
if(*p!=*q1) break;
if(*q1=='\0') return i;}
return(-1);}
7. 下面程序的运行结果是( )。
#define P(A)printf("%d",A)main() {int j,a[]={1,2,3,4,5,6,7},i=5;for(j=3;j>1;j--) {switch(j) {case 1: case 2:P(a[i++]);break;case 3:P(a[--i]);} } }
8. 数据结构分为逻辑结构与存储结构,线性链表属于【】。
9. 以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。
当给a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。
请填空。
main()
{float a,b,c;
scanf("%f%f%f",&a,&b,&C);
if(( ))printf("YES\n");/*a、b、c能构成三角形*/
else printf("NO\n");/*a、b、c不能构成三角形*/
}
10. 数据结构分为线性结构和非线性结构,带链的队列属于[ ]。
二、单选题(10题)
11.有以下程序:
#include <stdio.h>
void main ()
{
double x=3.14159;
printf(“%f\n”, (int)(x*1000+0.5)/(double)1000);
}
程序运行后的输出结果是()。
A.3.142000
B.3.141000
C.3.143000
D.3.140000
12.在位运算中,操作数左移一位,其结果相当于
A.A.操作数乘以2
B.操作数除以2
C.操作数除以4
D.操作数乘以4
13.
14. 检查软件产品是否符合需求定义的过程称为()。
A.确认测试
B.集成测试
C.验证测试
D.验收测试
15.数据库系统的核心是()。
A.数据模型
B.数据库管理系统
C.数据库
D.数据库管理员
16.数据处理的最小单位是()。
A.数据
B.数据元素
C.数据项
D.数据结构
17.
18.若要求从键盘读入含有空格字符的字符串,应使用函数()。
A.getchar
B.getc
C.gets
D.scanf
19.在一个链式队列中,假设f和r分别为队头和队尾指针,则插入S所指结点的运算是()。
A.f->next=s;f=s;
B.r->next=s;r=s;
C.S->next=rr=s;
D.r->next=f;f=s;
20.以下不构成无限循环的语句或语句组的是()。
A.n=0;
do {++n;} while (n<=0);
B.n=0;
while (1) {n++;}
C.n=10;
while (n); {n--;}
D.for(n=0,i=1;
i++) n +=i;
三、程序设计题(10题)
21.请编写函数proc,它的功能是计算:s=(In(1)4+ln(2)4+ln(3)+…+In(m))0.5
在C语言中可调用log(n)函数求ln(n)。
例如,若m的值为30,则proc函数值为8.640500。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<conio.h>
#inclllde<stdio.h>
#include<math.h>
double proc(int m)
{
}
void main
{
system("CLS");
printf("%f\n",proc(30));
}
22.请编写函数proc(),该函数的功能是:实现B=A+A ',即把矩阵A 加上A的转置,存放在矩阵B中。
计算结果在main()函数中输出。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
23.下列程序判断字符串s是否对称,对称则返回1,否则返回0;如f("abba")返回1,f("abab")返回0。
24.请编写一个函数proc(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。
数组元素中的值已在主函数中赋予。
主函数中arr是数组名,n是arr中的数据个数,max存放最大值,index存放最大值所在元素的下标。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括
号中填入所编写的若干语句。
试题程序:
25. 请编写函数proc,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。
例如,若二维数组中的数据为
13 23 33 43
14 24 34 44
15 25 35 45
则一维数组中的内容应该是13 23 33 43 14 24 34 44 15 25 35 45。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
void proc(int(*s)[103,int*b,int*n,int rain.int nn)
{
}
void main
{
int arr[10][10]={{33,33,33,33),{44,44,44,44},
{55,55,55,55}),i,j;
int a[l00]={o),n=o;
printf("The matrix:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%3d",arr[i][j]):
printf("\n");
}
proc(arr,a,&n,3,4):
printf("The A array:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]):
printf("\n\n");
}
26.请编写函数proc(),该函数的功能是:计算n门课程的平均分,计算结果作为函数值返回。
例如,有6门课程的成绩是90.5,72,80,
61.5,55,60,则函数的值为69.83。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
27.
请编写函数proc(),它的功能是计算:s=(1-1n(1)-1n(2)-1n(3)-…-1n(m))2 s作为函数值返回。
在C语言中可调用log(n)函数求1n(n)。
log函数的引用说明是double log(double x)。
例如,若m的值为10,则proc()函数值为l98.934454。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。
试题程序:
28.使用VC++2010打开考生文件夹下prog1中的解决方案。
此解决方案的项目中包含一个源程序文件prog1.c。
在此程序中,编写函数
fun(),该函数的功能是统计一行字符串中单词的个数,并将其作为函数值返回。
字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。
注意:部分源程序在文件prog1.c中。
请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。
试题程序:
1 #include < string.h >
2 #include < stdio.h >
3 #define N 80
4 int fun (char * s)
5 {
6
7 }
8 void main ()
9 {
10 FILE * wf ;
11 char line[N];
12 int num = 0 ;
13 printf("Enter a string:\n ");
14 gets(line);
15 num = fun (line);
16 printf (" The number of words is:% d\n\n ",num);
17 /********* found *********/
18 wf = fopen ("out. dat", "w");
19 fprintf (wf, "% d", fun ( " a big car"));
20 fclose(wf);
21 /********* found ********* /
22 }
29.请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
30.
请编写一个函数proc(),它的功能是:求出一个4×N整型二维数组中最大元素的值,并将此值返回调用函数。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。
试题程序:
四、2.程序修改题(10题)
31. 下列给定程序中,函数fun()的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <conio.h>
void fun(char *s)
{int i,j;
for(i=0,j=0; s[i]!= '\0'; i++)
if(s[i]>='0'&&s[i]<='9')
/*************found**************/
s[j]=s[i];
/*************found**************/
s[j]="\0";
}
main()
{char item[80];
clrscr();
printf("\nEnter a string: ");gets(item);
printf("\n\nThe string is:\%s\n", item);
fun(item);
printf("\n\nThe string of changing is :
\%s\n",item);
}
32. 下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。
插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:
#include <String.h>
#include <stdio.h>
#define N 80
void insert(char *aa)
{ iht i, j, n; char ch;
n=strlen (aa);
for (i=1; i<n; i++)
/**********************************/
{ c=aa[i];
j=i-1;
while ((j>=0) &&(ch<aa [j] ))
{ aa [j+l]=aa[j];
j--;
}
aa [j+l]=ch;
}
main ( )
{ char a [N] = "QWERTYUIOPASDFGHJKIMNBVCXZ";
int i;
printf("The original string: %s\n",a);
insert (a);
printf("The string after sorting:
%s\n\n", a);
}
33. 给定程序中函数fun的功能是:根据整型形参m,计算如下公式的值。
例如,若m中的值为5,则应输出:1.463611。
请改正程序中的错误,使它能得到正确结果。
[注意] 不要改动main函数,不得增行或删行,也不得更改程序的结构。
[试题源程序]
#include<stdi0.h>
double fun(int m)
{
double y=1.0;
int i;
/*************found*************/
for(i=2; i<m; i++)
/*************found*************/
y+=1/(i*i);
return(y);
}
main()
{
int n=5;
printf("\nThe result is%1f\n",fun(n));
}
34. 下列给定程序中,函数fun()的作用是,将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。
例如,若输入"Ab,cD",则输出"ab, cd"。
请改正函数fun()中的错误,使它能得出正确的结果。
注童:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <string.h>
#include <conio.h>
char *fun (char tt[])
{
int i;
for(i=0; tt[i]; i++)
/**************found**************/
{ if(('A' <=tt[i]||(tt[i]<='z' ))
tt[i]+=32; }
return(tt);
}
main()
{int i;
char tt[81];
clrscr();
printf("\nPlease enter a string:");
gets(tt);
printf("\nThe result string is:\n %s", fun(tt));
}
35. 给定程序MODll.C中函数fun的功能是:首先把b所指字符串中
的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c 所指数组的尾部。
例如,当a所指字符串中的内容为“abcdefg”,b所指字符串中的内容为“1234”1时,c所指数组中的内容应该为“a4b3e2dlefg”;而当a所指字符串中的内容为“1234”,b所指字符串中的内容为“abedefg”时,c所指数组中的内容应该为“lg2f3e4dcba”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
36. 下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下公式的值。
A1=1,A2=1/(5+A1),A3=1/(5+A2),…,An=1/(5+A(n-1))
例如,若n=l0,则应输出0.192582。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <conio.h>
#include <stdio.h>
float fun(int n)
{
/***********found*************/
int A=1;
int i;
/*************found*************/
for(i=1;i<=n;i++)
A=1.0/(5+A);
return A;
}
main()
{
int n;
clrscr();
printf("\nPlease enter n:");
scanf("%d",&n);
printf("A%d=%lf\n”,n,fun(n));
}
37. N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找算法查找整数m在数组中的位置。
若找到,则返回其下标值:反之,则返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。
如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。
直到low >high,查找结束。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#define N 10
/*************found*********************/
void fun(int a[],int m)
{ int low--0,high=N-l,mid;
while (low<=high)
{ mid=(low+high)/2;
if(m<a[mid])
high=mid-1;
/*************found*********************/
else if(m>=a [mid])
low=mid+1;
else return(mid);
}
return(-1);
}
main ()
{ int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
printf ("a数组中的数据如下: ");
for(i=0;i<N;i++) printf("%d",a[i]);
printf ("Enter m: "); scanf ("%d", &m);
k=fun (a,m);
if (k>=0) printf ("m=%d, index=%d\n",m, k);
else printf("Not be found!\n");
}
38. 下列给定的程序中,函数hn()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <math.h>
void fun(int a, int *b, int *c)
{ int i,j,d,y;
for (i=3;i<=a/2;i=i+2)
/*************found**************/
{y=0;
for (j=2;j<=sqrt((double)i);j++)
if (i%j==0) y=0;
if (y==1)
/*************found**************/
{ d=i-a;
for (j-2;j<=sqrt((double)d);
j++)
if (d%j==0) y=0;
if (y=-1)
{*b=i; *c=d;}
}
}
}
main ()
{ int a,b,c;
do
{ printf("\nInput a: ");
scanf ("%d", &a); }
while (a%2);
fun (a, &b, &c);
printf ("\n\n%d=%d+%d\n", a,b,c);
}
39. 下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#define N 20
void fun(int a[],int n)
{int i,j,t,p;
for (j=0;j<n-1;j++)
/*************found**************/
{p=j
for(i=j;i<n;i++)
if(a[i]<a[p])
/*************found**************/
p=j;
t=a[p]; a[p]=a[j]; a[j]=t;
}
}
main()
{int a[N]={9.6,8,3,-1},i,m=5;
printf("排序前的数据: ");
for(i=0;i<m;i++) printf("%d",a[i]);
printf("\n");
fun(a,m);
printf("排序后的顺序: ");
for(i=0;i<m;i++) printf("%d",a[i]);
printf("\n");
}
40. 下列给定程序中,函数fun()的功能是:求出以下分数序列的前n项之和。
2/1,3/2,5/3,8/5,13/8,21/13,……
和值通过函数值返回main()函数。
例如,若输入n=5,则应输出8.391667。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <conio.h>
#include <stdio.h>
/*************found**************/
fun (int n)
{ int a=2,b=l,c, k;
double s=0.0;
for(k=l;k<=n;k++)
{s=s+l.0*a/b;
/*************found**************/
c=a; a+=b; b+=c;
}
return (s);
}
main ()
{ int n=5;
clrscr ();
printf("\nThe value of function is:
%1f\n", fun (n));
}
五、程序改错题(2题)
41.
下列给定程序中,函数proc()的功能是:计算S=f(-n)+(-n+1)+…+f (O)+f(1)+(2)+…+f(n)的值。
例如,当n为l0时,函数值应为22.550361。
f(x)函数定义如下:
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main ()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
42.下列给定程序的功能是:读入一个整数n(2<;=n<;=5000),打印它的所有为素数的因子。
例如,若输入整数1234,则应输出2,617。
请修改程序中的错误,使程序能得出正确的结果。
注意:不要改动main ()函数,不能增选或删行,也不能更改程序的结构。
试题程序:
六、操作题(2题)
43. 以下程序运行后的输出结果是______。
int a=5;
fun (int B)
{ static int a=10;
a+=b++;
printf("%d",A) ;
}
main()
{ int c=20;
fun(C) ,
a+=C++;
printf("%d\n",A) ;
}
44. 请编写一个函数int fun (int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
234 345 753 134 436 458 100 321 135 760
则输出结果为6,100。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
int fun(int *s,int t,int *k)
{
}
main()
{
int a[10]={234,345,753,134,436,458,
100,321,
135,760),k;
clrscr();
fun(a,10,&k);
printf("%dr %d\n",k, a[k]);
}
参考答案
1.33 解析:C语言的语法规定:else子句总是与前面最近的不带else的if相结合。
因为x不大于y,所以执行printf('%d\\n',z);语句。
2.有效性测试有效性测试
3.类类
4.852852 解析:循环前,变量y的值为9,其中的循环语句在y大于0情况下循环,每次循环后y的值减1。
循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。
这样,第一次循环因y为9,能被3整除,输出8,y也变成8。
又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环。
所以程序输出852。
5.a b c d e f g l k j I ha b c d e f g l k j I h 解析:本题主要考查了字符变量
可参与的运算。
因为字符在计算机中是以ASCII码的形式存放的,所以字符变量可看作整型变量来处理,如参与算术运算等,某字符的大写字母的ASCII码值比它对应的小写字母ASCII码值小32。
6.a=6a=6 解析:字符指针p++使指针向后移动一个字符的位置,而*p则是取得指针p所在位置的字符元素。
7.5 55 5 解析:分析程序执行过程,第一次循环时,j=3,i=5,因为switch(3),所以执行case3,调用P(a[--i])=P(a[4])=P(5),输出5;第二次循环时,j=2,i=4,因为switch(2),所以执行case2,调用P(a[i++])=P(a[4])=P(5),输出5,之后i自加1等于5。
8.存储结构
9.(a+b>C)&&(a+c>B)&&(b+c>A)(a+b>C)&&(a+c>B)&&(b+c>
A) 解析:本题主要考查运算符逻辑与“&&”的用法。
10.线性结构线性结构解析:与栈类似,队列也是线性表,也町以采用链式存储结构。
11.A根据算术表达式和运算符的优先级与结合性。
表达式“int(x* 1000+0.5)/(double)1000”,首先计算“x*1000”,由于x是double类型,1000是整型,所以“x*1000”的结果默认是double类型,即3141.59,加0.5后再执行int的强制转换,结果为3142。
分母“(double)1000”强制转换为double类型,此时计算“3142/(double)1000”,3142需要转换成double 类型,然后除以1000,结果为3.142000,默认保留小数点后6位。
故本题答案为A选项。
12.A
左移运算符“<<”是双目运算符,其功能是把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
例如,a<<4是把a的各二进位向左移动4位。
如
a=00000011(十进制3),左移4位后为00110000(十进制48)。
13.C
14.A本题主要考查软件测试的基本知识。
软件测试的步骤可分为单元测试(模块测试)、集成测试、确认测试和系统测试。
(1)单元测试是针对每个模块进行的测试,它可从程序的内部结构出发设计测试用例,多个模块可以平行、对立地测试。
单元测试主要用于发现详细设计和编程时犯下的错误。
单元测试多采用白盒测试,辅之以黑盒测试。
(2)集成测试是在单元测试的基础上,根据模块结构图将各个模块连接起来,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。
主要目标是发现与接口有关的问题。
集成测试可以发现概要设计时犯的错误。
(3)确认测试用于验证软件的功能和性能及其他特性是否与用户的要求一致。
确认测试主要用于发现需求分析时犯下的错误,一般使用黑盒法测试,以表明软件符合需求说明书的要求,应该仔细设计测试用例和测试过程。
确认测试必须有用户参加,或以用户为主,用户应参与设计测试用例,通常情况下,主要使用生产中的实际数据进行测试,测试数据通过用户接口输入。
(4)系统测试是将已经通过确认测试的软件,作为整个计算机系统的元素与计算机硬件、外设和网络等其他因素结合在一起,进行一系列的组装测试和确认测试。
系统测试的目的是通过与系统的需求定义做比较,发现软件与系统的定义不符合的地方。
系统测试可以发现问题定义时犯下的错误。
15.B解析:数据库管理系统是数据库系统的核心,是负责数据库的建立、使用和维护的软件。
数据库管理系统建立在操作系统之上,实施对数据库的统一管理和控制。
用户使用的各种数据库命令以及应用程序的执行,最终都必须通过数据库管理系统。
另外,数据库管理系统还承担着数据库的安全保护工作,按照数据库管理员所规定的要求,保证数据库的完整性和安全性。
16.C解析:数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。
故正确答案为选项C) 。
17.C
18.C当输入字符串时,函数scanf用“空格”间隔不同的字符串,scanf函数不能输入空格。
getchar函数用于输入字符,其调用形式为ch=getchar(),getehar函数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。
在输入时,空格、回车符都将作为字符读入,而且只有在用户按<Enter>键时,读入才开始执行。
gets函数的调用形式为getS(Str_adr),其中“str_adr”是存放输入字符串的起始地址,可以是字符数组名、字符
数组元素的地址或字符指针变量。
gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。
getc函数的调用形式为ch=getc(Pf),其中“pf”是文件指针,函数的功能是从“pf”指定的文件中读入一个字符,并把它作为函数值返回。
故本题答案为C选项。
19.B
20.AA选项中do后面的语句只执行了一次便结束了循环;B选项中条件while(1)永远成立,所以是死循环;C选项中n的值为10,而循环体为空语句,所以while(n)永远为真,进入死循环;D选项中for语句第2个表达式为空,所以没有判断条件,进入死循环。
故本题答案为A选项。
21.double proc(int m)
\n{
\nint i;
\ndouble s=0.0;//s是表示其和
\nfor(i=1;i<=m;i++)
\ns=s+log(i);//计算s=ln(1)+ln(2)+ln(3)+…+ln(m)
\nreturn sqrt(s);//最后将其开平方的值返回到主函数中
\n}
\n【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然后开平方。
可以首先通过m次循环求得m项表达式的和,然后将其和开平方并返回到主函数当中。
\n
22.
【解析】矩阵与其逆置矩阵的关系为:逆置矩阵中某一位置上的元素
值为原矩阵中,行下标与列下标互换后的位置上的元素。
根据这个特点求出各个位置上逆置矩阵中对应的值,进行相加并放在该位置上。
23.
24.
【解析】要得到数组中元素的最大值,需要比较数组中的每一个元素。
首先将最大值赋值为数组中的第一个元素,再将其与数组中的其他元素相比较,将值最大的元素赋给变量max,并将其下标赋值给变量d。
25.\r\n\tvoid proc(int(*s)[10],int*b,int*n,int mm,int nn)
{
int i,j,k=0;
for(i=0;i<mm;i++)//i是表示其行的下标
for(j=0;j<nn;j++)//j是表示其列的下标
b[k++]=s[i][j];//把其放到b的一维数组中
*n=k;//把b数组的长度通过形参n传回到主函数中
}
【解析】要将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,可以通过首先行循环,然后列循环取出二维数组中的每一
个元素,并将其放入一维数组中。
最后,将一维数组的长度通过形参
返回到主函数当中。
26.
【解析】要计算n门课程的平均分,首先可以求得n 门课程的总分,然后除以n得到其平均分,最后将其平均分返回到主函数中。
27.
【解析】首先我们应定义一个变量来表示其和,另一个来表示其项数,然后通过循环,求得其差值,最后把和的平方返回到主函数中。
28.Int fun(char*s)
{
Int i,j=0;
for(i=0;s[i]!=’\\o’/i++)if(s[i]!=’'&&(s[i+i]==’’||s[i+1]=='\\0'))
/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词
结束*/
J++;
_return j;/*返回单词个数*/
}
要判断单词的个数,首先考虑怎样识别一个单词。
如果一个字母的下一个字符为空格或者字符串结束标志,则表示一个单词结束。
因此程序使用for循环语句遍历整个字符串,用if条件语句判断当前字符是否表示一个单词的结束。
如果当前字符表示一个单词结束,则存放单词个数的变量加1,最后返回单词的个数。
29.
【考点分析】
本题考查:求数组的最大值,需要运用循环语句,因为数组是二维数组,所以应使用二层for循环嵌套。
使用for循环语句时需要注意循环变量的取值范围。
【解题思路】
此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。
首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋予max,循环结束后max的值即为数组最大值,最后将该值返回。
【解题宝典】
该类题目考查较多,要掌握逐行比较的方法。
对于m*n二维数组,如采用逐行查找方法,代码实现为:
30.
【解析】要求出二维数组中最大元素的值,需要比较二维数组中每一个元素的值。
首先,定义变量max用来存放最大元素的值,将其初始化为二维数组中第一个元素的值。
然后将其与后面的每一个元素进行比较,将二维数组中最大元素的值放到变量max当中,并将其返回给主函数。
31.(1)错误;s[j]=s[i];正确:s[j++]=s[i];(2) 错误:s[j]="\0";正确:s[j]='\0';(1)错误;s[j]=s[i];正确:s[j++]=s[i];\r\n(2) 错误:s[j]='\\0';正确:s[j]=\'\\0\';解析:有循环条件if(s[i]>=\'0\'&&s[i]<=\'9\')以及题目要求“依次取出字符串中所有的数字字符”可知,s[j]=s[i];表述错误。
s[j]='\\0';中是一个常识性语法错误,学习者只要在平时训练的时候注意一下就可以了。
32.错误:c=aa[i] 正确:ch=aa[i];错误:c=aa[i] 正确:ch=aa[i];解析:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。
对前m 项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位置,使得将该末尾元素插入该位置之后,前m项仍然保持升序。
这样循环后,就可以得到全部元素的排序。
33.(1)错误:for(i=2; i<m; i++) 正确:for(i=2; i<=m; i++) (2)错误:y+=1/(i*i) 正确:y+=1./(i*i) 错误2:在除法运算中如果除数和被除数都是整数所以所除结果也是整数因此应改为y+=1./(i*i)。
(1)错误:for(i=2; i<m; i++)\r\n 正确:for(i=2; i<=m; i++)\r\n (2)错误:y+=1/(i*i)\r\n 正确:y+=1./(i*i)\r\n 错误2:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改为y+=1./(i*i)。
34.错误:if(('A' <=tt[i]||(tt[i]<='Z')) 正确:if((tt[i]>='A')&&(tt[i]<='Z'))错误:if(('A' <=tt[i]||(tt[i]<='Z')) 正确:if((tt[i]>='A')&&(tt[i]<='Z')) 解析:从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32。
将字符串中的大写字母改为小写字母的方法是,从字符串第1个字符开始,根据ASCII码值判断该字母是不是大写字母,若是,则ASCII码值加32即可;重复执行以上过程直至字符串尾。
本题可利用条件选择语句和循环语句来实现。
35.(1)while(i<j)或while(j>i) (2)if(*a)(1)while(i<j)或while(j>i) (2)if(*a) 解析:本题中函数的功能是首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。
其中,对于字符串的逆序过程,分别用变量i和j代表字符串中开始和末尾字符的下标,把下标i和j元素中的值对调后,i++和j--直到i的值大于j时逆序操作完成。
36.(1)错误:int A=1;正确:float A=1 (2) 错误:for(i=l;i<=n;i++) 正确:for(i=2;i<=n;i++)(1)错误:int A=1;正确:float A=1\r\n(2) 错误:。