2022年湖南省常德市全国计算机等级考试C语言程序设计真题(含答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2022年湖南省常德市全国计算机等级考试C语言程序设计真题(含答案) 学校:________ 班级:________ 姓名:________ 考号:________
一、2.填空题(10题)
1. 下列函数从字符数组s[]中删除和c一样的字符,请在下面横线处填空。

void delete(s,C)char s[],c;{int i,j;for(i=j=0;( );i++) if(s[i]!='c') s[j++]=s[i];s[j]="\0";}
2. 性表的多种存储结构中,最简单的方法是【】。

3. 以下程序运行后的输出结果是【】。

#include <stdio.h>
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d",x);
}
main()
{ fun(6); }
4. 度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为______。

5. 以下程序运行后的输出结果是______。

main()
{int a=1,b=2,c=3;
if(c=A) printf("%d\n",C) ;
else printf("%d\n",B) ;
}
6. 以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。

请填空。

main()
{ int i,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++) scanf("%d", 【】);
for(i=0;i<20;i++)
{ if(a[i]>0)
{count++;
sum+= 【】;
}
}
printf("sum=%d,count=%d\n",sum,count);
}
7. C语言用于结构化程序设计的3种基本结构是______、选择结构和循环结构。

8. 函数compare的功能是比较两个字符串是否相等,若相等则函数返回值0,否则返回值1,请填空。

compare(char s[],char t[])
{ int i=0;
while(s[i]==t[i]||【】) i++;
return(【】?1:0);
}
9. 某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结点。

10. 以下程序的输出结果是【】。

main()
{ char c=′z′;
printf("%c",c-25); }
二、单选题(10题)
11.若有定义:
typedef int *(*T[10])[10];
T b;
则以下选项中所定义的a与上述定义中的b,其类型完全相同的是()。

A.int *(*a[10] [10]);
B.int **a[10][10];
C.int *(a[10])[10];
D.int *(*a[10])[10];
12.设有说明:charw;intx;f1oaty;doublez;则表达式w*x+z-y值的数据类型为()。

A.float
B.char
C.int
D.double
13.下列叙述中正确的是()。

A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C.顺序存储结构能存储有序表,链式存储结构不能存储有序表
D.链式存储结构比顺序存储结构节省存储空间
14.有下列程序:
fun(int X,int y){return(x+y);)
main()
{ int a=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d\n",sum);
}
执行后的输出结果是()。

A.6
B.7
C.8
D.9
15.有以下程序:
#include <stdio.h>
void fun(char *t , char *s)
{
while(*t!=0) t++;
while((*t++=*s++)!=0);
}
main()
{
char ss[ 10]=“acc”,aa[ 10]=“bbxxyy”;
fun(ss, aa);
printf(“%s,%s\n”, ss,aa);
}
程序的运行结果是()。

A.acc,bbxxyy
B.accbbxxyy,bbxxyy
C.accxxyy,bbxxyy
D.accxyy,bbxxyy
16.第22题阅读下面程序,则程序执行后的结果为#include "stdio.h"
main()
{int a=4,b=6,c=7;
double d,fun(int,int,int);
d=fun(a,b,c);
printf("%lf\n",d);}
double fun(int a,int b,int c)
{double s;
s=a%b*c;
return s;}
A.27
B.27.000000
C.28
D.28.000000
17.有以下程序
#define N 15
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
main()
{ int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,3,7);
for(i=3;i<8;i++)
printf("%d",a[i]);
}
程序的运行结果是
A.A.45678
B.44567
C.45567
D.45677
18.交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。

A.&.
B.^
C.||
D.~
19.若有定义“int b[8],*p=b;”,则p+6表示()。

A.数组元素b[6]的值
B.数组元素b[6]的地址
C.数组元素b[7]的地址
D.数组元素b[0]的值加上6
20.下面不属于需求分析阶段任务的是()。

