admin 管理员组

文章数量: 1184232


2023年12月19日发(作者:m1电脑能用oracle吗)

2022年福建省厦门市全国计算机等级考试C语言程序设计真题(含答案)

学校:________ 班级:________ 姓名:________ 考号:________

一、2.填空题(10题)

1. 下列程序的输出结果是【 】。

void fun(int *n)

{

while((*n)--);

printf("%d",++(*n));

}

main()

{ int a=100;

fun(&a) ;

}

2. 软件工程研究的内容主要包括:【】技术和软件工程管理。

3. 以下程序的功能是【 】。

main( )

{ int num[10]={10,1,-20,-203,-21,2,-2,-2,11, int sum=0,i;

for(i=0;i<10;i+ +)

if(num[i]>0)

sum=num[i]+ sum;

-21};

printf("sum=%6d",sum);

}

4. 已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>,则输出结果是

【 】。

#include <stdio.h>

main()

{ char a,b;

a=getchar();scanf("%d",&b);

a=a-'A'+'0';b=b*2;

printf("%c%cn",a,b);

}

5. 已知字母A的ASCⅡ码为65。以下程序运行后的输出结果是( )。

main()

{ char a,b;

a='A'+'5'-'3';b=a+'6'-'2';

a='A'+'5'-'3';b=a+'6'-'2';

printf("%d%cn",a,B);

}

6. 在面向对象方法中,【 】描述的是具有相似属性与操作的一组对象。

7. 若有下列定义和语句:

char *s1="12345",*s2="1234";

printf("%dn",strlen(strcpy(s1 ,s2)));

则输出结果为______。

8. 下列软件系统结构图的宽度为[ ]。

9. 数据库系统的三级模式分别为______模式、内部级模式与外部级模式。

10. 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。

struct node

{ int info;

【 】link;};

二、单选题(10题)

11.有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)

int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;

A.A.a[p-a]

B.*(&a[i])

C.p[i]

D.*(*(a+i))

12.若有定义语句:int X=10;,则表达式x -=x+X的值为

A.-20 B.-10 C.0 D.10

13. 下列说法不正确的是( )。

A.调用函数时,实参可以是表达式

B.调用函数时,实参与形参可以共用内存单元

C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等

D.调用函数时,实参与形参的类型必须一致

14. 有如下程序 int func(int a,int b) {return (a+b);} main()

{ int x=2,y=5,z=8,r; r=func(fnnc(x,y),z); printf("%dn",r); }

该程序的输出结果是______。

A.12 B.13 C.14 D.15

15. 下列叙述中正确的是( )。

A.数据库系统是一个独立的系统,不需要操作系统的支持

B.数据库技术的根本目标是要解决数据的共享问题

C.数据库管理系统就是数据库系统

D.以上3种说法都不对

16. 下列程序的输出结果是

#include "stdio.h"

#define N 3

#define M 3

void fun(int a[M][N])

{ printf("%dn",*(a[1]+2));}

main()

