精华版c语言上机答案.docx

上传人:b****1 文档编号:2002818 上传时间:2023-05-02 格式:DOCX 页数:65 大小:53.32KB
下载 相关 举报
精华版c语言上机答案.docx_第1页
第1页 / 共65页
精华版c语言上机答案.docx_第2页
第2页 / 共65页
精华版c语言上机答案.docx_第3页
第3页 / 共65页
精华版c语言上机答案.docx_第4页
第4页 / 共65页
精华版c语言上机答案.docx_第5页
第5页 / 共65页
精华版c语言上机答案.docx_第6页
第6页 / 共65页
精华版c语言上机答案.docx_第7页
第7页 / 共65页
精华版c语言上机答案.docx_第8页
第8页 / 共65页
精华版c语言上机答案.docx_第9页
第9页 / 共65页
精华版c语言上机答案.docx_第10页
第10页 / 共65页
精华版c语言上机答案.docx_第11页
第11页 / 共65页
精华版c语言上机答案.docx_第12页
第12页 / 共65页
精华版c语言上机答案.docx_第13页
第13页 / 共65页
精华版c语言上机答案.docx_第14页
第14页 / 共65页
精华版c语言上机答案.docx_第15页
第15页 / 共65页
精华版c语言上机答案.docx_第16页
第16页 / 共65页
精华版c语言上机答案.docx_第17页
第17页 / 共65页
精华版c语言上机答案.docx_第18页
第18页 / 共65页
精华版c语言上机答案.docx_第19页
第19页 / 共65页
精华版c语言上机答案.docx_第20页
第20页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

精华版c语言上机答案.docx

《精华版c语言上机答案.docx》由会员分享,可在线阅读,更多相关《精华版c语言上机答案.docx(65页珍藏版)》请在冰点文库上搜索。

精华版c语言上机答案.docx

精华版c语言上机答案

二级C语言上机试题汇编100套

第01套:

解题思路:

第一处:

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

10。

第二处:

判断是否是奇数,所以应填:

0。

第三处:

最后通过形参n来返回新数x,所以应填:

x。

*******************

解题思路:

第一处:

条件语句书写格式错误,应改为:

if(n==0)。

第二处:

语句后缺少分号。

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

将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

解题思路:

本题是将一个数字字符串转换为一个整数。

参考答案:

#include

#include

longfun(char*p)

{

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

inti,len,t;/*len为串长,t为正负标识*/

longx=0;

len=strlen(p);

if(p[0]=='-')

{t=-1;len--;p++;}

elset=1;

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

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

returnx*t;

}

main()/*主函数*/