A.确定软件系统的功能需求
B.确定软件系统的性能需求
C.制定软件集成测试计划
D.需求规格说明书评审
三、程序设计题(10题)
21.使用VC++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,请编写函数fun(),它的功能是求出能整除x且不是偶数的整数,并将这些整数按从小到大的顺序放在PP所指的数组中,总个数通过形参n返回。

如x中
的值为30,则有4个数符合要求,它们是1、3、5、15。

注意:部分源程序在文件prog1.c中。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:
22.请编写一个函数proc(),它的功能是:将str所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入abcdel23,则应输出aBcDe123。

注意:部分源程序给出如
下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc ()的花括号中填入所编写的若干语句。

试题程序:
23.使用VC++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,学生的记录由学号和成绩组成,N名学生的记录已放入主函数的结构体数组s中。

请编写函数fun(),其功能是把指定分数范围内的学生记录存放在b所指的数组中,分数范围内的学生人数由函数值返回。

如输入的分数是60、69,则应当把分数在60~69 的学生记录输出,包含60分和69分的学生记录。

主函数中把60放在low中,把69放在high中。

注意:部分源程序给出如下。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:
#include <stdio.h>
#define N 16
typedef struct
{
char num[10];
int s;
}STREC;
int fun (STREC * a, STREC * b, int l, int h )
void main ()
{
STREC s[N]={{“GA005”, 85},{“GA003”,76 },
{“GA002”,69 },{“GA004”,
85},{“GA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA01 5”,85},{“GA013”,
94 },{“GA012”,64 },{“GA014”,91},{“GA011”,90},{“GA017”,64},{“GA0 18”,64},{“GA016”,72}};
STREC h[N];
int i, n, low, high, t;
printf (“Enter 2 integer number low & high:”);
scan f (“%d%d”,&low, &high);
if (high < low)
{t=high;high=low;low=t;}
n=fun(s,h,low, high);
printf (“The student’s data between %d--%d: \n”, low, high);
for(i=0;i<="" p="">
printf (“%s %4d\n”, h[i].num, h[i].s);
printf (“\n”);
}
24.使用VC ++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,编写函数fun(),其功能是将ss所指字符串中所有下标为奇数的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入“abc4EFg”,则应输出“aBc4EFg”。

注意:部分源程序给出如下。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun (char *ss)
{
}
void main (void)
{
char tt [51];
printf (“\nPlease enter an character string within 50 characters:\n”);
gets(tt);
printf(“\n\nAfter changing,the string\n %s”,tt);
fun(tt);
printf(“\nbecomes\n %s”,tt);
}
25.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。

例如,若输入字符串123412132,输入字符为l,则输出3。

注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

26.请编写函数proc(),它的功能是:求出str所指字符串中指定字符的个数,并返回此值。

例如,若输入字符串12341234123,输入字符4,则输出2。

注意:部分源程序给出如下。

请勿改动main()函数和其
他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。

试题程序:
27.使用VC++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,请编写函数fun(),其功能是将一个数字字符串转换成与其面值相同的长整型整数。

可调用strlen函数求字符串的长度。

例如,在键盘输入字符串2345210,函数返回长整型整数2345210。

注意:部分源程序存放在文件prog1.c 中,请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()指定的部位填入所编写的若干语句。

试题程序:
28.请编写一个函数proc(),它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。

例如,若输入字符串“1234”,则函数把它转换为整数值1234。

注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括
号中填入所编写的若干语句。

试题程序:
29.
请编写函数proc(),其功能是:将所有大于1小于整数m的非素数存入XX所指数组中,非素数的个数通过k传回。

例如,输入20,则应输出4 6 8 9 10 12 14 15 16 18。

注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。

试题程序:
30.使用VC ++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,已知学生的记录由学号和学习成绩构成,N名学生的记录已存入a结构体数组中。

请编写函数fun(),该函数的功能是找出成绩最高的学生记录,通过形参将其返回主函数(规定只有一个最髙分)。

已给出函数的首部,请完成该函数。

注意:部分源程序给出如下。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 10
typedef struct ss / *定义结构体*/
{char num[10];
int s;
} STU;
fun (STU a[ ] , STU *s)
{
}
void main ()
{
STU a[N]={{“A01”,81}, {“A02”,89},{“A03”,66},
{“A04”,87},{“A05”,77}, {“A06”,90 }, {“A07”,79},
{“A08”,61},{“A09”,80}, {“A10”,71}},m;
int i;
system(“CLS”);
printf (“****The original data****”);
for (i=0; i < N; i++)
printf (“No=%s Mark=%d\n”, a[i].num,a[i].s);
fun (a, &m);
printf (“****THE RESULT****\n”);
printf (“The top:%s, %d\n”, m.num,m.s);
}
四、2.程序修改题(10题)
31. 给定程序MODll.C中函数。

fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。

在每组中,可以没有黑球,但必须要有红球和白球。

组合数作为函数值返回。

正确的组合数应该是15。

程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
32. 下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc,CD,EF串联起来,结果是abcCDEF。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:
#include <conio.h>
#include <string.h>
#include <stdio.h>
/*************found**************/
int fun(char str[] [10],int m, char *pt)
{ int k,q,i,j=0;
for(k=0;k<m;k++)
{ q=strlen(str[k]);
j+=q;
for(i=0;i<q;i++)
/*************found**************/
pt[i]=str[k,i];
pt+=q;
pt[0] =0;
}
pt-=j;
}
main ( )
{ int m, h;
char s[10] [10],p[120];
clrscr ();
printf("\nPlease enter m: ");
scanf("%d",&m); gets(s[0]);
printf ("\nPlease enter %d string:In ",m);
for(h=0;h<m;h++) gets(s[h]);
fun (s,m,p);
printf("\nThe result is :%s\n ",p);
}
33. 给定程序MODll.C中函数fun的功能是:交换主函数中两个变量的值。

例如:若变量a中的值原为8,b中的值为3。

程序运行后a中的值为3,b中的值为8。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
34. 下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。

K的值由主函数传入,若k的值为500,则函数的值为2925。

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:
#include<stdio.h>
#include<conio.h>
int fun(int k)
{
int m=0,mc=0,j;
/*************found*************/
while(k>=2)&&(mc<6)
{
/*************found*************/
if((k%7=0)||(k%ll=0))
{
/*************found**************/
m=k;
mc++;
}
k--;
}
return m;
}
main()
{
clrscr();
printf("%d\n",fun(500));
}
35. 下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。

例如输入1,2,3,4,程序运行后输出以下方阵:
4 1 2 3
3 4 1 2
2 3 4 1
1 2 3 4
请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

试题程序;
#include <stdio.h>
#define M 4
/*******************************/
void fun(int a)
{int i,j,k,m;
printf("Enter 4 number: ");
for (i=0; i<M; i++) scanf ("%d", &a [i] );
printf ("\n\n The result : \n\n ");
for (i=M; i>0; i--)
{ k=a [M-1];
for (j=M-1; j>0; j--)
/**********************************/
a[j]=a[j+1];
a[0]=k;
for (m=0 ;m<M; m++ ) printf ("%d ", a [m]);
printf ("\n ");
}
}
main ()
{int a [M];
fun(a); printf("\n\n ");
}
36. 下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,并作为函数值返回。

例如,若给num1和num2输入49和21,则输出的最大公约数为7:若给num1和num2分别输入27和81,则输出最大公约数为27。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:
#include <stdio.h>
int fun(int a, int b)
{ int r,t;
if(a<b)
/******************found*****************/
{ t=a; b=a; a=t;}
r=a%b;
while(r!=0)
{ a=b; b=r; r=a%b;}
/******************found*****************/
return(a);
}
main()
{ int num1, num2, a;
printf("Input num1 num2:"); scanf("%d %d",&num1, &num2);
printf("num1=%d num2=%d\n\n",num1, num2);
a=fun(num1, num2);
printf("The maximun common divisor is %d\n\n", a);
}
37. 给定程序MODII.C中fun函数的功能是:根据整型形参m,计算如下公式的值。

例如,若主函数中输入5,则应输出-0.283333。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
38. 给定程序MODll.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。

k的值由主函数传入,若k的值为500,则函数值为4622。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
39. 下列给定程序中,函数fun()的功能是计算并输出high以内的素数之和。

high由主函数传给fun()函数。

若high的值为100,则函数的值为1060。

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:
#include <conio.h>
#include <stdio.h>
#include <math.h>
int fun(int high)
{
int sum=0,n=0,j,yes;
while(high>=2)
{
yes=1;
for(j=2;j<=high/2;j++)
/*************found**************/
ifhigh%j==0
{
yes=0;
break;
}
/*************found**************/
if(yes==0)
{
sum+=high;
n++;
}
high--;
}
return sum;
}
main()
{
clrscr();
printf("%d\n",fun(100));
}
40. 下列给定程序中,函数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));
}
五、程序改错题(2题)
41.下列给定程序中函数fun的功能是:将P所指字符串中的所有字符复
制到b中,要求每复制三个字符之后插入一个空格。