{ int a[M][N];

int i,j;

for(i=0;i

for(j=0;j

a[i][j]=i+j-(i-j);

fun(a);}

A.3 B.4 C.5 D.6

17.下列叙述中正确的是( )。

A.一个逻辑数据结构只能有一种存储结构

B.逻辑结构属于线性结构,存储结构属于非线性结构

C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

18.阅读以下程序及对程序功能的描述,其中正确的是

#include<stdio.h>

main() { FILE*in,*out; charch,infile[10],outfile[10];

printf(“Enter the infile name:n”);

scanf(“%s”,infile);

printf(“Enter the outfile name:n”);

scanf(“%s”,outfile);

if((in=foen(infile,“r”))==NULL)

printf(“cannot open infilen”);

exit(0);if((out=fopen(outfile,“w”))==NULL)

printf(“cannot open outfilen”);

exit(0);while(!feof(in))fputc(fgetc(in),out);

fclose(in);

fclose(out);

A.程序完成将磁盘文件的信息在屏幕上显示的功能

B.程序完成将两个磁盘文件合二为一的功能

C.程序完成将一个磁盘文件复制到另一个磁盘文件中

D.程序完成将两个磁盘文件合并并在屏幕上输出

19.为了提高软件的独立性,模块之间最好是( )。

A.控制耦合 B.公共耦合 C.内容耦合 D.数据耦合

20.阅读以下程序:

#include

main( )

{int case;float printF;

printf("请输人2个数:");

scanf("%d%fl"&case,&printF);

printf("%d ofofn",case,printF);

}

该程序在编译时产生错误,其出错原因是( )。A.定义语句出错,case是关键字,不能用做用户自定义标识符

B.定义语句出错,printF不能用做用户自定义标识符

C.定义语句无错,scanf不能作为输入函数使用

D.定义语句无错,printf不能输出case的值

三、程序设计题(10题)

21.规定输入的字符串中只包含字母和+号。编写函数fun,其功能是:除了字符串前导和尾部的母号外,将其他的*号全部删除。形参h已指向字符串中第一个字母,形参P指向字符串中最后一个字母。在编写函数时,不得使用c语言提供的字符串函数。

22.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串“World”,然后输入3,则调用该函数后的结果为“Word”。

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

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

试题程序:

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#define LEN 20

void fun (char a[ ], char b[ ], int n)

{

}

void main ()

{

char str1[LEN], str2[LEN];

int n;

system(“CLS”);

printf (“Enter the string:n”);

gets(str1);

printf (“Enter the position of the string deleted:”);

scanf (“%d”, &n); fun(str1, str2, n);

printf (“The new string is:%sn”, str2);

}

23.

M名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的带头结点。请编写函数proc(),它的功能是:找出学生的最高分,由函数值返回。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序:

24.

假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参m给出了字符串的长度,形参h给出了字符串中前*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。 例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则应当是a*bc*def*g。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序:

25.请编写函数proc(),该函数的功能是:计算并输出

例如,若主函数从键盘给n输入10后,则输出为S=104.478749。

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

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

试题程序:

26.请编写函数proc(),对长度为9个字符的字符串,除首、尾字符外,将其余7个字符按ASCⅡ码值降序排列。例如,原来的字符串为HabcdefA,则排序后输出为HfedcbaA。 注意:部分源程序给出如下。

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

27.请编写函数proc(),该函数的功能是:计算n门课程的平均分,计算结果作为函数值返回。 例如,有6门课程的成绩是90.5,72,80,61.5,55,60,则函数的值为69.83。 注意:部分源程序给出如下。

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

28.请编写一个函数proc(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素

中的值已在主函数中赋予。

主函数中arr是数组名,n是arr中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

试题程序:

29.

请编写函数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()的花括号中填入所编写的若干语句。 试题程序:

30.使用VC ++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是实现B=A+ AT,即将矩阵A加上A 的转置,结果存放在矩阵B中。计算结果在main()函数中输出。

举例如下。

注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

void fun (int a[3][3], int b[3][3])

{

}

void main ()

{

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];

int i, j;

system(“CLS”);

fun (a, t);

for (i=0;i<3;i++)

{

for(j=0;j <3;j ++)

printf (“% 7d”,t[i][ j]);

printf (“n”);

}

}

四、2.程序修改题(10题)

31. 给定程序MODll.C中函数fun的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。

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

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

32. 给定程序MODll.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。

例如,若输入2 |若输入4

则输出: |则输出:

1 2 |1 2 3 4

2 4 |2 4 6 8

|3 6 9 12

|4 8 12 16

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

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

33. 下列给定程序中,函数fun()的功能是:读入一个字符串 (长度<20),将该字符串中的所有字符按ASCII码降序排序后输出。

例如:输入dafhc,则应输出hfdca。

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

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

试题程序:

#include <conio.h>

#include <stdio.h>

/*************found**************/

int fun(char t[])

{

char c;

int i,j;

for(i=0;i<strlen(t)-1;i++)

for(j=i+1;i<strlen(t);j++)

if(t[i]<t[j])

{

c=t[j];

/*************found**************/

t[i]=t[i++];

t[i]=c;

}

}

main()

{

char s[81];

clrscr();

printf("nPlease enter a character

string:");

gets(s);

printf("nnBefore sorting:n%S",s);

fun(s);

printf("nAfter sorting decendingly:n

%s",s);

}

34. 给定程序MODll.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。

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

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

35. 下列给定的程序中,函数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("%dn",fun(500));

}

36. 下列给定程序中函数fun()的功能是计算1/n!的值。

例如:给n输入5,则输出0.0083330

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

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

试题程序:

#include <stdio.h>

#include <conio.h>

/******+****found*************/

int fun(int n)

{double result=1.0;

if(n==0)

return 1.0;

while(n>1 && n<170)

/**********found************/

result *=n++;

result=1/result;

return result;

}

main()

{

int n;

printf("Input N:");

scanf("%d",&n);

printf("n1/%d!=%Ifn",n,fun(n));

}

37. 给定程序MODll.C中函数fun的功能是;从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如,当s中的数为:7654321时,t中的数为:642。

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

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

38. 给定程序MODll.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。

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

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

39. 下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个中,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。

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

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

试题程序:

#include <string.h>

#include <stdio.h>

#define N 5

#define M 81

/*************found**************/

fun(char (*sq) [N])

{int i; char *sp;

sp=sq[0];

for{i=0;i<N;i++)

if(strlen(sp)<strlen(sq[i]))

sp=sq[i];

/*************found**************/

return sq;

}

main ()

{char str[N][M], *longest; int i;

printf("Enter %d lines:n ",N);

for(i=0;i<N;i++) gets(str[i]);

printf("nThe %d string :n ",N);

for(i=0;i<N;i++) puts(str[i]);

longest=fun(str);

printf("nThe longest string :n ");

puts(longest);

}

40. 下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。例如当s中的数为25846513时,t中的数为6482。 请改正函数fun()中的错误,使它能得出正确的结果。

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

试题程序:

#include <stdio.h>

#include <conio.h>

void fun(long S,long *t)

{

int d;

long sl=l,i=1;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

{

d=s/i

/*************found*************/

if(d%2!=0)

{

/*************found*************/

t=d*sl+t;

sl*=l0;

}

S=S%i;

i=i/10;

}

}

main()

{

long S,t;

clrscr();

printf("nPlease enter S:");

scanf("%ld",&s);

fun(S,&t);

printf("The result is:%ldn",t);

}

五、程序改错题(2题)

41.下列给定程序中函数fun的功能是:将tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。

例如,若输入“Ab,cD”,则输出“AB,CD”。

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

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

42.

下列给定程序中,函数fun()的功能是按以下递归公式求函数值。 例如,当给n输入3时,函数值为60;当给n输入6时,函数值为480。

请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:

六、操作题(2题)

43.使用VC++打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是求出s所指字符串中最后一次出现的t所指字符串的地址,并将此地址通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。

例如,当字符串中的内容为“abcdabfabcdx”,t中内容为“ab”时,输出结果应是“abcdx”。

当字符串中的内容为“abcdabfabcdx”,t中内容为“ abd”时,则程序输出未找到信息“Not found!”。 请改正程序中的错误,使它能得出正确的结果。

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

试题程序:

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <string.h>

char * fun (char *s, char *t)

{

char * p, * r, * a;

/********* found *********/

a=Null;

while(*s)

{

p=s; r=t ;

while ( * r)

/********* found *********/

if (r==p)

{ r++; p++; }

else break;

if ( * r=='0') a=s;

s ++; }

return a;

}

void main ()

{

char s[l00],t[100], *p;

system(“CLS”);

printf (“nPlease enter string s:”);

scanf(“%s”,s);

printf(“nPlease enter substring t:”);

scanf (“%s”,t);

p=fun (s, t);

if(p)

printf (“nThe result is: %sn”, p);

else

printf (“nNot found!n”);

}

44. 下列程序的运行结果是______。

#define POW(r) (r)*(r)

main()

{ int x=3,y=2,t;

t=POW(x+y);

printf("%dn",t);

}

参考答案

1.00 解析:在函数fun()中,while((*n)-)是先引用*n的值,再做(*n)--运算,所以循环结束时*n的值为0,再做(*n)--运算后, *n的值为-1;执行++(*n)后,*n的值是0。

2.软件开发

3.计算数组num中大于零的数据之和计算数组num中大于零的数据之和

4.1 B1 B 解析:从键盘输入后,a='B',b=33,之后进行运算,a='B'-'A'+'0'='1';b= 33*2=66。C语言规定,整型和字符型可以相互转换,已知字符A的ASCII码值为65,所以字符B的ASCII码值为66,所以b='B',最后以字符形式输出a和b,所以输出为1 B。

5.67 G67 G 解析:根据题意,a=‘A’+‘5’-‘3’=65+2=67,b=67+4=71,71即为字母G的ASCⅡ码值。程序要求按十进制形式输出a,按字符形式输出b,所以结果为67 G。

6.类类 解析:在面向对象方法中,类描述的是具有相似属性与操作的一组对象。

7.44 解析:strcpy(s1,s2)函数的作用是将字符串s2中的内容拷贝到字符串s1中的内容覆盖。strlen()函数是求字符串的长度。本题实际上是要求s2字符串的长度,即是4。

8.33 解析:软件系统结构图的宽度:整体控制跨度(最大模块数的层)的表示。

9.概念(或概念级)概念(或概念级)

node *struct node * 解析:本题中的结构类型名为struct node,所以空白处应填:struct node *。即定义一个指向自身的结构体指针。

11.D

12.B

解析:x-=x+x可化为:x=x-(x+x),由于x初始值为10,所以计算后,x=10-20=-10,因此选B)。

13.B

n本题考查函数调用的基本概念。调用函数时,实参的形式可以是具体的数值,也可以是表达式。实参将数值或表达式的值传递给形参,因而两者的类型必须保持一致;形参在运算过程中会发生改变,但不一定会影响到实参值,所以可知两者不共用内存单元。

n

14.D

15.B解析:数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等,选项A的说法是错误的。数据库具有为各种用户所共享的特点,选项B

的说法是正确的。通常将引入数据库技术的计算机系统称为数据库系统。一个数据库系统通常由5个部分组成,包括相关计算机的硬件、数据库集合、数据库管理系统、相关软件和人员。因此,选项C的说法是错误的。

16.B解析:若有以下定义:int a[3][4],i,j;且当0<=i<3,0<=j<4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。

17.D

D) 【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。

18.C

19.D

在程序设计中,各模块间的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚、低耦合,以有利于提高模块的独立性。耦合性与内聚性是模块独立的两个定性标准,是互相关联的。

20.A

本题中定义了整形变量case,但case是关键字,关键字不能用做标识符。单精度printF不是关键字,因为标识符区分大小写。所以A不正确。

21.

fun (char a[], char b[], int n)

{

int i, k=0;

for(i=0; a[i]!=‘0’; i++)

if (i!=n) /*将不是指定下标的字符存入数组b中*/

}

b[k++]=a[i];

b[k]=‘0’; /*在字符串最后加上字符串结束标志*/

本题要求删除字符串中指定下标的字符,即把非指定下标的字符保留。所以if语句条件表达式为“i! =n”。 字符串最后不要忘记加上字符串结束标志‘0’。

23.

【解析】要得到学生的最高分,需要将每一个学生的成绩进行比较。学生的成绩存储在链表中,其结束标志为最后一个结点的next指针即NULL。比较每一个学生的成绩,将最高分返回给主函数。

24.

【解析】题目要求不能用C语言提供的字符串函数,可以利用移动字符串指针来实现,首先移动字符串指针到第一个不是*的位置,通过指针的移动,来实现把第一个不是星号的字符与最后一个不是星号的字符放到a数组中,最后用ˊ\0ˊ来作为字符串结束的标志。

25.

【解析】在本程序中,用S1来表示题中每个小括号内的值,第1项相当于有1个10.5。第2项相当于第1项的值加上20.5,第3项相当

于第2项的值加上30.5,…,依此类推。函数pow(x,y)的功能是求出x的y次方,程序中用S来表示总和值,每循环一次加1次Sl的值,即加1项。

26.

【解析】按照题目中要求,求除首、尾字符外,将其余7个字符按ASCⅡ码值降序排列。首先需要判断除首、尾字符之外,其余7个字符ASCⅡ码值的大小,将不符合顺序要求的字符互换。

27.

【解析】要计算n门课程的平均分,首先可以求得n 门课程的总分,然后除以n得到其平均分,最后将其平均分返回到主函数中。

28.

【解析】要得到数组中元素的最大值,需要比较数组中的每一个元素。首先将最大值赋值为数组中的第一个元素,再将其与数组中的其

他元素相比较,将值最大的元素赋给变量max,并将其下标赋值给变量d。

29.

【解析】首先我们应定义一个变量来表示其和,另一个来表示其项数,然后通过循环,求得其差值,最后把和的平方返回到主函数中。

fun(int a[3][3], int b[3][3])

{

int i, j;

for(i=0; i<3; i++)

for(j=0; j <3; j++)

b[i][j]=a[i][j]+a[j][i];

/ *把矩阵a加上a的转置,存放在矩阵b中*/

}

行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j列正好对应原矩阵的第j行第i列。本题使用两层循环实现矩阵的转置,并将计算结果存入矩阵b中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。

31.(1)sum=0 (2)scanf(“%d”&a[i][j]);(1)sum=0 (2)scanf(“%d,”,&a[i][j]); 解析:该题中函数功能是计算元素的和。从已给定源程序的main主函数开始入手,然后通过“fun();”语句调用fun函数的功能。

32.(1)void fun(int a[][M] int m)(2)a[j][k]=(k+1)*(j+1);

(1)void fun(int a[][M], int m)(2)a[j][k]=(k+1)*(j+1); 解析:本题中函数的功能是根据形参m的值(2≤m≤9),在m行m列的二维数组中存放

有规律的数据,规律就是,i和j代表二维数组的行和列,则a啪[k]=(k+1)*(j+1)。

33.(1)错误:int fun(char t[]) 正确:void fun(char t[]) (2)错误:t[j]=t[i++];

正确:t[j]=t[i];(1)错误:int fun(char t[]) 正确:void fun(char t[])rn(2)错误:t[j]=t[i++]; 正确:t[j]=t[i]; 解析:错误1:该函数只是对一个字符串中的元素进行比较大小的操作,并没有具体的返回值,因此,函数的返回值类型应为void。错误2:本题的思路是利用选择法对数组元素进行比较。所谓选择法,是依次用当前取得的元素和它后面的元素进行比较,在第一个元素和它后面的元素顺次比较时,可以借助中间变量来对两数进行交换,要保证这第一个元素始终存放数组中的最大数,以后依次挑出次大数,这样最终的数组就是有序的。解答本题,只要理解了选择法的思想,找到并改正错误就容易了。

34.(1)for(i=1; i<=y; i++) (2)t=t%1000;

(1)for(i=1; i<=y; i++) (2)t=t%1000; 解析:本题中函数的功能是求整数x的y次方的低3位值。本题解题过程首先是求y次方,然后对结果进行截取。

35.(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))rn(2) 错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=0))rn(3) 错误:m=k 正确:m=m+k; 解析:错误

