二级C语言-357

发布时间:2019-12-13 12:28:58   来源:文档文库   
字号:

二级C语言-357

(总分:100.00,做题时间:90分钟)

一、程序填空题(总题数:1,分数:30.00)

1.程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数show的功能是输出这位学生的信息。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#includestdio.h
typedef struct
{int num
char name[9];
char sex;
struct(int year,month,day;}birthday;
float score[3];
}STU;
/**********found**********/
void show(STU 1)
{int i;
print["/n%d %s % c% d-%d-%d",tt.num,tt.name,tt.sex,tt.birthday year,tt.birthday.month,tt.birthday.day);
for(i=0; i3; i++)
/**********found**********/
print[("%5.1f", 2);
printf("/n");
}
main()
{STU std={1,"Zhanghua","M",1961,10,8,76.5,78.0,82.0};
printf("/nA student data:/n");
/**********found**********/
show( 3)
}


(分数:30.00

解析:(1)tt (2)tt.score[i] (3)std [解析] 填空1形参函数定义时,参数类型标示符指明了参数类型,在printf("/n%d %s %c %d-%d-%d" tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day)函数中所用到的tt没有定义,因而想到此处应填写tt
填空2show函数是输出学生的信息,因而此处应该用tt.score[i]来表明学生的成绩输出。
填空3:根据show函数的形参的定义可知,此处应填写std

二、程序改错题(总题数:1,分数:30.00)

2.下列给定程序中,函数fun的功能是:求出数组中的最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#includeconio.h
#includestdio.h
#define N 20
/**********found**********/
void fun(int*a,int n);
{
int i,m,t,k;
for(i=0;in;i++)
{
/**********found**********/
m=0;
for(k=i+1;knk++)
if(a[k]a[m])
m=k
t=a[i]
a[i]=a[m];
a[m]=t;
}
}
main()
{
int b[N]={11,5,12,0,3,6,9,7,10,8);
int n=10,i;
for(i=0;in;i++)
printf("%d",b[i]);
printf("/n");
fun(b,n);
for(i=0;in;i++)
printf{"%d,b[i]);
printf("/n");
}


(分数:30.00

解析:(1)void fun(int *a, int n)
(2)m=i; [解析] (1)语法错误,函数定义时不应该带有""
(2)这是一段简单的比较程序,m为有效比较数的下标。从下面的程序可以看出mi;

三、程序设计题(总题数:1,分数:40.00)

3.编写函数funw是一个大于10的无符号整数,若wn(n2)位的整数,则函数求出w的后n-1位的数作为函数值返回。
例如,w值为5923,则函数返回923;若W值为923,则函数返回23
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#includestdlib.h
#includeconio.h
#includestdio.h
unsigned fun(unsigned w)
{
}
void main()
{
unsigned x;
system("CLS");
printf("Enter a unsigned integer number:");
scanf("%u",&x);
printf("The original data is:%u/n",x);
if(x10)
printf("Data error!");
else
printf("The result:%u/n",fun(x));
}


(分数:40.00

__________________________________________________________________________________________
正确答案:()

解析:unsigned fun(unsigned w)
{
int n=1,j,s=1;
unsigned t;
t=w;
/*首先确定w的位数,用变量n保存*/
while(t=10)
{
/*每次循环使s的位数减1,同时n1*/
t=t/10;
n++;
}
/*10n-1次方*/
for(j=1;jn;j++)
s=s*10;
/*w10n-1次方求余即可得到所求*/
return w%s;
} [解析] 要得到几位整数w的后n-1位,首先应确定w的位数n,然后使用%运算符将ws相除,所得的余数即为w的后n-1位。
本程序首先用wlile语句确定w的位数nn的初值为1,每次循环使w除以10,即位数减1,同时n1,至到w为个位数,循环结束;然后使用for循环得到10n-1次方,作为除数;最后使用%运算符将ws相除,并将所得的余数返回。

本文来源:https://www.2haoxitong.net/k/doc/e20faffaf11dc281e53a580216fc700aba6852d0.html

《二级C语言-357.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式