例如,若给a输入字符串:ABCDEFGKHHK,调用函数后,字符数组b 中的内容为:ABC DEF GHI JK。

请改正程序中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改程序的结构。

42.下列给定的程序中,proc()函数的功能是:将str所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。

例如,若输人:How do you do,则输出:HoW dOyoU d0。

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结
构。

试题程序:
六、操作题(2题)
43.使用VC++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1. c。

在此程序中,编写函数
fun(),其功能是求斐波那契数列中大于t的最小的数,结果由函数返回。

斐波那契数列F(n)的定义为
F(0)=0,F(1)=1
F(n)=F(n-1) +F(n-2)
例如,当t=1000时,函数值为1597。

注意:部分源程序给出如下。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:
#include <conio.h>
#include <math.h>
#include <stdio.h>
int fun (int t)
{
}
main ()
{
int n;
n=1000 ;
printf (“n=%d, f=%d\n”,n,fun(n));
}
44. 以下函数用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

请填空。

#include <conio.h>
#include <stdio.h>
int fun(int *s, int t, int *k)
{ int i;
*k=0;
【】
if(s[*k]<s[i])*k=i;
return【】; }
main()
{ int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;
fun(a, 10, &k);
printf("%d, %d\n",k,a[k]);}
参考答案
1.s[i]!='\0's[i]!='\\0' 解析:本题是要删除字符数组中和c一样的字符,for 循环实现的功能是逐个读出字符数组s中的元素,并和字符c做比较,直到遇到字符串结束标志'\\0',结束循环,所以横线上应该填s[i]!='\\0'。

