二级C语言-306 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二级C语言-306
(总分:100.00,做题时间:90分钟)
一、程序填空题(总题数:1,分数:30.00)
1.请补充main()函数,该函数的功能是:从键盘输入学生的成绩(用Enter键作为分隔符),并统计各分数段学生的人数。
具体要求为:A类为90~100分,B类为80~89分,C类为70~79分,D类为60~69分,59分以下的为E类。
当成绩为0时结束成绩的输入,并且最后输入的0不进行统计。
例如,若输入:89,99,45,90,56,78,88,74,66,55,0,则显示结果为:A:2 B:2 C:2 D:1 E:3。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#define M 100
void main()
{
float score[M];
int bb[5];
int grade, i=-1, n=0;
char ch="A";
system("CLS");
printf("Input a score(0~100); /n");
do
{
i++;
n++;
printf("score[%d]=", i);
scanf( 1);
}while(score[i]!=0);
for(i=0; i<5; i++)
2;
for(i=0; i<n-1; i++)
{
grade= 3;
switch(grade)
{ case 10:
case 9: bb[0]++; break;
case 8: bb[1]++; break;
case 7: bb[2]++; break;
case 6: bb[3]++; break;
default: bb[4]++;
}
}
for(i=0; i<5; i++)
printf("/n%c: %d", ch+i, bb[i]);
}
(分数:30.00)
解析:"%f", &score[i] bb[i]=0 score[i]/10[解析] 由整个程序可知,数组变量score中存放的是学生成绩,首先要格式化输入的各个学生的成绩,因此,第一处填“"%f", &score[i]”;数组bb中存放的是各个成绩段的学生人数,初始化为0,因此,第二处填“bb[i]=0”;由各case语句可知,用来判断成绩段的分数的十位数字,因此,第三处填“score[i]/10”。
二、程序改错题(总题数:1,分数:40.00)
2.下列给定程序中,函数proc()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。
例如变量num1中的值原为2,num2中的值原为1,程序运行后,num1中的值为1,num2中的值为2。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
int proc(int*x, int y)
{
int t;
//****found****
t=x; x=y;
//****found****
return(y);
}
void main()
{
int num1=2, num2=1;
system("CLS");
printf("%d%a/n", num1, num2);
num2=proc(&num1, num2);
printf("%d%d/n", num1, num2);
}
(分数:40.00)
__________________________________________________________________________________________ 正确答案:()
解析:(1)错误:t=x; x=y;
正确:t=*x; *x=y;
(2)错误:return(y);
正确:return(t); [解析] 由函数proc()可知,变量x为整型指针,而变量t为整型变量,不能直接赋值。
因此,“t=x; x=y;”应改为“t=*x; *x=y;”。
题目要求实现两个数的交换,因此函数proc()应返回变量x的值,变量x的值存放在变量t中。
因此,“return(y);”应改为“return(t);”。
三、程序设计题(总题数:1,分数:30.00)
3.假定输入的字符串中只包含字母和*号。
请编写函数proc(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。
例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则应当是****a*bc*def*g。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
void proc(char *str)
{
}
void main()
{
char s[81];
printf("Enter a string:/n");
gets(s);
proc(s);
printf("The string after deleted:/n");
puts(s);
}
(分数:30.00)
__________________________________________________________________________________________ 正确答案:()
解析:void proc(char*str)
{
while(*str!="/0") //让a一直移动,直到字符串的结束
str++;
str--;
while(*str=="*") //如果其为*号,则什么也不做
str--;
*(str+1)="/0"; //把从后数,最后一个*号用字符串的结束标志来代替
} [解析] 要删除字符串尾部的所有*,只要将尾部所有*中的第一个改为字符串结束符即可。
首先,将字符串指针移动到字符串最后一个位置,检查最后一个字符,是*则将指针前移,否则将指针后移一个位置赋值作为结束符。