搜档网
当前位置:搜档网 › 2级C语言机考-改错题试题(描述)

2级C语言机考-改错题试题(描述)

2级C语言机考-改错题试题(描述)
2级C语言机考-改错题试题(描述)

第一部分改错题

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★1.下列给定程序的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。

请改正程序中的错误,使程序能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include "conio.h"

#include "stdio.h"

/********found********/

IsPrime ( int n ) ;

{

int i, m;

m=1;

/********found********/

for(i=2;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("\n\nThe prime factor(s) of %d is(are):",k);

for(j=2;j

if((!(k%j))&&(IsPrime(j)))

printf(" %4d,",j);

printf("\n");

}

主要算法:涉及知识点:试题难度:★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★2.下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为:aBCDeFgH,b中的字符串为:ABcd,则C中的字符串应为:aBcdeFgH。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

#include

void fun(char *p,char *q,char *c)

{

/********found********/

int k=1;

/********found********/

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]={'\0'};

fun(a,b,c);

printf("The string a:");

puts(a);

printf("The string b:");

puts(b);

printf("The result:");

puts(c);

}

主要算法:涉及知识点:试题难度:★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★3.下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。

请改正函数fun中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

void fun(char *s)

{

int i,j;

/********found********/

for(i=0,j=0;s[i]!='\0';i++)

if(s[i]>='0' && s[i]<='9')

s[j]=s[i];

/********found********/

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);

}

主要算法:涉及知识点:试题难度:★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★4.下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串S输入:AaaaBBb123CCccccd,则应输出结果:upper=5,lower=9。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

/********found********/

void fun(char *s,int a,int b)

