二级C语言上机题100套(答案附程序)_第1页
二级C语言上机题100套(答案附程序)_第2页
二级C语言上机题100套(答案附程序)_第3页
二级C语言上机题100套(答案附程序)_第4页
二级C语言上机题100套(答案附程序)_第5页
已阅读5页,还剩126页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第001套

一、程序填空题

第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。

第二处:判断是否是奇数,所以应填:()。

第三处:最后通形参n来返回新数x,所以应填:X。

二、程序修改题

第一处:条件语句书写格式错误,应改为:if(n==0)。

第二处:语句后缺少分号。

三、程序设计题

/*以下完成数字字符串转换为•个数字*/

while(*p)x=x*10-48+(*p++);

returnx*t;

第002套

一、程序填空题

本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。

第一处:定义文本文件类型变量,所以应填:FILE*«

第二处:判断文件是否结束,所以应填:fp。

第三处:显示读出的字符,所以应填:ch。

二、程序修改题

第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j来控制新字

符串的位置,所以应改为:s[j++]=s[i];。

第二处:置新字符串的结束符,所以应改为:s[j]=,(r;.

三、程序设计题

voidfun(chars[][N],char*b)

(

inti,j,n=O;

for(i=0;i<N;i++)/*请填写相应语句完成其功能*/

(

for(j=0;j<M;j++){

b[n]=s[j][i];

n=i*M+j+1;

}

)

b[n]=、0';

本题是把二维数组中的字符数据按列存放到•个字符串中。

1.计算存放到一维数组中的位置。

2.取出二维数组中的字符存放到•维数组(已计算出的位置)中。

第003套

一、程序填空题

本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。

第一处:从指定的文件中读出数据,所以应填:filename。

第二处:读取文件fp的最后条记录,所以应填:fp。

第三处:再把读出的记录,写入文件fp指定的位置上,所以应填:fp。

二、程序修改题

第一处:指向刚分配的结构指针,所以应改为:p=(NODE*)maIloc(sizeof(NODE));

第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返

回不能使用P,是因为p的位置已经发生了变化,所以应改为返回h。

三、程序设计题

intfun(char*s)

(

intk=I;

while(*s){

if(*s==1')k++;

s++;

}

returnk;

}

main()

{charline|N];intnum=0;

printf("Enterastring:\n");gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",num);

NONO();

)

NONO()

本题是统计字符串中的单词数。

1.利用while循环语句和指针变量,当字符为空格时,则单词数k加1。

2.循环结束返回k

第004套

一、程序填空题

本题是考察把结构中的数据写入文件。

第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读

出,所以应填:"rbno

第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:>o

第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite。

二、程序修改题

第处指针p应指向s,所以应改为:p=s;o

第二处:死循环,当dowhile循环执行一次,临时变量p应该指向字符串的下一位置,所以应改为:

while(*p++);o

三、程序设计题voidfun(int*a,int*b)

inti,j;

for(i=0;i<M;i++)b[i]=0;

for(i=0;i<N;i++){

j=a[i]/10;

if(j>10)b[M-l]++;elseb[j]++;

)

}

doublernd()

{statict=29,c=217,m=1024,r=0;

r=(r*t+c)%m;return((double)r/m);

I

本题是统计各年龄段的人数。

1.初始化各年龄段人数为0。

2.使用for循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于10,则存入d[10]

中(大于110岁的人)。

第005套

一、程序填空题

本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在

屏幕上。

第一处:定义文本文件类型变量,所以应填:FILE*。

第二处:关闭刚写入的文件,所以应填:fclose(fp)。

第三处:从文件中读出数据,所以应填:fp。

二、程序修改题

第一处:语句最后缺少分号。

第二处:应该使用方括号,而不是圆括号。

像此类,使用编译,即可发现。

三、程序设计题

#include<stdio.h>

#defineN80

intfun(inta[],intn)

(

inti,j=1,k=a[0];

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

if(k!=a[i]){

a[j++]=a[i];

k=a[i];

1

aU]=0;

returnj;

本题是删除已排序过数组中的相同数。

1.取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。

2.如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制,接着把

这个数重新存入匕如果相同,则取F—数。

第006套

一、程序填空题

本题是根据给定的公式来计算函数的值。

第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:double。

第二处:当i等于1时,则返回fl函数的值,所以应填:flo

第三处:如果i不等于1,则返回f2函数的值,所以应填:f2o

二、程序修改题

第一处:试题要求返何字符串的首地址,所以应改为:char*fun(char*s,char*1)

第二处:取字符串指针ss的下一个位置,所以应改为:SS++;。

第三处:取字符串指针tt的卜.一个位置,所以应改为:

三、程序设计题

##include<stdio.h>

#include<string.h>

#defineN80

voidfun1(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/

(

inti;chart;

t=w[0J;

for(i=0;i<strlcn(w)-1;i++)

w[i]=w[i+l];

w[strlen(w)-l]=t;

}

voidfun(char*w,intm)/*可调用fun1函数左移字符*/

{

inti;

for(i=0;i<m;i++)funl(w);

)

main()

{chara[N]=MABCDEFGHIJK,,;J

本题是考察字符串的操作。

1.由于函数funl是将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符

串。

2.利用循环for语句来操作多少个字符(m)需要循环左移。。

第007套

一、程序填空题

本题是利用结构体变量存储了一名学生的信息。

第处:tt变量在函数体fun已经使用,所以应填:tto

第二处:利用循环分别输出学生的成绩数据,所以应填:tt.score[i]。

第三处:函数的调用,所以应填:std»

二、程序修改题

第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:m=i;。

第:处:通过内循环来找出最大的一个数的位置k,所以应改为:if(a[k]>a[m])m=k:。

三、程序设计题

#include<stdio.h>

unsignedfun(unsignedw)

(

if(w>10000)w%=10000;

elseif(w>l000)w%=1000;

elseif(w>100)w%=100;

elseif(w>10)w%=10;

returnw;

}

本题是考察考生怎样获取一个符合要求的无符号整数。本题是应用if条件语句首先判断给出的数是几

位数,再模相应的值,最后得出的余数就是结果。

第008套

一、程序填空题

本题是利用结构体存储学生记录并由实参SS返回。

第一处:实参SS是一个结构型指针变量,所以应填:STU。

第二处:该学生的各科成绩都乘以一个系数a,所以应填:scored。

第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。

二、程序修改题

第一处:条件判断缺少圆括号。

第二处:判断相等的符号是==。

三、程序设计题

intfun(inta[][N],intn)

(

inti,j;

for(i=0;i<N;i++)

for(j=0;j<=i;j++)

a[i]|j]*=n;

)

main()

{inta[N][N],n,i,j;

printf("*****Thearray*****\nH)

本题是利用两重循环给二维数组左下三角元素中的值乘以n。

第009套

一、程序填空题

本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。

第处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的next指针,

因此应填写:p.nexto

第二处:判断内循环q指针是否结束,所以应填:q。

第三处:外循环控制变量p指向自己的next指针,所以应填:p.nexto

二、程序修改题

第一处使用while循环来判断字符串指针s是否结束,所以应改为:while(*s)o

第二处:取字符串指针s的下一个位置,所以应改为:S++;。

三、程序设计题

#include<stdio.h>

#defineN80

voidfiin(int*w,intp,intn)

(

inti,j=0,b[N];

fbr(i=p+1;i<n;i++)b[j++]=w[i];

for(i=0:i<=p;i++)b[j++]=w[i];

for(i=0;i<n;i++)w[i]=b|i|;

)

main()

{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

inti,p,n=!5;

本题是考察一维数组的操作。

I.定义一维数组中间变量b,把n值后面数组中的内容存入b中。

2.再把m前的数组中的内容存入b中。

3.最后把数组b的内容依次存放到w中。

第010套

一、程序填空题

第•处:行列变量row和cokim的值初始化为0。

第二处:两个条件只要有一个不满足就返回0,所以应填:IL

第三处:如果矩阵是“幻方”,则返回1。

二、程序修改题

第•处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为

第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填returnI;。

三、程序设计题

#include<stdio.h>

#include<ctype.h>

intfun(char*str)

(

char*p=str;

inti=0;

while(*p){

if(*p!=1*)str[i++]=*p;

P++;

)

str[i]=0;

}

本题是考察考生怎样利用字符串指针来删除字符串的空格字符。在函数开始处把指针P先指向字符串

str以及位置变量i置.0,然后采用while循环和字符串指针p来处理的,每循环一次来判断指针p所指的字

符是否为空格,如果不是空格,则把该字符写到str字符串中,位置由i来控制,如果是空格,则不处理,

继续取下一字符,直至字符串结束为止,最后再把字符串结束符写到位置为i的str上,再通过形参str返

回。

第011套

一、程序填空题

本题是考察使用链表方法,对链表的结点数据进行降序排列。

第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p的初始

位置。所以应填写:h->next。

第二处:判断p指针是否结束,所以应填写:0«

第三处:q指向原q的next指针,所以应填:r。

二、程序修改题

第一处:程序中子串是由变量t来实现的,再根据下面while循环体中语句可知,所以应改为:r=t;o

第二处:是判断相等的条件,所以应改为:if(*r==0)。

三、程序设计题

voidfun(chara[M][N],char*b)

(

/*以下代码仅供参考*/

inti;*b=0;

for(i=0;i<M;i++)

strcat(b,a[i]);

}

main()

{charw[M][N]={"AAAA";,BBBBBBB","CCn},a[100];

本题是考察字符串的操作。

使用for循环以及C语言函数strcat依次连接起来。

第012套

一、程序填空题

本题是考察使用链表方法,对链表的结点数据进行降序排列,最后通过函数进行返回。

第•处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE*o

第二处:中间变量I•用来保存q的next指针,所以应填:nexto

第三处:q指向原q的next指针,所以应填:r。

二、程序修改题

第处:根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%2

IIs[i]%2==0)o

第二处:当字符串处理结束后,应该补上字符串的结束符,那么字符串t的位置是由i来控制,所以应

改为:

三、程序设计题

#include<stdio.h>

voidfun(int(*s)[I0],int*b,int*n,intmm,intnn)

(

/*以下代码仅供参考*/

inti,j,np=O;/*np用作b数组下标*/

fbr(i=0;i<nn;i++)

for(j=0;j<mm;j++){

b[npl=s[j][i];

np=i*mm+j+1;

}

*n=np;

}

main()

{intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;

inta[100]={0),n=0;

printf("ThematrixAn*');

for(i=0;i<3;i++)

{for(j=0;j<4;j++)printf(',%3d'\w[i]|j|);

printf(',\nr,);

)

fun(w,a,&n,3,4);

printf("TheAarray:\n");

for(i=0;i<n;i++)printf("%3d",a[i]);printf(',\n\n");

NONOO;

1

NONO()

{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;inti,j,k;

intw[10][10],a[100],n=0,mm,nn;

rf=fopen("c:\\test\\in.dat","r");

wf=fopen("c:\\test\\out.dat'\"w'');

for(k=0;k<5;k++){

fscanf(rf,"%d%d",&mm,&nn);

for(i=0;i<mm;i++)

for(j=0;j<nn;j++)fscanf(rf,n%d';&w[i][j]);

fun(w,a,&n,mm,nn);

for(i=0;i<n;i++)fprintf(wf,"%3dn,a[i]);fprintf(wf,"Xn");

)

fclose(rf);fclose(wf);

本题是把二维数组中的数据按行存放到一维数组中。

I.计算存放到一维数组中的位置。

2.取出二维数组中的数据存放到一维数组(已计算出的位置)中。

第013套

一、程序填空题

本题是考察使用链表方法,对链表的结点数据进行升序排列。

第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p的初始

位置。所以应填写:h->next»

第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以

应填写:p->next0

第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:>

(或>二)。

二、程序修改题

程序中是使用while循环语句和结合结构指针p来找到数据域中的最大值。

第一处p指向形参结构指针h的next指针,所以应改为:p=h->next;o

第二处:p指向自己的下,个结点,所以应改为:p=p->next,

三、程序设计题

#inciude<stdio.h>

voidfiin(int(*s)[10].int*b,int*n,intmm,intnn)

(

inti,j,k;

for(i=0;i<mm;i++)

for(j=0;j<nn;j++){

k=i*nn+j;

b[k]=s[i][j];

}

*n=mm*nn;

)

main()

{intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printf("Thematrix:\n");

for(i=0;i<3;i++)

{for(j=0;j<4;j++)printfC,%3d\w[i][j]);

printf("\n");

)

fun(w,a,&n,3,4);

printf(HTheAarray:\nn);

for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\nu);

NONO();

1

NONO()

{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;inii,j,k;

intw[10][10],a[100],n=0,mm,nn;

rf=fopen(r,c:\\test\\in.dat","r");

wf=fopen("c:\\test\\out.dat","w");

for(k=0;k<5;k++){

fscanf(rf,"%d%d",&mm,&nn);

for(i=0;i<mm;i++)

for(j=0;j<nn;j++)fscanf(rf,"%d",&w[i][j]);

fun(w,a,&n,mm,nn);

for(i=0;i<n;i++)fprintf(wf,*'%3d",a[i]);fprintf(wf,"\n");

)

fclose(rf);fclose(wf);

}

本题是把二维数组中的数据按行存放到•维数组中。

1.计算存放到一维数组中的位置。

2.取出二维数组中的数据存放到•维数组(已计算出的位置)中。

第014套

一、程序填空题

本题主要是考察用函数指针指向要调用的函数。程序中共有三处要填上适当的内容,使程序能运行出

正确的结果。

第一处:定义函数指针的类型,所以应填:double.

第二处:使f指向函数fl,所以应填:fl。

第三处:使f指向函数f2,所以应填:已。

二、程序修改题

本题是考察如何使用单向链表把数据域的值按条件进行累加。

第一处:试题要求不计算头结点,所以应改为:p=h->next;

第二处:指向p的下,个结点来实现循环,所以应改为:p=p->next;

三、程序设计题

#include<stdio.h>

#defineN80

intfun(char*str)

(

inti»j=strlen(str);

for(i=0;i<j/2;i++)

if(str[i]!=str[j-i-1])return0;

return1;

I

main()

{chars[N];

printf("Enterastring:");gets(s);

printf("\n\n");puts(s);

if(fun(s))printf("YES\nn);

elseprintf(nNO\nu);

NONO();

)

NONO()

{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;

inti;chars[N];

rf=fopen("c:\\test\\in.dat",nr");

wf=fopen("c:\\test\\out.dat","w");

for(i=0;i<10;i++){

fscanf(rf,"%sn,s);

if(fun(s))fprintf(wf,"%sYES\n';s);

elsefprintf(wf,"%sNO\n",s);

)

fclose(rf);fclose(wf);

}

本题是考察如何判断•个字符串是回文字符串,回文是指顺读和倒读都一样

的字符串。可以利用for循环语句来判断,如果前后不一致,则不是回文字符串。

第015套

一、程序填空题

本题是考察如何从指定文件中找出指定学号的学生.数据,并进行适当的修改,修改后重新写回到文件

中该学生的数据上,即用该学生的新数据覆盖原数据。

第一处:判断读文件是否结束,所以应填:fPo

第二处:从读出的数据中判断是否是指定的学号,其中学号是由形参sn。来传递的,所以应填:==0

第三处:从已打开文件fp中重新定位当前读出的结构位置,所以应填:fp«

二、程序修改遨

第一处:函数应该使用圆括号,所以应改为:n=strlen(aa);<>

第二处:变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aa[i];。

三、程序设计题

#include<stdio.h>

#include<stdlib.h>

#defineN8

structslist

{doubles;

structslist*next;

);

typedefstructslistSTREC;

doublefun(STREC*h)

(

doublemax=h->s;

STREC*p;

p=h->next;

while(p)

{if(p->s>max)

max=p->s;

p=p->next;

)

returnmax;

)

STREC*creat(double*s)

{STREC*h,*p,*q;inti=0;

h=p=(STREC*)mal!oc(sizeof(STREC));p->s=0;

while(i<N)

{q=(STREC*)malloc(sizeof(STREC));

q->s=s|i];i++;p->next=q;p=q;

)

p->next=0;

returnh;

}

outlist(STREC*h)

{STREC*p;

p=h->next;printfChead1,);

do

{printf("->%2.0f',p->s);p=p->next;)

while(p!=0);

printf("\n\n");

}

main()

{doubles[N]={85,76,69,85,91,72,64,87},max;

STREC*h;

h=creat(s);outlist(h);

max=fun(h);

printf(',max=%6.1f\n",max);

NONO();

}

NONO()

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

FILE*in,*out;

inti,j;doubles[N],max;

STREC*h;

in=fopen("c:\\test\\in.dat”;T");

out=fopen(,'c:\\test\\out.dat",''wn);

for(i=0;i<10;i++){

for(j=0;j<N;j++)fscanf(in,&s[j]);

h=creat(s);

max=fun(h);

fprintf(out,"%6.1lf\n",max);

)

fclose(in);

fclose(out);

}

本题是考察如何从链表中求出学生的最高分。

我们给出的程序是利用while循环语句以及临时结构指针p变量来求出最高分。

1.将链表中的第1个值赋给变量max。

2.将链表指针p的初始位置指向h的next指针(h->next)«

3.判断p指针是否结束,如果结束,则返回max,否则做下一步。

4.判断max是否小于p->s,如果小于,则max取p->s,否则不替换。

5.取p->next赋值给p(取下一结点位置给p),转3继续。

第016套

一、程序填空题

第一处:利用for循环语句取当前字符串的长度,所以应填:ss[i]。

第二处:在字符串的右边填字符*,其开始位置是n+j,其中n是该字符串本身的长度,j是循环控制变

量,所以应填:n+j。

第三处:字符串处理结束应置字符串结束符,其位置是n+j+1,所以应填:1。

二、程序修改题

第一处:关键字int错写成INT。

第二处:该行括号没有配对,所以只要加上一个右括号即可。

三、程序设计题

#include<stdio.h>

#include<ctype.h>

#include<string.h>

intfun(char*s,inlnum)

(

charch;

inti,j;

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

for(j=i+1;j<6;j++){

if(*(s+i)<*(s+j)){

ch=*(s+j);

*(s+j)=*(s+i);

*(s+i)=ch;

main()

chars[10];

printf("输入7个字符的字符串

gets(s);

fun(s,7);

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

NONO();

NONO()

/*请在此函数内打开文件,输入测试数据,调用fun函数,

输出数据,关闭文件。*/

chars|10];

FILE*rf,*wf;

inti=0;

rf=fopen("c:\\test\\in.dat,,,',rn);

wf=fopen(',c:\\test\\out.dat","w");

while(i<10){

fgets(s,10,rf);

s[7]=0;

fun(s,7);

fprintf(wf,H%s\n",s);

i++;

)

fclose(rf);

fclose(wf);

1

本题是考察考生如何对字符串中的字符按降序进行排序。给出的程序是使用双重for循环以及冒泡法

进行排序的,结果仍存放在原先的字符串上。

第017套

♦、程序填空题

本题是对结构体数组中的姓名按升序进行排列。

第处:t是•个临时变量,主要是存放学生数据的结构变量,所以应填:structstudcnto

第二处:利用两重for循环进行排序操作,排序的终止条件应该是总人数减1,所以应填:n-U

第三处:对姓名进行比较大小,所以应填:a[,a|j].nameo

二、程序修改题

第一处:在语句后缺少分号,所应改为:q=p+i;o

第二处:保留字while写错,所应改为:while(q>p)o

三、程序设计题

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b,int1,inth)

(

inti,j=0;

for(i=0;i<N;i++)

if(a|i].s>=I&&a[i].s<=h)b[j++]=a[i];

returnj;

I

main()

{STRECs[N]={{',GA005",85),{nGA003",76},{,,GA002",69),{"GA004",85),

("GA00I",96),{"GA007,,,72h{"GA008,;64),{,,GA006",87},

{"GAO15",85),{"GAO13”,94},{"GAO12",64),{"GA014",91},

{"GAO11*90},{"GAO17*64},{nGA018",64),{"GA016",72}};

STRECh[N],tt;FILE*out;

inti,j,n,low,height;

printf("Enter2integernumberlow&heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low){t=heigh;heigh=low;low=t;}

n=fun(s,h,low,heigh);

printf("Thestudent'sdatabetween%d—%d:\n",low,heigh);

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

printf(H%s%4d\n,'»h[i].num,h[i].s);

printf("\n");

out=fopcn("c:\\test\\out.dat","w");

n=fun(s,h,80,98);

fprintf(out/'%d\n",n);

for(i=0;i<n-l;i++)

for(j=i+l;j<n;j++)

if(h[i].s>h[j].s){tt=h[i];h[i]=hU];hU]=tt;}

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

fprintf(out,"%4d\n",h[i].s);

fprintf(out,"\n");

fclose(out);

)

本题是把符合条件的学生记录存入到另一个结构体,最后通过主函数进行输出。

1.符合条件的学生人数存在变量j(初始值为0)中,最后返回其值。

2.利用for循环语句,依次判断是否符合条件,如果符合,则存入另一个记录体中,人数j加1。

第018套

一、程序填空题

第一处:函数中申请了两个内存空间,其p是存放字母字符串,t是存放非字母字符串,根据条件可

知,P依次存放字母字符串,其位置由j来控制,所以应填:

第二处:利用for循环再把t中的内容依次追加到P中,其中t的长度为k,所以应填:ko

第三处:字符串处理好后必须添加字符串结束符,所以应填:V)'。

二、程序修改题

第一处:判断w指针所指的值是否是结束符,应改为:while(*w)o

第二处:if错写成If。

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart|])

(

inti,j=0;

for(i=0;i<strlen(s);i++)if(s[i]%2==0)t[j++]=s[i];

tUl=o;

}

niain()

(

chars[100],t[100];

printf("\nPleaseenterstringS:");scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n'\t);

NONO();

}

NONO()

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

chars[100],t[100];

FILE*rf,*wf;

inti;

rf=fopen(',c:\\test\\in.dat";,r");

wf=fopen("c:\\test\\out.dat","w");

for(i=0;i<10;i++){

fscanf(rf,"%s",s);

fun(s,t);

fprintf(wf,"%s\n",t);

)

fclose(rf);

fclose(wf);

本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。

第019套

一、程序填空题

本题是利用形参对结构体变量中的值进行修改并通过地址把函数值返回。

第一处:必须定义结构指针返回类型,所以应填:structstudent*。

第二处:分别对成绩增加1分,所以应填:a->score[i]。

第三处:返回结构指针a,所以应填:a。

二、程序修改题

第•处:要求返回字符串的首地址,所以应改为:char*fun(char(*sq)[M])o

第二处:返回一个由变量sp控制的字符串指针,所以应改为:returnsp;。

三、程序设计题

#include<stdio.h>

voidfun(inta,intb,long*c)

(

*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;

)

main()

{inta,b;longc;

printf("Inputa,b:");

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

fun(a,b,&c);

printf(nThcresultis:%ld\n",c);

NONO();

}

NONO()

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

FILE*rf,*wf;

inti,a,b;longc;

rf=fopenC'cAXtestWin.dat'V'r");

wf=fopen("c:\\test\\oul.dat","w");

for(i=0;i<10;i++){

fscanf(rf,"%d,%dH,&a,&b);

fun(a,b,&c);

fprintf(wf,Ha=%d,b=%d»c=%ld\n,\a,b,c);

)

fclose(rf);

fclose(wf);

本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。

取a十位数字的方法:a/10

取a个位数字的方法:a%10

第020套

一、程序填空题

第•处:求出N个数的平均值,所以应填:No

第二处:利用for循环语句,把数组x中小于平均值的数,依次存放到数组y中,其中位置由变量j

来控制,所以应填:

第三处:i是while循环体的控制变量,每做一次循环均要加1。

二、程序修改题

第一处:num初始化错误,应为:num[k]=0;o

第二处:由于s是指针型变量,所以应改为:switches)。

三、程序设计题

#includc<stdio.h>

#defineM4

#defmeN5

intfun(inta[M][N])

{

inttot=0,i,j;

for(i=0;i<N;i++){

tot+=a[0][i];

tot+=a|M-l][i];

)

for(i=1;i<M-1;i++){

tot+=a[i][0];

tot+=a[i][N-l];

)

returntot;

}

main()

{intaa[M][N]={{1,3,579},

{299,9,4),

{6,9,998},

(1,357,0));

inti,j,y;

clrscr();

printf("Theoriginaldatais:\n");

for(i=0;i<M;i++)

{for(j=0;j<N;j++)printf(”%6d*aa[i][j]);

printf(H\n");

)

y=fun(aa);

printf("\nThesum:%d\nH,y);

printf("\n");

NONO();

NONO()

{/*请在此函数内打开文件,输入测试数据,调用fun函数,

输出数据,关闭文件。*/

inti,j,y,k,aa[M][N];

FILE*rf,*wf;

rf=fopcn("c:\\test\\in.dat",nr");

wf=fopenC'ciWtestWout.dat'V'w");

for(k=0;k<10;k++)(

for(i=0;i<M;i++)

for(j=0;j<N;j++)fscanf(rf,"%d",&aa[i][j]);

y=fun(aa);

fprintf(wf,"%d\n",y);

)

fclose(rf);

fclose(wf);

)

本题是统计二维数组周边元素值之和,但要注意的是不要重复计算四个角上的元素值,结果作为函数

值返回。

第021套

一、程序填空题

第一处:计算N个数的平均值,所以应填:s/N。

第二处:利用for循环语句,把数组x中大于平均值的数,依次存放到数组y中,同时把数组x上的

该数置为其中位置由变量j来控制,所以应填:j++。

第三处:再利用循环把不是-1的数,依次仍存放到数组y中,所以应填:-1。

二、程序修改题

第一处:包含头文件的标识错误,在include前漏写了#。

第二处:由于传入的参数是字符串,所以应为upfst(char*p)。

三、程序设计题

#include<stdio.h>

#include<stdlib.h>

#defineN5

doublefun(intw[][N])

(

inti,j,n=0;

doublesum=0;

for(i=0;i<N;i++)(

sum+=w[0][i]+w[N-1][i];n+=2;

}

for(i=l;i<N-l;i++){

sum+=w[i][0]+w[i][N-l];

n+=2;

)

returnsum/n;

(

main()

{inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1A5,6,8,2,5,9,1,4,1);

inti,j;

doubles;

printfC******Thearray*****\n");

for(i=0;i<N;i-H-)

{for(j=0;j<N;j++)

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

printf("\n");

)

s=fun(a);

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

printf("Thesumis:%lf\n",s);

N0N0();

NONO()

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

FILE*rf,*wf;

inti,j,a[5]|5J;doubles;

rf=fopen("c:\\test\\in.dat","r");

wf=fopen("c:\\test\\out.dat","w");

for(i=0;i<5;i++)

for(j=0;j<5;j++)fscanf(rf,"%d",&a[i][j]);

s=fun(a);

fprintf(wf;s);

fclose(rf);

fclose(wf);

}

本题是统计二维数组周边元素值的平均值,但要注意的是不要重复计算四个角上的元素值。

第022套

一、程序填空题

本题要求所求出的数写入到指定的文件中保存。程序中共有三处要填上适当的内容,使程序能运行出

正确的结果。

第一处:intfprintf(FILE"stream,constchar*format[argument,•••]);因此本处只能填写文件流的变量

fp。

第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)。

第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出文件名,所

以本处只能写文件名变量fname或者直接给出文件名”myfile3.dat”。

二、程序修改题

第一处:for循环的终止值应该vn或者是v=n-l。

第二处:使用临时变量p来保存最小值位置i,所以应改为:p=i;o

三、程序设计题

#include<stdio.h>

voidfun(inta,intb,long*c)

(

*c=(b%10)*1000+(a%10)*100+(b/l0)*10+(a/l0);

)

main()

{inta,b;longc;

printf("Inputa,b:n);

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

fun(a,b,&c);

printf("Theresultis:%ld\n",c);

NONO();

1

NONO()

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

FILE*rf,*wf;

inti,a,b;longc;

rf=fopen(',c:\\test\\in.dat,',"r");

wf=fopen("c:\\test\\out.dat"/,w");

for(i=0;i<10;i++){

fscanf(rf,"%d,%dn,&a,&b);

fun(a,b,&c);

fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);

)

fclose(ri');

fclose(wf);

}

本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成•个新数。

取a十位数字的方法:a/10

取a个位数字的方法:a%10

第023套

一、程序填空题

第一处:把每列的第1值赋值给b[i],所以应填:a[0][i]»

第二处:如果b[i]值小于的值,则把a[j]⑴重新赋值给b国中,保存最大的值,所以应填:<»

第三处:在主函数中,x是存放矩阵数据,y是存放每列的最大值,所以应填:x,y。

二、程序修改题

第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由了通过该函数实现两数交换,

在C语言中,必须交换地址中的值,所以应定义为int*x,int*y。

第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*x;*x=*y:*y=t;。

三、程序设计题

#include<stdio.h>

#defineMAX100

intfun(intlim,intaa[MAX])

(

/*以下代码仅供参考*/

inti,j,k=0;

/*其中变量k用于统计素数个数*/

fbr(i=2;i<=lim;i++)

(

/*以下完成判断aa数组中小于或等于lim的素数并统计个数*/

for(j=2;j<=(i/2);j++)

if(i%j==0)break;

if(j>(i/2))aa[k++]=i;

)

returnk;

}

main()

{

intlimit,i,sum;

intaa[MAX];

printf("输入一个整数)

scanf("%d",&limit);

sum=fun(limit,aa);

for(i=0;i<sum;i++){

if(i%10=0&&i!=0)printf("\n");

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

)

NONO();

NONO()

/*请在此函数内打开文件,输入测试数据,调用fun函数,

输出数据,关闭文件。*/

FILE*rf,*wf;

intlimit,i,sum,aa[MAX];

rf=fopen("c:\\test\\in.dat",nr");

wf=fopen("c:\\test\\out.dat'\',w");

fscanf(rf,n%d'\

sum=fun(limit,aa);

for(i=0;i<sum;i++)fprintf(wf,"%d\n",aa[i]);

fclose(ri');

fclose(wf);

}

本题是考察考生如何判断一个数是素数,再求出所有小于lim数的素数并存入数组aa中保存,最后

由形参aa返

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论