{chars[6];

longn;

printf("Enterastring:

\n");

gets(s);

n=fun(s);

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

NONO();

}

NONO()

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

*/

FILE*fp,*wf;

inti;

chars[20];

longn;

fp=fopen("c:

\\test\\in.dat","r");

wf=fopen("c:

\\test\\out.dat","w");

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

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

n=fun(s);

fprintf(wf,"%ld\n",n);

}

fclose(fp);

fclose(wf);

}

注意:

由于NONO()这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开始均省略NONO()

※※※※※※※※※

第02套:

解题思路:

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

第一处:

定义文本文件类型变量,所以应填:

FILE*。

第二处:

判断文件是否结束,所以应填:

fp。

第三处:

显示读出的字符,所以应填:

ch。

*******************解题思路:

第一处:

要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j来控制新字符串的位置,所以应改为:

s[j++]=s[i];。

第二处:

置新字符串的结束符,所以应改为:

s[j]='\0';.

*******************

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

将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

参考答案:

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

{

inti,j,n=0;

for(i=0;i

{

for(j=0;j

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

n=i*M+j+1;

}

}

b[n]='\0';

}

第03套:

解题思路:

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

第一处:

从指定的文件中读出数据,所以应填:

filename。

第二处:

读取文件fp的最后一条记录,所以应填:

fp。

第三处:

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

fp。

*******************

解题思路:

第一处:

指向刚分配的结构指针,所以应改为:

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

第二处:

在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为返回h。

*******************

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

统计一行字符串中单词的个数,作为函数值返回。

一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

参考答案:

intfun(char*s)

{

intk=1;

while(*s){

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

s++;

}

returnk;

}

第04套:

解题思路:

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

第一处:

建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读出,所以应填:

"rb"。

第二处:

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

>。

第三处:

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

fwrite。

*******************

解题思路:

第一处:

指针p应指向s,所以应改为:

p=s;。

第二处:

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

while(*p++);。

*******************

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

统计各年龄段的人数。

N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。

结果在主函数中输出。

解题思路:

参考答案:

voidfun(int*a,int*b)

{

inti,j;

for(i=0;i

for(i=0;i

j=a[i]/10;

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

}

}

doublernd()

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

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

}

第05套:

解题思路:

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

第一处:

定义文本文件类型变量,所以应填:

FILE*。

第二处:

关闭刚写入的文件,所以应填:

fclose(fp)。

第三处:

从文件中读出数据,所以应填:

fp。

*******************

解题思路:

第一处:

语句最后缺少分号。

第二处:

应该使用方括号,而不是圆括号。

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

*******************

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

删去一维数组中所有相同的数,使之只剩一个。

数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

参考答案:

intfun(inta[],intn)

{

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

for(i=1;i

if(k!

=a[i]){

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

k=a[i];

}

a[j]=0;

returnj;

}

第06套:

解题思路:

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

第一处:

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

double。

第二处:

当i等于1时,则返回f1函数的值,所以应填:

f1。

第三处:

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

f2。

*******************

解题思路:

第一处:

试题要求返回字符串的首地址,所以应改为:

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

第二处:

取字符串指针ss的下一个位置,所以应改为:

ss++;。

第三处:

取字符串指针tt的下一个位置,所以应改为:

tt++;。

*******************

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

移动字符串中的内容,移动的规则如下:

把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

参考答案:

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

{

inti;chart;

t=w[0];

for(i=0;i

w[i]=w[i+1];

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

}

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

{

inti;

for(i=0;i

}

第07套:

解题思路:

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

第一处:

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

tt。

第二处:

利用循环分别输出学生的成绩数据,所以应填:

tt.score[i]。

第三处:

函数的调用,所以应填:

std。

*******************解题思路:

第一处:

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

m=i;。

第二处:

通过内循环来找出最大的一个数的位置k,所以应改为:

if(a[k]>a[m])m=k;。

*******************

请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。

参考答案:

unsignedfun(unsignedw)

{

if(w>10000)w%=10000;

elseif(w>1000)w%=1000;

elseif(w>100)w%=100;

elseif(w>10)w%=10;

returnw;

}

第08套:

解题思路:

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

第一处:

实参ss是一个结构型指针变量,所以应填:

STU。

第二处:

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

score[i]。

第三处:

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

&std。

*******************解题思路:

第一处:

条件判断缺少圆括号。

第二处:

判断相等的符号是==。

*******************

程序定义了N×N的二维数组,并在主函数中自动赋值。

请编写函数fun(inta[][N],intn),函数的功能是:

使数组左下三角元素中的值乘以n。

参考答案:

intfun(inta[][N],intn)

{

inti,j;

for(i=0;i

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

a[i][j]*=n;

}

第09套:

解题思路:

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

第一处:

由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的next指针,因此应填写:

p.next。

第二处:

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

q。

第三处:

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

p.next。

*******************

解题思路:

第一处:

使用while循环来判断字符串指针s是否结束,所以应改为:

while(*s)。

第二处:

取字符串指针s的下一个位置,所以应改为:

s++;。

*******************

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

移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。

参考答案:

voidfun(int*w,intp,intn)

{

inti,j=0,b[N];

for(i=p+1;i

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

for(i=0;i

}

第10套:

解题思路:

第一处:

行列变量row和colum的值初始化为0。

第二处:

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

||。

第三处:

如果矩阵是“幻方”,则返回1。

*******************

解题思路:

第一处:

在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为t-=1./i。

第二处:

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

*******************

请编写一个函数,函数的功能是删除字符串中的所有空格。

参考答案:

intfun(char*str)

{

char*p=str;

inti=0;

while(*p){

if(*p!

='')str[i++]=*p;

p++;

}

str[i]=0;

}

第11套:

解题思路:

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

第一处:

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

所以应填写:

h->next。

第二处:

判断p指针是否结束,所以应填写:

0。

第三处:

q指向原q的next指针,所以应填:

r。

*******************

解题思路:

第一处:

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

r=t;。

第二处:

是判断相等的条件,所以应改为:

if(*r==0)。

*******************

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

将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。

函数fun中给出的语句仅供参考。

参考答案:

#include

#defineM3

#defineN20

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

{

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

inti;*b=0;

for(i=0;i

strcat(b,a[i]);

}

第12套:

解题思路:

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

第一处:

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

NODE*。

第二处:

中间变量r用来保存q的next指针,所以应填:

next。

第三处:

q指向原q的next指针,所以应填:

r。

*******************

解题思路:

第一处:

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

if(i%2||s[i]%2==0)。

第二处:

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

t[j]=0;。

*******************

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

将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。

函数fun中给出的语句仅供参考。

参考答案:

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

{

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

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

for(i=0;i

for(j=0;j

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

np=i*mm+j+1;

}

*n=np;

}

第13套:

解题思路:

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

第一处:

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

所以应填写:

h->next。

第二处:

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

所以应填写:

p->next。

第三处:

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

>(或>=)。

*******************

解题思路:

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

第一处:

p指向形参结构指针h的next指针,所以应改为:

p=h->next;。

第二处:

p指向自己的下一个结点,所以应改为:

p=p->next,

*******************

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

将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

参考答案:

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

{

inti,j,k;

for(i=0;i

for(j=0;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++)printf("%3d",w[i][j]);

printf("\n");

}

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

printf("TheAarray:

\n");

for(i=0;i

NONO();

}

第14套:

解题思路:

本题主要是考察用函数指针指向要调用的函数。

程序中共有三处要填上适当的内容,使程序能运行出正确的结果。

第一处:

定义函数指针的类型,所以应填:

double。

第二处:

使f指向函数f1,所以应填:

f1。

第三处:

使f指向函数f2,所以应填:

f2。

*******************

解题思路:

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

第一处:

试题要求不计算头结点,所以应改为:

p=h->next;

第二处:

指向p的下一个结点来实现循环,所以应改为:

p=p->next;

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

判断字符串是否为回文?

若是,函数返回1,主函数中输出:

YES,否则返回0,主函数中输出NO。

回文是指顺读和倒读都一样的字符串。

参考答案:

intfun(char*str)

{

inti,j=strlen(str);

for(i=0;i

if(str[i]!

=str[j-i-1])return0;

return1;

}

main()

{chars[N];

printf("Enterastring:

");gets(s);

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

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

elseprintf("NO\n");

NONO();

}

第15套:

解题思路:

本题是考察如何从指定文件中找出指定学号的学生数据,并进行适当的修改,修改后重新写回到文件中该学生的数据上,即用该学生的新数据覆盖原数据。

第一处:

判断读文件是否结束,所以应填:

fp。

第二处:

从读出的数据中判断是否是指定的学号,其中学号是由形参sno来传递的,所以应填:

==。

第三处:

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

fp。

*******************

解题思路:

第一处:

函数应该使用圆括号,所以应改为:

n=strlen(aa);。

第二处:

变量c没有定义,但后面使用的是ch变量,所以应改为:

ch=aa[i];。

*******************

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。

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

找出学生的最高分,由函数值返回。

参考答案:

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*)malloc(sizeof(STREC));p->s=0;

while(i

{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;printf("head");

do

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2