{

while(*s)

{

/********found********/

if (*s>='A'&&*s<='Z')

a++;

/********found********/

if(*s>='a'&&*s<='z')

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=%d\n", upper,lower);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★5.假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为X的元素,同时将其它元素前移。n中存放的是数列中元素的个数。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

#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

{

/********found********/

for(i=p;i

a[i+1]=a[i];

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

printf("\nInput x (to delete):");

scanf("%d",&x);

printf("Delete :%d\n",x);

n=fun(w,n,x);

if(n==-1)

printf("***Not be found!***\n\n");

else

{

printf("The data after delete :\n");

for(i=0;i

printf("%5d",w[i]);

printf("\n\n");

}

}

主要算法:涉及知识点:试题难度:★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★6.下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。

1 1 1

T=1- ― - - -…-

2x2 3x3 mxm

例如,若m中的值为5,则应输出:0.536389。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

double fun(int m)

{

double y=1.0;

int i;

/********found********/

for(i=2;i

/********found********/

y-=1/(i*i);

return(y);

}

main()

{

int n=5;

clrscr();

printf("\nThe result is %1f\n",fun(n));

}

主要算法:涉及知识点:试题难度:★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★7.下列给定程序中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。

请修改程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!

试题程序:

#include

#define N 20

void fun(int a[],int n)

{

int i,j,t,p;

for(j=0;j

{

/********found********/

p=j

for(i=j;i

{

if(a[i]

{

/********found********/

p=i;

t=a[p];

a[p]=a[i];

a[i]=t;

}

}

}

}

main()

{

int a[N]={9,6,8,3,-1},i,m=5;

printf("dfrgddfgd:");

for(i=0;i

printf("%d",a[i]);

printf("\n");

fun(a,m);

printf("gfdghfg : ");

for(i=0;i

printf("%d",a[i]);

printf("\n");

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★8.下列给定程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH。

请修改程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!

试题程序:

#include

/********found********/

fun(char *p)

{

char max,*q; int i=0;

max=p[i];

while(p[i]!=0)

{

if(max

{

/********found********/

max=p[i];

p=q+i;

}

i++;

}

while(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 after moving: ");

puts(str);

printf("\n\n");

}

主要算法:涉及知识点:试题难度:★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★9.下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:

80.5 60 72 90.5 98 51.5 88 64

则低于平均分的学生人数为4(平均分为:75.5625)。

请改正程序中的错误,使它能统计出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

#define N 20

int fun(float *s,int n,float *aver)

{

float ave,t=0.0;

int count=0,k,i;

/********found********/

for(k=0;k

t=s[k];

ave=t/n;

for(i=0;i

if(s[i]

count++;

/********found********/

*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

scanf("%f",s+i);

printf("\nThe number of students : %d\n",fun(s,m,&aver));

printf("Ave=%f\n",aver);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★10.下列给定程序中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s指字符串中的内容为abcdabfab,t1指子串中的内容为ab,t2所指子串中的内容为99时,结果,在w所指的数组中的内容应为99cd99f99。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

#include

/********found********/

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;

/********found********/

while(r)

if(*r==*p)

{

r++;p++;

}

else

break;

if(*r=='\0')

{

a=w;

r=t2;

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 substring t1:");

scanf("%s",t1);

printf("\nPlease enter substring t2:");

scanf("%s",t2);

if(strlen(t1)==strlen(t2)){

fun(s,t1,t2,w);

printf("\nThe result is :%s\n",w);

}

else

printf("Error :strlen(t1)!=strlen(t2)\n");

}

主要算法:涉及知识点:试题难度:★★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★11.下列给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位8进制数字。例如,若输入77777,则输出将是32767。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

int fun(char *p)

{

int n;

/********found********/

n=*p-'o';

p++;

/********found********/

while(*p!=0)

{

n=n*7+*p-'o';

p++;

}

return n;

}

main()

{

char s[6];

int i;

int n;

printf("Enter a string (0catal digits): ");

gets(s);

if(strlen(s)>5)

{

printf("Error:string too longer !\n\n");

exit(0);

}

for(i=0;s[i];i++)

if(s[i]<'0'||s[i]>'7')

{

printf("Error: %c not is ocatal digits!\n\n",s[i]);

exit(0);

}

printf("The original string: ");

puts(s);

n=fun(s);

printf("\n%s is convered to intege number: %d\n\n",s,n);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★12.下列给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。

例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是:abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到信息:not be found!。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:

#include

#include

#include

char *fun(char *s,char *t)

{

char *p,*r,*a;

/********found********/

a=NuLL;

while(*s)

{

p=s;r=t;

while(*r)

/********found********/

if(r==p)

{

r++;

p++;

}

else

break;

if(*r=='\0')

a=s;

s++;

}

return a;

}

main()

{

char s[100],t[100],*p;

clrscr();

printf("\nplease enter string s:");

scanf("%s",s);

printf("\nplease enter substring t:");

scanf("%s",t);

p=fun(s,t);

if(p)

printf("\nthe result is:%s\n",p);

else

printf("\nnot found!\n");

}

主要算法:涉及知识点:试题难度:★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★13.下列给定程序中,fun函数的功能是:根据形参m,计算如下公式的值。

1 1 1 1

t=1+ - + - + -… + -

2 3 4 m

例如,若输入5,则应输出2.283333。

请改正程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

double fun(int m)

{

double t=1.0;

int i;

/********found********/

for(i=2;i<=m;i++)

t+=1.0/k;

/********found********/

___填空____

}

main()

{

int m;

clrscr();

printf("\nplease enter 1 integer numbers:\n");

scanf("%d",&m);

printf("\n\nthe result is %lf\n",fun(m));

}

主要算法:涉及知识点:试题难度:★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★14.下列给定程序中,函数fun和funx的功能是:用二分法求方程2x3-4x2+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)

{

/********found********/

int r;

r=(m+n)/2;

/********found********/

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("%lf%lf",&m,&n);

root=fun(m,n);

printf("root=%6.3f\n",root);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★15.下列给定程序中,函数fun的功能是:判断字符ch是否与str所指串中的某个字符相同;若相同,则什么也不做,若不同,则将其插在串的最后。

请改正程序中的错误,使它能进行正确的操作。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

#include

/********found********/

void fun(char str,char ch)

{

while ( *str && *str !=ch )

str++;

/********found********/

if(*str==ch)

{

str[0]=ch;

/********found********/

str[1]='0';

}

}

main()

{

char s[81],c;

clrscr();

printf("\n Please enter a string:\n");

gets(s);

printf("\n Please enter the character to search:");

c=getchar();

fun(s,c);

printf("\nThe result is %s\n",s);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★16.下列给定程序中的函数Creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

请改正函数Creatlink中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

#include

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;

/********found********/

p->next=NULL;

for(i=1;i

{

s=(NODE *)malloc(sizeof(NODE));

/********found********/

s->data=rand()%m;

s->next=p->next;

p->next=s;

p=p->next;

}

/********found********/

return p;

}

outlink(NODE *h)

{

NODE *p;

p=h->next;

printf("\n\nTHE LIST :\n\n HEAD");

while(p)

{

printf("->%d ",p->data);

p=p->next;

}

printf("\n");

}

main()

{

NODE *head;

clrscr();

head=Creatlink(8,22);

outlink(head);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★17.下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

int fun(int k)

{

int m=0, mc=0, j;

while((k>=2)&&(mc<10))

{

/********found********/

if((k%13=0)||(k%17=0))

{

m=m+k;

mc++;

}

k--;

}

return m;

/********found********/

填空_____

main()

{

clrscr();

printf("%d\n", fun(500));

}

主要算法:涉及知识点:试题难度:★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★18.下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

/********found********/

void fun(int a,int b)

{

int t;

/********found********/

t=b;

b=a;

a=t;

}

main()

{

int a,b;

clrscr();

printf("Enter a,b: ");

scanf("%d%d",&a,&b);

fun(&a,&b);

printf("a=%d b=%d\n",a,b);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★19.下列给定程序中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

/********found********/

void fun(long s,long t)

{

long s1=10;

s/=10;

*t=s%10;

/********found********/

while(s<0)

{

s=s/100;

*t=s%10*s1+*t;

s1=s1*10;

}

}

main()

{

long s,t;

clrscr();

printf("\nPlease enter s:");

scanf("%ld",&s);

fun(s,&t);

printf("The result is:%ld\n",t);

}

主要算法:涉及知识点:试题难度:★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★20.N个有序整数数列已放在一维数组中,给定下列程序中,函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1。

折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowhigh,查找结束。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

#define N 10

/********found********/

void fun(int a[],int m)

{

int low=0,high=N-1,mid;

while(low<=high)

{

mid=(low+high)/2;

if(m

high=mid-1;

/********found********/

else

if(m>=a[mid])

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

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");

}

主要算法:涉及知识点:试题难度:★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★21.下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

请改正函数fun中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

#include

typedef struct aa

{

int data;

struct aa *next;

} NODE;

/********found********/

fun(NODE *h)

{

int max=-1;

NODE *p;

p=h;

while(p)

{

if(p->data>max)

max=p->data;

/********found********/

p=h->next;

}

return max;

}

outresult(int s,FILE *pf)

{

c语言程序改错题

程序改错------------------------------------- 1题目:在一个一维整型数组中找出其中最大的数及其下标。 程序中共有4条错误语句,请改正错误。 -----------------*/ #define N 10 /**********FOUND**********/ float fun(int *a,int *b,int n) { int *c,max=*a; for(c=a+1;cmax) { max=*c; /**********FOUND**********/ b=c-a;} return max; } main() { int a[N],i,max,p=0; printf("please enter 10 integers:\n"); for(i=0;ix[i+1]) { t=x[j];x[j]=x[j+1];x[j+1]=t;} } main() { int i,n,a[100]; printf("please input the length of the array:\n"); scanf("%d",&n); for(i=0;ij;j++) 或 for(j=0;jj;j++) 3 if(x[j]>x[j+1]) 或 if(x[j+1]

二级(C语言程序设计)上机题汇总

二级(C语言程序设计)上机题汇总 一、程序调试题 (一)程序填空 练习一: /*该程序功能:对x=1,2,。。。。。,10,f(x)=x*x*-5*x+sin(x)的最大值。*/ #include #include #define f(x) x*x-5*x+sin(x) void main() { int x; float max; ____ max=f(1);____ for(x=2;x<=10;x++) ___if( max void swap(__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(__a>b___) swap(&a,&b); printf("%d,%d,%d",a,b,c); } 练习三: /*该程序功能:将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。*/ #include

void Dec2Bin(int m) { int bin[32],j; for(j=0;m!=0;j++) { bin[j]= __m%2___; m=m/2; } for(;j!=0;j--) printf("%d", ____bin[j-1]_ _____ ); } void main() { int n; scanf("%d",&n); Dec2Bin(n); } 练习四: /*该程序功能:输入数组x[7],调用函数f,去除数组中的负数,输出结果为:1 3 4 6*/ #include 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]; ___*m=*m-1;___ } } void main() { int i,n=7,x[7]={1,-2,3,4,-5,6,-7}; _ f(x,&n);_____ for(i=0;i void main() { int i,j,s; for(i=6;i<=1000;i++) { ___s=1;___

C语言程序改错及填空题

下列程序是建立一个包含学生有关数据的单向链表。但该程序有2个错误,错误出现在每个注释行附近,请调试改正。调试改正中,不得改变程序结构,也不得增删语句。 #define NULL 0 struct stud { long num; char name[10]; float score; struct stud *next; }; /* …………… comment …………… */ int n; struct stud create() 序中有两处错误代码,请改正.注意,不得改变程序结构。 #include <> main() { int a[8],*p=a; int i,j; int tempmin,tempcode; printf("\n input the numbers:\n"); for (i=0;i<8;i++) scanf("%d",p+i);

tempmin=*p; for (i=0;i<7;i++) { for (j=i;j<8;j++) if (j==i||*(p+j)

c语言程序改错

【程序改错】 1.功能:利用递归函数调用方式,将所输入的5个字符,以相反顺序 打印出来。 char next; next=getchar(); palin(n-1); 2.功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n 项为: 1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( )函数。 例如:若 n = 15,则应输出:The value is: 2209。 for (k=4; k<=n; k++) a=b; return d; 3.功能:根据整型形参m,计算如下公式的值: y=1/2+1/8+1/18+...+1/2m*m double y=0.0; 4.功能:编制统计营业员一天的营业额的程序,设程序采用一个循环 实现,每次循环输入一笔交易金额并累计营业额。由于营 业员一天完成的交易次数是不确定的,为此以最后附加输 入一笔0或负数交易额作为交易金额已全部输入结束的标志。 float sale,sigma; scanf("%f",&sale); sigma=sigma+sale; 5.功能:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*。while(n<8) while(a<1||a>50); for(i=0;i

历年二级C语言笔试真题及答案

1 2009年9月全国计算机等级考试二级笔试 试卷 1)下列数据结构中,属于非线性结构的是 A )循环队列 B) 带链队列 C) 二叉树 D )带链栈 2)下列数据结果中,能够按照“先进后出”原则存取数据的是 A) 循环队列 B) 栈 C)队列 D)二叉树 3)对于循环队列,下列叙述中正确的是 A )队头指针是固定不变的 B )队头指针一定大于队尾指针 C )队头指针一定小于队尾指针 D )队头指针可以大于队尾指针,也可以小于队尾指针 4)算法的空间复杂度是指 A )算法在执行过程中所需要的计算机存储空间 B )算法所处理的数据量 C )算法程序中的语句或指令条数 D )算法在执行过程中所需要的临时工作单元数 5)软件设计中划分模块的一个准则是 A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合 6)下列选项中不属于结构化程序设计原则的是 A) 可封装 B) 自顶向下 C) 模块化 D) 逐步求精 7)软件详细设计产生的图如下: 该图是 A) N-S 图 B) PAD 图 C) 程序流程图 D) E-R 图 8)数据库管理系统是 A )操作系统的一部分B) 在操作系统支持下的系统软件C) 一种编译系统 D) 一种操作系统 9)在E-R 图中,用来表示实体联系的图形是 A) 椭圆图B) 矩形C) 菱形D) 三角形 10)有三个关系R ,S 和T 如下: 其中关系T 由关系R 和S 通过某种操作得到,该操作为 A) 选择 B) 投影 C) 交 D) 并 11)以下叙述中正确的是 A )程序设计的任务就是编写程序代码并上机 B )程序设计的任务就是确定所用数据结 构 C )程序设计的任务就是确定所用算法 D )以上三种说法都不完整 12)以下选项中,能用作用户标识符的是 A )void B )8_8 C )_0_ D )unsigned 13)阅读以下程序 #include main() { int case; float printF; printf(“请输入2个数:”); scanf(“%d %f”,&case,&pjrintF); printf(“%d %f \n”,case,printF); } 该程序编译时产生错误,其出错原因是 A )定义语句出错,case 是关键字,不能 用作用户自定义标识符B )定义语句出错,printF 不能用作用户自定义标识符 C )定义语句无错,scanf 不能作为输入函 数使用 D )定义语句无错,printf 不能输出case 的值 14)表达式:(int)((double)9/2)-(9)%2的值是 A )0 B )3 C )4 D )5 15)若有定义语句:int x=10;,则表达式 x-=x+x 的值为 A )-20 B )-10 C )0 D )10 16)有以下程序 #include main() { int a=1,b=0; printf(“%d,”,b=a+b); printf(“%d \n”,a=2*b); } 程序运行后的输出结果是 A )0,0 B )1,0 C )3,2 D )1,2 17)设有定义:int a=1,b=2,c=3;,以下语 句中执行效果与其它三个不同的是 A )if(a>b) c=a,a=b,b=c; B )if(a>b) {c=a,a=b,b=c;} C ) if(a>b) c=a;a=b;b=c; D ) if(a>b) {c=a;a=b;b =c;} 18)有以下程序 #include main() { int c=0,k; for (k=1;k<3;k++) switch (k) {default: c+=k case 2: c++;break; case 4: c+=2;break; } printf(“%d \n”,c); } 程序运行后的输出结果是 A )3 B )5 C )7 D )9 19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是 A )if((a>b)&&(b>c)) k=1;else k=0; B )if((a>b)||(b>c) k=1;else k=0; C )if(a<=b) k=0;else if(b<=c) k=1; D )if(a>b) k=1;else if(b>c) k=1; else k=0; 20)有以下程序 #include main() { char s[]={“012xy”};int i,n=0; for(i=0;s[i]!=0;i++) if(s[i]>=?a?&&s[i]<=?z?) n++; printf(“%d \n”,n); } 程序运行后的输出结果是 A )0 B )2 C )3 D )5 21)有以下程序 #include main() { int n=2,k=0; while(k++&&n++>2); printf(“%d %d \n”,k,n); } 程序运行后的输出结果是 A )0 2 B )1 3 C )5 7 D )1 2 22)有以下定义语句,编译时会出现编译错误的是 A )char a=?a? B )char a=?\n?; C )char a=?aa?; D )char a=?\x2d?; 23)有以下程序 #include main() { char c1,c2; c1=?A?+?8?-…4?; c2=?A?+?8?-…5?; printf(“%c,%d \n”,c1,c2); } 已知字母A 的ASCII 码为65,程序运行后的输出结果是

