二级C语言-98
(总分:100.00,做题时间:90分钟)
一、程序填空题(总题数:1,分数:30.00)
1.给定程序中,函数fun的功能是将a和b所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。
例如,主函数中输入字符串32486和12345,在主函数中输出的函数值为44831。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序如下。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 9
long ctod(char*s)
{ long d=0;
while(*s)
if(isdigit(*s)){
/***********found**********/
d=d*10+*s- 1;
/***********found*********/
2;}
return d;
}
long fun(char *a,char *b)
{
/***********found**********/
return 3;
}
main()
( char s1[N],s2[N];
do
{ printtf"Input string s1:");gets(s1);}
while(strlen(s1)>N);
do
{ printf("Input string s2:");gets(s2);}
while(strlen(s2)>N);
printf("The result is:%ld/n",fun(s1,s2));
}
(分数:30.00)
解析:"0" s++或++s ctod(a)+ctod(b) [解析] 填空1:isdigt(*s)这个函数表示检查*s是否是数字(0~9),d=d*10++s-?表示的是要把字符串分别转换成面值相同的整数,因此本空应该填写"0"。
填空2:由填空*s所代表的字符串中字符需要一个一个的字符进行转换成整数,因此此空应该填写s++或++s。
填空3:题目要求把转换后的字符进行相加后作为函数的返回值,因此本空应该填写ctod(a)+ctod(b)。
二、程序改错题(总题数:1,分数:30.00)
2.给定程序MODI1.C中fun函数的功能是分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入AAaaBBb123CCccccd,则应输出结果为upper=6,lower=8。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序如下。
#include<stdio.h>
/********found********/
void fun(char *s,int a,int b)
{
while(*s)
{ if(*s>="A"&&*s<="Z")
/***********found***********/
*a=a+1;
if(*s>="a"&&*s<="z")
/***********found*********/
*=b+1;
s++;
}
}
main()
{ char s[100];int upper=0,lower=0;
printf("/nPlease a string:");gets(s);
fun(s,&upper,&lower);
printf("/n upper=%d lower=%d/n",upper,lower);
}
(分数:30.00)
解析:void fun(char*s,int*a,int*b)
*a=*a+1;
*b=*b+1; [解析] 由主函数中调用fun函数的语句fun(s,&upper,&lower)可知,函数的后两个变量为指针的形式,所以用*a和*b。
*a的作用是用来记录大写字母的个数,此处的作用是对*a累加1,所以此处应改为*a=*a+1。
*b的作用是用来记录小写字母的个数,此处的作用是对*b累加1,所以此处应改为*b=*b+1。
三、程序设计题(总题数:1,分数:40.00)
3.请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。
例如:实型数为1234.567,则函数返回1234.570000;
实型数为1234.564,则函数返回1234.560000。
注意:部分源程序存在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入编写的若干语句。
给定源程序如下。
#include<stdio.h>
float fun(float h)
编写函数其功能是计算一个字符串{
}
main()
{ float a;
printf("Enter a:");scanf("%f",&a);
printf("The original data is:");
printf("%f/n/n",a);
printf("The result:%f/n",fun(a));
}
(分数:40.00)
__________________________________________________________________________________________
正确答案:()
解析:float fun(float h)
{
long t;
t=(h * 1000+5)/10;
return (float)t/100;
} [解析] 注意:本题要求h的值真正进行四舍五入运算,而不是为了输出,即不能用printf("%7.2f",h)来直接得到结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论