内容正文:
m=m/10;
}
if(q∗q==n)b[num++]=sum;
}
else
i++;
}
returnnum;
}
第七章 函 数(B)
一、理论测试题
1.(1)符号
(2)调用
(3)实际
(4)print(s)
2.i=2 j=2
i=2 j=0
1 3 5 7 9
3.k=25,k=49,k=60
4.1 6 120 s=135
5.(1)rq[2]>md[rq[1]-1]
(2)b[k--]=x%2+'0'
(3)strcpy(b,"error")
(4)split(a[i],b[i])
二、技能考试题
1.(1)l<=h或x==a[m]
(2)sizeof(a)/sizeof(int)
(3)a[i]>a[j]
(4)p=search(a,n,x)
2.(1)len=strlen(s);
(2)c[k]=t%2+48;或c[k]=t%2+'0';
(3)if(flag)或if(flag==1)或if(flag! =0)或if
(t>1)或if(t>=2)
3.intGenStr(chars[],inta[])
{ inti,x,y,t,max,jz,p;
for(i=0;i<strlen(s)-1;i++)
{ y=x=s[i]+s[i+1];
max=-1;
while(x)
{ if(x%10>max) max=x%10;
x/=10;
}
jz=max+1;p=1;t=0;
while(y)
{ t=t+y%10∗p;
y=y/10;
p=p∗jz;
}
a[i]=t;
}
returni;
}
intishz(intm,intn)
{ intt;
while(t=m%n)
{ m=n;n=t;
}
returnn==1;
}
intCalculate(inta[],intn,intb[][2])
{ inti,j,k=0;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(ishz(a[i],a[j]))
{ b[k][0]=a[i];
b[k][1]=a[j];
k++;
}
returnk;
}
第八章 文件一
一、理论测试题
1.98 76
2.IloveCHINA
3.(1)r (2)"d:\\file2.txt","w"
(3)ch,fpw2 (4)fgetc(fpw1)
4.abcdef
5.(1)c:\\test2.txt","w" (2)a (3)i++
(4)fprintf(fp2,"%c
",s+'A'-10)
二、技能测试题
1.(1)16∗num+st[i]-'0'
(2)"d:\\file1.txt","a+"
2.(1)FILE ∗fp1,∗fp2;
(2)if((fp1=fopen("d:\\test1.txt","r"))==
NULL)
(3)if(test_st(str))
5
总复习方案参考答案
第七章函数(B)
第七章函
数(B)
一、理论测试题(每小题12分,其中输出格式占2分,共60分)
1.阅读下列程序,回答下列问题。(每空3分,共12分)
题目:函数sort(inta[」,int left,int right)采用冒泡排序法对数组a中下标在[left,right]间的
元素进行升序排序。例如:当sort函数参数left,right的值分别为2,5时,程序运行结果是:
排序前:一69180一3712一4
排序后:-69一3071812一4
(1)#include <stdio.h
(2)#define N8
(3)void sort(int a[],int left,int right)
(4){int round,num,t;
(5)
for(round=left;round<right;round+)
(6)
for(num=left;num<right+left-round;num++)
(7)
if(a[num]>a[num+1])
(8)
t=a[num];a[num]=a[num+1];a[num+1]=t;))
(9)void print(int a)
(10){inti:
(11)
for(i=0;i<N;++i)
(12)
printf("%4d",ai]);printf("
");}
(13)int main()
(14){ints[N]={-6,9,18,0,-3,7,12,-4},i:
(15)
printf("排序前:");
(16)
print(s);
(17)
sort(s,2,5);
(18)
printf("
排序后:");
(19)
④
;
(20)
return 0;}
上述程序中,第(2)行中#define后面的N为①常量,第(17)行中sort(s,2,5)
为函数
②,s为
③参数,根据题目要求,第(19)行划线处应填
④。
2.阅读下列程序,并把运行结果填写在答题卡相应位置。
#include <stdio.h
int fun(int s[])
static int j=4;
·37·
单招零距离·计算机专业综合测试卷·下册
int i=0;
do
{s[j]+=s-1]:
一一j;
)while(++i<2);
printf("i=%d\t j=%d
",i,j);
}
int main()
{intk,a[10]={1,2,3,4,5};
for(k=1;k<3;k++)
fun(a);
for(k=0;k<5;k++)
printf("%d\t",ak]);
}
3.阅读下列程序,写出运行结果。
#include <stdio.h
#define N(x)x*x
int a=11;
int f(int c)
static int a=5;int t=1;
while(c-->a)
t=t*c;
return (a--)+t;
}
int main()
int i,k=0;
for(i=0;i<2;i++)
int a=3;
k+=f(a);
k=k+N(a+4);
printf("k=%d,",k);
k+=a;
printf("k=%d
",k);
}
·38·
第七章函数(B)
4.阅读下列程序,写出程序运行结果。
#include "stdio.h"
int jc(int x);
int main()
int i,s=0;
for(i=1;i<=5;i+=2)
s=s+jc(i);
printf("s=%d",s);
}
int jc(int x)
static int k=0;int i,p=1;
for(i=1;i<=x;i++)
p=p米i;
printf("%d\t",p);
k十=P;
return k;
}
5.二维数组a[5][3]中,前三列存放着日期的年、月、日三个数据,试判断各行的三个数据
能够构成一个合法的日期。若能构成合法日期,则将三个数据合并成一个8位数字串(形如"”
20210328"),存放在二维字符型数组中;若是非法日期,则在二维字符型数组中存入字符串"
error'"。
#include <stdio.h
#include <string.h
int effect(int rq])
{int md[12]={31,28,31,30,31,30,31,31,30,31,30,31};
md1]=(rq[0]%4==0&&rq[0]%1001川rq[0]%400==0)?29:28;
if(rq[1]<1||rg[1]>12)
/月非法
return 0;
if(
(1)
//日非法
return 0;
return 1;
void split(int rq[],char b[207)
/拼合
int i,j,k=7,x;
if(effect(rq))
·39·
单招零距离·计算机专业综合测试卷·下册
{for(i=2;i>=0;i--)
x=rg[i];
for(j=0;j<(i==0?4:2);j++)
{
(2)
x/=10:
}
b[8]=\0;
}
else
(3);
}
int main()
{inta[5][3]={2020,1,24,2019,2,34,2018,14,20,2017,11,25,2019,2,29};
char b[5][20];int i;
for(i=0;i<5;i++)
(4)
;
for(i=0;i<5;i++)
printf("%d-%d-%d:%sn",a[i][0],a[i][1],a[i][2],b[i]);
}
二、技能测试题(第1题20分,第2、3题各30分,共80分)
1.程序填空题:已知数组中存放了若干个数据,程序首先计算出数组中元素的个数,并
对数组中n个元素进行升序排序,再从键盘输入一个要查找的数x,在数组中查找这个数是否
存在,若存在则显示"查找成功!",否则显示"查找失败!”。请填空。
#include<stdio.h>
int search(int al],int n,int x)
{int1,h=0,m=n-1;
while(K<=h)
{m=(l+h)/2;
if(x==a[m])break;
else if(x>a[m])1=m+1;
else if(x<a[m])h=m-1;
}
return
(1)
·40·
第七章函数(B)
int main()
{inta[☐={26,89,85,42,64};inti,j,x,p,temp,n;
/关¥关关¥米¥¥米米关SPACE¥¥¥并**米¥关米米/
n=(2);
/*1一排序*/
for(i=n-1;i>0;i--)
forj=i-1;j>=0;j--)
/*¥米米关米关米米米¥SPACE兴兴米米米米***米米/
if((3))
(temp=a[i];a[i]=a[j];a[j]=temp;
for(i=0;i<n;i++)
printf("%d\t",ai]);
printf("
");
/2一查找*/
printf("输入要查找的数:");
scanf("%d",&x);
/米米关关关关米米¥关米SPACE¥米关米¥关米米兴关关/
(4);
if(p)
printf("查找成功!n");
else
printf("查找失败!
");
}
2.程序改错题:void add(char a[],char b[],char c[」)函数将由0','1组成的字符串a,b按
二进制数加法规则相加,和仍以0',1组成的字符串形式保存到字符串c中。
例如:字符串a为"1100”,字符串b为"111",调用add函数后字符串c为"10011"。
#include <stdio.h
#include <string.h>
void reverse(char s[])
int i,len;char t;
/*关兴米关米米关关关关关关关关关FOUND米米关关关兴兴兴关*关关关关关关/
len=strlen(s-1);
for(i=0;i<len/2;i++)
t=s[i];s[i]=s[len-i-1];s[len-i-1]=t;
·41·
单招零距离·计算机专业综合测试卷·下册
}
void add(char a[],char b[],char c[])
int i,j,k,t,flag;
i=strlen(a)-1;j=strlen(b)-1;
k=flag=0;
while(i>=0j>=0)
if(i<0)t=b[j]-48++flag;
else if(j<0)t=a[i]-48+flag;
else t=a[i]-48+b[j]-48+flag;
c[k]=t/2:
k+十;
flag=0;
if(t>1)flag=1;
i--;j--;
}
if(flag==0)
c[k++]=1;
c[k]=\0;
reverse(c);
int main()
{char a[50],b[50],c[51];
printf("Input a(binary):
");
scanf("%s",a);
printf("Input b(binary):
");
scanf("%s",b);
add(a,b,c);
printf("After adding a+b=%s
,c);
}
3.程序设计题:求字符串s中所有相邻两个字符的ASCIⅡ值之和,可将每个和值看作最
小进制表示的数,然后将该进制数转换为十进制数。最后,从这些十进制数中找出互质数对。
互质数对是指最大公约数为1的一对数。
例如:相邻两个字符为c和1',其ASCIⅡ值之和为148,可将该值看作的最小进制为9进
制数,将该9进制数148转换成十进制数为125,然后,保存到数组a中。
例如:字符串s为:"c1F2k";
·42·
第七章函数(B)
数组a的值为:12511915111
互质的数对:
125119
125111
11915
119111
编写程序:
l.编写函数int GenStr(char s[],inta[门),求字符串s中所有相邻两个字符的ASCII值
之和,将每个和值看作最小进制表示的数,然后将该进制数转换为十进制数保存到数组a中。
函数返回a中保存的数的个数。
2.编写函数int Calculate(inta[],intn,intb[][2]),从a数组的n个数中找出互质数对
保存到数组b中,并返回互质数对的个数。
#include<stdio.h
#include<string.h
#include<math.h>
include<ctype.h
#include<stdlib.h
#define N 80
int GenStr(char s[],int a])
{/¥米米*米**米¥米Pr0gram米米米¥兴米¥米米米/
/关*0米关关关¥*关End关米*¥关关米米米*/
int Calculate(int a[],int n,int b[][2])
{/米米米米米**米米米Pr0gram米米米米*米米米米米/
/*关关米关米**关关End关***¥*米米**/
}
int main()
{char s[]="clF2k";inta[N]={0},b[N][2]={0};
·43·
单招零距离·计算机专业综合测试卷·下册
int num=0,i=0,n;
num=GenStr(s,a);
printf("The string s is:%s
",s);
for(i=0;i<num;i++)
printf("%d ",ai]);
printf("
");
n=Calculate(a,num,b);
for(i=0;i<n;i++)
printf("%3d %3d
",b[i]0],bi]1]);
}
·44·