江苏省等级考试上机模拟题Word文件下载.docx
《江苏省等级考试上机模拟题Word文件下载.docx》由会员分享,可在线阅读,更多相关《江苏省等级考试上机模拟题Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
*/
printf("
Pleaseinputphone_number:
scanf("
as[j].tel);
j++;
Pleaseinputname(='
}
*n=--j;
}
voidsearch(structts*b,char*x,intn)
{intj;
j=n;
while(strcmp(b[j].name,x)&
&
j)
j--;
if(j==0)/*改为:
j!
=0*/
name:
%stel:
%s\n"
b[j].name,b[j].tel);
elseprintf("
Notfound!
\n"
voidmain()
{structtss[11];
intnum=0;
readin(s,&
num);
printf("
Inputanamefotsearch:
search(s,name,num);
【要求】
1.把上述程序录入到文件myfl.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序myfl.c必须放在考试盘的根目录下,供阅卷用。
二、编程题(20分)
程序功能:
将一字符串做压缩处理。
编程要求如下:
1.编写一个函数intcompress(chars[]),对于s中的所有字母保持不变,其他字符若连续出现多次,则压缩为一个字符,统计被删除的字符个数并作为函数值返回。
2.编写主函数main。
从键盘上读入一行字符放入一个字符型数组中,调用compress函数对读入的该行字符做压缩处理,将压缩后的数据写入结果文件myf2.out中。
3.用以下数据测试程序:
----------Iamastudent,,,,,,,,andyoutoo!
!
1.将源程序取名为myf2.c,输出结果文件取名为myf2.out。
2.数据文件的打开、使用和关闭均按‘TURBOC文件操作实现。
3.源程序文件和运行结果文件均须放在考试盘的根目录下,供阅卷用。
4.不要将myf2.0bj和myf2.exe保存到考试盘上。
【源程序】:
stdio.h>
intcompress(chars[])
{inti,k,count=0,count_del=0;
charst[80];
k=strlen(s);
/*实现数据压缩,引入另一个数组。
即将不相同的数据存入另一数组中。
*/
for(i=0;
i<
k;
i++)
if(s[i]==s[i+1])
continue;
else
st[count++]=s[i];
st[count]='
\0'
;
count_del=strlen(s)-strlen(st);
/*求压缩的字符个数*/
strcpy(s,st);
/*将压缩后的数组存入压缩前的数组中*/
returncount_del;
returncount_del;
main()
{FILE*fp;
/*文件指针的定义*/
charstr[80];
intm;
if((fp=fopen("
myf2.out"
"
w"
))==NULL)/*以只读的方式打开文件myf2.out*/
{printf("
can'
topenfile"
exit(0);
gets(str);
m=compress(str);
%d,%s"
m,str);
fprintf(fp,"
/*将压缩后的数据写入结果文件myf2.out中*/
fclose(fp);
第二套C上机试卷
某数列的前两项是3和2,其后继项根据前面最后两项的乘积,按下列规则生成:
(1)若乘积为一位数,则该乘积即为数列的后继项;
(2)若乘积为两位数,则该乘积的十位数字和个位数字依次作为数列的两个后继项。
例如,该数列的前10项为:
3261224832。
函数sum按要求生成数列的前n(n<
50)项,存入首指针为pa的数组中,计算并返回前n项的和。
#defineN50
voidsum(intn,int*pa)/*改为sum(intn,int*pa)*/
{
intcount,total,temp;
*pa=3;
*++pa=2;
total=5;
count=2;
while(count++<
n)
{temp=*(pa-1)**pa;
if(temp<
10)
{total+=temp;
*(++pa)=temp;
else{
*++pa=temp/10;
total+=*pa;
if(count<
{count++;
pa++=temp%10;
/*改为*++pa=temp%10;
returntotal;
inttol,n,i,num[n];
/*改为inttol,n,i,num[N]*/
do
printf("
Inputn=?
(2<
n<
50)"
scanf("
%d"
&
n);
}while(n<
=2||n>
=50);
tol=sum(N,num);
for(i=0;
i<
n;
printf((i+1)%5?
"
%5d"
:
%5d\n"
num[i]);
tol);
[要求]
1.把上述程序录入到文件myf3.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。
3.改正后的源程序myf1.c必须放在考试盘的根目录下,供阅卷用。
[题目]
一个有符号整型数以字符串形式存放在字符数组a中,字符串中只会出现数字字符、“-”、“+”和空格。
约定“-”和“+”只能出现在a[0]位置。
若a[0]位置的字符是“-”,则表示该整型数为负数,否则为正数。
除a[0]外,其他位置还可能出现空格。
试按下列要求编写程序:
1.编写函数intchang(chara[],intb[],int*n),按下列规则转换字符数组a中的字符串:
(1)整型变量sign存放数符,当整型数为正数时sign为0,为负数时sign为1,函数返回sign的值;
(2)整型数组b依次存放字符串a中出现的所有数字字符转换为对应的整型数后的值(不包括数符);
(3)n指向的变量保存放入b数组的整型数的个数;
(4)字符串a中的空格忽略不计。
例如,字符串“20.3”转换后的结果是:
sign=0,b=(2,0,3)。
字符串“-33740”转换后的结果是:
sign=1,b=(3,3,7,4,0)。
2.在主函数中输入两个字符串:
“-2351”、”+38246"
,分别调用函数chang做字符串转换,并将转换结果以例子给出的形式写入到文件myf2.out中。
[要求]
1.将源程序文件取名为myf4.c,输出结果文件取名为myf4.out。
2.数据文件的打开、使用和关闭等操作均用C标准库中缓冲文件系统的文件操作函数实现。
4.不要将myf4.obj和myf4.exe保存到考试盘上。
【源程序】:
ctype.h>
intchang(chara[],intb[],int*n)
/*求sign值*/
{inti,j=0,sign;
if(a[0]=='
+'
)sign=1;
elsesign=0;
/*将字符串a中出现的所有数字字符转换为对应的整型数后的存入整型数组b中依次存放*/
for(i=1;
a[i]!
='
if(isdigit(a[i]))
b[j++]=a[i]-'
0'
*n=j;
/*存入整型数组b中的个数*/
returnsign;
{FILE*fp;
chara[2][10]={"
-2351"
+38246"
inti,j,sign,b[10],count;
myf4.out"
))==NULL)
{printf("
2;
{sign=chang(a[i],b,&
count);
/*分别调用函数chang做字符串转换*/
fprintf(fp,"
sign=%d,b=("
sign);
/*按题目中要求输出结果到文件myf4.out中*/
for(j=0;
j<
count-1;
j++)
%d,"
b[j]);
%d)\n"
第三套C上机试卷
局部最大值定义:
若矩阵中一个元素的值比其上、下、左、右4个相邻元素的值都大,称该元素是局部最大值,位于矩阵拐角和边界的元素分别只有2个和3个相邻元素。
函数localmax的形参a存储输入矩阵,b存储输出矩阵,该函数的功能是:
找出a矩阵中所有局部最大值;
若输入矩阵的某个元素为局部最大值,则将输出矩阵的相同位置处的元素置l,否则置O。
例如:
#defineMIN-32768
voidlocalmax(int*a[7],int*b[7])/*改为(int(*a)[7],int(*b)[7])*/
{inti,j,k,m;
for(i=1;
i<
=5;
i++)
for(j=1;
j<
j++)
{b[i][j]=1;
for(k=-1;
k<
=1;
k++)
for(m=-1;
m<
m++)
{if((k==-1||k==1)&
(m==-1||m==1))
break;
/*改为continue;
if(a[i][j]<
a[ik][j+m])b[i][j]=0;
/*改为(a[i][j]<
a[i+k][j+m])*/
}
}
{inti,j,b[7][7];
inta[7][7]={{0},{0,6,9,7,5,6},{0,2,6,3,3,4},
{0,2,2,4,1,7},0,6,5,9,5,6,{0,2,6,4,6,8}};
/*改为{0,2,2,4,1,7},{0,6,5,9,5,6},{0,2,6,4,6,8}}*/
for(j=0;
7;
{a[0][j]=MIN;
a[j][0]=MIN;
a[6][j]=MIN;
a[j][6]=MIN;
localmax(a,b);
{for(j=1;
j++)printf("
%8d"
a[i][j]);
b[i][j]);
1.将上述程序录入到文件myf5.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。
3.改正后的源程序myf5.c必须放在考试盘的根目录下,供阅卷用。
考生信息字符串中含有准考证号和考生姓名。
“0412404524zhangweiqiang”。
现需对这样的字符串作变换,并统计其中元音字母a、e、i、o、u出现的次数。
根据下列要求编写程序:
1.编写函数intstr_trans(charstr[]),参数str接收考生信息字符串的存储首地址,函数对该字符串中姓名子串作变换,并将变换后的姓名子串连接到原考生信息字符串的尾部而形成一个变换后的字符串。
变换规则是:
检查姓名子串中的每一个字符,若不是元音字母,则保持不变;
若是元音字母,则在该字母前面插入一个下划线“_”。
函数返回元音字母出现的总次数。
例如,字符串“0412404524zhangweiqiang”经过变换后为“0412404524zhangweiqiangzh_angw_e_iq_i_ang”
2.编写主函数main,用字符串“0412404524zhangweiqiang”初始化字符数组line[80],调用函数str_trans,将变换后的字符串、元音字母出现的次数值写入到文件myf6.out中去。
1.将源程序取名为myf6.c,输出结果文件取名为myf6.out。
4.不要将myf6.0bj和myf6.exe保存到考试盘上。
intstr_trans(charstr[])
{inti,j,k,n=0;
/*n变量为统计姓名子串中元音的个数*/
charb[]={'
a'
'
e'
i'
o'
u'
5;
str[j]!
{if(isdigit(str[j])==0)/*排除数字字符,此语句也可不要*/
/*实现:
若是元音字母,则在该字母前面插入一个下划线“_”,插入的算法是,从插入位置起将其后的所有元素后移。
if(str[j]==b[i])
{n++;
for(k=strlen(str);
k>
=j;
k--)
str[k+1]=str[k];
str[k+1]='
_'
j++;
returnn;
charline[80];
intcount;
myf6.out"
gets(line);
count=str_trans(line);
count,line);
fclose(fp);
第四套C上机试卷
主函数接收从键盘上输入一组整数(以-999作为输入结束)保存至整型数组中,调用fun函数。
函数fun的功能是:
对长度为n的数组a,不考虑这组整数中的最大数和最小数(若有重复,则都不考虑),求出余下数中的最大数max及最大数的个数cnt1、最小数min及最小数的个数cnt2,分别保存到全局变量max,cntl、min、cnt2中。
#defineN100
intmax,min,cnt1,cnt2;
voidfun(inta[],intn)
{inti,j,k,x;
for(i=0;
{k=i;
for(j=i+1;
=n;
if(a[k]<
a[j])
k=j;
if(k!
=i)
{x=a[i];
a[i]=a[k];
a[k]=x;
a[i]);
i=1;
j=n-1;
/*改为j=n-2;
while(a[i]==a[i-1])
i++;
while(a[j]==a[j+1])
max=a[i];
min=a[j];
cnt1=cnt2=1;
while(a[i+1]==a[i])
cnt1++,i++;
while(a[j-1]==a[j])
cnt2++,j--;
{intxx[N],i=0,m=0;
&
xx[i]);
while(xx[i++]!
=-999)
{
m=i-1;
fun(m,xx);
/*改为fun(xx,m);
for(i=0;
m;
printf((i+1)%5?
:
xx(i));
/*改为xx[i]*/
cmax=%d,cmin=%d,cntl=%d,cnt2=%d\n"
max,min,cnt1,cnt2);
1.将上述程序录入到文件myf7.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。
3.改正后的源程序myf7.c必须放在考试盘的根目录下,供阅卷用。
编码问题。
设有一个整型数组a[N]中存放N个互不相同的整数。
例如,N=6时,有a=(4,3,O,5,l,2),此时,a数组的编码定义如下:
a[O]的编码为0放入b[0];
a[i]的编码为:
在a[0],a[1],…,a[i-1]中比a[i]的值小的数的个数(i=1,2,…,N—1)放入b[i]。
因而,由上述a数组各元素的值产生的编码数值b=(0,0,O,3,1,2)。
按下列要求编写程序:
1.编写函数voidencode(intx[],inty[],intn),其功能是对数组x中前n个整数求出其编码,并保存到y数组中。
2.编写主函数,从键盘上输入一组整数并保存到整型数组中,调用函数encode求出其编码,将原数组及其编码数组的值写入到结果文件myf8.out中。
3.输入的一组整数为4,3,0,5,1,2。
1.将源程序文件取名为myf8.c,输出结果文件取名为myf8.out。
2.数据文件的打开、使用和关闭等操作均用c标准库中缓冲文件系统的文件操作函数实现。
4.不要将myf8.obj和myf8.exe保存到考试盘上。
#defineN6
voidencode(intx[],inty[],intn)
{inti,j,k;
y[0]=0;
n;
{k=0;
i;
if(x[i]>
x[j])k++;
y[i]=k;
inta[N]={4,3,0,5,1,2},b[N],i,n;
myf8.out"