2012秋C语言上机试卷C07答案
2012年秋 二级 C语言 上机试卷(试卷代号C07) 答案
一、改错题(16分)
【程序功能】
函数trans的功能是在一英文中统计单词个数(单词以空格隔开),将每个单词的首字母转换为大写字母,函数返回单词个数。
【测试数据与运行结果】
测试数据: I am trying to rEAD
屏幕输出: the text line have 5 words
the new text line is I Am Trying To READ
【含有错误的源程序】
以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件调试程序。
#include
#include
#include
#include
int trans char p /*改为 int trans char p[] 或int trans char *p */
int i,len strlen p ,n 0; for i 0;p[i];i++ while p[i] " " /*改为while p[i] ' ' */ i++;
if i len n++;
if p[i] 'a'&&p[i] 'z' p[i] p[i]-'a'-'A'; /*改为p p[i]- 'a'-'A' ;或p p[i]-'a'+'A'; 或p[i] p[i]-32;*/ while isalpha p[i] i++; return n; int main int n; char str[80] "I am trying to rEAD"; trans str ; /* 改为 n trans str ; */
printf "the text line have %5d words\n",n ; printf "\nthe new text line is %s\n",str ;
getch ;
return 0; 【要求】
打开T盘中myf1.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。
改正后的源程序(文件名myf1.c)保存在T盘中供阅卷使用,否则不予评分。
【评分标准】
共16分。每改正一个错误得4分,共4个错误。
二、编程题(24分)
【程序功能】
输出101~199范围内所有公差为指定值的等差素数数列。例如:(101,107,113)是公差为6的一个等差素数数列。
【编程要求】
1.编写函数int findser int d,int a[][2] 。函数功能:将101~199范围内全部素数依次存放到一个数组中,在该数组中查找所有公差为d的等差素数数列,将找到的每个等差素数数列的首项和该数列的项数保存到a指向的数组中,函数返回等差素数数列的数。
3.编写main函数。函数功能:声明二维数组a和变量d,输入公差到d,用d和a作实参调用findser函数,将101~199范围内所有公差为d的等差素数数列输出到屏幕及文件myf2.out中。最后将考生本人的准考证号字符串输出到文件myf2.out。
【测试数据与运行结果】
测试数据:d 6
屏幕输出:
101 107 113 103 109 107 113 131 137 151 157 163 157 163
167 173 179 173 179 191 197 193 199
【要求】
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T盘中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T盘中。
【参考答案】
#include
#include
#include
int prime int n int i,k int sqrt n ; if n 2 return 0; for i 2;i k;i++
if n%i 0 return 0; return 1; int findser int d,int a[][2] int b[100],count 0,i,k,t,length,n 0; for i 101;i 199;i+ 2 if prime i 1 b[count++] i; for i 0;i count-1;i++ t i; length 1; for k t+1;k count;k++ if b[k]-b[t] d length++; t k; if length 1 a[n][0] b[i