国家二级C语言机试(操作题)模拟试卷13(共27题)_第1页
国家二级C语言机试(操作题)模拟试卷13(共27题)_第2页
国家二级C语言机试(操作题)模拟试卷13(共27题)_第3页
国家二级C语言机试(操作题)模拟试卷13(共27题)_第4页
国家二级C语言机试(操作题)模拟试卷13(共27题)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C语言机试(操作题)模拟试卷13(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是将形参指针所指结构体数组中的3个元素按num成员进行升序排列。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2typedefstruct3{intnum;4charname[10];5}PERSON;6/*********found*********/7voidfun(PERSON<u>【1】</u>8{9/*********found*********/10<u>【2】</u>temp;11if(std[0].num>std[1].num)12{temp=std[0];13std[0]=std[1];14std[1]=temp;}15if(std[0].num>std[2].num)16{temp=std[0];std[0]=std[2];17std[2]=temp;}18if(std[1].num>std[2].num)19{temp=std[1];20std[1]=std[2];21std[2]=temp;}22}23main()24{PERSONstd[]={5,"ZhangHu",2,"WangLi",6,"LinMin"};25inti;26/*********found*********/27fun<u>【3】</u>;28printf("Theresultis":);29for(i=0;i<3;i++)30printf("%d,%s",std[i].num,std[i].name);31}标准答案:(1)std[](2)PERSON(3)(std)知识点解析:本题考查:数据类型的定义、数组元素的操作、函数参数的传递。当使用函数对整个数组进行操作时,应使用数组名作为函数的实参。当使用数组名作为实参时,函数传递的实际上是数组的首地址,而并非数组本身。此时形参除了可以定义为指针变量外,还可以定义为数组,并且数组可以不指定大小,但无论用哪种形式,程序在编译时都将其作为一个指针变量处理。填空1:定义形参变量引用数组std。形参可以定义为指针类型,也可以定义为数组。故空1处应该填std[]。填空2:程序使用变量temp交换结构体数组元素的值,因而temp应定义为PERSON型。故空2处应该填PERSON。填空3:程序通过调用函数fun()对数组std进行操作,因此函数的实参应为std。故空3处应该蟮(std)。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是将m(1≤m≤10)个字符串连接起来,组成一个新字符串,放入pt所指存储区中。如把3个字符串"abc""CD""EF"连接起来,结果是"abcCDEF"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<string.h>3voidfun(charstr[][10],intm,char*pt)4{5/*********found*********/6Intk,q,i;7for(k=0;k<m;k++)8{q=strlen(str[k]);9for(i=0;i<q;i++)10/*********found*********/11pt[i]=str[k,i];12pt+=q;13pt[0]=0;14}15}16main()17{intm,h;18chars[10][10],p[120];19printf("PLeaseenterm:");20scanf("%d",&m);gets《s[0]);21printf("Pleaseenter%dstring:",m);22for(h=0;h<m;h++)23gets(s[h]);24fun(s,m,p);25printf("Theresultis:%s",p);26}标准答案:(1)inlk,q,i;(2)pt[i]=str[k][j];知识点解析:本题考查:c语言的书写和语法性错误。这类错误比较简单,只要编译程序,根据错误提示修改即可。(1)关键字书写错误,定义整型变量的关键字应使用int,而非Int。(2)数组元素表示错误,表示二维数组元素,应使用方括号将行坐标和列坐标分别标识,即str[k,i]应改为str[k][i]。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是将数组下三角元素中的值全部置成0。如a数组中的值为注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#inclucte<stdio.h>3#include<stdlib.h>4#defineN55voidfun(inta[][N])6{78}9voidmain()10{11inta[N][N],i,j;12system("CLS");13printf("****Thearray****\n);14for(i=0;i<N;i++)15/*********found*********/16{17for(j=0;j<N;j++)18{19a[i][j]=rand()%10;20print("%4",a[i][j]);21}22printf("\n");23}24fun(a);25printf("TheResult\n");26for(i=0;i<N;i++)27{28for(j=0;j<N;j++)29printf("%4d",a[i][j]);30printf("\n");31}32}标准答案:1voidfun(inta[][N])2{3inti,j;4for(i=0;i知识点解析:本题考查:for循环语句,使用嵌套循环语句遍历二维数组的各个元素;二维数组元素的引用。对于N×N二维数组,表示其下三角元素,可以通过以下语句实现。1for(i=0;i国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:123456789计算结果为741852963请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdlo.h>#defineN4voidfun(int(*t)[N]){intj,r[N];for(j=0;j<N;j++)r[j]=t[0][j];for<j=0;j<N;j++)/**********found**********/t[0][N-j-1]=t[j][___1___];for(j=0;j<N;j++)t[j][0]=t[N-1][j];/**********found**********/for(j=N-1;j>0;___2___)t[N-1][N-1-j]=t[j][N-1];for(j=N-1;j>=0;j--)/**********found**********/t[j][N-1]=r[___3___];}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,2l,33,10},i,j;printf("\nTheoriginalarray:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%2d",t[i][j]);printf("\n");}fun(t);printf("\nTheresultis:\n");for(i=0;i<N;i++){for(j=0jj<N;j++)printf("%2d",t[i][j]);printf("\n");}}标准答案:(1)0(2)i--(3)j知识点解析:函数fun操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。第一空:由审题分析可知,此处是使第一列成为第一行,即把第一列元素移动到第一行,第一列元素是“t[i][0]”,第一行元素是“t[0][N-j-1]”,故第一空处应为“0”。第二空:第四个循环是最后一列成为最后一行,即将最后一列移动到最后一行,“for(j=N-1;i>=0;___2___)”循环变量j从N-1开始,到0结束,共循环N次,故j每次减1,第三空处是“j--”。第三空:最后一个循环将临时数组中的元素成为最后1列,即“t[i][N-1]=r[j]”,故第三空处应为“j”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:计算s=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+tin)的值。例如,当n为5时,函数值应为:10.407143。f(x)函数定义如下:请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<math.h>/**********found**********/f(doublex){if(x==0.0‖x==2.0)return0.0;elseif(x<0.0)return(x-1)/(x-2);elsereturn(x+1)/(x-2);}doublefun(intn){inti;doubles=0.0,y;for(i=-n;i<=n;i++){y=f(1.0*i);s+=y;}/**********found**********/returns}main(){printf("%f\n",fun(5));}标准答案:(1)doublef(doublex)(2)returns;知识点解析:本题中函数的功能是计算题干中给出的公式值。主函数main调用fun函数,fun函数的功能是实现数列的求解。其中,fun函数中调用实现每一项的f函数。(1)第一个标识下f函数的定义缺少返回值类型,所以,将“f(doublex)”改为“doublef(doublex)”。(2)第二个标识下返回语句没有分号结束。所以,第二个标识下“returns”应该改为“retums;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,它的功能是计算:s作为函数值返回。在C语言中可调用log(n)函数求ln(n)。log函数的引用说明是:doublelog(doublex)。例如,若m的值为:20,fun函数值为:6.506583。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<math.h>#include<stdio.h>doublefun(intm){}main(){voidNONO();printf("%f\n",fun(20));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:doubles=0.0;inti;for(i=1;i<=m;i++)s+=log(1.0*i);s=sqrt(s);returns;知识点解析:该程序功能是计算并输出多项式值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行求值。(1)调用log(n)函数求ln(n)。(2)对调用log(n)进行累加求和,求得根号里的内容。(3)最后调用C语言的库函数sqrt计算(2)中求得值的平方根。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:输出a所指数组中的前n个数据,要求每行输出5个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>void=fun(int*a,intn){inti;for(i=0;i<rl;i++){/*********found*********/if(【1】==0)/*********found*********/printf("【2】");/*********found*********/printf("%d",【3】);}}main(){inta[100]={0),i,n;n=22;for(i=0;i<n;i++)a[i]=rand()%21;fun(a,n);printf("\n");}标准答案:(1)i%5(2)\n(3)a[i]知识点解析:填空1:每行输出5个数,即当下标值能整除5时换行。填空2:输出换行符’\n’。填空3:输出数组元素。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,fun函数的功能是:在任意给定的N个正整数中,从左到右依次逐个取三个数作为一组,按值大小找出该组数的中值,用该中值替换与该组数对应的原三个数中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中输出。例如,有10个正整数如下:初始数列为:657231858214538第1组数为:657中值为:6替换后的数列为:667231858214538第2组数为:5723中值为:7替换后的数列为:667231858214538第3组数为:72318中值为:18替换后的数列为:667181858214538第4组数为:23185中值为:18替换后的数列为:667181858214538第5组数为:1858中值为:8替换后的数列为:667181888214538第6组数为:5821中值为:8替换后的数列为:667181888214538第7组数为:82145中值为:21替换后的数列为:667181888214538第8组数为:214538中值为:38替换后的数列为:667181888213838最终结果为:667181888213838请改正程序中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN10intfinclmid(inta,intb,intc){intt;t=(a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b));/*********found*********/retuErlb;}voidfun(intx[]){inti,a,b,c,t[N];/*********found*********/for(i=0;i<N;i++)t[i]=x[i]for(i=0;i<N﹣2;i++){a=t[i];b=t[i+1];c=t[i+2];/*********found*********/t[i+1]=~findmid(a,b,c);}}main(){inti,x[N]={6,5,7,23,18,5,8,21,45,38};for(i=0;i<N;i++)printf("%d",x[i]);printf("\n");fun(x);for(i=0;i<N;i++)printf("%d",x[i]);printf("\n");}标准答案:(1)returnt;(2)for(i=0;i<N;i++)t[i]=x[i];(3)x[i+1]=findmid(a,b,c);知识点解析:(1)函数findmid的功能是找到a、b、c三个数中的中间数,并存放在变量t中,因此应返回t。(2)语法错误,句末缺少分号。(3)本程序是对数组x进行操作,数组t只是用来暂时存放数组x中的元素,因此此处应为x[i+1]=findmid(a,b,c)。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,函数的功能是查找x在s所指数组中下标的位置,并作为函数值返回,若x不存在,则返回﹣1。注意:部分源程序在文件PROG1.C文件中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<stdlib.h>#defineN15voidNONO();intfun(int*s,intx){}main(){inta[N]={29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;printf("a数组中的数据:\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");printf("给x输入待查找的数:");scanf("%d",&x);index=fun(a,x);printf("index=%d\n",index);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,j,a[10],x,index;fp=fopen("in.dat","r");wf=fopen("out.clat","w");for(i=0;i<10;i++){for(j=0;j<10;j++){fscanf(fp,"%d",&a[j]);}fscanf(fp,"%d",&x);index=fun(a,x);fprintf(wf,"%d\n",index);}fclose(fp);fclose(wf);}标准答案:intfun(int*s,intx){inti;for(i=0;i<N;i++)if(x==s[i])returni;return﹣1;}知识点解析:要找出数组中指定数据的下标,首先定义变量i用于存放数组下标,然后使用循环语句对数组进行遍历,依次取出一个数组元素与指定的数进行比较,若相等,则返回该元素的下标,否则继续判断下一个元素,直到数组结束。若数组结束时仍没有找到与指定数相等的元素,则返回﹣1。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]..…•中,把偶数从数组中删除,奇数个数通过函数值返回。例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除偶数后,a所指数组中的数据为:9,1,3,5,7,返回值为5。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i<n;i++)/*********found*********/if(a[i]%2==【1】){/*********found*********/a[j]=a[i];【2】;}/*********found*********/return【3】;}main(){intb[N]={9,1,4,2,3,6,5,8,7),i,n;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");n=fun(b,N);printf("\nThenumberofodd:%d\n",n);printf("\nTheoddnumber:\n");for(i=0;i<n;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)1(2)j++(3)j知识点解析:填空1:根据题目要求,需进行奇偶数的判定,可以通过if条件语句来判断数组元素是否为奇数,如果元素不能被2整除,则为奇数,所以填入if(a[i]%2==1)。填空2:将为奇数的元素重新存放到数组的前面,同时下标增1。填空3:函数返回值需要返回数组中奇数的个数,因此返回变量j。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若num1和hum2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intfun(inta,intb){intr,t;if(a<b){/*********found*********/t=a;b=a;a=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;)/*********found*********/return(a);}voidmain(){intnum1,num2,a;printf("Inputnum1hum2:");scanf("%d%d",&num1,&num2);printf("num1=%dnum2=%d\n\n",num1,num2);a=fun(num1,num2);printf("Themaximuncommondivisoris%d\n\n",a);}标准答案:(1){t=a;a=b.b=t;}(2)return(b);或returnb;知识点解析:求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将m除以n(m>n)得余数r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。程序首先判断参数a和b的大小,如果a<b则进行交换,这里是一个数学逻辑错误,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b。当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:删除字符串中所有的*号。编写函数时,不得使用c语言提供的字符串函数。例如,字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是“ABCDEFG”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#2nclude<stdio.h>voidfun(char*a){}voidmain(){chars[81];printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a){inti,j=0;for(i=0;a[i]!=’\0’;i++)if(a[i]!=’*’)a[j++]=a[i];/*若不是要删除的字符’*’则保留*/a[j]=’\0’;/*最后加上字符串结束符’\0’*/知识点解析:用循环操作从字符串开始往后逐个进行比较,若不是要删除的字符(用if(a[i]!=’*’)来控制)则保留。变量i和j用来表示原字符串的下标和删除*号后新字符串的下标。注意,下标变量j要从0开始,最后还要加上字符串结束标识’\0’。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:在带头节点的单向链表中,查找数据域中值为ch的节点。找到后通过函数值返回该节点在链表中所处的顺序号;若不存在值为ch的节点,函数返回0值。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);Vvoidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h﹣>next;/*********found*********/while(p!=【1】){n++;/*********found*********/if(p﹣>data==ch)reLurn【2】1;elsep=p﹣>next;}return0;}main(){SLIST*head;intk;charch;chara[N]={’m’,’p’,’g’,’a’,’w’,’x’,’r’,’d’};head=creatlist(a);outlist(head);printf("Enteraletter:");scanf("%c",&ch);/*********found*********/k=fun(【3】);if(k==0)printf("\nNotfound!\n");elseprintf("Thesequencenumberis:%d\n",k);}SLIST*creaLlist(char*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;i<N;i++){q=(SLIST*)malloc(sizeof(SLIST));q﹣>data=a[i];p﹣>next=q;p=q;}p﹣>next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h﹣>next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("﹣>%c",Pp﹣>data);p=p﹣>nexL;}while(P!=NULL);printf("﹣>End\n");}}标准答案:(1)NULL(2)n(3)head,ch知识点解析:填空1:while循环语句用来判断是否到达链表结尾,链表结尾节点指针域是NULL。填空2:若找到指定字符,则通过return语句将该节点在链表的顺序号返回给main函数。填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入head,ch。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:删除指针P所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用“#”结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<string.h>#include<stdio.h>#include<ctype.h>fun(char*p){inti,t;charc[80];/*********found*********/For(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];/*********found*********/c[t]="\0";strcpy(p,c);}voidmain(){charc,s[80];inti=0;printf("Inputastring:");C=getchar();while(c!=’#’){s[i]=c;i++;c=getchar();}s[i]=’\0’;fun(s);puts(s),}标准答案:(1)for(i=0,t=0;p[i];i++)(2)c[t]=’\0’;知识点解析:该题目考查C语言关键字的书写,C语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为‘\0’,而非“\0”,“\0”表示一个字符串。该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否为空格、跳格符(制表符)或换行符。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:将SS所指字符串中所有下标为奇数位上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4EFg”,则应输出“aBc4EFg”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*ss){}voidmain(void){chartt[51];printf("\nPleaseenterancharacterstringwithin50characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf("\nbecomes\n%s",tt);}标准答案:voidfun(char*ss){inti;for(i=0;ss[i]!=’\0’;i++)/*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)ss[i]=ss[i]﹣32;}知识点解析:将指定字符串中奇数位置的字母转换为大写,首先需要判断奇数位置,再判断该位置字符是不是小写字母,如果是小写字母,则将小写字母转换为大写字母。字母大小写转换操作中,只要将小写字母减去32即可转换为大写字母。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defiheN5typedefstructstudent{longsno;charname[10];floatsvore[3];}STU;voidfun(char*filename,STUn){FTLE,*fp;/*********found*********/fp=fopen(【1】,"rb+");/*********found*********/fseek(【2】,﹣(10ng)sizeof(STU),SEEKEND);/*********found*********/fwrrite(&n,sizeof(STU),1,【3】);fclose(fp);}main(){STU=t[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi”,85,70,78},{10004,”FangFang”,90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nTheoriginaldata:\n\n");for(j=0;jj<N;j++){printf("\nNo:%ldName:%﹣8sScores:".,ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);priontf("\n");}fun("student.dat",n);printf("\nThectaLaaftermodifing:\n\n");fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j<N;j++){printf("\nNo:%ldName:%﹣8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}}标准答案:(1)filename(2)fp(3)fp知识点解析:填空1:本空是对文本文件的打开,filename所指的文件中的最后数据要进行重写,因此首先是要打开,因而本空填写filename。填空2:fseek功能是重定位流上的文件指针。用法:intfseek(FILE*stream,longoffset,intfromwhere);本空应该填写fp。填空3:因为题目中要对所有学生数据均以二进制方式输出到文件中,因此本空填写fp。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数Creatlink的功能是:创建带头节点的单向链表,并为各节点数据域赋0Nm﹣1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>typedefstructaa{intdata;StruCtaa*next;}NODE;NODE*Creatlink(intn,intm){NODE*h=NULL,*p,*s;inti;/*********found*********/p=(NODE)malLoc(sizeof(NODE));h=p;p﹣>next=NULL;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s﹣>data=rand()%m;s﹣>next=p﹣>next;p﹣>next=s;p=p﹣>next;}/*********found*********/returnp;}outlink(NODE*h){NODE*p;p=h﹣>next;printf("\n\nTHELIST:\n\nHEAD");while(p){printf("﹣>%d",p﹣>data);p=p﹣>next;}printf("\n");}main(){NODE*head;head=Creatlink(8,22);outlink(head);}标准答案:(1)p=(NODE*)malloc(sizeof(NODE));(2)returnh;知识点解析:(1)由变量定义可知p为指向节点的指针。指向刚分配的结构指针,所以应改为p=(NODE*)malloc(sizeof(NODE))。(2)在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为returnh。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<string.h>#include<stdio.h>#defineN80intfun(char*s){}voidmain(){FILE*wf;charline[N];intnum=0;printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);/*********found*********/wf=fopen("out.dat","w");fprintf(wf,"%d",fun("abigcar"));fclose(wf);/*********found*********/}标准答案:Intfun(char*s){inti,j=0;for(i=0;s[i]!=’\0’;i++)if(s[i]!=’’&&(s[i+1]==’’||s[i+1]==’\0’))/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/j++;returnj;/*返回单词个数*/}知识点解析:要判断单词的个数,首先想到的是程序怎样识别出一个单词,如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束,因此程序使用for循环语句遍历整个字符串,用if条件语句判断当前字符是否表示一个单词的结束,如果当前字符表示一个单词结束,则存放单词个数的变量加1,最后返回单词的个数。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是计算下式直到||≤10-3,并将计算结果作为函数值返回。例如,若形参e的值为1e﹣3,函数的返回值为2.985678。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>doublefun(doublee){inti;doubles,x;/*********found*********/s=0;i=【1】;x=1.0;while(x>e){/*********found*********/【2】;/*********found*********/x=(2.0*i﹣1)/(【3】)*(2.0*i));s=s+x;}returns;}main(){doublee=1e﹣3;printf("\nTheresultis:%f\n",fun(e));}标准答案:(1)0(2)i++或++i或i+=1或i=i+1(3)2.0*i知识点解析:填空1:循环变量i从l开始参加运算,但是在每次循环的开始i都进行自加1操作,故i应赋初值为0。填空2:循环变量i自增1运算。填空3:根据公式确定表达式通项。注意x为double型,故应将i变为double型再进行运算。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成的新串放在t所指的数组中。例如,当s所指字符串为“ABCD”时,t所指字符串中的内容应为“ABCDDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<string.h>/*********found*********/voidfun(chars,chart){inti,d;d=strlen(s);for(i=0;i<d;i++)t[i]=s[i];for(i=0;i<d;i++)t[d+i]=s[d﹣1﹣i];/*********found*********/t[2*d﹣1]=’\0’;}main(){chars[100],t[100];printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}标准答案:(1)voidfun(char*s,char*t)(2)t[2*d]=’\0’;或t[d+i]=’\0’;或t[2*d]=0;或t[d+i]=0;知识点解析:(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。(2)循环结束后回文字符的个数为2*d个,因为数组下标是从0开始的,所以最后一个字符的下标为2*d﹣1,在最后一个字符的后面加上结束符’\0’,因此为t[2*d]=’\0’;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串的内容为“ABCDEFG12345”,其中字符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指数组中的内容应为“135”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];printf("\nPleaseenterstrings:");Scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;i<n;i++)if((i%2)&&(s[i]%2)){t[j++]=s[i];/*将下标为奇数同时ASCII码值为奇数的字符放入数组t中*/t[j]=’\0’;/*最后加上结束标识符*/}知识点解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的所有字符都删除,即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句应为:if(i%2!=0&&s[i]%2!=0)。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.13。在此程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#defineN20voidfun(int*a){inti,x,n=0;x=rand()%20;/*********found*********/while(n<【1】){for(i=0;i<n;i++)/*********found*********/if(x==a[i])【2】;/*********found*********/if(i==【3】){a[n]=x;n++;}x=rand()%20;}}main(){intx[N]={0),i;fun(x);printf("Theresult:\n");for(i=0,i<N;i++){printf("&4d",x[i]);if((i+1)%5==0)printf("\n");}标准答案:(1)N或20(2)beak(3)n知识点解析:填空1:变量n用于存储数组的下标,要通过while语句对数组进行赋值,数组的容量为20,因此循环条件应为n<20。填空2:通过一个for循环判断x是否与数组中已存的元素重复,若重复则跳出for循环结束。填空3:若for循环是由break语句结束的,则x与数组中的元素重复,此时i必然小于n;若for循环是因为循环变量i递增到某值,而不再满足循环条件结束的,说明x的值与数组中的元素不重复,则此时i的值等于n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:先从键盘上输入一个3行、3列的矩阵的各个元素的值,然后输出主对角线元素之和。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(){inta[3][3],sum;inti,J;/*********found*********/sum=1;for(i=0;i<3;i++){for(j=0;j<3;j++)/*********found*********/scanf("%d",a[i][j]);}for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%d\n",sum);}voidmain(){fun();}标准答案:(1)sum=0;(2)scanf("%d",&a[i][j]);知识点解析:该题考查对循环语句的掌握和对数组概念的理解。本题的解题思路为:先从键盘输入一个3×3矩阵,然后循环累加,执行循环语句中的sum=sum+a[i][i];。因为变量sum用来存放累加后的结果,所以应对其初始化为0。第二处错误考查标准输入函数scanf的格式,被赋值的变量前要加上取地址符"&"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写程序,实现矩阵(3行、3列)的转置(即行列互换)。例如,若输入下面的矩阵:100200300400500600700800900则程序输出:100400700200500800300600900注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>voidfun(intarray[3][3]){}voidmain(){FILE*Wf;inti,j;intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};system("CLS");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d’,array[i][j]);printf("\n");}fun(array);printf("Convertedarray:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",array[i][j]);printf("\n");}/*********found*********/wf=fopen("out.dat","w");for(i=0;i<3;i++){for(j=0;j<3;j++)fprintf(wf,"%7d",array[i][j]);fprintf(wf,"\n");}fclose(wf);/*********found*********/}标准答案:voidfun(intarray[3][3]){inti,j,t;for(i=0;i<3;i++)/*将右上三角和左下三角对换,实现行列互换*/for(j=i+1;j<3;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}知识点解析:要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在内层循环中循环变量j从i+1或i开始。国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。例如,若输入:200851,则程序输出:2008年5月1日是该年的第122天。请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intisleap(intyear){intleap;leap=(year%4==0&&year%100!=0||year%400==0);return____1____;}intfun(intyear,intmonth,intday){inttable[13]={0,31,28,3

温馨提示

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

评论

0/150

提交评论