C语言程序改错2

1、以下程序的功能是求如下表达式: 1 1 1 S = 1 + ——+ ———+ ...... + ——————— 1+2 1+2+3 1+2+3+......+n 『答案』:1 scanf("%d",&n); 2 float fun(int n) 3 for(i=1;i<=n;i++) 4 s+=1.0/t 或s= s + 1.0 /t; 2、题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。 1 1 1 t = 1- ——- ——- ... - —— 2x2 3x3 mxm 例如,若m=5,则应输出:0.536389 『答案』:1 for(i=2;i<=m;i++)或for(i=2;i 2 float s=0,t=1,p=1; 3 while(fabs(t)>1e-4)或while(fabs(t)>0.0001) 4 printf("pi=%f\n", s * 4 ); 4、功能:计算正整数num的各位上的数字之积。例如,输入252,则输出应该是20。『答案』:1 long k=1; 或long int k=1; 2 num/=10; 或num=num/10; 3 scanf("%ld",&n); 4 printf("\n%ld\n",fun(n)); 5、功能:(与上题略有不同)计算正整数num的各位数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。 『答案』:1 {long k=1; 2 num/=10; 或num=num/10; 3 } while(num) ; 或}while(num!=0); 或}while(num>0); 6、题目:判断m是否为素数,若是返回1,否则返回0。 『答案』:1 int fun( int m) 或fun( int m) 2 for(i=2;isqrt(i)) 4 return i; 或return (i);