2.顺序存储顺序存储
3.1 3 61 3 6 解析:程序中定义了一个递归调用函数fun。

程序运行时,先把实参6传给形参。

if语句中6/2>0成立,执行fun(x/2),即fun(3),同时输出x的值6;再判断if条件,3/2>0成立,再执行fun(x/2),即fun(1),同时输出x的值3;此时1/2>0不再成立,输出1。

而递归调用的输出顺序是相反的,故输出结果为1 3 6。

4.4545 解析:对于长度为N的线性表,在最坏情况下(即线性表中元素现在的顺序与目标顺序正好相反),冒泡排序需要经过N/2遍的从前往后的扫描和N/2遍的从后往前的扫描,需要的比较次数为N(N-1)/2。

5.11 解析:本题是一个陷阱题。

在if语句的判断表达式中,使用的不是
逻辑运算符==而是赋值运算符=,使该表达式返回的结果正好相反。

如果是c==a,则结果为假。

但是c=a则是将a赋给c,且表达式的结果是赋值之后的c的值,因此结果为1是真.故最后输出c的值1。

6.&a[i]或a+i a[i]或*(a+i)&a[i]或a+i\r\na[i]或*(a+i) 解析:主函数中一开始定义了一个长度为20的整型数组,然后通过一个循环,循环20次给它的每个元素赋初值,所以在第一个空格处应填各个元素的地址,即填&a[i]或a +i,然后再通过一个循环执行20次,每循环一次,先判断该循环是否大于0,如果大于0将其累加到变量sum中,所以第二个空格处应该填入数组元素,所以应该填a或*(a+i)。

