C语言上级资料答案(解析).doc
第一套
1、本题的考核点是结构体类型变量的定义和引用以及文件函数的应用。
fopen函数的作用是打开一个文件,在fun函数中为输入打开一个二进制文件,所以第一个空填:"rb"或与此语句功能相同的语句;利用嵌套循环语句按学号从小到大排序,所以第二个空填:>s[j].sno或与此语句功能相同的语句;再用二进制方式把排序后的数据输出到指定文件中,fwrite函数的作用是往文件的当前位置写入指定字节的数据块,所以第三个空填:fwrite。
2、 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错误的重要前提。
程序中的重要思想如下:
1、函数fun()的功能是根据一个整型形参计算题目中的数学公式;
2、由于公式中运用了除法,所以公式的最终值必须使用double型,以保持最终值的精确性。
题中的第一个错误出现在函数fun()中的语句"for(i = 2 ; i < m ; i++)"中,请注意这个循环的条件部分,仔细看看,就可以知道,如果这么写,公式中的最后一项将被丢掉。正确语句如下:" for(i = 2 ; i <= m ; i++)";
题中的第二个错误是在for循环的循环体中,即计算公式的那条语句"y -= 1 / (i * i) ;",前面分析过,公式的最终值为一个double型,题中除数位置使用了整数,这样的话,会造成不匹配错误,所以,正确语句如下:"y -= 1.0 / (i * i) ;"。
本评析仅作参考。
3、 本题的考核点是循环语句的应用。
解题思路:在Fibonacci数列中,每一项的值都是前两项之和。设置一个中间变量m,用来置放推出的最小数,所以可以用递推法求出大于s的最小的一个数。
本评析仅供参考。
int fun( int s)
{
int x1=0,x2=1,m=0;
/*假如当前项的值小于指定值s,但是下一项的值又大于指定值s,即下一项值即为大于s的最小的一个数*/
while (s>m)
{
m=x1+x2;
x1=x2;
x2=m;
}
return m;
}
第二套
1、本题的考核点是C语言中的基本算法和简单语句的使用。
fun函数是用来对整数进行判断是否符合题目中规定的条件。首先对变量赋初值,n返回的是符合条件的整数的个数,因此第一个空填:0;while语句用于求出100至x(x≤999)之间的符合条件的整数个数,故第二个空填:x;由while循环语句可知第三个空是设置循环变量的步长,根据题义可知循环步长是1,因此第三个空填:t++或与此语句相同功能的语句。
2、本题的考核点是C语言的一些基本常识和循环语句的使用。
从本题的要求看,如果某一个元音字母没有在字符串中出现时,程序应返回0。主函数中num[5]代表一块C编译器随机分配的内存地址,在没有对这块内存地址初始化之前,这块内存中存放着随机的数据,也有可能是1,2...等数字,因此在fun函数开始应对num数组进行初始化。fun函数的第一个for循环中,k才是循环变量,而i只是一个常量,因此"num[i]=0;"应改为"num[k]=0;"或相同作用的语句。
另外,s代表的只是一个字符串的指针,把它直接当一个数据看待是没有意义的,应该把"switch( s )"语句改为"switch( *s )"语句。
本评析仅供参考。
3、 本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组下标为奇数的元素与2取余,如果余数不为零则将其值存入另外一个数组中。
本评析仅供参考。
void fun(char *s, char t[])
{
int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*将字符串s中所有下标和ASCII值同时为奇数的字符复制到数组t中*/
for(i=1;i
if(s[i]%2!=0)
t[n++]=s[i];
t[n]='\0';/*在数组t最后添加字符串结束符*/
}
第三套
1. 本题的考核点是C语言中的基本算法和简单语句的使用。
在fun函数中,对整数进行判断是否符合题目中规定的条件。while语句设置循环结束的条件,由题面可知第一个空填:999;变量s1,s2,s3分别是整数的个位、十位以及百位上的数值,所以第二个空填:t/10;if语句进行条件判断,判断s1+s2+s3的值是否与输入的值相等,所以第三个空填:x。
2. 本题着重考察考生对C语言中指针以及一些简