C语言程序改错题

第12次上机程序改错第1题 【程序改错】 -------------------------------------------------------- 功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。 例如:输入圆的半径值:19.527 输出为:s = 598.950017。 ------------------------------------------------------*/ #include #include /**********FOUND**********/ double fun( r) double fun(double r) { double s; /**********FOUND**********/ s=1/2*3.14159* r * r; s=1.0/2*3.14159*r*r; /**********FOUND**********/ return r; return s; } main() { float x;

printf ( "Enter x: "); scanf ( "%f", &x ); printf (" s = %f\n ", fun ( x ) ); } 第2题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include #include #include void fun (char *s, char *t) { /**********FOUND**********/ int i; int sl,i; sl = strlen(s); for (i=0; i

程序改错完整版---C语言

(一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。#include "stdio.h" #define N 20 void fun(int a[], int n) { int i, j, t, k; for (j = 0 ;j < n-1 ;j++) { /**********ERROR**********/ k = j for (i = j+1;i < n; i++) /**********ERROR**********/ if(a[i] >a[k]) /**********ERROR**********/ k=j; t = a[k] ; a[k] = 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"); } 【参考答案】 k = j; 【参考答案】 if(a[i] < a[k]) if(a[k] > a[i])

【参考答案】 k = i; (二)功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n 项为: 1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( )函数。 例如:若 n = 15,则应输出:The value is: 2209。 #include "conio.h" #include "stdio.h" long fun ( int n ) { long a=1, b=1, c=1, d=1, k; /**********ERROR**********/ for (k=4; k

二级C语言上机编程题答题技巧

二级C语言上机编程题技巧 一、技巧的原理 首先使用这个技巧必须了解上机编程题的评分原理。以上机题的第5套编程题为例。二级C语言的上机试题是让我们自己编写某个小程序的子程序来实现题目中的功能。那么考官是怎么样来检查我们编的程序是否正确呢?根据编程题下面这段程序我们就可以看出: 在考生文件夹下存在一个名为in.dat的文件。首先以只读的方式打开in.dat文件,以只写方式打开out.dat文件,若out.dat不存在则自动新建该文件。然后使用fscanf 语句将其中的数据输入到变量a中,再将a当作实参调用我们需要编写的程序。将结果用fprintf语句输入到out.dat文件中。其中.dat为这个文件的扩展名(扩展名有可能被隐藏)。

所以考官不会直接检查我们的程序,只要检查out.dat里的数据是否正确就可以判断我们编的子程序是否正确。因此程序编写题,我们可以只通过修改out.dat里面的答案而不去编写程序就可以拿到满分。 二、使用技巧的条件 当然不是所有的编程题我们都能使用这个技巧的(不过90%的编程题都可以用这个方法)。使用这个技巧必须具备两个条件: 1、编程题是通过我上面讲的方法来检验,说白了就是我们的考生文件夹下面 含有in.dat文件。 2、编程题需要实现的功能我们编程者可以自己想出来程序完成的答案。例如 本题:

它让我们实现实型数据保留两位小数,并对第三位进行四舍五入。那么这个功能我们若知道任一个实数都可以自己计算出结果,那么我们才能将正确答案写在out.dat文件里面。若某程序让你编写子程序实现求取圆周率并精确到小数点后10位这个功能,那么我们就无法背出那么长的数字,因此也没有办法知道结果。那么这种技巧就不能使用。 三、步骤 确定了这个技巧可以使用后,我们就可以开始操作了。一般分为以下几步: 1、建立out.dat文件 上面可以看到我们的考生文件夹中是没有out.dat这个文件的。所以我们需要自己新建。最好的方法就是打开编程题直接编译、链接、执行。这样将程序执行一遍后我们的考生文件夹里就自动生成了我们需要的out.dat文件。(注意:这里生成了out.dat 文件后就不要再运行我们的程序了,因为每运行一次程序就会将程序生成的答案写入out.dat文件中,这样即算我们改成了正确答案,你如果再次运行程序,就会将我们修改的正确结果覆盖掉。) 2、修改答案

齐齐哈尔大学C语言题库 程序改错(部分)

1.【程序改错】 题目:在一个一维整型数组中找出其中最大的数及其下标。 程序中共有4条错误语句,请改正错误。 #define N 10 /**********FOUND**********/ float fun(int *a,int *b,int n) int fun(int *a,int *b,int n) { int *c,max=*a; for(c=a+1;cmax) { max=*c; /**********FOUND**********/ b=c-a;} *b=c-a;} return max; } main() { int a[N],i,max,p=0; printf("please enter 10 integers:\n"); for(i=0;i

计算机二级C语言上机题库复习小抄(最新校正,精美排版)

计算机二级C语言上机题库复习小抄 (最新校正,精美排版) 第一套 1.程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号、姓名和三门课的成绩。函数fun 的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 第一处struct student t; 第二处for(i=0;i0) 2程序修改 给定程序MODI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向上顺序移动。 /**found**/ q=p+i; /**found**/ while(q>p) 3程序设计 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。 int fun(STREC *a,STREC *b,int l,int h) {int i,j=0; for(i=0;i=1&&a[i].s<=h) b[j++]=a[i]; return j; } 第二套 1.程序填空 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序连接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 第一处free(q); 第二处q=p->next; 第三处q=q->next; 2. 程序修改 给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n各元素按从小到大的顺序进行排序。 /**found**/ p=j; /**found**/ p=i; 3. 程序设计 请编写一个fun函数,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 void fun(int m,int *a,int *n) { int i; *n=0; for(i=7;i<=m;i++) if((i%7==0)||(i%11==0)) a[(*n)++]=i; } 第三套 1. 程序填空 函数fun的功能是:逆置数组元素是的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数组中数据的个数。 第一处for(i=0;idata==ch)return n; 第三处k=fun(head,ch); 2. 程序修改 给定程序MODI1.C中函数fun的功能是:删除p所指字符串的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用‘#’结束输入。 /**found**/ for(i=0,t=0;p[i];i++) /**found**/ c[t]=?\0?; 3. 程序设计 请编写一个函数fun,将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 void fun(char *ss) { int i; for(i=1;i=?a?&&ss[i]<=?z?) ss[i]-=32; } } 第五套 1. 程序填空 给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如:当形参n的值为10 的时,函数返回:9.6125588。 第一处s=0; 第二处for(i=1;i<=n;i++) 第三处s=s+(2.0*i-1)*(2.0*i+1)/(t*t); 2. 程序修改 给定程序MODI1.C中函数fun的功能是:统计substr所指字符串在str所指字符串中出现伯次数。 /**found**/ for(i=0;str[i];i++) /**found**/ if(substr[k+1]==?\0?) 3. 程序设计 请编写一个函数fun,它的功能是:根据以下公式求JI的值(要求满足精度0.0005,即某项小于0.0005时停止送代):程序运行后,如果输入精度为0.0005,则程序输出为 3.14…。 double fun(double eps) { double s=1,t=1./3; int n=1; while(t>=eps) {s+=t;n++;t=t*n/(2.0*n+1) ;} return(s*2.0); } 第六套 1. 程序填空 给定程序中,函数fun的功能是:将形参s所指定字符串中所有的字母字符顺序前移,其他字母顺序后移,处理后字符串的首地址作为函数值返回。 第一处t[j]=s[i];j++; 第二处for(i=0;iscore[i]+=1; 第三处return a; 2. 程序修改 给定程序MODI1.C中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放在一个字符串数组中。 /**found**/ char *fun(char (*sq)[M]) /**found**/ return sp; 1

C语言程序改错题

第1题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include #include #include void fun (char *s, char *t) { /**********FOUND**********/ int i; sl = strlen(s); for (i=0; i

计算机二级考试C语言 101~105套上机题

第101套 1、程序填空 给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。 例如,有9个正整数:1 5 7 23 87 5 8 21 45,按升序排列时的中间数为:8 处理后主函数中输出的数列为:8 8 8 23 87 8 8 21 45 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。得增行或删行,也不得更改程序的结构! #include #define N 9 int fun(int x[]) { int i,j,k,t,mid,b[N]; for(i=0;ib[j]) k=j; if(k != i ) { /**********found**********/ t=b[i]; b[i]=___1___; b[k]=t; } } /**********found**********/ mid=b[___2___]; for(i=0; i #include #define N 20 int fun( int *b ) { /**********found**********/ int t[N] ,i, num for(i=0; i=10) /**********found**********/ t[++num]=b[i]; /**********found**********/ for(i=0; i

C语言改错题

题号:1 题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列 /************FOUND***********/ a[i]=a[i-1]; /************FOUND***********/ exit;} 正确答案:a[i+1]=a[i]; break;} 题号:2 题目:以下程序的功能是求如下表达式: /************FOUND***********/ print("%d",n) ; /************FOUND***********/ fun(int n) 正确答案:scanf(“%d”,&n); float fun(int n) 题号:3 题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。 /**********FOUND**********/ y-=1/(i*i); /**********FOUND**********/ return m; 正确答案:y-=1.0/(i*i); return c; 题号:4 题目:以下程序把一由小到大的有序数列放在a[1]到a[n]中,a[0]用做工作单元,程序把读入的x值插入到a数组中,插入后,数组中的数仍有序。 /************FOUND***********/ { a[i]=a[i+1]; /************FOUND***********/

for(i=0;i<=n;i++) 正确答案:{ a[i+1]=a[i]; for(i=1;i<=n;i++) 题号:5 题目:函数scopy的功能是:将一个字符串前面n个子字符送到一个字符型数组中去 ,然后再加上一个'\0'。不用系统提供的函数strcpy。请改正程序中的2个错误,使它能得出正确的结果。 /**************FOUND**************/ scanf("%d",n); /**************FOUND**************/ scopy(str1,str2); 正确答案:scanf("%d",&n); scopy(str1,str2,n); 题号:6 题目:函数fun的功能是:求n!。主函数的功能是计算: x!+y!+z!的值。请改正程 序中的错误,使它能得出正确的结果。 /**********FOUND**********/ scanf("%d,%d,%d",x,y,z); /**********FOUND**********/ printf("Sum=%d\ n",sum); 正确答案:scanf("%d,%d,%d",&x,&y,&z); printf("Sum=%ld\ n",sum); 题号:7 题目:编写函数fun求整数n以内(不包括n)3的倍数之和,在main函数中由键盘输 入n值,并输出运算结果。 /**********FOUND**********/ scanf("%d",n); /**********FOUND**********/ result=fun( ); 正确答案:scanf("%d",&n); result=fun(n); 题号:8 题目:函数fun的功能是:求1到20的阶乘的和。 /**********FOUND**********/ s+t=s; /**********FOUND**********/ printf("jiecheng=%d\n",s);

相关主题