7.顺序结构顺序结构解析:结构化程序有3种摹本结构,即顺序结构、选择结构(包括if语句和switch语句)和循环结构(包括for语句、while 语句、do…while语句)。

8.s[i]!='\0'||t[i]!='\0'
s[i]=='\0'&&t[i]=='\0's[i]!='\\0'||t[i]!='\\0'\r\ns[i]=='\\0'&&t[i]=='\\0'
9.1919 解析:根据二叉树的性质:在任意一棵二叉树中,度为。

的结点(即叶子结点)总是比度为2的结点多一个。

本题中度为2的结点数为18,故叶子结点数为18+1=19个。

10.aa 解析:'z'的ASCII码值为122,经过c-25运算后,得97,以字符形式输出是a。

11.D“typedef int *(*T[10])[10];”使用typedef定义一种新类型名T,T的类型是二维数组指针,指向10个元素的数组。

其中数组元素类型为int *[10],即数组的每个元素又是包含10个元素的数组,数组的元素是整型指针类型。

故本题答案为D选项。

13.A
解析:顺序存储结构就是用一组地址连续的存储单元依次存储该线性表中的各个元素,链式存储结构中各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致,所以选项A是正确的。

两者都可以存储线性的、有序的逻辑结构,所以选项B、C不正确。

顺序结构使用的是连续物理空间,链式结构可以使用零散的物理空间存储,链式结构更灵活,不存在谁节约空间的说法,所以选项D不正确。

14.C
函数fun(int x,int y)的功能是返回x+Y的值。

在主函数中,变量a,b,c的初始值分别为1,2,3。

因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。

15.B在函数fun中,前一个while循环的作用是,如果形参指针t所指内容不为0,则让t增1,直到它指向0;后一个while循环的作用是,将s所指内容赋给t所指地址,然后两者同时增1,直到赋给t的内容为0。

由此可见,函数fun的作用就是将形参s所指字符串连接到形参t所指字符串末尾,相当于库函数strcat。

主函数中使用fun将数组aa中的字符串连接到数组ss中原有字符串之后,所以执行完后,ss中的字符串为“accbbxxyy”。

程序最后输出的结果是accbbxxyy,bbxxyy。

故本题答案为B选项。

16.D
题目中的程序包括主程序main和fun函数。

主程序中定义了一个数组a,并赋给了初值。

通过调用fun函数,对数组a中的值进行更改操作,最后要求的结果是输出数组a中a[3]~a[7]的值。

解决本题的关键在于清楚地理解fun函数的功能。

fun函数有3个形参,包括1个整型数组a[],2个整型变量n和m。

fun函数的功能是将数组a[i+1]的值等于a[i]的值,i的初始值大小为m,依次减1,直到数值等于n。

主函数调用fun函数时,输入的实参为(a,3,7),即fun函数要将数组
a[i+1]的值等于a[i]的值,i的取值范围从7到3,如a[8]=a[7]。

fun函数执行完毕,数组a中的值变为1,2,3,4,4,5,6,7,9,10。

输出a[3]~a[7]的值为4,4,5,6,7。

18.B按逻辑位运算特点:①用按位与运算将特定位清为0或保留特定位;②用按位或运算将特定的位置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。

19.B指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。

所以题中“P+6”指的是将指针向后移动了6个存储单元,即指向uE63,存放的是b[6]的地址。

