文档库 最新最全的文档下载
当前位置:文档库 › 上机考试模拟系统 练习模式 50套编程题目答案

上机考试模拟系统 练习模式 50套编程题目答案

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@本答案由王纯,揭才明,叶金平老师共同编写,已经@
@通过了系统的测试,欢迎大家参考! @
@揭才明--------(1---20,46--50) @
@王 纯--------(26--45) @
@叶金平--------(21--25) @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1.提示:该题目思路比较简单,关键在于细节的处理
double fun(int n)
{
double s=0.0; /*函数返回值为double,故将s定义成double型*/
int i;
for(i=1;i<=n;i++)
s+=(1.0/(2*i-1)-1.0/(2*i)); /*注意这里必须写成是1.0,而不是1*/
return s; /*函数必须返回一个double值*/
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2.提示:该题要求对结构体有比较深入的理解
STREC fun( STREC *a, char *b )
{
int i;
STREC result;
for(i=0;iif(strcmp(a->num,b)==0) /*注意该函数的两个参数*/
{
result=*a; /*结构体整体赋值*/
break;
}
else
a++;
if(i==N)
result.num[0]='\0',result.s=-1; /*注意数组num是字符串数组不能对它
整体赋值 即:result.num=""是错误的*/
return result; /*注意函数必须返回一个STREC类型的值*/
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
3.提示:熟悉结构体的操作,涉及结构体操作的时候通常需要使用函数strcpy
fun( STU a[], STU *s )
{
int i;
strcpy(s->num,a[0].num);
s->s=a[0].s;
for(i=0;iif(s->s{
strcpy(s->num,a[i].num);
s->s=a[i].s;
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4.提示:主要考察如何判断一个数为素数(质数)
void fun( int m, int *k, int xx[] )
{
int i,j;
*k=0;
for(i=2;ifor(j=2;j<=i/2;j++)/*判断小于m的每一个数i是否为非素数*/
if(i%j==0)
{
xx[(*k)++]=i; /*通过*k计数*/
break;
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
5.提示:如何取出一个数的各个位,可以使用一些常用函数的使用,如pow()
#include
#include
unsigned fun ( unsigned w )
{
unsigned m=w; /*注意这里m必须定义为unsigned*/
int n=0,p; /*p的作用是记录w的最高位数字*/
do
{
p=m%10;
m/=10;
n++;
}while(m);
m=w-(int)pow(10,n-1)*p;/*这里使用了pow()函数,必须添加头文件math.h*/
return m;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
6.提示:这里考察字符串长度的计算,可以使用一些常用函数的使用,如strlen()
char *fun ( char *s, char *t) /*注意函数的返回值*/
{
int slen,tlen;
slen=strlen(s);
tlen=strlen(t);
if(slen>=tlen)
return s;
else
return t;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
7.提示:本题关键在于理解矩阵的转置如何求得,将矩阵当作数组进行处


void fun ( int a[3][3], int b[3][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[i][j]=a[j][i];/*关键语句实现转置*/
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[i][j]=a[i][j]+b[i][j];

}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8.提示:真正理解这题中删除的意思,即覆盖,要求对指针有较高要求的掌握
假设指针a为A*B**CD***
void fun( char *a, char *p )
{
char *t;
while(*p=='*')
p--; /*将指针移动到从后往前数第一个字母D*/
while(*p!='*')
p--;/*将指针移动到从后往前数第一批字母后的往前第一个*,即C前面的那个* */
while(p>=a)/*执行该循环一次后,指针a变成了A*B*CD*** */
{
if(*p=='*')/*如果是*,则将其覆盖 */
{
t=p;
while(*t!='\0')
*t=*(t+1),t++;
}
p--;
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
9.提示:要求对指针有较高要求的掌握
void fun( char *a,int n )
{
char *b=a;
int num=0;
while(*b!='\0')/*将指针移动到字符串末尾*/
b++;
--b; /*将指针移动到从后往前数的第一个星号*/
while(*b=='*')/*统计末尾连续的星号个数*/
num++,b--;
while(*b!='\0')/*将指针移动到字符串末尾*/
b++;
b--; /*将指针移动到从后往前数的第一个星号*/
while(num>n) /*开始对字符串进行处理*/
*b='\0',b--,num--;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
10.提示:在字符串中删除指定字符时,可以借助其他数组进行
void fun( char *a )
{
int i,k=0;
char *p=a,s[81];/*借助数组s进行,将符合要求的字符放置在数组s中*/
while(*p)
{
if(*p!='*')
s[k++]=*p;
p++;
}
for(i=0;ia[i]=s[i];
a[i]='\0';
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
11.提示:此题叫为简单,主要考察如何去判断整除的问题,注意传值与传址的区别
void fun (int *a, int *n)
{
int num;
*n=0;
for(num=1;num<=1000;num++)
if((num%7==0 || num%11==0) && num%77!=0)
a[*n]=num,(*n)++;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
12.提示:将字符串S中ASCII码为奇数的字符移入数组t中即可
void fun(char *s, char t[])
{
int i=0;
while((*s)!='\0')
{
if((*s)%2==1)
{
t[i]=*s;
i++;
}
s++;
}
t[i]='\0'; /*因为是字符串,故末尾必须加上字符串结尾符 '\0'*/
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
13.提示:该题主要考察取整与取余问题,测试时注意测试数据格式
void fun(int a, int b, long *c)
{
*c=a/10+(a%10)*100+(b%10)*10+(b/10)*1000;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
14.
float x1=0.0,x0;
do
{
x0=x1;
x1=cos(x0);
}while(fabs(x0-x1)>1e-6);
return x1;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
15.
double fun(int n)
{
int j=1,i;
double sum=1;
for(i=1;i<=n;i++)
{
j*=i;
sum+=1.0/j;
}
return sum;
}
@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
16.
int fun( STREC *a, STREC *b )
{
int i,max=a[0].s,j=0,k;
for(i=1;i{
if(a[i].s>max)
max=a[i].s;
}
for(i=0;i{
if(a[i].s==max)
{
for(k=0;a[i].num[k];k++)
b[j].num[k]=a[i].num[k];
b[j].num[k]=0;
b[j].s=a[i].s;
j++;
}
}
return j;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
17.
int fun ( int a[][N] )
{
int i,j;
for(i=0;ifor(j=0;j<=i;j++)
a[i][j]=0;

}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
18.
int j=strlen(a),i;
for(i=0;i{
b[i]=a[i];
}
for(;a[i];i++)
b[i]=a[i+1];
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
19.
void fun( char *a )
{
int count,i,len;
for(i=0;a[i];i++)
;
len=i;
for(i=0;a[i]=='*';i++)
;
count=i;
for(i=0;ia[i]=a[i+count];
a[len-count]=0;

}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
20.本题与45题类似
注:本题系统的答案多了一个回车符,所以测试的时候
分数不正确
int fun(char s[],char c)
{
int i=0,j=0;
char t[200];
while(s[i]!='\0')
{
if(s[i]!=c)
t[j]=s[i],j++;
i++;
}
t[j]='\0';
strcpy(s,t);
return 0;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
21.
void fun(char *tt, int pp[])
{
int i,num;
for(i=0;i<26;i++)
pp[i]=0;
while(*tt!='\0')
{
num=*tt-97;
pp[num]++;
tt++;
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
22.
double fun( STREC *h )
{
double ave,sum=0.0;
int i;
h=h->next;
for(i=0;isum+=h->s,h=h->next;
ave=sum/N;
return ave;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
23.
void fun(STREC *a)
{
double sum=0.0;
int i;
for(i=0;isum+=a->s[i];
a->ave=sum/N;
}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
24.
void fun ( int tt[M][N], int pp[N] )
{
int i,j,min;
for(j=0;j{
min=tt[0][j];
for(i=0;iif(tt[i][j]min=tt[i][j];
pp[j]=min;
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
25.
void fun(char *s, char t[])
{
int i=0,j=0,len=strlen(s);
while(s[i]!='\0' && i{
if(s[i]%2==0)
t[j]=s[i],j++;
i+=2;
}
t[j]='\0';
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
26:
int fun(char *s,int num)
{
int i,j;
char tmp;
for(i=1;ifor(j=1;j{
if(s[j] < s[j+1])
{
tmp=s[j];
s[j]=s[j+1];
s[j+1]=tmp;
}
}
return 0;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
27:
int fun(int n)
{
int sum=0,i;
for(i=2;i{
if(n%i == 0)
{
sum+=i;
}
}
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
28:
double fun(int n)
{
double sum=0.0;
int i;
for(i=5;i{
if(i%5==0 || i%9==0)
{
sum+=1/(double)i;
}
}
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
29:
void fun ( int m, int *a , int *n )
{
int i

,sum=0;
for(i=7;i{
if(i%7==0 || i%11==0)
{
a[sum++]=i;
}
}
*n=sum;
}

注:27、28、29题很类似,但应注意 i%j==0 不代表 i 能被 j 整除,因为有可能 i@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
30:
double fun(int n)
{
int i;
double xiang=0.0,sum=0.0;
for(i=1;i{
xiang+=sqrt(i);
sum+=xiang;
}
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
31:
int fun ( int a[][N], int n )
{
int i,j;
for(i=0;ifor(j=0;j<=i;j++)
{
a[i][j]*=n;
}
return 0;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
32:
double fun(int n)
{
double sum=0.0,xiang=1.0;
int i;
for(i=1;i<=n;i++)
{
xiang/=i;
sum+=xiang;
}
return sum;
}

注:30、32两题类似,均考察使用循环求各项相关的多项式的前 n 项和。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
33:
double fun( STREC *a, STREC *b, int *n )
{
double ave=0.0;
int i,sum=0;
for(i=0;i{
ave+=a[i].s;
}
ave/=N;
for(i=0;i{
if(a[i].s{
b[sum++]=a[i];
}
}
*n=sum;
return ave;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
34:
double fun( int m )
{
int i;
double sum=0.0;
for(i=1;i<=m;i++)
{
sum+=log(i);
}
sum=sqrt(sum);
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
35:
void fun(char *s, char t[])
{
int len=strlen(s),i,index=0;
for(i=1;i{
t[index++]=s[i];
}
t[index]=0;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
36:
void fun ( char *ss )
{
int len=strlen(ss),i;
for(i=1;i{
if( ss[i]>='a' && ss[i]<='z' )
{
ss[i]-=32;
}
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
37:
float fun ( float *a , int n )
{
int i;
float ave=0;
for(i=0;i{
ave+=a[i];
}
ave/=n;
return ave;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
38:
void fun(int a, int b, long *c)
{
int a1,a2,b1,b2;
a1=a/10;
a2=a%10;
b1=b/10;
b2=b%10;
*c=a1*1000+b1*100+a2*10+b2;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
39:
int fun(char *str,char *substr)
{
int sum=0,i,len=strlen(str);
for(i=0;i{
if( str[i]==substr[0] && str[i+1]==substr[1] )
{
sum++;
}
}
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
40:
int fun(char *ss, char c)
{
int len=strlen(ss),i,sum=0;
for(i=0;i{
if(ss[i]==c)
{
sum++;
}
}
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
41:
fun ( char *s )
{
int i,len=strlen(s);
char tmp;
for(i=0;i{
tmp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=tmp;
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
42:
double fun(double x[9])
{
int i;
double sum=0.0;
for(i=0;i<8;i++)
{
sum+=sqrt((x[i]+x[i+1

])/2);
}
return sum;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
43:
double fun(double x[10])
{
double ave=0.0,result=0.0;
int i;
for(i=0;i<10;i++)
{
ave+=x[i];
}
ave/=10;
for(i=0;i<10;i++)
{
result+=(x[i]-ave)*(x[i]-ave);
}
result/=10;
result=sqrt(result);
return result;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
44:
void fun(int a, int b, long *c)
{
int a1,a2,b1,b2;
a1=a/10;
a2=a%10;
b1=b/10;
b2=b%10;
*c=a2*1000+b1*100+a1*10+b2;
}

注:38、44两题一样。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
45:
void fun( char *a, char *h,char *p )
{
char * tmp;
for(p--;p>h;p--)
{
if(*p == '*')
{
tmp=p+1;
while(*tmp != 0)
{
*(tmp-1)=*tmp;
tmp++;
}
*(tmp-1)=0;
}
}
}


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
46.
void fun(int a, int b, long *c)
{
*c=b%10*1000+a%10*100+b/10*10+a/10;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
47.
double fun(int n)
{
double sum=0.0;
int i,j;
for(i=3;i<=n;i++)
{
for(j=2;jif(i%j==0)
break;
if(j>=i)
sum+=sqrt(i);
}
return sum;

}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
48.
int fun( int t)
{
int f0=1,f1=1,f;
while(f<=t)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
49.
float fun(int n)
{
float s=0.0;
int i;
for(i=1;i<=n;i++)
s+=2.0/(i*(i+1));
return s;
}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
50.
double fun(double x)
{
double sn=1.0,sn_1,p=1.0;
int i=1;
do
{
sn_1=sn;
p*=(0.5-i+1)*x/i;
sn+=p;
i++;
}while(fabs(sn-sn_1)>=1e-6);
return sn;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
做程序编写题应注意:
(1). 看清楚题目要求,特别是边界问题;
(2). 看清楚函数调用时各形参所代表的意义;
(3). 程序主体一般为循环,注意三种循环的使用区别;
(4). 程序做完了必须编译、链接、运行一次,以防止系统打分疏漏。

有待补充!

相关文档
相关文档 最新文档