精华版c语言上机答案.docx
《精华版c语言上机答案.docx》由会员分享,可在线阅读,更多相关《精华版c语言上机答案.docx(65页珍藏版)》请在冰点文库上搜索。
精华版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;jb[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;ifor(i=0;ij=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;iif(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;iw[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;ifor(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;ifor(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;istrcat(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;ifor(j=0;jb[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;ifor(j=0;jk=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;iNONO();
}
第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;iif(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