20.C
【答案】:C
【知识点】:需求分析阶段的任务
【解析】:需求分析阶段的任务是深入描述软件的功能和性能,确定
软件设计的约束和软件同其他系统元素的接口细节,定义软件的其他有效性需求,借助于当前系统的逻辑模型导出目标系统逻辑模型,解决目标系统“做什么”的问题。

可分为需求提出、需求描述及需求评审三个阶段。

从此可以看出需求分析的任务不包括制定软件集成测试计划,故选C。

21.1voidfun(intx,intpp[],int*n)
2{
3inti,j=0;
4for(i=l;i<=x;i=i+2)/*i的初值为1,步长为2,确保i为奇数
*/5if(x%i==0)/*将能整除x的数存入数组pp中*/6pp[j++]=i;7*n=j;/*传回满足条件的数的个数*/8}本题考查:偶数的判定方法;整除的实现。

本题题干信息:能整除X且不是偶数的所有整数。

循环语句中变量i从1开始且每次递增2,所以i始终是奇数。

将能整除x的i值存放到数组PP中,整除采用求余运算符“%”,即“x%i==0”。

最后将数据元素个数j 保存到n中。

22.
【解析】要将字符串中为奇数的字母转换为大写。

首先应该判断奇数位置上的字符是否为小写字母,若是则将其转换为大写,若不是则不予处理。

23.int fun (STREC *a, STREC *b, int l, int h)
{
int i, j =0;
for(i=0; i<="" p="">
if (a[i].s>=l&&a[i].s<=h)
/*将分数高于l,低于h的学生记录存入结构体数组b中*/
b[ j++]=a[i];
return j; /*返回分数范围内的学生人数*/
}
本题使用循环判断结构实现题目要求。

循环语句用于遍历结构体数组;条件语句用于判断当前元素是否符合条件,若符合条件则将其存入结构体数组b中。

变量j为数组b元素下标,最后变量j+1为学生人数,作为函数值返回。

24.void fun (char *ss)
{
int i;
for(i=0; ss[i]!=‘\0’; i++)
/*将ss所指字符串中所有下标为奇数的字母转换为大写字母*/ if(i%2==1&&ss[i]>=‘a’&&ss[i]<=‘z’)
ss[i]=ss[i]-32;
}
将指定字符串中奇数位置的字母转换为大写字母,首先需要判断奇数位置,再判断该位置字符是不是小写字母,如果是小写字母,则将小写字母转换为大写字母。

字母大小写转换操作中,只要将小写字母的ASCII 值减去32即可转换为大写字母。

25.
【考点分析】
本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。

【解题思路】
从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍
历字符串,循环条件为字符串没有结束,即当前字符不是‘\0’,判断语句用来判断当前字符是否为指定字符。

最后返回指定字符的个数。

26.
【解析】求出str所指字符串中指定字符的个数,可以通过将str所指字符串中每一个字符与指定字符相比较,变量i中存放字符串中指定字符的个数,最后返回给主函数。

27.long fun(char*s)
}
inti,len;
Long sum=0;
len=strlen(s);
for(i=0;i<len;i++)
{
sum=sum*10+*s-'0'
s++;
}
returnsum;
}
<len;i++)
要把一个数字字符转为相应的数字,只要将它的ASCII值减去48(或
D1)即可。

要把数字字符串转为相应的数字,则要从左到右依次取出字符转为相应数字,乘10再加上下一位数字。

</len;i++)
28.
【解析】要将数字字符串转换为一个整数,首先判断该字符串的正负
号。

然后将数字字符转换为相应的数字,将各个数字合并为整数。

最后将得到的整数乘以字符串中的符号。

将最后的结果返回到主函数中。

29.
【解析】题目中要求将所有大于l小于整数m的非素数存入xx所指数组中,因此需要判断所有大干1小于m的整数是否为素数。

将所有大干1小于m的非素数放入数组xx中,并将非素数的个数通过形参k传递回主函数中。

