精华版c语言上机答案.docx
- 文档编号:12209676
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:65
- 大小:53.32KB
精华版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;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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精华版 语言 上机 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)