c语言上机题库(c语言计算机考试题库上机题库)
一、急求2010 计算机二级C语言上机题库
说明:修改或填空内容在相应位置后用红色标识
1.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:将字符串s中所有的字符'c'删除。
#include<stdio.h>
void main()
{ char s[80];
int i,j;
gets(s);
for(i=j=0;____ 1_ ____;i++) s[i]!=’\0’
if(s[i]!='c')
{ s[j]=s[i];
______2______ j++;}
s[j]='\0';
puts(s);
}
2.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入三个整数,按由小到大的顺序输出这三个数。
#include<stdio.h>
void swap(______1______) int*pa,int*pb
{/*交换两个数的位置*/
int temp;
temp=*pa;
*pa=*pb;
*pb= temp;
}
void main()
{
int a,b,c,temp;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
swap(&a,&b);
if(b>c)
swap(&b,&c);
if(______2______) a>b
swap(&a,&b);
printf("%d,%d,%d",a,b,c);
}
3.在考生目录的Paper子目录下,有Modify.c文件,该文件中“***** N*****”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t*后面。例如:输入"ABCD",则字符串t为"ABCDDCBA"。
# include<stdio.h>
# include<string.h>
void fun(char*s,char*t)
{
int i,sl;
sl=strlen(s);
for(i=0;i<sl;i++)
t[i]=s[i];
for(i=0;i<sl;i++)
/********1********/
t[sl+i]=s[sl-i];改为:t[sl+i]=s[sl-i-1];
/********2********/
t[sl]="\0";改为:t[2*sl]=’\0’;
}
void main()
{
char s[100],t[100];
scanf("%s",s);
fun(s,t);
printf("%s",t);
}
4.在考生目录的Paper子目录下,有Modify.c文件,该文件中“***** N*****”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
例如:输入"abc123+xyz.5",应输出"abcxyz"。
#include<stdio.h>
#include<string.h>
void main()
{
char str[256];
int i,j,k=0,n;
gets(str);
n=strlen(str);
for(i=0;i<n;i++)
/********1********/
if(tolower(str[i])<'a'|| tolower(str[i])>'z')改为:tolower(str[i])>='a'&& tolower(str[i])>='z'
{
/********2********/
str[n]=str[i]; n++;改为:str[k]=str[i]; k++;
}
str[k]='\0';
printf("%s\n",str);
}
5.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f计算代数多项式 1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x
当x=1.7时的值。
#include<stdio.h>
float f(float,float*,int);
void main()
{ float b[5]={1.1,2.2,3.3,4.4,5.5};
printf("%f\n",f(1.7,b,5));
}
float f( _______1________) float x,float a[],int n
{ float y=a[0],t=1; int i;
for(i=1;i<n;i++){ t=t*x; y=y+a[i]*t;}
_____2_____ return y;
}
6.在考生目录的Paper子目录下,有Modify.c文件,该文件中“***** N*****”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符串形式输出。例如:输入十进制数79,将输出十六进制4f。
# include<stdio.h>
# include<string.h>
char trans(int x)
{
if(x<10) return'0'+x;
/********1********/
else return'a'+x;改为:else return'a'+x-10;
}
int DtoH(int n,char*str)
{
int i=0;
while(n!=0)
{
str[i]=trans(n%16);
/********2********/
n%=16;改为:n/=16;
i++;}
return i-1;
}
void main()
{
int i,k,n;
char*str;
scanf("%d",&n);
k=DtoH(n,str);
for(i=0;i<=k;i++) printf("%c",str[k-i]);
}
7.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。
#include<stdio.h>
_______1______ long f(int n);
void main()
{
printf("%ld\n",f(30));
}
long f(int n)
{
if( ______2______) n==1||n==2
return 1;
else
return f(n-1)+f(n-2);
}
8.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入1个整数后,输出该数的位数(若输入3214则输出4,输入-23156则输出5)。
#include<stdio.h>
void main()
{ int n,k=0;
scanf("%d",&n);
while( _____1_____) n!=0
{
k++;
_____2_____; n/=10
}
printf("%d\n",k);
}
9.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f,从字符串中删除所有的数字字符。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void f(char*s)
{ int i=0;
while(s[i]!='\0'){
if(isdigit(s[i])) ____1____(s+i,s+i+1); strcpy
___2___ i++;} else
}
void main()
{ char str[80];
gets(str); f(str); puts(str);
}
10.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:分别统计字符串中英文字母、数字和其他字符出现的次数。
#include<stdio.h>
#include<ctype.h>
void main()
{ char a[80]; int n[3]={0},i; gets(a);
________1________ for(i=0;a[i]!=’\0’;i++)
{if(tolower(a[i])>='a'&& tolower(a[i])<='z')/*统计字母个数*/
n[0]++;
else if(________2________)/*统计数字个数*/ a[i])>='0'&& a[i]<='9'
n[1]++;
else
n[2]++;
}
for(i=0;i<3;i++) printf("%d\n",n[i]);
}
11.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:运行时若输入a、n分别为3、6,则输出下列表达式的值:
3+33+333+3333+33333+333333
#include<stdio.h>
void main()
{ int i,a,n; long t=0;
/********* 1*******/
s=0;改为:long s=0;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++){
/******* 2******/
t=t*10+i;改为:t=t*10+1;
s=s+t;
}
s=s*a;
printf("%ld\n",s);
}
12.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include<stdio.h>
#include<math.h>
void main()
{
int n,s=0;
scanf("%d",&n);
______ 1 ______n=n>0?n:-n;
while(n!=0){
______ 2 ______s+=n%10;
n=n/10;
}
printf("%d\n",s);
}
13.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:
找出100~999之间所有的Armstrong数。所谓Armstrong数是指这个3位数各位上数字的立方和等于自身。例如:371=3*3*3+7*7*7+1*1*1,那么371就是Armstrong数。
#include<stdio.h>
#include<math.h>
void main()
{
int i,a,b,c;
for(i=100;i<=999;i++)
{
a=i/100;
_______1_______ b=(i/10)%10;
c=i%10;
if(________2________) i==a*a*a+b*b*b+c*c*c
printf("%d is a Armstrong number!\n",i);
}
}
14.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入的一个小写字母,将字母循环后移5个位置后输出,如’a’变成’f’,‘w’变成’b’。
#include<stdio.h>
void main()
{
char c;
c=getchar();
if(______1______) c>='a'&& c<='u'
c=c+5;
else
if(c>='v'&& c<='z')
______2______ c=c-21;
putchar(c);
}
15.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。
#include<stdio.h>
#include<math.h>
#define f(x) x*x-5*x+sin(x)
void main()
{ int x; float max;
______1______ max=f(1);
for(x=2;x<=10;x++)
______2______ if(f(x)>max)max=f(x);
printf("%f\n",max);
}
16.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f,将1个整数首尾倒置,若程序输入12345,则输出54321;
若程序输入-34567,则输出-76543。
#include<stdio.h>
#include<math.h>
long f(long n)
{ long m,y=0; m=fabs(n);
while(m!=0){
y=y*10+m%10;
____1____ m/=10;
}
if(n>=0) return y;
else _____2_____ return-y;
}
void main()
{
printf("%ld\t",f(12345)); printf("%ld\n",f(-34567));
}
17.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:求出a中各相邻两个元素的和,并将这些和存放在数组 b中,按每行3个元素的形式输出。例如: b[1]=a[1]+a[0],…………,b[9]=a[9]+a[8]。
#include<stdio.h>
void main()
{
int a[10],b[10],i;
printf("\nInput 10 numbers:");
for(i=0; i<10;i++)/*数组输入*/
scanf("%d",&a[i]);
for(i=1; i<10; i++)
b[i]=______1______; b[i]=a[i]+a[i-1]/*计算b数组中的元素*/
for(i=1; i<10; i++)
{
printf("%3d",b[i]);
if(______2______) printf("\n"); i%3==0/*每行打印3个数据*/
}
}
18.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。
#include<stdio.h>
void main()
{ int m,n,k;
while(scanf("%d%d",&m,&n), _______1______); m<=0||n<=0
for( ____2____; n%k!=0||m%k!=0; k--); k=m>n?n:m
printf("%d\n",k);
}
19.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入x和正数eps,计算多项式1-x+x*x/2!-x*x*x/3!+...的和直到末项的绝对值小于eps为止。
#include<stdio.h>
#include<math.h>
void main()
{ float x,eps,s=1,t=1,i=1;
scanf("%f%f",&x,&eps);
do{
/***** 1*****/
t=t*x/++i;改为:t=-t*x/i++;
s+=t;
/***** 2*****/
} while(fabs(t)<eps)改为:while(fabs(t)>=eps);
printf("%f\n",s);
}
*20.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:用选择法对10个整数按升序排序。
#include<stdio.h>
#define N 10
void main()
{
int i,j,min,temp;
int a[N]={5,4,3,2,1,9,8,7,6,0};
printf("\nThe array is:\n");/*输出数组元素*/
for(i=0;i<N;i++)
printf("%5d",a[i]);
for(i=0;i<N-1;i++)/*排序操作*/
{
min= i;
for(j=i+1; j<N; j++)
/****** 1******/
if(a[min]<=a[j]) min=j;改为:if(a[min]<=a[j]){
/****** 2******/
temp=a[min]; a[min]=a[j]; a[j]=temp;/*数据交换*/改为:temp=a[min]; a[min]=a[j]; a[j]=temp;}
}
printf("\nThe sorted numbers:\n");/*输出排序结果*/
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
}
*27.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f,求二维数组a中全体元素之和。
#include<stdio.h>
float f(_______1______) float**x,int m,int n
{ float y=0; int i,j;
for(i=0;i<m;i++) for(j=0;j<n;j++) y=y+*(*(x+i)+j);
return y;
}
void main()
{ float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*b[3];
int i;
for(i=0;i<3;i++)_______2______ b[i]=a[i];
printf("%.2f\n",f(b,3,4));
}
2、在考生文件夹的Paper子文件夹下已有Modify1.c文件。
该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充。
(注意:不得加行、减行、加句、减句,否则后果自负)。
程序功能:该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生
的信息。
#include<stdio.h>
struct STUDENT
{
char name[16];
int math;
int english;
int computer;
int average;
};
void GetAverage(struct STUDENT*pst)/*计算平均成绩*/
{
int sum=0;
sum= ______1______; pst-> math+ pst-> english+ pst-> computer
pst->average= sum/3;
}
void main()
{
int i;
struct STUDENT st[4]={{"Jessica",98,95,90},{"Mike",80,80,90},
{"Linda",87,76,70},{"Peter",90,100,99}};
for(i=0;i<4;i++)
{
GetAverage(______2______);&st[i]
}
printf("Name\tMath\tEnglish\tCompu\tAverage\n");
for(i=0;i<4;i++)
{
printf("%s\t%d\t%d\t%d\t%d\n",st[i].name,st[i].math,st[i].english,
st[i].computer,st[i].average);
}
}
程序调试题(2)
说明:修改或填空内容在相应位置后用红色标识
*21.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{ int n,i;
/***** 1*****/
char str;改为: char*str;
scanf("%d\n",&n); str=(char*)malloc(n); gets(str);
/***** 2*****/
for(i=1;i<strlen(str);i++)改为:for(i=0;i<strlen(str);i++)
if(str[i]>='a'&& str[i]<='z') str[i]=str[i]-('a'-'A');
puts(str);
}
*22.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:将一个char型数的高4位和低4位分离,分别输出,如22(二进制:00010110)输出为1和6。
#include<stdio.h>
void main()
{
char a,b1,b2,c;
scanf("%d",&a);
/****** 1******/
b1=a<<4;改为:b1=a>>4;/*b1存放高4位*/
c=~(~0<<4);
/****** 2******/
b2=a|c;改为:b2=a&c;/*b2存放低4位*/
printf("%d,%d",b1,b2);
}
*23.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f用以求1元2次方程 x*x+5*x-2=0的实根。
#include<stdio.h>
#include<math.h>
int f(_______1______) float*x1,float*x2, float a, float b, float c
{ if(b*b-4*a*c<0) return 1;
*x1=(-b+sqrt(b*b-4*a*c))/2/a;
*x2=(-b-sqrt(b*b-4*a*c))/2/a;
_______2______
}
void main()
{ float u1,u2; float a=1,b=5,c=-2;
if(f(_______3______)==1)&u1,&u2,a,b,c
printf("实数范围内无解\n");
else printf("%.2f%.2f\n",u1,u2);
}
*24.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:函数f将数组循环左移k个元素,数组x[7]调用函数f后的输出结果为:4 5 6 7 1 2 3
#include<stdio.h>
void f(int*a,int n,int k)
{ int i,j,t;
for(i=0;i<k;i++){
_______1______ t=a[0];
for(_______2______) j=1;j<n-1;j++
a[j-1]=a[j];
a[n-1]=t;
}
}
void main()
{ int i,x[7]={1,2,3,4,5,6,7};
f(x,7,3);
for(i=0;i<7;i++) printf("%5d",x[i]); printf("\n");
}
25.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:运行时输入n,输出n各位数字之和(如n=1308则输出12,n=-3204则输出9)。
#include<stdio.h>
#include<math.h>
void main()
{ int n,s=0;
scanf("%d",&n);
n=fabs(n);
/******** 1*******/
while(n<0){改为:while(n>0){
s=s+n%10;
/******** 2******/
n=n%10;改为:n=n/10;
}
printf("%d\n",s);
}
26.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入整数n(n>0),求m使得 2的m次方小于或等于n、2的m+1次方大于或等于n。
#include<stdio.h>
void main()
{ int m=0,t=1,n;
while(_______1______); scanf(“%d’,&n),n<=0
while(!(t<=n&&t*2>=n)){
_______2______ t=t*2;
m++;
}
printf("%d\n",m);
}
*27.在考生目录的Paper子目录下,有Modify.c文件,该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f,求二维数组a中全体元素之和。
#include<stdio.h>
float f(_______1______) float**x,int m,int n
{ float y=0; int i,j;
for(i=0;i<m;i++) for(j=0;j<n;j++) y=y+*(*(x+i)+j);
return y;
}
void main()
{ float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*b[3];
int i;
for(i=0;i<3;i++)_______2______ b[i]=a[i];
printf("%.2f\n",f(b,3,4));
}
28.在考生目录的Paper子目录下,有Modify.c文件,该文件中“/***** N*****/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void main()
{
int i,n;
/***** 1*****/
struct axy{ float x,y;} a;改为:struct axy{ float x,y;}*a;
scanf("%d",&n);
a=(float*) malloc(n*2*sizeof(float));
for(i=0;i<n;i++)
/***** 2*****/
scanf("%f%f",a[i].x,a[i].y);改为:scanf("%f%f",&a[i].x,&a[i].y);
for(i=0;i<n;i++)
if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)
printf("%f,%f\n",a[i].x,a[i].y);
}
增加新题(程序调试题):
1、在考生文件夹的Paper子文件夹下已有Modify1.c文件。
该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充。
(注意:不得加行、减行、加句、减句,否则后果自负)。
程序功能:调用函数f,去除数组中的负数,输入数组x[7],输出结果为:1 3 4 6
#include<stdio.h>
void f(int*a,int*m)
{ int i,j;
for(i=0;i<*m;i++)
if(a[i]<0){
for(j=i--;j<*m-1;j++) a[j]=a[j+1];
_____1_____;(*m)--
}
}
void main()
{ int i,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______; f(x,&n)
for(i=0;i<n;i++) printf("%5d",x[i]);
printf("\n");
}
2、在考生文件夹的Paper子文件夹下已有Modify1.c文件。
该文件中"____ N ____"是根据程序功能需要填充部分,请完成程序填充。
(注意:不得加行、减行、加句、减句,否则后果自负)。
程序功能:该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生
的信息。
#include<stdio.h>
struct STUDENT
{
char name[16];
int math;
int english;
int computer;
int average;
};
void GetAverage(struct STUDENT*pst)/*计算平均成绩*/
{
int sum=0;
sum= ______1______; pst-> math+ pst-> english+ pst-> computer
pst->average= sum/3;
}
void main()
{
int i;
struct STUDENT st[4]={{"Jessica",98,95,90},{"Mike",80,80,90},
{"Linda",87,76,70},{"Peter",90,100,99}};
for(i=0;i<4;i++)
{
GetAverage(______2______);&st[i]
}
printf("Name\tMath\tEnglish\tCompu\tAverage\n");
for(i=0;i<4;i++)
{
printf("%s\t%d\t%d\t%d\t%d\n",st[i].name,st[i].math,st[i].english,
st[i].computer,st[i].average);
}
}
3、在考生文件夹的Paper子文件夹下已有Modify1.c文件。
该文件中“/***** N*****/”的下一行中有错误,请改正。
(注意:不得加行、减行、加句、减句,否则后果自负)。
程序功能:运行时输入n,输出n的所有质数因子。
(例如:n=13860,则输出2、2、3、3、5、7、11)
#include<stdio.h>
void main()
{ int n,i;
scanf("%d",&n);
/****** 1******/
i=1;改为: i=2;
while(n>1)
if(n%i==0){
printf("%d\t",i);
n/=i;
}
else
/******** 2*******/
n++;改为: i++;
}
二、2015年计算机二级《C语言》考试上机测试选择题
一、选择题(每小题1分,共40小题,共40分)
1.算法的空间复杂度是指()。
A.算法程序的长度
B.算法程序中=的指令条数
C.算法程序所占的存储空间
D.算法执行过程中所需要的存储空间
2.下列叙述中正确的是()。
A.一个逻辑数据结构只能有一种存储结构
B.逻辑结构属于线性结构,存储结构属于非线性结构
C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
3.简单的交换排序方法是()。
A.快速排序
B.选择排序
C.堆排序
D.冒泡排序
4.关于结构化程序设计原则和方法的描述错误的是()。
A.选用的结构只准许有一个入口和一个出口
B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现
C.不允许使用GOT0语句
D.语言中若没有控制结构,应该采用前后一致的方法来模拟
5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和()。
A.可重用性差
B.安全性差
C.非持久性
D.冗余性
6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是()。
A.模拟现实世界中不同事物之间的联系
B.强调模拟现实世界中的算法而不强调概念
C.使用现实世界的概念抽象地思考问题从而自然地解决问题
D.不强调模拟现实世界中的算法而强调概念
7.对如下二叉树进行后序遍历的结果为()。
2015年计算机二级《C语言》考试上机测试题(1)
A.ABCDEF
B.DBEAFC
C.ABDECF
D.DEBFCA
8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指()。
A.模块间的关系
B.系统结构部件转换成软件的过程描述
C.软件层次结构
D.软件开发过程
9.两个或两个以上模块之间关联的紧密程度称为()。
A.耦合度
B.内聚度
C.复杂度
D.数据传输特性
10.下列描述错误的是()。
A.继承分为多重继承和单继承
B.对象之间的通信靠传递消息来实现
C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征
D.类是具有共同属性、共同方法的对象的集合
11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。
A.DB包含DBS和DBMS
B.DBMS包含DB和DBS
C.DBS包含DB和DBMS
D.没有任何关系
12.下列合法的声明语句是()。
A.int_abc=50;
B.double int=3+5e2.5;
C.long do=1L:
D.float 3_asd=3e-3;
13.设x、Y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是()。
A.x&&Y
B.x<=Y
C.x‖y+z&&y-z
D.!((x14.若ch为char型变量,k为int型变量(已知字符a的ASCIl码是97),则执行下列语句后输出的结果为()。
ch=’b’;
k=10:
printf("%X,%o,",ch,ch,k);
printf("k=%%d\n",k);
A.因变量类型与格式描述符的类型不匹配,输出无定值
B.输出项与格式描述符个数不符,输出为0值或不定值
C.62,142,k一%d
D.62,142,k一%l0
15.有下列程序:、
fun(int X,int y){return(x+y);)
main()
{ int a=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d\n",sum);
}
执行后的输出结果是()。
A.6
B.7
C.8
D.9
16.假定x和Y为double型,则表达式x=2,y—x+3/2的值是()。
A.3.500000
B.3
C.2.000000
D.3.000000
17.有如下程序:
main()
{int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case l:a++;
case 2:a++;b++;
)
printf("a=%d,b=%d\n",a,b);
)
该程序的输出结果是()。
A.a=2,b=1
B.a=1,b=1
C.a=1,b=0
D.a=2,b=2
18.下列程序的输出结果是()。
main()
{int i=1,j=2,k=3;
if(i++==1&&(++j==3==‖k++==3))
printf("%d%d%d\n",i,J,k);
)
A.1 2 3
B.2 3 4
C.2 2 3
D.2 3 3
19.下列程序的输出结果是()。
#include
main()
{ int a=0,i;
for(i=1;i<5;i++)
{ switch(i)
{ case 0:
case 3:a+=1;
case l:
case 2:a+=2;
default:a+=3;
)
printf("%d",i);
)
A.19 B.1 C.6 D.8
20.有以下程序:
main()
{int X,i;
for(i=1;i<=50;i++)
{x=i;
if(X%2=O)
if(x%3=O)
if(X%7=0).
printf("%d,i)";
)
)
输出结果是()。
A.28
B.27
C.42
D.41
21.以下程序的输出结果是()。
main()
{int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf("%d\n",s);
}
A.18
B.19
C.20
D.21
22.有下列程序:
main()
{ int k=5;
while(--k) printf("%d",k=1);
printf("/n");
)
执行后的输出结果是()。
A.1
B.2
C.4
D.死循环
23.若有定义:“int a[2][3];”,则对a数组的第i行第J列元素的正确引用为()。
A.*(*(a+i)+j)
B.(a+i)[j]
C.*(a+i+j)
D.*(a+i)+j
24.下列能正确进行字符串赋值的是()。
A.char s[5]={"ABCDE"};
B.char s[5]={’A’,’B’,’C’,’D’,’E’};、
C.char*S;S="ABCDE";
D.char*s;printf("%《",s);
25.现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。
2015年计算机二级《C语言》考试上机测试题(1)
struct node
{har data;
struct node*next;)*P,*q,*r;
现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是()。
A.q-:>next=r->next;p--:>next=r;rm:>next=q;
B.q-:>next=r;q->next=r->next;r->next=q;
C.q-:>next=r->next;r->next=q;p->next=r;
D.q-:>next=q;p->next=r;q->next=r->next;
26.有下列程序:
main()
{int i,j,x=0;
for(i=0,i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2)continue;
x++:
)
x++:
}
printf("x=%d\n"x);
}
程序执行后的输出结果是()。
A.x=4
B.x=8
C.x=6
D.x=12
27.有下列程序:
int funl(double a){return a*=a;}、
int fun2(double x,double y)
{double a=0,b=0;
a=funl(x);b=funl(y);return(int)(a+b);
)
main()
{double w;w=fun2(1.1,2.0),……}
程序执行后变量w中的值是()。、
A.5.21 B.5 C.5.0 D.0.0
28.有下列程序:
main()
{int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是()。
A.45
B.20
C.25
D.36
29.有下列程序:
int fun(int n)
{if(n==1))return l;
else
return(n+fun(n-1)):
}
main()
{ int x;
seanf("%d",&x);x=fun(x);printf("%d\n",x);
}
执行程序时,给变量x输入l0,程序的输出结果是()。
A.55
B.54
C.65
D.45
30.有下列程序:
int fun(int x[],int n)
{ static int sum=0,i;
for(i=0;i return sum;
}
main()
{int a[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;
s=fun(a,5)+fun(b,4);printf("%d\n",s);
程序执行后的输出结果是()。、
A.45
B.50
C.60
D.55
31.有下列程序:
main()
f char*P[]={"3697","2584");
int i,j;long num=0;
for(i=0;i<2;i++)
{j=0;
while(p[i][j]!=’\0’)
{if((p[i][j]-t\0’)%2)num=10*num+p[j][j]-’0’;
j+=2;
)
)
printf("%d\n",num);
)
程序执行后的输出结果是()。
A.35 B.37 C.39 D.3975
32.以下程序的输出结果是()。
main()
{ char st[20]="hell0\O\t\\\”;
printf("%d%d\n",strlen(st),sizeof(st));
}
A.9 9
B.5 20
C.13 20
D.20 20
33.若有下的定义:"int t[3][2];",能正确表示t数组元素地址的表达式是()。
A.&t[3][2]
B.t[3]
C.t[l]
D.t[2][2]
34.函数fseek(pf,OL,SEEK_END)中的SEEK_END代表的起始点是()。
A.文件开始
B.文件末尾
C.文件当前位置
D.以上都不对
35.下述程序的输出结果是()。
#include
main()
{int i;
for(i=1;i<=10;i++)
{if(i*i>=20)&&(i*i<=lOO))
break;
}
printf("%d\n",i*i);
)
A.49
B.36
C.25
D.64
36.若有定义“int b[8],*p=b;”,则p+6表示()。
A.数组元素b[6]的值
B.数组元素b[6]的地址
C.数组元素b[7]的地址
D.数组元素b[0]的值加上6
37.设变量已正确定义,则以下能正确计算f=n!的程序是()。
A.f=0; for(i=1;i<=n;i++)f*=i;
B.f=1;for(i=1;iC.f=1;for(i=n;i>1;i++)f*=i;
D.f=1;for(i=n;i>=2;i--)f*=i;
38.下述程序执行的输出结果是()。
#include
main()
{char a[2][4];,
strcpy(a。"are");strcpy(a[1],"you");
a[o][3]=’&’;
printf("%s\n",a);
)
A.are&you
B.you
C.are
D.&
39.设x=011050,则x=x&01252的值是()。
A.0000001000101000
B.1111110100011001
C.0000001011100010
D.1100000000101000
40.在“文件包含,,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是()。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索
C.仅仅搜索源程序所在目录
D.仅仅搜索当前目录
三、计算机二级C语言100套上机填空题和改错题
南开二级C语言上机100题
1、改错题1
下列给定程序的功能是:读入一个整数(2<=k《=10000》,打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出2、3、5、7、11。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
*******************************
IsPrime(int n);——————去掉分号
{int i,m;
m=1;
for( i=2; i<n; i++)
******************************
if!(n%i)——————if(!(n%i))
{ m=0; break;}
return(m);
}
main()
{ int j,k;
clrscr();
printf("nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf("nnThe prime factor(s) of%d is(are):",k);
for(j=2;j<=k;j++)
if((!(k%j))&&(IsPrime(j)) printf("n%4d",j);
printf("n");
)
2、编程题1
m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值行会,将低于平均分的分数放在below所指的数组中。
例如,但score数组的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该时4,below中的数据应为10、20、30、40。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
int fun(int score[],int m, int below[])
{
——————int i,k=0;float aver=0;
for(i=0;i<m;i++)
aver+=(score[i]);
aver/=m;
for(i=0;i<m;i++)
if(score[i]<aver)
{below[k]=score[i];
k++;
retern(k);}
}
main()
{int i, n, below[9];
int score [9]={10,20,30,40,50,60,70,80,90};
clrscr();
n=fun(score,9,below);
printf("nBelow the average score are:");
for(i=0;i<n;i++) printf("%d",below[i]);
}
3、改错2
下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或等于的字符一次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串为:aBcdeFgh。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<studio.h>
#include<string.h>
****************************************
void; fun(char*p,char*q,char*c)——去分号
***************************************
{int k=1;——1改为0
***************************************
while(*p!=*q)——!=改为||
***************************************
{if(*p<*q) c[k]=*q;——小于号改为小于等于
else c[k]=*p;
if(*p) p++;
if(*q) q++;
k++;
}
}
main()
{char a[10]="aBCDeFgh",b[10]="ABcd",c[80]={''};
fun(a,b,c);
printf("The string a:"); puts(a);
printf("The string b:"); puts(b);
printf("The result:"); puts(c);
}
4、改错3
下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<stdio.h>
#include<conio.h>
void fun(char*s)
{ int i,j;
for(i=0,j=0;s[i]!='\0';i++)
****************************************
if(s[i]>='0'&& s[i]<='9')
s[j]=s[i];——————j改为j++
***************************************
s[j]="\0";——————s[j]='\0'
}
main()
{char item[80];
clrscr();
printf("\nEnter a string:");gets(item);
printf("\n\nThe string is:\%s\n",item);
fun(item);
printf("\n\nThe string of changing is:\%s\n",item);
}
5、改错4
下列给定程序中,函数fun的功能是:分别铜级字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBb123CCccccd,则应该输出结果:upper=6,lower=8。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<conio.h>
#include<stdio.h>
**********************************
void fun(char*s,int a, int b)————a应为*a,b应为*b
{ while(*s)
{ if(*s>='A'&&*s<='Z')
***********************************
a++;————(*a)++;
if(*s>='a'&&*s<='z')
************************************
b++;————(*b)++;
s++;
}
}
main()
{ char s[100];int upper=0,lower=0;
clrscr();
printf("nPlease a string:");gets(s);
fun(s,&upper,&lower);
printf("n upper=%d lower=%dn",upper,lower);
}
6、改错5
假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<stdio.h>
#define N 20
fun(int*a,int n, int x)
{int p=0,i;
a[n]=x;
while(x!=a[p])
p=p+1;
if(p==n) return-1;
else
{for(i=p;i<n;i++)
******************************************
a[i+1]=a[i];————a[i]=a[i+1];
return n-1;
}
}
main()
{int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
n=10;
printf("The original data:n");
for(i=0;i<n;i++) printf("%5d",w[i]);
printf("nInput x(to delete):");scanf("%d",&x);
printf("Delete:%dn",x);
n=fun(w,n,x);
if(n==-1) printf("***Nor be found!***nn");
else
{printf("The data after deleted:n");
for(i=0,i<n;i++) printf("%5d",w[i]);printf("nn");
}
}
7、改错6
下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。t=1-1/2×2-1/3×3-…-1/m×m
例如,若m中的值为5,则应输出:0.536389。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
double fun(int m)
{ double y=1.0;
int i;
***************************************
for(i=2;i<m;i++)————“<”改为“<=”
***************************************
y-=1/(i*i);————“1”改为“1.0”
return(y);
}
main()
{int n=5;
clrscr();
printf("\nRhe result is%1f\n",fun(n));
}
8、改错7
下列给定程序中,函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define N 20
void fun(int a[],int n)
{ int i,j,t,p;
for(j=0;j<n-1;j++)
***************************
{p=j——加上“;”
for(i=j;i,n;i++)——j改为j+1
if(a[i]<a[p])
*********************************
p=j;——j改为i
t=a[p];a[p]=a[j];a[j]=t;
}
}
main()
{
int a[N]={9,6,8,3,-1},i,m=5;
printf("排序前的数据:");
for(i=0;i<m;i++) printf("%d",a[i]);printf("\n");
fun(a,m);
printf("排序后的数据:");
for(i=0;i<m;i++) printf("%d",a[i]);printf("\n");
}
9、改错8(2004.7.27)
下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为eABCDFGH。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
fun(char*p)
{ char max,*q;int i=0;
max=p[i];
while(p[i]!=0)
{ if(max<p[i])
{max=p[i];
*******************************
p=q+i;——改为q=p+i;
}
i++;
}
******************************
while(q<p)——q<p改为q>p
{*q=*(q-1);
q--;
}
p[0]=max;
}
main()
{char str[80];
printf("Enter a string:");gets(Str);
printf("\nThe original string:");puts(Str);
fun(str);
printf("\nThe string agter moving:");puts(str);ptintf("\n\n");
}
10、改错9(2004.7.27)
下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:
80.5 60 72 90.5 98 51.5 88 64
则低于平均分的学生人数为4(平均分为:75.5625)。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
#define N 20
int fun(float*s,int n,float*aver)
{float ave,t=0.0;
int count=0,k,i;
for(k=0;k<n;k++)
*******************************
t=s[k];——t+=s[k];
ave=t/n;
for(i=0;i<n;i++)
if(s[i]<ave) count++;
******************************
*aver=&ave;——去掉&
return count;
}
main()
{float s[30],aver;
int m,i;
clrscr();
printf("nPlease enter m:";scanf("%d",&m);
printf("nPlease enter%d mark:n",m);
for(i=0;i<m;i++) scanf("%f",s+i);
printf("nThe number of students:%dn",fun(s,m,&aver));
printf("Ave=%fn",aver);
)
11、改错10(2004.8.1)
下列给定程序中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符产中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果,在2
所指的数组中内容应为99cd99f99。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
int fun(char*s, char*t1,char*t2,char*w)
{
int i; char*p,*r,*a;
strcpy(w,s);
while(*w)
{p=w;r=t1;
********************************************
while(r)——r改为*r
if(*r==*p){r++;p++}
else break;
if(*r=='')
{a=w;r=t2;
*******************************************
while(*r){*a=*r;a++;r++}——改为while(*r){*a=*r;a++;r++;}
w+=strlen(t2);
}
else w++;
}
}
main()
{
char s[100],t1[100],t2[100],w[100];
clrscr();
printf("nPlease enter string S:");scanf("%s",s);
printf("nPlease enter string t1:");scanf("%s",t1);
printf("nPlease enter string t2:");scanf("%s",t2);
if(strlen(t1)==strlen(t2))
{
printf("nThe result is:%sn",w);
}
else printf("Error:strlen(t1)!=strlen(t2)n");
}
12、改错11(2004.8.1)
给定程序MODI1.C中,fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。
请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
int fun()
{
int a [3] [3], sum;
int i, j;
***********************************
_____;——sum= 1;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
*****************************************
scanf(〃%d〃 a [i] [j]);——scanf("%d",&a[i][j]);
}
for(i=0; i<3; i++)
sum=sum*a[i] [i];
printf(〃Sum=%dn〃, sum);
}
main()
{ fun();}
13、改错12(8.1)
下列程序的功能是:读入一个整数 k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include〃conio.h〃
#include〃stdio.h〃
************************************************
IsPrime( int n);——IsPrime(int n)
{ int i, m;
m= 1;
for( i= 2; i< n/ i++)
*********************************************
if!( n%i)——if(!(n%i))
{ m=0; break;}
return( m);
}
main()
{ int j, k;
clrscr();
printf(〃nPease enter an integer number between 2 and 10000:〃); scanf(〃%d〃,&k);
printf(〃nn The prime factor(s) of% d is( are):〃, k);
for( j= 2; j<= k; j++)
if((! k%j))&&( IsPrime( j))} printf(〃n% 4d〃, j);
printf(〃n〃);
}
14、改错13(8.4)
下列程序中,fun函数的功能是:根据形参m,计算如下公式的值。
t=1+ 1/2+ 1/3+ 1/4+…+ 1/m
例如,若输入5,则应输出2.283333。
请改正程序中的语法错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
double fun(int m)
{
double t=1.0;
int i;
for(i=2;i<=m;i++)
*******************************************
t+=1.0/k;——k改为i
*********************************************
____________;——填return t;
}
main()
{
int m;
clrscr();
printf(“nPlease enter 1 integer number:”);
scanf(“%d”,&m);
printf(“nThe result is%1fn”,fun(m));
}
15、改错14(8.4)
下列程序中,fun和funx函数的功能是:
用二分法求方程2x×x×x-4x×x+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根为2.000。
请改正程序中的语法错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<math.h>
double funx(double x)
{
return(2*x*x*x-4*x*x+3*x-6);
}
double fun(double m, double n)
{
**************************************
int r;——改为double r;
r=(m+n)/2;
**********************************
while(fabs(n-m)<0.001)——"<"改为">="
{if(funx(r)*funx(n)<0 m=r;
else n=r;
r=(m+n)/2;
)
return r;
)
main()
{
double m,n,root;
printf("Enter m n:n");scanf("%1f%1f",&m,&n);
root=fun(m,n);
printf("root=%6.3fn",root);
}
16、改错15(8.5)
下列给定程序中,函数fun的功能是:判断字符ch是否与str所指串中的某个字符相同;若相同,则什么也不做,若不同,则将器插在串的最后。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<conio.h>
#include<stdio.h>
#include<string.h>
**********************************
void fun(char str, char ch)------------------------1
{ while(*str&&*str!=ch) str++;
**********************************
if(*str==ch)------------------------------------2
{ str[0]=ch;
*********************************
str[1]='0';------------------------------------3
}
}
main()
{char s[81],c;
clrscr();
printf("nPlease enter a string:n");gets(s)
printf("nPlease enter the character to search:");
c=getchar();
fun(s,c);
printf("nThe result is%sn",s);
}
15题Answer:
1. void fun(char*str, char ch)
2. if(*str=='
17、改错16(8.5)
下列给定程序中,函数Creatlink的功能是:创建带头结点的单项链表,并为各结点数据域赋0到m-1的值。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct aa
{ int data;
struct aa*next;
}NODE;
NODE*Creatlink(int n, int m)
{NODE*h=Null,*p,*s;
int i;
s=(NODE*)malloc(sizeof(NODE));
********************************************
h=p;-------------------------------------1
p->next=NULL;
for(i=1;i<=n;i++)
{s=(NODE*)malloc(sizeof(NODE));
********************************************
s->data=rand()%m;-----------------------2
s->next=p->next;
p->next=s;
p=p->next;
}
********************************************
return p;--------------------------------3
}
outlink(NODE*h)
{NODE*p;
p=h->next;
printf("nnTHE LIST:nn HEAD");
while(p)
{printf("->%d",p->data);
p=p->next;
}
printf("n");
}
main()
{ NODE*head;
clrscr();
head=Creatlink(8,22);
outlink(head);
}
16题Answer:
1. h=p=s;
2. s->data=rand()%(m-1);
3. return h;
18、改错17(8.5)
下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<conio.h>
#include<stdio.h>
int fun(int k)
{int m=0, mc=0,j;
while((k>=2)&&(mc<10))
*********************************
{if((k%13=0)||(k%17=0))-------------------1
{m=m+k;mc++;}
k--;
}
return m;
**********************************
_____________-------------------------------2
main()
{clrscr();
printf("%dn",fun(500));
}
17题Answer:
1. if((k%13==0)||(k%17==0))
2.}
19、改错18(8.5)
下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<conio.h>
#include<stdio.h>
********************************
void fun(int a,b)--------------------------1
{int t;
*******************************
t=b;b=a;a=t;-------------------------------2
}
main()
{int a,b;
clrscr();
printf("Enter a,b:");scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%d b=%dn",a,b);
}
18题Answer:
1. void fun(int*a,int*b)
2. t=*b;*b=*a;*a=t;
20、改错19(8.5)
下列给定程序中,函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,一次构成一个新数放在t中。例如,当s中的数为7654321时,t是的数为642。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<conio.h>
#include<stdio.h>
********************************
void fun(long s, long t)--------------------------1
{long sl=10;
s/=10;
*t=s%10;
****************************
while(s<0)--------------------------------------2
{s=s/100;
*t=s%10*sl+*t;
sl=sl*10;
}
}
main()
{long s,t;
clrscr();
printf("nPlease enter s:");scanf("%ld",&s);
fun(s,&t);
printf("The result is:%ldn",t);
}
19题Answer:
1. void fun(long s, long*t)
2. while(s>0)
21、改错20(8.5)
N个有序整数数列已放在一堆数组中,下列给定程序中,函数fun的功能是:利用折半查找算法找整数m再数组中的位置。若找到,则返回其下标值;反之,则返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
试题程序
#include<stdio.h>
#define N 10
************************************
void fun(int a[],int m)--------------------------1
{int low=0,high=N-1,mid;
while(low<=high)
{mid=(low+high)/2;
if(m<a[mid])
high=mid-1;
***************************************
else if(m>=a[mid])----------------------------2
low=mid+1;
else return(mid);
}
return(-1);
}
main()
{int i,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;
printf("a数组中的数据如下:");
for(i=0;i<N;i++) printf("%d",a[i]);
printf("Enter m:");scanf("%d",&m);
k=fun(a,m);
if(k>=0) printf("m=%d,index=%d\n",m,k);
else printf("Not be found!\n");
}
20题Answer:
1. int fun(int a[],int m)
2. else if(m>a[mid])