1:C语言规定while语句后的表达式两侧必须要有圆括号。错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。错误3:根据题意,将满足条件的数求累加和。

36.(1)错误:int fun(int n) 正确:double fun(int n) (2)错误:result*=n++;

正确:result*=n--;(1)错误:int fun(int n) 正确:double fun(int n)rn(2)错误:result*=n++; 正确:result*=n--; 解析:错误1:函数的返回值为实型数据,所以函数的返回类型应为double。错误2:根据阶乘的概念,从n开始,每递减1的数相乘,直到1,因此此处n递减,而不是递增。

37.(1)void fun(10ng s long *t) (2)while(s>0)(1)void fun(10ng s, long *t)

(2)while(s>0) 解析:该题中函数功能是取出长整型变量s中偶数位上的数,组成新数。从已给定源程序的main主函数开始入手,“fun(s,&t);”语句调用函数fun来实现题目要求。

38.(1)a2=k/10; (2)return i;(1)a2=k/10; (2)return i; 解析:本题中函数的功能是从整数1到55之间,选出能被3整除且有一位上的数是5的数。其中,涉及整数个位的截取,以及判断某范围内能被3整除的判断条件表达式、循环。

39.(1)fun(char(*sq)[N] 正确:char*fun(char(*sq)[M]) (2)错误:return sq;

正确:return sp;(1)fun(char(*sq)[N] 正确:char*fun(char(*sq)[M])rn(2)错误:return sq; 正确:return sp; 解析:函数fun()的肜参为字符串指针数组,每个元素指向一个长度为M的字符串。从主函数中的语句可以看出,字符串指针数组的每个元素指向一个字符串,要求函数fun()找

出其中最长的字符串。可先假设指针数组的第1个元素所指的字符串最长,之后对字符串指针数组进行遍历,若遇字符串长度大于待定最长字符期,则令该字符串为待定最长字符串,如此循环直至指针数组末尾,即可得到最氏字符中的地址。

40.(1)错误:if(d%2!=0) 正确:if(d%2==0) (2) 错误:t=d*s1+t; 正确:*t=d*s1+*t;(1)错误:if(d%2!=0) 正确:if(d%2==0)rn(2) 错误:t=d*s1+t;

正确:*t=d*s1+*t; 解析:错误1:偶数是能被2整除,而奇数是不能被2整除,题目要求找出偶数。错误2:t为指针类型,所以进行运算时要加‘*’号。

41.

(1)if((tt[i]>=’a’)&&(tt[i]<=‘z’))

(2)tt[i]一=32;

【考点分析】

本题考查:if语句条件表达式;小写字母转大写字母的方法。

【解题思路】

(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在a—z之间,所以这里需要进行连续的比较,用&&。(2)从ASCIl码表中可以看出,小写字母的ASCIl码值比对应大写字母的ASCIl值大32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCIl码值判断该字母是不是小写字母,若是,则ASCIl码值减32即可。

42.(1)错误:fun(int n);

正确:fun(int n)

(2)错误:if(n=1)

正确:if(n==1)

【解析】根据C语言的语法规则,函数定义之后是不加分号的。由整个程序看,函数fun()是函数定义。因此“fun(int n);”应改为“fun(int n)”;表达式n-1表示的是将1赋给变量n,显’然是不对的。这里应该判断变量n是否等于l,因此“if(n=1)”应改为“if(n==1)”。

43.(1)a=NULL;

(2)if(*r==*p)

(1)a=Null;有明显的语法错误,指针指向空值的关键字应为NULL。

(2)r和p均为指针变量,分别指向两个字符串中的字符变量,循环条件是当r和p所指向的字符相同时,进行指针后移操作,故此处应为if(*r==*p)。

44.2525 解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。


本文标签: 函数 字符串 程序 结构 数组