计算机二级C语言上机精选题目.docx

上传人:b****5 文档编号:12374261 上传时间:2023-04-18 格式:DOCX 页数:20 大小:23.16KB
下载 相关 举报
计算机二级C语言上机精选题目.docx_第1页
第1页 / 共20页
计算机二级C语言上机精选题目.docx_第2页
第2页 / 共20页
计算机二级C语言上机精选题目.docx_第3页
第3页 / 共20页
计算机二级C语言上机精选题目.docx_第4页
第4页 / 共20页
计算机二级C语言上机精选题目.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机二级C语言上机精选题目.docx

《计算机二级C语言上机精选题目.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言上机精选题目.docx(20页珍藏版)》请在冰豆网上搜索。

计算机二级C语言上机精选题目.docx

计算机二级C语言上机精选题目

1.程序填空

给定程序的功能是判断字符ch是否与串str中的某个字符相同:

若相同,什么也不做,若不同,则插在串的最后。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果

注意:

不得增行或删行,也不得更改程序的结构!

试题程序:

#include

#include

voidfun(char*str,charch)

{ while( *str&&*str!

=ch)str++;

if(*str 1  ch)

{ str[0]=ch;

2  =0;

}

}

main()

{  char s[81], c;

printf("\nPleaseenterastring:

\n"); gets(s);

printf("\nPleaseenterthecharactertosearch:

");

c=getcharO;

fun( 3 );

printf("\nTheresult is%s\n", s);

1.程序填空

【答案】

(1)!

=

(2)str[1]

(3)s,c

【评析】

(1)fun函数中先设置了二个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一直循环到串尾"。

因此通过判断*str的内容即可判断是否已找到字符ch。

(2)如果没有找到字符ch,则在while循环后str指针指向串结束符Ox00,此时应将字符ch写入这里并在下一地址写入一个串结束符Ox00,所以应该是"str[1]。

O;"语句。

(3)此句是调用fun()函数,括弧中是其实际参数。

2.程序修改

给定程序modi.c中,函数fun的功能是:

'根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由main()函数输出。

例如,若输入2    ︳若输入4

则输出:

      ︳则输出:

    1 2    ︳     1 2 3 4

    2 4    ︳     2 4 6 8

          ︳     3 6 9 12

          ︳     4 8 1216

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

注意:

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

试题程序:

#include

#include

#defineM10

inta[M][M]={0};

fun(int**a,intm)

{intj,k;

for(j=0;j

for(k=0;k

a[j][k]=k*j;

}

main()

{ inti,j,n;

clrscr0;

printf("Entern:

");scanf("%d",&n);

fun(a,n);

for(i=0;i

{ forO=O;j

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

printf("\n");

}

2.程序修改

【答案】

(1)错误:

第5行fun(int**a,intm)

正确:

fun(inta[][M],Intm)

(2)错误:

第9行a[j][k]=k*j;

正确:

a[j][k]=(k+1)*(j+1);

【评析】

第5行:

第二个形参m是用户输入的维数,没有别的名堂,第一个形参是为了指明在函数fun()中要产生的多维数组,"**a"是不能正确表示一个多维数组的,我们应当使用"inta[M][M]"。

第9行:

循环体的内容是给m维的多维数组赋值,这个多维数组在列方向是由1开始的自然数,在行方向上是行首第一数的n倍数,显然,"a[j][k]=k*j;"不符合题意,我们应当使用"a[j][k]=(k+1)*(j+1);"。

3.程序设计

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。

请编写函数fun,函数的功能是:

找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。

已给出函数的首部,请完成该函数。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序:

#include

#include

#include

#defineN10

typedefstructss

{charnum[10];ints;}STU;

fun(STUa[],STU*s)

{

}

main()

{STU

a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;

inti;

elrser();

printf("*****Theoriginaldata*****\n");

for(i=0;i

'No=%sMark=%d\n",a[i].num,a[i].s);

fun(a,&m);

printf("*****THERESULT*****\n");

printfCThetop:

%s,%d\n",m.num,m.s);

NON0();

}

NON0()

{\*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/

FILE*rf,*wf;

STUa[N],m;

Inti;

rf=fopen("bc09.in","r,);

wf=fopen("bc09.out","w");

for(i=0;i<10;i++)fscanf(rf,"%s%d",a[i].num,&a[i].s);

fun(a,&m);

fprintf(wf,"Thetop:

%s,%d\n",m.num,re.s);

fclose(rf);

fclose(wf);

}

3.程序设计

【答案】

fun(STUa[],STU。

s)

{  inti;

STU  *m;

re=a;

for(i=1;i

if(a[i].s>m[0].s) m=&a[i];

s[0].s=m[0].s;

strcpy(s[0].Num,m[0].num);/*将m指针中的学生学号复制给s数组中的学号变量*/

}

【评析】

从题目的要求来看,我们应建立一个循环来寻找成绩最高的学生记录。

我们给出的参考函数中定义了一个指针存放学生记录中的最高成绩。

改错

第1题

给定程序MODI1.C中函数fun的功能是:

把在字符串s中出现的每个字符,紧随其后重复出现一次,形成一个新串放在t中,t中字符按原字符串中字符顺序排列。

例如:

当s中的字符串为:

"ABAABBCCDDEE"。

则t中的字符串应为:

"AABBCCDDEE"。

第2题

给定程序MODI1.C中函数fun的功能是:

把在字符串s中出现的每个字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中逆排列。

例如:

当s中的字符串为:

"ABCDE"时,则t中的字符串应为:

"EEDDCCBBAA"。

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

注意:

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

t[2*sl]=’0/’;/参考答案:

t[2*sl]=’\0’;/

printf("\nPleaseenterstrings:

");scanf("%s",s);

第3题

给定程序MODI1.C中函数fun的功能是:

将在字符串s中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符的顺序排列。

(注意0为偶数)

例如:

当s中的字符串为:

"ABCDE"时,则t中的字符串应为:

"AACCEE"。

第4题

给定程序MODI1.C中函数fun的功能是:

将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符的顺序排列。

(注意0为偶数)

例如:

当s中的字符串为:

"ABCDEF"时,则t中的字符串应为:

"BBDDFF"。

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

注意:

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

j--;/参考答案:

j/

printf("\nPleaseenterstrings:

");scanf("%s",s);

第5题

给定程序MODI1.C中函数fun的功能是:

将在字符串s中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。

(注意0为偶数)

例如:

当s中的字符串为:

"ABCDEF"时,则t中的字符串应为:

"EECCAA"。

第6题

给定程序MODI1.C中函数fun的功能是:

将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。

(注意0为偶数)

例如:

当s中的字符串为:

"ABCDEFG"时,则t中的字符串应为:

"FFDDBB"。

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

注意:

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

if(sl%2)Sl-=2;elseSl--;/参考答案:

if(sl%2)sl-=2;elsesl--;/

t[2*sl]=’0’;/参考答案:

t[2*j]=’\0’;/

printf("\nPleaseenterstrings:

");scanf("%s",s);

第7题

给定程序MODI1.C中函数fun的功能是:

把在字符串s中出现的每个字符,紧随其后重复出现一次,形成一个新串放在t中,且在t中把原相邻字符的位置进行了交换。

例如:

当s中的字符串为:

"ABCDE"时,则t中的字符串应为:

"BBAADDCCEE"。

第8题

给定程序MODI1.C中函数fun的功能是:

将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。

例如:

当s="AABCDE",t="BDFG"字符。

u中的字符串为"AACE"。

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

注意:

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

voidfun(char*s,char*t,charu)/参考答案:

voidfun(char*s,char*t,char*u)

if(jtl)/参考答案:

if(j=tl)

printf("\nPleaseenterstrings:

");scanf("%s",s);

printf("\nPleaseenterstringt:

");scanf("%s",t);

第9题

给定程序MODI1.C中函数fun的功能是:

将未在字符串s中出现而在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。

例如:

当s="ABCDE",t="BDFGG"时,u中的字符串为"FGG"。

第10题

给定程序MODI1.C中函数fun的功能是:

将既在字符串s中出现又在字符串t中出现的字符构成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。

例如:

当s="ABBCDE",t="BDFG"时,u中的字符串为:

"BBD"。

给定程序MODI1.C中函数fun的功能是:

把在字符串s中出现的每个字符,紧随其后重复出现一次,形成一个新串放在t中,t中字符按原字符串中字符顺序排列。

例如:

当s中的字符串为:

"ABAABBCCDDEE"。

1.程序填空

给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。

例如,

若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

不得增行或删行,也不得更改程序的结构!

试题程序:

#include

Voidfun(intm,intk)

{

imaa[20],i;

for(i=0;m;i++){

aa[i]。

_l_;

m/=_2_;

}

for(;i;i--)printf("%d",-3-[i-1]);

}

main()。

{

intb,n;

printf("\nPleaseenteranumberandabase:

\n");

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

fun(n'b);

}

【答案】

(1)m%k

(2)k

(3)aa

【评析】

(1)此语句是将十进制的整型数据m转换为k进制数据时,将余数保存在数组aa中。

(2)此语句是将十进制的整型数据m转换为k进制数据时,每除一次k后,把商重新赋值给正整数m,以便重复取余。

(3)在for循环之后,i即为转换成的k进制数的位数,所以根据题意要求,此语句应该是:

"print("%d",aa[i-l]);"

2.程序修改

给定程序modi.c中,函数fun的功能是:

将s所指字符串中最后一次出现的、tl所指子串替换成t2所指子串,所形成的新串放在w所指的数组中。

在此处,要求tl和t2所指字符串的长度相同。

例如,当s所指字符串中的内容为:

 "abcdabfabc",t1所指子串中的内容为:

"ab",t2所指子串中的内容为:

"99"时,结果,在w所指的数组中的内容应为:

"abcdabf99c"。

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

注意:

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

试题程序:

#include

#include

#include

intfun(char*s,char*t1,char*t2,char*w)

{inti;char*p,*r,*a;

strcpy(w,s);

while(w)

(p=w;r=tl;

while(*r)

IF(*r=*p) {r++;p++;}

elsebreak;

if(*r=:

=`\0`)a=w;

w++:

}

r=t2;

while(*r){*a芦*r;a++;r++;)

main()

{

chars[100],t1[100],t2[100],w[100];

clrscr();

printf("\nPleaseenterstringS:

");scanf("%s",s);

printf("\nPleaseentersubstringt1:

");scanf("%s",t1);

printf("\nPleaseenteisubstringt2:

");scanf("%s",t2);

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

{fun(s,t1,t2,w);

printf("\nTheresukis:

%s\n",w);

}

elseprintf("\nError:

strlen(t1)!

=strlen(t2)\n");

}

【答案】

(1)错误:

第7行while(w)

正确:

while(*w)

(2)错误:

第11行 IF(*r==*p) {r++;p++;}

正确:

if(*r==*p) {r++;p++;}

【评析】

第7行:

题意中要求对这个地址所指向的内容进行判断,所以须在地址前加上+,源程序"while(w)"应改为"while(*w)"或相同作用的语句。

第11行:

c语言中,大小写的字母含意不同。

源程序中"IF(*r==*p)"是错误的,"IF"应为小写,程序应改为"if(*r==*p)"或相同作用的语句。

 

3.程序设计

请编写函数fun,函数的功能是:

将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,若输入:

17,则应输出:

9和46891012141516。

注意:

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序:

#include

#include

Voidfun(intm,int*k,intxx[])

{

}

main()

voidfun(intm,int*k,intxx[])

{ intI,j;*k=0;

for(i=2;i

{for(j=2;j

if(i0/oj=:

0)break;  。

,= '

if(j

}

}

【评析】

非素数的判断方法与素数的判断方法正好相反,它除了能被1和自身整除外,还可被其它的数整除。

用求余的方法来判断整除。

 

 请编制函数ReadDat()实现从文件FC.IN中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,偶数的个数even,平均值aver以及方差totfc的值,最后调用函数WriteDat()把结果输出到FC1.OUT文件中。

计算方差的公式如下:

1N

totfc=──∑(xx-aver)^2

Ni=1

原始数据文件存放的格式是:

每行存放10个数,并用逗号隔开。

(每个数均大于0且小于等于2000)

注意:

部分源程序存放在PROG1.C中。

请勿改动主函数main()和输出数据函数WriteDat()的内容。

/*参考答案*/

#include

#include

#include

#defineMAX1000

intxx[MAX],odd=0,even=0;

doubleaver=0.0,totfc=0.0;

voidWriteDat(void);

intReadDat(void)

{

FILE*fp;

inti,j;

charc,str[20];

if((fp=fopen("FC.IN","r"))==NULL)return1;

/***********读入数据并存放到数组xx中*************/

for(i=0;i

{

j=0;

while((c=(char)fgetc(fp))!

=EOF)

{

if(c==',')

{

str[j]='\0';

break;

}

elseif(c!

='\n'&&c!

='\r')/*去掉回车换行符*/

{

str[j]=c;

++j;

}

}

xx=atoi(str);

if(c==EOF)

break;

}

fclose(fp);

return0;

}

voidCompute(void)

{

inti;

longcount=0;

for(i=0;i

{

if(xx&1)

odd++;

else

even++;

count+=xx;

}

aver=(double)count/MAX;

for(i=0;i

totfc+=(xx-aver)*(xx-aver);

totfc/=MAX;

}

voidmain()

{

inti;

for(i=0;i

if(ReadDat()){

printf("数据文件FC.IN不能打开!

\007\n");

return;

}

Compute();

printf("ODD=%d\nOVEN=%d\nAVER=%lf\nTOTFC=%lf\n",odd,even,aver,totfc);

WriteDat();

}

voidWriteDat(void)

{

FILE*fp;

inti;

fp=fopen("FC1.OUT","w");

fprintf(fp,"%d\n%d\n%lf\n%lf\n",odd,even,aver,totfc);

fclose(fp);

}

0

 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。

现要求按出圈次序,每10人一组,给出这n个人的顺序表。

请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件JOSE.OUT中。

设n=100,s=1,m=10。

(1)将1到n个人的序号存入一维数组p中;

(2)若第i个人报数后出圈,则将p置于数组的倒数第i个位

置上,而原来第i+1个至倒数第i个元素依次向前移动一个

位置;

(3)重复第

(2)步直至圈中只剩下p[1]为止。

注意:

部分源程序存放在PROG1.C中。

请勿改动主函数main()和输出数据函数WriteDat()的内容。

/*参考答案*/

#include

#defineN100

#defineS1

#defineM10

intp[100],n,s,m;

voidWriteDat(void);

voidJosegh(void)

{

inti,j,s1,w;

s1=s;

for(i=1;i<=n;i++)

p[i-1]=i;

for(i=n;i>=2;i--)

{

s1=(s1+m-1)%i;

if(s1==0)

s1=i;

w=p[s1-1];

for(j=s1;j

p[j-1]=p[j];

p[i-1]=w;

}

}

voidmain()

{

m=M;

n=N;

s=S;

Josegh();

WriteDat();

}

void

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1