




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷18(共9套)(共336题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共37题,每题1.0分,共37分。)1、下列有关数据库的描述,正确的是()。A、数据库设计是指设计数据库管理系统B、数据库技术的根本目标是要解决数据共享的问题C、数据库是一个独立的系统,不需要操作系统的支持D、数据库系统中,数据的物理结构必须与逻辑结构一致标准答案:B知识点解析:数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。2、以下程序的输出结果是()。#includemain(){inta=8,b=6,m=1;switch(a%4){case0:m++;break;case1:m++;switch(b%3){default:m++;case0:m++:break;}}printf(”%d\n”,m);}A、1B、2C、3D、4标准答案:B知识点解析:本题考查switch语句。因为a=8,a%4=0,所以执行case0后面的语句,将m加1,遇到break语句跳出switch。3、有以下程序:#include<stdio.h>voidfun(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5);for(i=2;i<8;i++)printf("%d",k[i]);printf("\n");}程序运行后的输出结果是()。A、321678B、876543C、1098765D、345678标准答案:A知识点解析:本题中的函数fun()的功能是将数组k中前5个元素倒序,所以返回后数组k中的元素排列是5,4,3,2,1,6,7,8,9,10。所以打印输出k[2]到k[7]元素的值,即321678,所以选择A。4、若输入’’abcdef’’、’’abdef’’,以下程序的输出结果为()。#include<stdio.h>#include<string.h>main(){intn;chars1[201,s2[20],*p1,*p2;scanf(’’%s’’,s1);scanf(’’%s’’,s2);p1=s1;p2=s2;n=strcmp(p1,p2);printf(’’%d\n’’,n);}A、-B、0C、’’abcdef’’D、’’abdef’’标准答案:A知识点解析:本题考查两个知识点:①字符串比较函数strcmp(s1,s2),若s1>s2,则返回1;若s1=s2,则返回0;若s1<s2,则返回-1。②字符串依次比较的是它们相同位置上字符的ASCII码值。5、有以下程序:#include<stdio.h>voidfun(char*c,intd){*c=*c+1;d+=1;orintf("%c,%c",*c,d);}main(){chara=’F’,b=’f’;fun(&b,a);printf("%c,%c\n",a,b);}程序的输出结果为()。A、g,GF,gB、g,FF,gC、G,fF,GD、f,gf,g标准答案:A知识点解析:此题考查的是函数参数的传递。main函数中首先调用fun函数,fun函数的功能是使字符c的ASCII码值加1并输出,使d加1并输出对应的字符;dun(&b,a)输出“g,G”,但是由于fun函数的第一个参数进行的是地址传递,而第二个参数进行的是值传递,所以main函数中的printf函数输出“F,g”。6、下面程序的输出结果是()。#includemain(){chara[]={’a’,’b’,’c’,’d’,’f’,’g’},*p;P=a;prinff("%c\n",*p+4);}A、aB、bC、eD、f标准答案:C知识点解析:“*”号的优先级比“+”的优先级高,所以先执行“*p”;指针p指向的是数组的首地址,因此*p=a,再加4得’e’。7、运行下列程序时,若输入数据为“321”,则输出结果是()。main(){intnum,i,j,k,s;scanf("%d",&num);if(num>99)s=3;elseif(num>9)s=2;elses=l;i=num/100;j=(num—i*100)/10;k=(num—i*100—j*10);switch(s){case3:printf("%d%d%d\n",k,j,i);break;case2:printf("%d%d\n",k,j);casel:printf("%d\n",k);}}A、123B、1,2,3C、321D、3,2,1标准答案:A知识点解析:本题考查if…else语句和switch语句。scanf函数通过键盘读入num的值。因为“num=321>99”,所以“s=3,i=3,j=2,k=1”。因为s=3,所以执行case3.输出k,j,i的值,然后通过break结束程序。8、以下程序的输出结果是()。#include<stdio.h>intm=13:intfun(intx,intY){intm=2;return(x*y-m);}main(){inta=7,b=6;printf("%d",fun(a,b)/m);}A、1B、3C、7D、10标准答案:B知识点解析:本题考查的是函数调用时的参数的作用域。在函数调用时,当全局变量和局部变量的名称相同时,在局部变量的作用域内,局部变量起作用,因而在fun函数内m的应该等于2,main中的m为13,所以返回值为7×6-2=40,而fun(a,b)/m值为40/13=3。9、支持子程序调用的数据结构是()。A、栈B、树C、队列D、二叉树标准答案:A知识点解析:栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A)。10、在关系数据库中,用来表示实体间联系的是()。A、属性B、二维表C、网状结构D、树状结构标准答案:B知识点解析:关系模型实体间的联系采用二维表来表示,简称表。选项C为网状模型实体间的联系,选项D为层次模型实体间的联系,选项A属性刻画了实体。11、设Y为整型变量,a=6,a的地址为E2000,b=14,b的地址为E2001;执行语句b=&a;y=&a;后Y的值为()。A、E2000B、E2001C、6D、14标准答案:D知识点解析:&是取地址运算符,y=&a是将a的地址赋给y,而a的地址没有发生变化,因此y的值为E2000c,12、在数据库系统的内部结构体系中,索引属于()。A、模式B、内模式C、外模式D、概念模式标准答案:B知识点解析:内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设符级上(如磁盘及磁盘操作)。13、已知:intc[3][4];,则对数组元素引用正确的是()。A、c[1][4]B、c[1.5][0]C、c[1+0][0]D)以上表达都错误标准答案:C知识点解析:此题考查的是数组元素的引用。对于已定义的数组a[M][N],数组元素的正确引用必须满足行下标小于M,列下标小于N,且为正整数。因此,选项A)中列下标溢出;选项B)中行下标出现小数;选项C)满足要求。14、设有定义:chars[10];inti=0;,以下不能将一行(不超过100个字符)带有空格的字符串正确读入的语句或语句组是()。A、gets(s);B、scanf("%s",s);C、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:B知识点解析:本题考查标准输出函数和循环语句。gets(s)函数的作用是将输入的字符读入字符串s,直到遇到回车。而scanf()函数接收字符串时的结束标志为回车或者空格。因此选项B不能,选项C和选项D中按字符逐个读入字符串s中,直到读入的字符是换行符为止,因此正确。15、以下标识符不是关键字的是()。A、breakB、charC、SwitchD、return标准答案:C知识点解析:此题考查标识符和关键字的概念。需要注意的是C语言是区分大小写的,Switch是关键字,但Switch不是关键字。16、下列叙述中正确的是()。A、调用printf()函数时,必须要有输出项B、使用putchar()函数时,必须在之前包含头文件stdio.hC、在C语言中,整数可以以二进制、八进制或十六进制的形式输出D、调节getchar()函数读入字符时,可以从键盘上输入字符所对应的.ASCII码标准答案:B知识点解析:选项A),若pfintf函数没有输出项,且格式字符串中不含格式信息,则输出的是格式字符串本身,若格式字符串含有格式信息,运行时则出现错误提示;选项C),在C语言中,整数可以十进制、八进制或十六进制的形式输出;选项D),getchai函数是从标准输入设备读取一个字符。17、设Y为整型变量,A=1,A的地址为EF01;B=2,B的地址为EF02;执行语句B=&A;Y=&B;后Y的值()。A、1B、2C、EF01D、EF02标准答案:D知识点解析:&是取地址运算符,“Y=&B”是将B的地址赋给Y,因此Y值为EF02。18、有以下程序段:intx,i;mr(i=1;i<=100;i++){$canf("%d",&x);if(x<0)continue;pfinff("%4d\n",x);}下列各项中,针对上述程序段的描述正确的是()。A、最多可以输出100个非负整数B、当x<0时结束整个循环C、当x>=0时没有任何输出D、pfinff函数调用语句总是被跳过标准答案:A知识点解析:continue语句的功能是结束本次循环,而不是终止整个循环的执行,所以B选项错误;当x>=0时,程序执行printf("%4d\n",x);语句,所以C、D选项错误。因为for循环的循环次数i是从1到100,如果先后输入100个非负整数,则这些数将全部输出。19、有以下程序:#include<stdio.h>voidfun(char*c){while(*c){if(*c>=’a’&&*c<=’z’)*c=*c-(’a’-’A’);c++:}}main(){chars[81];gets(s);fun(s);puts(s);}当执行程序时从键盘上输入HelloBeijing<回车>,则程序运行后的输出结果是()。A、hellobeijingB、HelloBeijingC、HELLOBEIJINGD、hELLOBeijing标准答案:C知识点解析:主程序读取整个字符串存于s中,调用fun函数,字符指针c指向数绀s。函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大写gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束如果*c为小写字符,则*c=*c-32(转大写),因此C选项正确。20、下列叙述中正确的是()。A、栈与队列都只能顺序存储B、循环队列是队列的顺序存储结构C、循环链表是循环队列的链式存储结构D、栈是顺序存储结构而队列是链式存储结构标准答案:B知识点解析:栈是所有的插入与删除都限定在表的同一端进行的线性表;队列是指允许在一端进行插入,而在另一端进行删除的线性表,二者既可以顺序存储也可以链式存储。为了充分地利用数组的存储空间,把数组的前端和后端连接起来,形成一个环形的表,称为循环队列,因此循环队列是队列的一种顺序存储结构。21、在C语言程序中,以下说法正确的是()。A、函数的定义和函数的调用均不可以嵌套B、函数的定义不可嵌套,但函数的调用可以嵌套C、函数的定义可以嵌套,但函数的调用不可以嵌套D、函数的定义和函数的调用均可以嵌套标准答案:B知识点解析:本题考查函数调用的基本概念。因为函数的结果是一个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以嵌套。22、大学中每个年级有多个班,每个班有多名学生,则实体班级和实体学生之间的联系是()。A、一对多B、一对一C、多对一D、多对多标准答案:A知识点解析:实体集之问通过联系来建立联接关系分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。每个班有多名学生,但每个学生只能在一个班级里,故实体班级和实体学生之间的联系是一对多,故A选项正确。23、以下是正确C语言实型常量的是()。A、.e-1B、e-1C、-1eD、1e-1标准答案:D知识点解析:所谓常量是指在程序运行过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。实型常量有两种表示形式:十进制小数形式、指数形式。指数形式中e后面的指数必须是整数,阶码标志e之前需要有数字,由此可知选项A,B,C错误。答案为D选项24、下面描述中不属于数据库系统特点的是A、数据共享B、数据完整性C、数据冗余度高D、数据独立性高标准答案:C知识点解析:数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,C错误。25、有以下程序:#include<stdio.h>main(){inta=2,b;b=(a>>=1)+4;printf("%d,%d",a,b);}程序运行后的输出结果是()。A、1,5B、2,4C、2,6D、2,5标准答案:A知识点解析:a>>=1等价于a=a>>1,即a除以2,则a=2,b=(a>>1)+4=1+4=5,因此,打印出来为1,5。答案为A选项。26、设有以下函数:intfun(intn,char*s){……}则下面对函数指针的定义和赋值均正确的是()。A、int(*pf)(int,char);pf=&fun;B、int*pf();pf=fun;C、int*pf();*pf=fun;D、int(*pf)(int,char*);pf=fun;标准答案:D知识点解析:函数的参数可以是指针类型。它的定义形式为void(*pf)(),原函数定义的形参变量是一个整数型和一个字符指针型,所以答案D正确。27、计算机算法中有穷性的意思是()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。28、计算机软件通常分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、编译程序B、操作系统C、图书借阅系统D、汇编程序标准答案:C知识点解析:编译程序、操作系统和汇编程序均是系统软件。29、有以下程序:#include#includetypedefstrtut{charname[9];charsex;floatscore[2];}STU;STUfun(STUa){STUb={’’Tom’’,’m’,85,90};inti;strcpy(a.name,b.name);a.sex=b.sex:for(i=0;i<2;i++)a.score[i]=b.score[i];returna;}main(){STUc={’’Alex’’,’f’,95,92},d;d=fun(c);printf(’’%s,%c,%d,%d,’’,d.name,d.sex,d.score[0],d.score[1]);printf(’’%s,%c,%d,%d\n’’,c.name,c.sex,c.score[0],c.score[1]);}程序运行后的输出结果是()。A、Tom,m,85,90,Alex,f,95,92B、Tom,m,85,90,Tom,m,85,90C、Qian,f,95,92,Alex,f,95,92D、Alex,f,95,92,Tom,m,85,90标准答案:A知识点解析:注意使用typedef定义结构体时,大括号后面的标识符将成为该结构体类型的定义关键字,可以用来定义新的结构体变量。使用值传递调用函数时实参的值不会改变,所以调用后结构c的值没有发生变化,调用函数会返回一个固定的结构体内容,所以答案A正确。30、对长度为n的线性表作快速排序,在最坏情况下,比较次数为A、nB、n-1C、n(n-1)D、n(n-1)/2标准答案:D知识点解析:快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,选D。31、有以下程序#include<stdio.h>inta=1,b=2;voidfun1(inta,intb){printf("%d%d",a,b);}voidfun2(){a=3;b=4;}main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程序运行后的输出结果是A、5612B、3456C、1256D、5634标准答案:D知识点解析:fun1函数中的a、b为局部变量,fun2函数中的a、b为全局变量。执行fun1函数后输出5,6执行完fun2后a变为3,b变为4,所以结果为3,4D选项正确。32、当输入为"Fool&Swalow"时,下面程序的执行结果是()。#includemain(){charc;while(c!=’?’){c=getchar();putchar(c);}}A、SwalowB、FoolC、Fool?D、?Swalow标准答案:C知识点解析:本程序是通过getchar()函数读入字符,并通过putchar()函数将字符逐个输出,当用户输入“?”时停止输出。33、当没有指定C语言中函数形参的存储类别时,函数形参的存储类别是A、外部(extern)B、静态(static)C、寄存器(register)D、自动(auto)标准答案:D知识点解析:auto变量又称为自动变量,函数定义变量时,如果没有指定存储类别,系统就认为所定义的变量具有自动类别,D选项正确。static变量又称为静态变量,编译时为其分配的内存在静态存储区中。register变量又称为寄存器变量,变量的值保留在CPU的寄存器中,而不是像一般变量那样占内存单元。当定义一个函数时,若在函数返回值的类型前加上说明符extern时,称此函数为外部函数,外部函数在整个源程序中都有效。34、设二叉树如下:则前序序列为A、ABDEGCFHB、DBGEAFHCC、DGEBHFCAD、ABCDEFGH标准答案:A知识点解析:二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA,故A选项正确。35、以下叙述正确的是A、C程序由函数组成,可以不包含main函数B、每个C程序文件中的main函数都应当放在最前面C、每个C程序文件都应当包含一个main函数D、每个C程序都只能有一个main函数标准答案:D知识点解析:虽然一个C程序可以包含多个文件,但是有且只有一个文件中包含main函数,因此,选项A,C错误。main函数可以放在程序的任意位置。因此,选项B错误。答案为D选项。36、有以下程序#include<stdio.h>main(){intm,n;scanf("%d%d",&m,&n);while(m!=n){while(m>n){m=m-n;}while(n>m){n=n-m;}}printf("%d\n",m);}该程序的功能是A、计算m和n的最小公倍数B、计算m和n的最大公约数C、计算m和n的差值D、找出m和n中的较大值标准答案:B知识点解析:题目使用更相减损术求最大公约数,其思想:1、任意给定两个正整数,判断它们是否都是偶数。若是,则用2约简,若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。因此。故答案为B选项37、下列4个程序中,完全正确的是()。A、#include<stdio.h>main();{/*programming*/printf("programming!\n");}B、#include<stdio.h>main(){/*/programming/*/printf("programming!\n");}C、#include<stdio.h>main(){/*/programming*/*/printf("programming!\n");}D、include<stdio.h>main(){/*programming*/printf("programming!\n");}标准答案:B知识点解析:选项A)中,main()函数后面的分号是错误的,C语言在函数名后面不能有分号:在C语言中注释内容必须放在“/*”和“*/”之间,“/*”和“*/”必须成对出现,按语法规定在注释之间不可再嵌套“/*”和“*/”,选项C)的程序段中注释语句之间有嵌套;C语言用#include命令行来实现文件包含的功能。#include命令行的形式为:#include“文件名”,选项D)中的include前面少了一个#符号。二、程序填空题(本题共1题,每题1.0分,共1分。)38、下列给定程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回剩余字符串的个数。SS所指字符串数组中共有N个字符串,且串长小于M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/*********found*********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/*********found*********/if(len<=【2】)/*********found*********/strcpy(ss[j++],【3】);}returnj;}voidmain(){charx[N][M]={"Beijing","Shanghai","Tianjin","Nanjing","Wuhan");inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);printf("Thestringwitchlengthislessthanorequalto7:\n");for(i=0;i<f;i++)puts(x[i]);printf("\n");}标准答案:(1)N(2)k(3)ss[i]知识点解析:本题考查:for循环语句;if语句条件表达式;字符串复制函数strcpy的使用。填空1:for循环语句的作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i<N。填空2:题目要求删除串长度大于k的字符串,所以if条件语句的条件表达式是len<=k。填空3:通过字符串复制函数将串长不大于k的字符串另存,并记录个数。字符串复制函数strcpy,其格式为:strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串复制到字符数组1中。字符串结束标识‘\0’也一同复制。字符数组名2,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。三、程序修改题(本题共1题,每题1.0分,共1分。)39、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正程序中的错误或在下画线处填上正确的内容并把下画线删除,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<string.h>#include<stdio.h>#defineN80intfun(char*s,char*t){int;n;char*p,*r;n=0;/*********found*********/*r=t;while(*s){p=s;while(*r){if(*r==*p){r++;p++;}elsebreak;if(*r==’\0’)n++;}/*********found*********/【1】s++;}returnn;}voidmain(){chara[N],b[N];intm;printf("\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun(a,b);printf("\nTheresultis:m=%d\n",m);}标准答案:(1)r=t;(2)r=t;或r=&t[0];知识点解析:从字符串s中找出子字符串的方法是:从第一个字符开始,对字符串进行遍历,若s串的当前字符等于t串的第一个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串t的末尾,则跳出循环;若s串的字符与t串的字符不对应相同,则继续对s串的下一个字符进行处理。四、程序设计题(本题共1题,每题1.0分,共1分。)40、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,其功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符串为{“AAAA”,“BBBBBBB”,“CC”},则合并后的字符串内容应该是“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#defineM3#defineN20voidfun(chara[M][N],char*b){}voidmain(){charw[M][N]={"AAAA","BBBBBBB","CC"};chara[100]={"##################};inti;printf("Thestring:\n");for(i=0;i<M;i++)puts(w[i]);printf("\n");fun(W,a);printf("TheAstring:\n");printf("%s",a);printf("\n\n");}标准答案:voidfun(chara[M][N],char*b){inti,j,k=0;for(i=0;i<M;i++)/*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/for(j=0;a[i][j]!=’\0’;j++)b[k++]=a[i][j];b[k]=’\0’;/*在字符串最后加上字符串结束标记符*/}知识点解析:本题考查:字符串连接操作。本程序中第1个for循环的作用是对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,已建立一个带有头结点的单向链表,链表中的各结点包含数据域(da-ta)和指针域(next),数据域为整型。函数fun的作用是:找出链表各结点数据域中的最大值,其最大值由函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在文件BLANK1.C中,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<stdlib.h>#pragmawarning(disable:4996)structlist{intdata;structlist*next:};structlist*createlist(intdata[],intn){structlist*head=0,*p,*q;inti;head=(structlist*)malloc(sizeof(structlist));head->data=data[0];p=q=head;for(i=1,i<n,i++){p=(structlist*)malloc(sizeof(structlist));p->data=data[i];q->next=p;q=p;}p->next=NULL;returnhead;}/*********found*********/intfunc(【1】head){intpmax=head->data;structlist*p=head->next;while(p!=NULL){if(p->data>pmax)pmax=p->data;/*********found*********/p=【2】;}/*********found*********/【3】}voidmain(){intdata[]={123,21,65,789,32,310,671,651,81,101},pmax;structlist*head:head=createlist(data,10);pmax=func(head);printf("Max=%d\n",pmax);}标准答案:(I)structlist(2)p->next;(3)returnpmax;知识点解析:程序定义了结构体类型list,用来作为链表的结点类型,它包含两个成员:data数据成员,next指针成员。func()函数参数为链表的头结点指针,pmax用来存放最大值,通过while循环遍历整个链表,在遍历的过程中,将当前结点的data与pmax比较,若pmax小于当前结点的data,则使用当前结点的data更新pmax,最后将pmax的值作为函数返回值返回。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中函数fun的功能是:从低位开始依次取长整型变量s中奇数位上的数,构成一个新数放在t中(注意:位置从0开始计算)。例如:输入:12345678,则输出:1357输入:123456789,则输出:2468请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#pragmawarning(disable:4996)voidfun(10ngs,long*t){longs1=10;s/=10;/*********found*********/*t=s/10;while(s>0){s=s/100;/*********found*********/t=s%10*s1+t;/*********found*********/s1/=10;}}main(){longs,t;printf("\nPleaseenterlongnumber:");scanf("%1d",&s);fun(s,&t);printf("Theresultis:%1d\n",t);}标准答案:(1)*t=s%10;(2)*t=s%10*s1+*t;(3)s1*=10;知识点解析:fun()函数中,s是待处理的数,t是用来存放新数的指针,s1表示当前数字在新数中某位上的基数。由于题意从s的低位到高位从0开始,所以第1个奇数位是S的十位数字,需要将s除以10去掉个位数字,s1赋初值为十位的基数10,将处理后的s的个位数字存放到指针t中。接着通过while循环,每次将S除以100,跳过偶数位上的数字,然后将奇数位上的数字乘以对应的基数s1后,与t指向的数累加,重新存放到指针t中,并将基数s1乘以10,表示下一位的基数,直到s为0。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:在一含有11个四位数的数组中,统计出这些数的奇数、偶数个数,然后计算出个数多的那些数的算术平均值并由函数返回,个数通过yy传回。例如,若11个数据为:1101,1202,1303,1404,1505,2611,2712,2813,2914,3202,4222则输出:yy=6,pjz=2609.33注意:部分源程序在文件PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#include<stdio.h>#pragmawarning(disable:4996)#defineN11doublefun(intxx[],int*yy){}main(){intyy,xx[N]=(1101,1202,1303,1404,1505,2611,2712,2813,2914,3202,4222};doublepjz;voidNONO();pjz=fun(xx,&yy);printf("yy=%d,pjz=%.21f\n",yy,pjz);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,xx[N],yy;doublepjz;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<N;j++)fscanf(rf,"%d",&xx[j]);pjz=fun(xx,&yy);fprintf(wf,"%d,%.21f\n",yy,pjz);}fclose(rf);fclose(wf);}标准答案:doublefun(intxx[],int*yy){inti,odd_count=0,even_count=0;doubleave,odd_sum=0.0,even_sum=0.0;for(i=0;ieven_count){*yy=odd_count;ave=odd-sum/odd_count;}else{*yy=even_count;ave=even_sum/even_count;}returnave;}知识点解析:程序首先定义循环变量i,odd_count统计奇数个数,初值为0,even_count统计偶数个数,初值为0,odd_sum统计奇数之和,初值为0.0,even_sm统计偶数之和,初值为0.0,另外还定义了平均值ave。接着遍历数组,对当前元素对2求余,若结果为0,表示是偶数,统计偶数个数同时累加到even_sum中;若结果为1,表示奇数,统计奇数个数同时累加到odd_sum中。最后比较odd_count和even_count的大小,若odd_count较大,则求得奇数的平均值ave,并将odd_count存放到yy指向的地址;若even_count较大,则求得偶数的平均值ave,并将even_count存放到yy指向的地址,最后将ave作为函数返回值返回。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、当变量C的值不为2、4、6时,值为“真”的表达式是()。A、(c==2)||(c==4)||(c==6)B、(c>=2&&c<=6)||(c!=3)||(c!=5)C、(c>=2&&c<=6)&&!(c%2)D、(c>=2&&c<=6)&&(c%2!=1)标准答案:B知识点解析:本题主要考查的是逻辑表达式。逻辑与运算中只有两边的表达式同时为真,最后结果才为真;参与逻辑或运算的表达式只要有一个为真,最后结果就为真。选项A中表达式的意思是当c等于2或4或6时,表达式的值为真,否则为假,所以不满足题意。选项C中表达式的意思是当c大于等于2且小于等于6,并且c不是奇数时,表达式的值为真,否则为假。此时满足该表达式的c只能取值为2、4、6,所以也不满足题意。选项D中后面一个子表达式(c%21=1)和选项C中的!(c%2)是等价的,都是判断c不是奇数,因此也不满足题意。故B选项正确。2、执行以下程序段后,w的值为()。intw=’A’,x=14,y=15;w=((x|y)&&(w<’a’));A、—1B、NULLC、1D、0标准答案:C知识点解析:因为x=14,y=15都是非零整数,因此x|y=1。又因为’A’+32=’a’,知w<’a’也为真,因此(x|y)&&(w<’a’)的值为1。3、有以下程序段:inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a=%db=%dc=%d",a,b,c);程序的输出结果是()。A、a=10b=50c=10B、a=10b=50c=30C、a=10b=30c=10D、a=10b=30c=50标准答案:A知识点解析:因为a=10,b=50,所以a<b,if语句判断条件不成立,于是执行c=a,得到c=10,a和b的值不变。4、有以下程序:#include<stdio.h>intfun(inta,intb){if(b=—0)returna;elsereturn(fun(——a,——b));}main(){printf("%d\n",fun(4,2));}程序运行的结果是()。A、1B、2C、3D、4标准答案:B知识点解析:fun函数是一个递归函数,其功能是:当b的值为零时,返回此时a的值;否则,返回fun(——a,——b),即将a和b的值分别减1后返回fun(a,b)。当b不断递减时,a也不断递减,直到b为零。执行过程为:执行fun(4,2),b=2,返回f(3,1),此时b=1,返回f(2,0),b=0,返回a的值2。5、有以下程序段:inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf(’’%d\n’’,n);break;case2:case4:printf(’’%d\n’’,n);continue;case0:exit(0);}printf(’’%d\n",n);}以下关于程序段执行情况的叙述,正确的是()A、for循环语句固定执行8次B、当产生的随机数n为4时结束循环操作C、当产生的随机数n为1和2时不做任何操作D、当产生的随机数n为0时结束程序运行标准答案:D知识点解析:当产生的随机数n为0时,执行“case0:exit(0)”这条语句,结束程序的运行。6、有以下程序:#include#includemain(){int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*aa=1;*b=2,*c=3;a=b;prinff(“%d,%d,%d\n”,*a,*b,*c);}程序运行后的输出结果是()。A、1,1,3B、2,2,3C、1,2,3D、3,3,3标准答案:D知识点解析:malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用(int:*c)强制类型转换为整型指针,再把它赋给a,b,c,即让指针变量a,b,c都指向刚申请的内存空间。所以只有最后一个赋值语句*c=3的值保留在了该空间内,因为a、b、c三个指针变量均指向该空间,所以打印该空间内的数值为3。7、在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是()。A、逻辑设计B、需求分析C、详细设计D、物理设计标准答案:B知识点解析:软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流图和数据字典。8、若有定义“intx,y;”并已正确给变量赋值,则下列选项中与表达式“(x-y)?(x++):(y++)”中的条件表达式“(x-y)”等价的是()。A、(x-y>0)B、(x-y<0)C、(x-y<0||x-y>0)D、(x-y=0)标准答案:C知识点解析:条件表达式的形式如下:“表达式1?表达式2:表达式3”。其含义为当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,则求“表达式3”的值,这时“表达式3”的值就是整个表达式的值。本题条件表达式的执行顺序是先求解表达式“x-y”的值,若其值为非0(可以是正数,也可以是负数),则再求表达式“x++”的值,其值就是条件表达式的值;若表达式“x-y”的值为0,则再求表达式“y++”的值,其值就是条件表达式的值。因此,本题的答案为选项C。9、下列叙述中正确的是()。A、在switch语句中,不一定使用break语句B、在switch语句中必须使用defaultC、break语句必须与switch语句中的case配对使用D、break语句只能用于switch语句标准答案:A知识点解析:default语句在switch语句中可以省略,所以B错误;switch语句中并非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循环结构中,所以D错误。10、有以下程序:#include<stdio.h>main(){chaurx=2,y=2,z;z=(y<<1)&(x>>1);pnnff("%d\n",z);}程序的输出结果是()。A、1B、0C、4D、8标准答案:B知识点解析:本题考查位运算<<和&。y<<1为4,x>>1为1,二者与运算后为0,故B选项正确。11、C语言规定,函数返回值的类型是()。A、由调用该函数时的主调函数类型所决定B、由return语句中的表达式类型所决定C、由调用该函数时系统临时决定D、由定义该函数时所指定的数值类型决定标准答案:D知识点解析:本题考查函数调用时的数值类型。函数调用时,函数返回值的类型既不由主调函数类型所决定,也不由return语句中的表达式类型所决定,更不是由系统临时决定,而是由定义该函数时所指定的数值类型所决定。12、有以下程序:#include<stdio.h>main(){inta[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t;for(i=0;i<3;i++)for(k=i+1;k<4;k++)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;i++)printf("%d,",a[0][i]);}程序运行后的输出结果是()。A、1,1,2,6,B、6,2,1,1,C、6,4,3,2,D、2,3,4,6,标准答案:C知识点解析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for嵌套循环语句和if条件语句,对二维数组对角线元素进行由大到小的排序操作,程序最后通过for语句输出二维数组第1行的4个元素。因此C选项正确。13、在下列叙述中,错误的是()。A、C语言中,二维数组或多维数组是按行存放的B、赋值表达式b[1][2]=a[2][3]是正确的C、chara[1];a[0]=’A’与inta[1];a[0]=’A’等价D、数组名后的方括号内可以为常量表达式,也可以为变量标准答案:D知识点解析:本题考查数组的4个知识点:①C语言中,二维数组或多维数组元素排列的顺序是按行存放:②不同数组的元素之间可以相互赋值;③字符型数组中存放的是字符,int型数组中存放的是字符对应的ASCII码值,虽然在计算机内部字符常量都是作为整型量来处理的,其对应的整数值就足ASCII码值,但两者并不完全等价;④数组名后的方括号内可以为常量,也可以为常量表达式,但不可以为变量。14、下面函数的功能是()。SSS(S,t)char*s,*t;{while((*s)&&(*t)&&(*t++==*s++));return(*s-*t);}A、将字符串s复制到字符串t中B、比较两个字符串的大小C、求字符串的长度D、将字符串S接续到字符串t中标准答案:B知识点解析:*s-*t的输出实际是比较两个字符的ASCII码值,比较两个字符串的大小。15、对于循环队列,下列叙述中正确的是()。A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针标准答案:D知识点解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,有时也可能小于队尾指针。16、有以下程序:#include<stdio.h>main(){inta=3:a+=a-=a*a;printf("%d\n",a);}程序的输出结果是()。A、0B、9C、3D、-12标准答案:D知识点解析:等号“=”运算符是从右到左,且与“+、-、*”运算符比,优先级较低。首先计算a*a,结果为9,执行a=a-9后a的值为-6,然后执行a+=a,即a=a+a=-6+(-6),所以值为-12。17、以下选项中,能用做数据常量的是()。A、115LB、0118C、1.5e1.5D、0115标准答案:A知识点解析:A选项中115L表示115是长整型数据,合法。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B错误。C选项中e后面应该是整数不能是小数1.5,所以c错误。D选项中八进制常量应该是数字“0”开始,而不是字母“o”开始。18、下面程序运行后的输出结果是()。#include<stdio.h>main(){inta[5]={1,0,4,2,0},b[5]={1,2,3,4,5},i,s=0;for(i=0;i<5;i++)s=s+b[a[i]];printf(’’%d\n’’,s);}A、12B、15C、11D、8标准答案:A知识点解析:这道题目是计算一维数组b中某些元素的和。这些元素的下标值是一维数组a中元素值。s=0+b[1]+b[0]+b[4]+b[2]+b[0]=2+l+5+3+1=12。19、若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是()。A、a=(b=4)=3;B、a=b=c+1;C、a=(b=4)+c;D、a=1+(b=c=4);标准答案:A知识点解析:这道题目主要考察赋值表达式,对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个C语言合法的表达式。20、有以下程序:#include<stdio.h>main(){unsignedchara=8,c;c=a>>3:printf("%d\n",c);}程序运行后的输出结果是()。A、32B、16C、1D、0标准答案:C知识点解析:字符常量与其ASCII码值一一对应,在计算的时候,可以使用该字符的ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者ASCII码。右移运算符“>>”的运算规则是把左边运算数的各二进制位全部右移n位,n取决于“>>”右边的数值。字符a的ASCII码值为8,对应二进制为1000,所以a>>3=1,输出的字符c的ASCII码值为1,答案选C。21、栈和队列的共同点是()。A、都是先进后出B、都是先进先出C、只允许在端点处插入和删除元素D、没有共同点标准答案:C知识点解析:栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进先出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。22、C语言规定,在一个C程序中,main()函数的位置()。A、必须在系统调用的库函数之后B、必须在程序的开始C、必须在程序的最后D、可以在任意位置标准答案:D知识点解析:每个C程序有且只有一个主函数(main),且程序必须从“main()”函数开始执行,而且“main()”函数可以放在程序中的任意位置。23、以下叙述中正确的是()。A、a是实型变量,a=10在C语言中是允许的,因此可以说:实型变量中可以存放整型数B、在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式C、若有inta=4,b=9;执行了a=b后,a的值已由原值改变为b的值,b的值变为0D、若有inta=4,b=9;执行了a=b;b:a;之后,a的值为9,b的值为4标准答案:B知识点解析:A选项中a是实型变量,a=10在C语言中是允许的,但是实型变量中不可以存放整型数。C选项中执行a=b后,a的值变为b的值,为9,b的值不变,仍为9。D选项中执行a=b后,a的值为9,b的值为9,执行b=a后,a的值为9,b的值也为9,所以选择B。24、下列方法中,属于白盒法设计测试用例的方法的是()。A、错误推测B、因果图C、基本路径测试D、边界值分析标准答案:C知识点解析:白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。25、设有宏定义:#defineIsDIV(k,n)((k%n==1):1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A、判断m是否能被5和7整除B、判断m被5和7整除是否都余2C、判断m被5或者7整除是否余1D、判断m是否能被5或者7整除标准答案:A知识点解析:暂无解析26、需求分析阶段的任务是()。A、软件开发方法B、软件开发工具C、软件开发费用D、软件系统功能标准答案:D知识点解析:需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。27、有以下程序:#includemain(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}执行后的输出结果是()。A、1B、2C、4D、死循环标准答案:A知识点解析:--k先自减再使用,所以第一次判断条件即为while(4),条件为真,打印k的值,k=4-3,结果为1;第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符。所以选择A选项。28、软件开发中,需求分析阶段可以使用的工具是()。A、N-S图B、DFD图C、PAD图D、程序流程图标准答案:B知识点解析:结构化解析方法是结构化程序设计理论在软件需求解析阶段的运用,数据流图(DataFlowDiagram,DFD))是结构化解析常用的工具之一,数据字典、判定树和判定表也是常用的结构化分析工具。程序流程图、NS图、PAD图等图形工具用于详细设计的过程中。29、若有定义语句:doublea,*P=&a;以下叙述中错误的是()。A、定义语句中的*号是一个间址运算符B、定义语句中的*号是一个说明符C、定义语句中的P只能存放double类型变量的地址D、定义语句中,*P=&a把变量a的地址作为初值赋给指针变量P标准答案:A知识点解析:在变量定义doublea,*p=&a;中,*号是一个指针运算符,而非间址运算符,所以A错误。30、有以下程序#include<stdio.h>main(){chars[]="abcde";s+=2;printf("%d\n",s[0]);}执行后的结果是A、输出字符c的ASCII码B、程序出错C、输出字符cD、输出字符a的ASCII码标准答案:B知识点解析:本题重点考察数组名的概念。在C语言中,数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容。所以本题中的s+=2;语句让数组名s的内容加2是错误的,编译无法通过。因此B选项正确。31、下面关于编译预处理的命令行中,正确的是()。A、#defineintINTB、##defineeps0.001C、##DEFINETRUED、#defineE2.88标准答案:D知识点解析:选项A中,int是关键字,不能作为用户标识符,错误;选项B中,两个#号错误;选项C中两个#号错误,另外DFINE大写也是错误的;选项D正确;本题答案为D。32、有以下程序:#includemain(){inta=2,b=3,c=4;int*p1=&a,*p2=&b,*p=&c;*p=2+*p1*(*p2);printf(’’/%d\n’’,c);}程序执行后的输出结果是()。A、4B、2C、3D、8标准答案:D知识点解析:指针指向的是变量的地址,所以指针变量所指向的空间的值发生变化,其指向的变量的值会同时发生变化,因此,c=2+a*b=2+2*3=8。33、设有定义:intx=11,y=12,z=0;,以下表达式值不等于12的是A、(z,x,y)B、(z=x,y)C、z=(x,y)D、z=(x==y)标准答案:D知识点解析:逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回1,不成立返回0。A选项逻辑表达式x==y不成立,则z=0,表达式值为0。B选项中逗号表达式x,y取y值为表达式值,然后赋值给z=12,表达式值为12。C选项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为12。D选项逗号表达式(z,x,y)取y值为表达式值12。选择D选项。34、有如下程序段int*p,a=1;p=&a;*p=10;则变量a的值为A、不能确定B、1C、10D、11标准答案:C知识点解析:题中定义一个指针变量p和整数并将a赋值为1,再把a地址的值赋给指针p,最后把10赋给指针p所对应的地址单元,此时改变了a的值,a=10,答案为C选项。35、有以下程序#defineOut(n)n%2==0?"%c":"%d"#include<stdio.h>main(){intx;for(x=65;x<69;x++)printf(Out(x),x);}程序的运行结果是A、ABCDB、A66C68C、65666768D、65B67D标准答案:D知识点解析:#define命令定义一个函数,该函数判断一个数能否整除2,如果能,默认当前数值为字符类型的ASCII码值,否则认为当前数值为整数类型,在for循环中,调用该函数进行输出,答案为D选项。36、对于if(表达式)语句,以下叙述正确的是A、表达式不能是变量B、表达式的值只能是整数值C、表达式可以是常量D、表达式中不可以出现字符型变量的比较标准答案:C知识点解析:C语言没有规定if(表达式)中的"表达式"的形式,可以是任意合法表达式。故答案为C选项。37、在三级模式之间引入两层映像,其主要功能之一是()。A、使数据与程序具有较高的独立性B、使系统具有较高的通道能力C、保持数据与程序的一致性D、提高存储空间的利用率标准答案:A知识点解析:数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。38、两次运行下面的程序,如果从键盘上分别输入3和2,则输出结果是()。#include<stdio.h>main(){intx;scanf("%d",&x);if(x++>2)printf("%d",x);elseprintf("%d\n",x--);}A、4和3B、4和2C、4和1D、3和2标准答案:A知识点解析:本题考查if…else语句。首先,scanf函数通过键盘读入x的值。当x=3时,第一个if语句先判断条件,取x的值3和2比较,然后将x的值加1,if条件成立,执行下面的printf语句,输出x的值4。当x=2时,第一个if语句先判断条件,先取x的值2和2比较,然后将x的值加1(x的值变为3),if条件不成立,执行下面的else语句,先输出x的值3,再将x的值减1。39、有下列程序段:typedefstructNODE{intnum;structNODE*next;}OLD;下列叙述中正确的是()。A、以上的说明形式非法B、NODE是一个结构体类型C、OLD是一个结构体类型D、OLD是一个结构体变量标准答案:C知识点解析:C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使“标识符"来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用typedef定义了新的类型OLD结构,所以OLD为结构体类型。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#includeintfun(char*source,char*target;)(FILE*fs,*ft;charch;/**********found**********/if((fs=fopen(source,______1______))==NULL)return0;if((ft=fopen(target,"w"))==NULL)return0;printf("\nThedatainfile:\n");ch=fgetc(fs);/**********found**********/while(!feof(______2______)){putchar(ch);/**********found**********/fputc(ch,______3______);ch=fgetc(fs);}fclose(fs);fclose(ft);printf("\n\n");return1;}main()(charsfname[20]="myfile1",tfname[20]="myfile2";FILE*myf;inti;chac;myf=fopen(sfname,"w");printf("\nTheoriginaldata:\n");for(i=1;i<30;i++){c=’A’+rand()%25;fprintf(myf,"%c",c);printf("%c",c);)fclose(myf);printf("\n\n");if(fun(sfname,tfname))printf("Succeed!");elseprintf("Fail!");}标准答案:(1)"r"(2)fs(3)ft知识点解析:第一空:将指定源文件中的内容复制到指定的目标文件中,源文件只需读,因此以只读方式打开即可,故第一空处应该是“if((fs=fopen(source,"r"))=NULL)”。第二空:“while(!feof(__2__))”循环的目的是不断读取源文件直至到达源文件的末尾,循环结束标志是已达到文件的末尾。用feof()函数来检查是否已经到了文件末尾,文件状态检测函数feof()的调用形式是:feof(fs),如果已经到达文件尾函数返回非零值,否则返回0,故第二空处应该是“while(!feof(fs))”。第三空:考察fputc函数的使用方法,fputc函数的调用形式是:fputc(ch,ft),ch是要输出的字符,由“ch=fgetc(fs)”从源文件读到字符ch,然后将ch写到目标文件中,故第三空处应该是“fputc(ch,ft);”。三、程序修改题(本题共1题,每题1.0分,共1分。)41、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>intfun(intk){intm=0,mc=0,j;while((k>=2)&&(mc<10)){/*********found*********/if((k%13=0)||(k%17=0)){m=m+k;mc++;}k--;/*********found*********/returnm;}voidmain(){system("CLS");printf("%d\n",fun(500));}标准答案:(1)if((k%13==0)||(k%17==0))(2)}returnm;知识点解析:(1)C语言中,x能被y整除的表示方法是x%y=0,而不是题目中所表示的x%y=0。所以,if((k%13=0)||(k%17=0))修改后的结果应该是答案所示信息。(2)程序中缺少程序完整所需的"}",此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失"}"的错误信息是"Compoundstatementmissing}infunctionfun"。四、程序设计题
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 彩钢大棚农业生态园区承包经营合同
- 传统中医治疗技艺师承协议书
- 支付宝企业支付解决方案定制合同范本
- 底商租房合同协议书
- 四风考试题及答案大全
- 2025届定西市重点中学七年级英语第二学期期末达标测试试题含答案
- 合同纠纷租赁协议书
- 哈师大附中化学试题卷及答案
- 小学生如何自己做课件
- 债主押车合同协议书模板
- 壁挂炉销售合同协议书
- 2025年04月高等教育自学考试《00034社会学概论》试题
- 北京小升初试题及答案
- 北京市事业单位退役大学生士兵定向招聘笔试真题2024
- 大数据在医疗领域的应用研究与实践案例分享
- 大学生职业规划大赛《服装与服饰设计专业》生涯发展展示
- 2025年高考语文备考之古诗文名句名篇默写(共80题含答案)
- T-CCMA 0113-2021 高空作业车 检查与维护规程
- 社会学概论知识点梳理与复习指南
- 校园禁烟宣传抵制烟草诱惑拒绝第一支烟课件
- 2025-2030中国理发行业市场发展前瞻及投资战略研究报告
评论
0/150
提交评论