30.fun(STU a[ ], STU *s)
{
int i;
*s = a[0];
for(i=0; i<N; i++)/*找出成绩最高的学生记录*/
if (s->s<a[i].s)< p=""></a[i].s)<>
*s = a[i];
}
先使指针变量S指向第1名学生。

通过循环语句遍历所有学生的成绩,利用条件语句判断当前学生成绩是否最高。

所以if条件表达式为s->s
s”等价于“(*s).s”。

31.(1)for(i=1;i<=3;i++) (2)if(k>=0&&k<=6)(1)for(i=1;i<=3;i++) (2)if(k>=0&&k<=6) 解析:本题中函数的功能是从3个红
球、4个白球、5个黑球中任意取出8个作为一组,进行输出。

在每组中,可以没有黑球,但必须要有红球和白球。

其实就是实现这三种球的组合取值。

32.(1)错误: int fun(char str[][10]int mchar *pt) 正确: void fun(char str[][10int mchar *pt) (2)错误: pt[i]=str[ki]; 正确: pt[i]=str[k][i];(1)错误: int fun(char str[][10],int m,char *pt) 正确: void fun(char str[][10,int m,char *pt)\r\n(2)错误: pt[i]=str[k,i]; 正确: pt[i]=str[k][i]; 解析:本题中的两例错误我们已经在前面的讲解中详细阐述了,一般这样的字符串连接函数在C语言的考试中肯定不让使用strcat函数,但是,直接用if和while的循坪嵌套也很容易解决问题的。

33.(1)void fun(int *xint *y) (2)t=*x;*x=*y;*y=t;(1)void fun(int *x,int *y) (2)t=*x;*x=*y;*y=t;解析:本题中函数的功能是交换主函数中两个变量的值。

利用临时变量存放临时交换值,实现两个变量的交换。

34.(1)错误:while(k>=2)&&(mc<6) 正确:while((k>=2)&&(mc<6)) (2) 错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=0)) (3) 错误:m=k 正确:m=m+k;(1)错误:while(k>=2)&&(mc<6) 正确:while((k >=2)&&(mc<6))\r\n(2) 错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=0))\r\n(3) 错误:m=k 正确:m=m+k;解析:错误1:C语言规定while语句后的表达式两侧必须要有圆括号。

错误2:if 语句的判断条件应用关系运算符,而不是赋值运算符。

错误3:根据题意,将满足条件的数求累加和。

35.(1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1];正
确:a[j]=a[j-1];(1)错误:void fun (int a) 正确:int fim (int *a\r\n(2)错误:a[j]=a[j+1];正确:a[j]=a[j-1];解析:其实,该题中题目信息已经告诉我们按“如下规律”,这就需要去认真分析矩阵的“规律”了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;i>0;i--)和for (j=M-1;j >0;j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];。

36.(1)错误:{t=a;b=a;a=t;} 正确:{t=a;a=b;b=t;} (2)错误:return(a);正确:return(b);(1)错误:{t=a;b=a;a=t;} 正确:{t=a;a=b;b=t;}\r\n(2)错误:return(a);正确:return(b);解析:若求两个数的最大公约数,如果b除a的非零余数能够整除a,那么该余数就是最大公约数;若余数为0,则最大公约数为a。

该题程序中采用了循环语句,若b除以a的余数不等于0,则继续用a除以所得余数,直至余数为0,如此可以得到a,b的最大公约数。

关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。

37.(1)t=t-1.0/i;或t-=1.0/i;或t一=(double)1/i;(2)return t;
(1)t=t-1.0/i;或t-=1.0/i;或t一=(double)1/i;(2)return t;解析:本题中函数的功能是计算公式的值。

首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的值。

其中,每一项的值为1/n。

38.(1)if((k%13==0)I I(k%17==0)) (2) }
(1)if((k%13==0)I I(k%17==0)) (2) } 解析:该题中函数功能是求能被13或17整除的自然数之和。

从已给定源程序的main主函数开始入。

相关文档
最新文档