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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷3(共9套)(共66题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵程序执行结果为请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*t)[N],intm){inti,j;/**********found**********/for(i=0;i=0;j--)/**********found**********/t[i][j+【2】]=t[i][j];/**********found**********/for(j=0;j<【3】;j++)t[i][j]=0;}}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;printf("\nTheoriginalarray:\n");for(i=0;i标准答案:i++mm知识点解析:第一空:题目要求对每行元素中的值均右移m个位置,故第一空处循环变量每次增1,共循环N次,完成对N行的移位操作,因此第一空处应为“i++”。第二空:循环“for(j=N-1-m;j>=0;j--)”是进行行元素中的值右移m个位置,即把t[i][j]元素放置在t[i][j+m]上,因此第二空应为“m”。第三空:循环“for(j=0;j<___3___;j++)”是对空出来的位置补0,每行元素的前m位数据已经移动到后面,每行空处m个元素,因此第三空为“m”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入2则输出:若输入4则输出:请改正程序函数中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#defineM10inta[M][M]={0};/***************found****************/voidfun(int**a,intm)(intj,k;for(j=0;j标准答案:(1)voidfun(inta[][M],intm)(2)a[j][k]=(k+1)*(j+1);知识点解析:(1)第一标识下“int**a",a是指向指针的指针,在主函数内fun函数的调用形式是:“fun(a,n);",其中a是二:维数组,代表数组的首地址,因此fun函数的第一个参数是指针,而不是指向指针的指针,故第一个标识下应改为“voidfun(inta[][M],intm)"。(2)根据题干给出的例子可以分析出,数组元素与行和列的关系是a啪[k]=(k+1)*(j+1),因此第二标识下应改为“a[j][k]=(k+1)*(j+1);"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数voidam(char*tt,intpp[]),统计在tt所指字符串中’a’到’z’26个小写字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串:abedefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(char*tt,intpp[]){}main(){charaa[1000];intbb[26],k;voidNONO();printf("\nPleaseenteracharstring:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26;k++)printf("%d",bb[k]);printf("\n");NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charaa[1000];intbb[26],k,i;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",aa);fun(aa,bb);for(k=0;k<26;k++)fprintf(wf,"%d",bb[k]);fprintf(wf,"\n");}fclose(rf);fclose(wf);}标准答案:{char*p=tt;inti;for(i=0;i<26;i++)pp[i]=0;while(*p){if(*p>=’a’&&*p<=’z’)pp[*p-’a’]+=1;p++;}}知识点解析:进入fun函数,根据前面的分析:首先,因为数组pp的每一个元素都用作计数器,因此,需要使数组pp的每一个元素都置初值0,通过“for(i=0;i<26;i++)pp[i]=0;”来实现。然后,用指针依次指向字符串的每一个字符直到字符串结束标志。最后,在循环中根据*p的值不同,将累加器中的对应元素加1。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组aIf中。注意:不区分大小写,不能使用字符串库函数。例如,输入:“A=abc+5*c”,结果为:a=2,b=l,c=2。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数run的横线上填入所编写的若干表达式或语句。试题程序:#include<conio.h>#include<stdio.h>#defineN100voidfun(char*tt,intalf[]){intichar*p=tt;for(i=0;i<26;i++)【】;while(*p){if(*p>=’A’&&*p<=’z’)【】;if(*p>=’a’&&*p<=’Z’)alf[*p-’a’]++;【】;}}main(){charstr[N];chara=’a’;intalf[26],k;clrscr();printf("\nPleaseenteracharstring:");scanf("%S",str);printf("\n**Theoriginalstring**\n");puts(str);fun(str,alf);printf("\n**Thenumberofletter**\n");for(k:0;k<26;k++){if(k%5==0)printf(“\n”);printf(“%c=%d”,a+k,alf[k]);}printf(“\n”);}标准答案:alf[i]=0*p+=32p++知识点解析:第一空:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。第二空:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。第三空:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>intfun(intk){intm=0,mc=0,j;/*************found*************/while(k>=2)&&(mc<6){/*************found*************/if((k%7=0)||(k%ll=0)){/*************found**************/m=k;mc++;}k--;}returnm;}main(){clrscr();printf("%d\n",fun(500));}标准答案:(1)错误:while(k>=2)&&(mc<6)正确:while((k>=2)&&(mc<6))(2)错误:if((k%7=0)||(k%11=0))正确:if((k%7==0)||(k%11=0))(3)错误:m=k正确:m=m+k;知识点解析:错误1:C语言规定while语句后的表达式两侧必须要有圆括号。错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。错误3:根据题意,将满足条件的数求累加和。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据己在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把分数最低的学生数据放在h所指的数组中。注意:分数低的学生可能不只一个,函数返回分数最低学生的人数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{“GA005”,82},{“GA003”,75},{“GA002”,85},{“GA004”,78},{“GA001”,95},{“GA007”,62},{“GA008”,60},{“GA006”,85},{“GA015”,83},{“GA013”,94},{“GA012”,78},{“GA014”,97},{“GA011”,60},{“GA017”,65},{“GA018”,60},{“GA016”,74}};STRECh[N];inti,n;FILE*out;n=fun(S,h);printf(“The%dlowestscore:\n”,n);for(i=0;i<n;i++)printf(“%s%4d\n”,h[i].mum,h[i].s);/*输出最低分学生的学号和成绩*/printf(“\n”);out=fopen("outl9.dat",“w”);fprintf(out,“%d\n”,n);for(i=0;i<n;i++);fprintf(out,“%4d\n”,h[i].s);fclose(out);}标准答案:intfun(STREC*a,STREC*b){inti,j=0,min=a[0].s;for(i=0;i<N;i++)if(min>a[i].s)min=a[i].s;/*找出最小值*/for(i=0;i<N;i++):if(min==a[i].s)b[j++]=a[i];/*找出成绩与min相等的学生的记录,存入结构体b中*/returnj;/*返回最低成绩的学生人数*/知识点解析:该程序使用循环嵌套,第1个for语句的作用是找出最小值。第2个循环的作用是找出与min相等的成绩,也即最低成绩的学生记录,并存入b中。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(inta[],intn){inti,t;/*****************found*******************/for(i=0;i<【1】;i++){t=a[i];/*****************found*******************/a[i]=a[n-1-【2】];/*****************found*******************/【3】=t;}}main(){intb[9]={1,2,3,4,5,6,7,8,9),i;printf(”\nTheoriginaldata:\n”);for(i=0;i<9;i++)printf(”%4ct”,b[i]);printf("\n");fun(b,9);printf("\nThedataafterinvert:\n”);for(i=0;i<9;i++)printf(”%4d”,b[i]);printf("\n");}标准答案:n/2ia[n-i-1]知识点解析:第一空:由审题分析可知,总共交换n/2次,故循环的终止条件为i等于n/2,故第一空处应为“n/2”。第二空:a[0]和a[n-1]交换,a[1]和a[n-2]交换…..,因此a[i]和a[n-i-1]交换,故第二空处应为“i”。第三空:“t=a[i];a[i]=a[n-1-i];”所以第三空处是把t值赋值a[n-1-i],故第三空处应为“a[n-1-i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll。C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includetypedefstructaa{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);}标准答案:p=(NODE*)malloc(sizeof(NODE));returnh;知识点解析:(1)第一标识下“p=(NODE)malloc(sizeof(NODE));”,maclloc函数的返回类型是void*类型,表示未确定类型的指针,因此需要指针类型转换,而“(NODE)”不是指针类型,故第一标识下应改成“p=(NODE*)malloc(sizeof(NODE));”。(2)第二个标识下,最后将单链表返回,应该是返回头指针h指向的链表,而不是其中的一个节点p,所以“returnp;”应该改为“returnh;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入”abc4EFg”,则应输出”aBc4EFg”。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(char*ss){}main(){chartt[81];voidNONO();printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n\"%s\"",tt);fun(tt);printf("\nbecomes\n\"%s\"\n",tt);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;chartt[81];inti;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%s",tt);fun(tt);fprintf(wf,"%s\n",tt);}fclose(fp);fclose(wf);}标准答案:{inti;for(i=1;i=’a’&&ss[i]<=’z’)ss[i]-=32;}}知识点解析:(1)首先取得字符串中下标为奇数的字符。(2)判断奇数位置的字符是否为小写字母。(3)若(2)中的判断结果是小写字母,则对其进行转换。国家二级(C语言)机试模拟试卷第4套一、选择题(本题共39题,每题1.0分,共39分。)1、下列关于栈和队列的描述中,正确的是()。A、栈是先进先出B、队列是先进后出C、队列允许在队头删除元素D、栈在栈顶删除元素标准答案:D知识点解析:栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。2、已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是()。A、ABCDEB、ECABDC、EACDBD、CDEAB标准答案:C知识点解析:由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序遍历的首个元素为E,故排除A)和D)选项。由于中序遍历中,元素B在元素根结点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为B,故选项C)为正确选项,即该二叉树的前序遍历序列是EACDB。3、在数据流图中,带有箭头的线段表示的是()。A、控制流B、数据流C、模块调用D、事件驱动标准答案:B知识点解析:数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。4、结构化程序设计的3种结构是()。A、顺序结构,分支结构,跳转结构B、顺序结构,选择结构,循环结构-C、分支结构,选择结构,循环结构D、分支结构,跳转结构,循环结构标准答案:B知识点解析:程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。5、下列方法中,不属于软件调试方法的是()。A、回溯法B、强行排错法C、集成测试法D、原因排除法标准答案:C知识点解析:软件调试主要采用以下三种方法:强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。原因排除法:原因排除法是通过演绎和归纳,以及二分法来实现。6、下列选项中,不属于模块间耦合的是()。A、内容耦合B、异构耦合C、控制耦合D、数据耦合标准答案:B知识点解析:耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦合——若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共耦合——若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合——若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合——若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。标记耦合——若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。数据耦合——若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。非直接耦合——若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。7、下列特征中不是面向对象方法的主要特征的是()。A、多态性B、标识惟一性C、封装性D、耦合性标准答案:D知识点解析:面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识惟一性、多态性、封装性、模块独立性、继承和多态性好。8、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。它包括从E-R图向关系模式转换和逻辑模式规范化及调整、实现。9、在一棵二叉树上,第5层的结点数最多是()。A、8B、9C、15D、16标准答案:D知识点解析:根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。10、下列有关数据库的描述,正确的是()。A、数据库设计是指设计数据库管理系统B、数据库技术的根本目标是要解决数据共享的问题C、数据库是一个独立的系统,不需要操作系统的支持D、数据库系统中,数据的物理结构必须与逻辑结构一致标准答案:B知识点解析:数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。11、以下关于C语言的叙述中正确的是()。A、预处理命令通常位于函数体外面,但也可以位于函数体中间B、C语言中的变量定义须在其他语句之前C、在C语言程序的书写中,一个语句必须单占一行D、一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数标准答案:A知识点解析:源程序中可以有预处理命令(include命令仅为其中的一种)。C语言中的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数。12、下列叙述中错误的是()。A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中,大、小写字母代表不同标识标准答案:A知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。13、下列选项中可作为C语言合法常量的是()。A、-80B、-80C、-8e1.0D、-80.0e标准答案:A知识点解析:所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项B)中是以0开头,表示一个八进制数,而八进制数的取值范围是0~7,所以“-080”错误;在C语言中e后面的指数必须是整数,因此选项C)和D)也不正确。14、下列定义变量的语句中错误的是()。A、im_int;B、doubleint_;C、charFor;D、floaUS$;标准答案:D知识点解析:C语言规定,变量的标识符只能由字母、数字和下划线3种字符组成,且首字符必须为字母或下划线。在C语言中大写字母和小写字母被认为是两个不同的字符。选项A)定义的变量标识符int和选项B)定义的变量标识符int与C语言的关键字int是不同的,是正确的变量标识。选项C)定义的变量标识符For与C语言中的关键字for是两个不同的标识符,所以选项C)是正确的,而选项D)包含有特殊字符$,因而其不符合C语言的变量命名规定。15、下列关于函数的叙述中正确的是()。A、每个函数都可以被其他函数调用(包括main函数)B、每个函数都可以被单独编译C、每个函数都可以单独运行D、在一个函数内部可以定义另一个函数标准答案:B知识点解析:在C语言中,函数定义是平行的,函数不能嵌套定义,即函数之间没有从属关系。虽然函数之间可以相互调用,但main()函数不能被调用,选项A)错误;C程序从:main()函数开始执行,当main()数执行完毕时,整个程序就结束了。C程序的执行必须从main()函数开始,选项C)选项错误;函数不能嵌套定义,选项D)错误。16、当a=1、b=2、c=3、d=4时,执行下面程序段后,x的值是()。if(a<b)if(c<d)x=1;elseif(a<c)if(bA、1B、6C、3D、2标准答案:A知识点解析:本题考查的是if-else语句。第一个if语句,先判断条件,发现a<b条件成立,执行下面的语句。第二个if语句,先判断条件,发现c<d条件成立,执行下面的语句x=1。17、以下程序的输出结果是()。#include<stdio.h>main(){inta=4,b=3,c=2,d=1;printf("%d",a<b?a:d<c?d:b);}A、1B、3C、2D、4标准答案:A知识点解析:条件表达式的格式为:"a?b:c",它的功能是:当a为真时,表达式的值等于b的值;当a为假时,表达式的值等于c的值。因为条件运算符的结合方向为“自右向左”。因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件表达式,再计算左边的条件表达式。题中应先计算“d18、有以下程序#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2),i,j,t=0;for(i=0;i<3;i++)for(j=2j>=i;j--)t+=b[i][j];printf("%d\n",t);}程序运行后的输出结果是()。A、4B、3C、8D、9标准答案:C知识点解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,累加上三角元素,所以程序执行的过程为t=b[0][0]+b[0][1]+b[0][2]+b[1][1]+b[1][2]+b[2][2]=8。19、以下程序:#include<stdio.h>main(){charstr[10];scanf("%s",&str);printf("%s\n",str);}运行上面的程序,输入字符串howareyou,则程序的执行结果是()。A、howB、howareyouC、hD、howareyou标准答案:A知识点解析:当从键盘输入howareyou时,由于scanf输入函数的特点是遇到空格时结束读入字符,因此,该程序只将how这3个字符送到了字符数组str中,并在其后自动加上结束符“\0”。20、设x和y都是int类型,且x=1,y=2,则printf("%d%d",x,y,(x,y))的输出结果是()。A、12B、122C、1,2D、输出值不确定标准答案:A知识点解析:本题考查printf函数的格式和逗号表达式。printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。本题中逗号表达式(x,y)只返回y的值。此时格式说明的个数是2,而输出项的个数是3,因此printf函数只输出前两项。21、以下程序的输出结果是()。#include<stdio.h>main(){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。22、定义如下变量和数组:inti,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()。for(i=0;i<3;i++)printf("%d",x[i][2-i]);A、159B、147C、357D、369标准答案:C知识点解析:本题主要考查二维数组的使用。题中利用for循环来输出x数组中的指定元素:①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。23、有下列程序段:typedefstructNODE{intnum;structNODE*next;}OLD;下列叙述中正确的是()。A、以上的说明形式非法B、NODE是一个结构体类型C、OLD是一个结构体类型D、OLD是一个结构体变量标准答案:C知识点解析:C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用使typedef定义了新的类型OLD结构,所以OLD为结构体类型。24、下列数组定义中错误的是()。A、intx[][3]={0};B、intx[2][3]={{1,2),{3,4},{5,6}};C、intX[][3]={{1,2,3),{4,5,6}};D、intx[2][3]={1,2,3,4,5,6};标准答案:B知识点解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项B)中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列的数字进行赋初值。所以出现了边界的越界溢出错误。25、以下叙述错误的是()。A、变量的作用域取决于变量定义语句的位置B、全局变量可以在函数以外的任何部位进行定义C、局部变量的作用域可用于其他函数的调用D、一个变量说明为static存储类型是为了限制其他编译单元的引用标准答案:D知识点解析:本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。26、若定义函数int*func(),则函数func的返回值为()。A、一个实数B、一个指向整型变量的指针C、一个指向整型函数的指针D、一个整型函数的入口地址标准答案:B知识点解析:本题考查的是指针函数。指针函数定义的基本格式为:类型说明符*函数名()。其中,“类型说明符”表示返回的指针值所指向的数据类型。27、若有定义inta[5],*p=a;则正确引用数组元素的是()。A、*&a[5]B、*a+2C、*(p+5)D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:①(p+n)与(a+n)表示数组元素a[n]的地址;②*(p+n)与*(a+n)表示数组元素a[n];③p[n]=*(p+n),都表示数组元素a[n]。选项A)、B)没有这种引用形式;选项C),*(p+5)是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D),*c(a+2)引用数组的第3个元素。28、以下对C语言中联合类型数据的正确叙述是()。A、定义了联合变量后,即可引用该变量或该变量中的任意成员B、一个联合变量中可以同时存放其所有成员C、联合中的各个成员使用共同的存储区域D、在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变标准答案:C知识点解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。29、有以下函数定义:intfun(doublea,doubleb){returna*b;}若以下选项中所用变量都已正确定义并赋值,错误的函数调用是()。A、if(fun(x,y)){……)B、z=fun(fun(x,y),fun(x,y));C、z=fun(fun(x,y)x,y);D、fun(x,y);标准答案:C知识点解析:本题考查函数调用时的参数传递。选项C)中第一个参数的表达式不正确,因此不能得到正确的结果。30、执行以下语句段后,xy的值是()。int*pt,xy;xy=200;pt=&xy;xy=*pt+30;A、200B、170C、260D、230标准答案:D知识点解析:本题考查指针的运用。通过pt=&xy,将pt指向xy所占的内存地址,而*pt是指针pt所指向内存单元中的内容,即200,所以最后xy的值为230。31、下述程序的输出结果是()。#include<stdio.h>voidmain(){inta[20],*p[4];inti,k=0;for(i=0;i<20;i++)a[i]=i;for(i=0;i<4;i++)p[i]=&a[i*i+1];for(i=0;i<4;i++){k=k+*p[i];}printf("%d",k);}A、10B、18C、6D、数组元素引用不合法,输出结果不定标准答案:B知识点解析:第一个for循环,给数组a的20个元素分别赋值0~19;第二个for循环,给数组p赋值,p[0]=a[1]=1,p[1]=a[2]=2,p[2]=a[5]=5,p[3]=a[10]=10;第三个for循环,将数组p中元素的值进行累加,k=1+2+5+10=18。32、有以下程序:#include<stdio.h>#defineN8voidfun(int*x,inti){*x=*(x+i)+1;}main(){inta[N]={1,2,3,4,5,6,7,8),i;fun(a,2);for(i=0;i<N/2;i++){printf("%d",a[i]);)printf("\n");}程序运行后的输出结果是()。A、1313B、3234C、4234D、1234标准答案:C知识点解析:函数fun(int*x,inti)的功能是把数组元素x[i]的值加1赋给x[0]。所以在主函数中执行fun(a,2)后,数组元数a[0]的值等于4。然后在for循环语句中,输出数组a中的前4个元素的值,分别是4,2,3,4。33、下面函数的功能是()。sss(s,t)char*s,*t;{while(*s);while(*t)*(s++)=*(t++);returns;}A、将字符串s复制到字符串t中B、比较两个字符串的大小C、求字符串的长度D、将字符串t续接到字符串S中标准答案:D知识点解析:本题考查指针变量的运用。本题中的函数实质上是将字符串t续接到字符串s中。34、下列程序的运行结果是()。#include<stdio.h>voidsub(int*s,int*y){staticintm=4;*y=s[m];m--;}voidmain(){inta[]={1,2,3,4,5),k,x;printf("\n");for(k=0;k<=4;k++){sub(a,&x);printf("%d,",x);}}A、5,4,3,2,1,B、1,2,3,4,5,C、0,0,0,0,0,D、4,4,4,4,4,标准答案:A知识点解析:本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当main()函数中的for循环中语句sub(a,&x);执行时,sub函数中m的值依次是4,3,2,1,0;因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。35、设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是()。A、k=*q1*(*q2);B、q1=k;C、q1=q2;D、k=*q1+*q2;标准答案:B知识点解析:本题考查指针变量的赋值操作。选项A)是将指针q1和q2所指向的变量值相乘,然后赋给k;选项B)中,noat型数据和指针型数据之间不能进行赋值运算;选项C)中,是两个指针变量之间的赋值;选项D)中,是两个指针型变量所指向的两个int型数据相加。36、下列程序的输出结果为()。main(){unionun{char*name;intage;intpay;}s;s.name="zhaoming":s.age=32;s.pay=3000;printf("%d\n",s.age);}A、32B、3000C、0D、不确定标准答案:B知识点解析:本题考查的是联合体的有关概念。因为联合体是各个成员共享一段存储空间,此段存储空间最终存放的是最后存入的成员的值,所以题目中输出s.age实际上输出了最后存入的3000,因为3000已经把原来存入的s.age(32)的值覆盖。37、以下有关宏替换的叙述不正确的是()。A、使用宏定义可以嵌套B、宏定义语句不进行语法检查C、双引号中出现的宏名不替换D、宏名必须用大写字母表示标准答案:D知识点解析:本题考查宏替换的规则。宏替换有两类:简单的字符替换和带参数的宏替换。使用宏应注意:①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标示符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。38、有以下程序:#include<stdio.h>intb=3;intfun(int*k){b=*k+b;return(b);}main(){inta,[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);)printf("\n");}程序运行后的输出结果是()。A、1214B、1232C、1014D、1020标准答案:B知识点解析:i=2时,fun(&a[2])返回值是b=b+a[1]=3+3=6,b=b+b=6+6=12;i=3时,fun(&a[3])返回值是b=b+a[3]=12+4=16,b=b+b=16+16=32。39、已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A、一个整型变量,代表要读入的数据项总数B、一个文件指针,指向要读的文件C、一个指针,是指向的输入数据放在内存中的起始位置D、一个存储区,存放要读的数据项标准答案:C知识点解析:数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。fread函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。二、程序填空题(本题共1题,每题1.0分,共1分。)40、函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN9voidfun(inta[],intn){inti,t,p;/**********found**********/p=(n%2==0)?n/2:n/2+___1____;for(i=0;i<n/2;i++){t=a[i];/**********found**********/a[i]=a[p+___2___];/**********found**********/___3___=t;}}main(){intb[N]={1,2,3,4,5,6,7,8,9},i;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");fun(b,N);printf("\nThedataaftermoving:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)1(2)i(3)a[p+i]知识点解析:第一空:“p=(n%2==0)?n/2:n/2+____1____;”和“a[i]=a[p+____2____];"“n%2==0”判断是否是偶数,a[i]和a[p+____2____]交换,如果n是偶数,a[0]和a[n/2]交换,如果n是奇数,那么a[0]和a[n/2+1]交换,依此类推,故n为偶数时a[i]和a[i+n/2]交换,n为奇数时a[i]和a[i+n/2+1]交换。因此如果n是奇数的话,p应该等于n/2+1,故第一空处应为“1”。第二空:由上分析可知,a[i]和a[i+p]交换,故第二空应为“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三处应该是把a[i]赋值给a[p+i],a[i]保存在t中,故第三空应为“a[p+i]”。三、程序修改题(本题共1题,每题1.0分,共1分。)41、给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当S中的数为:7654321时,t中的数为:642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#inClude<stdio.h>/**********found**********/Voidfun(longs,longt){longs1=10;s/=10;*t=s%10;/**********found**********/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;printf("\nPleaseenters:");scanf("%1d",&s);fun(s,&t);printf("Thereresultis:%id\n",t);}标准答案:(1)voidfun(longs,long*t)(2)while(s>0)知识点解析:(1)第一个标识下的形参t被定义为一个long型变量,而对应的主函数中的实参却是一个地址值。因此,t在函数定义中应该被定义为一个指针变量,即“voidfun(longs,longt)”改为“voidfun(longs,long*t)”。(2)第二个标识下的while循环控制表达式“s<0”要求s小于0才进入循环。而s的值总是大于0,因此将“while(s<0)”改为“while(s>0)”。四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为:Word。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#include<string.h>#defitieLEN20voidfun(chara[],charb[],intn){}main(){charstr1[LEN],Str2[LEN];intn;voidNONO();printf("Enterthestring:\n");gets(str1);printf("Enterthepositionofthestringdeleted:¨);scanf("%d¨,&n);fun(str1,str2,n);printf("Thenewstringis:%s\n",Str2);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charstr1[LEN],str2[LEN];inti,n;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s%d",str1,&n);fun(str1,str2,n);fprintf(wf,"%s\n",Str2);}fclose(rf);fclose(wf);}标准答案:intp,m=0;for(p=0;p<LEN;p++)if(p!=n)//如果字符下标不满足题目要求的标志n{b[m]=a[p];//原始串的字符赋值给新串bm++:}b[m]=’\0’;//新串末尾加上结束符知识点解析:进入fun函数,根据前面的分析:通过循环,对字符串a中各字符逐个考查,若该字符串下标p不等于输入的标志位n,那么就顺序放到新串b中,否则就不存放。最后,对所有字符处理完后,要注意的就是在新字符串b的末尾加上串结束符’\0’。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:从键盘输入3个整数,然后找出最大的数并输出。例如,输入:12,45,43,最大值为45。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>main(){inta,b,c,max;clrscr();printf("\nlnputthreenumbers:\n");scanf("%d,%d,%d",&a,&b,&c);printf("Thethreenumbersare:%d,%d,%d\n",a,b,c);if(a>b)【】;else【】;if(max<c)【】;printf("max=%d\n",max);}标准答案:max=amax=bmax=c知识点解析:第一空:如果a大于b,则a为a,b中的最大值,将a赋给inax。第二空:如果a小于b,则b为a,b中的最大值,将b赋给max。第三空:最后将a,b中的最大值与c进行比较,如果c更大,则c为3个数中的最大数,将c赋给max,否则最大数max不变。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定的程序中,函数fun()的功能是:判断字符ch是否与str所指字符串中的某个字符相同;若相同,则什么也不做,若相同,则将其插在申的最后。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>/*************found**************/voidfun(charstr,charch){while(*str&&*str!=ch)str++;/*************found**************/if(*str==ch){str[0]=ch;/*************found**************/str[1]=’0’;}}main(){chars[81],c;clrscr();printf("\nPleaseenterastrzng:");gets(s);printf("\nPleaseenterthecharactertosearch:");c=getchar();fun(s,c);printf("\nTheresultis%s\n",s);}标准答案:(1)错误;voidfun(charstr,charch)正确:voidfun(char*str,charch)(2)错误:if(*str==ch)正确:if(*str==’\0’)(3)错误;str[1]=’0’;正确:str[1]=’\0’;知识点解析:该题的重点就是在while的循环嵌套语句中,由题干信息“若相同,则什么也不做”很容易就能看出if(*str==ch)后面的执行语句是错误的。另外,void指针具有一般性,它们可以指向任何类型的数据。但目前绝大多数C编译所提供的这类函数都返回char指针,再由题目中的定义得出voidfun(charstr,charch)的错误信息;str[1]=’0’;是一个简单的语法错误。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写程序,实现矩阵(3行3列)的转置(即行列互换)。例如,若输入下面的矩阵:100200300400500600700800900则程序输出:100400700200500800300600900注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>intfun(intarray[3][3]){}main(){inti,j;intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};clrscr();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");}}标准答案:intfun(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;}}知识点解析:注意对矩阵转置后仍然存回其本身时,只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在第2个循环中j从i+1或i开始,左下半三角的方法是在第2个循环中写成for(j=0;j<i;j++),若要控制所有元素在第2个循环要写成for(j=0;j<3;j++)。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;struct1ist*next;}SLIST;voidfun(SLIST*p){SLIST*t,*s;t=p->next;s=p;while(t->next!=NULL){s=t;/************found***********/t=t->【1】;}/**********found************/printf(”%d”,【2】);s->next=NULL;/***********found****************/free(【3】);}SLIST*Crearlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=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(”->%d”,p->data);p=p->next;}while(p!=NULL);printf(”->End\n”);}}main(){SLIST*head;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf(”\nOutputfromhead:\n”);outlist(head);printf(”\nOutputfromtail:\n”);while(head->next!=NULL){fun(head);printf(”\n\n”);print(”\nOutputfromheadagain:\n”),outlist(head);}}标准答案:(1)next(2)t一>data(3)t知识点解析:第一空:fun函数中的循环“while(I->next!=NULL)"目的是找到尾结点,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此第一空处应该是“t=t->next;"。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此第二空处应该为“printf("%d",t->dam);"。第三空:输出尾结点数据之后删除尾结点,使用free,又因为尾结点是t,因此第三空处应该为“free(t);"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includevoidfun(10ngs,long*t){intd;longs1=1;/************found************/t=0;while(s>0){d=s%10;/************found************/if(d%2==0){*t=d*s1+*t;s1*=10;}s/=10;}}main(){longs,t;printf("\nPleaseenters:");scanf("%id",&s);fun(s,&t);printf("Theresultis:%idkn",t);}标准答案:(1)*t=0;(2)if(d%2!=0)知识点解析:(1)第一个错误标识下的“t=0"语句中的t,根据fun函数定义“voidfun(10ngs,long*t)",它应该是个长整型的指针变量,所以“t=0"语句中的t只能取地址值,而不能取长整数,因此“t=0;"改为“*t=0;"。(2)判断d是否为奇数,即判断“d%21=0";而“d%2==0"是判断d是否偶数的方法,因此第二个标识下“if(d%2==0)"改为“if(d%21;0)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是;将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12。调用该函数后,c=425l。注意:部分源程序存在文件PROGl.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inta,intb,long*c){}voidNONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;Inti,a,b;longc;rf=fopen("in.clat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);}fclose(rf);fclose(wf);}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);NONO();}标准答案:*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);知识点解析:(1)分解两位数的正整数n的个位和十位数,可用n%10和n/10实现。(2)设x0、x1、x2、x3为一位数,则x0、x1×10、x2×100、x3×1000,可以分别使x0、x1、x2、x3构成个、十、百、千带权数,而x0+x1×10+x2×100+x3×1000构成四位数。本题最多只考虑四位数。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数proc(),其功能是:计算并输出给定10个数的方差。例如,给定的10个数为12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0,输出为s=8.877500。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填人所编写的若干表达式或语句。试题程序:#include#includedoubleproc(doublex[10]){inti;doubleavg=0.0;doublesum=0.0;doubleabs=0.0;doublesd;for(i=0;i<10;i++)【1】;avg=sum/10;for(i=0;i<10;i++)【2】;sd=【3】;returnsd;}voidmain(){doubles,str[10]={12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0};inti;printf(”\nTheoriginaldatais:\n”);for(i=0;i<10;i++)printf(”%6.If”,str[i]);printf(”\n\n”);s=proc(str);printf(”s=%fkn\n”,s);}标准答案:【1】sum+=x【i】【2】abs+=(x[i];一avg)*(x[i]一avg)【3】sqrt(abs/10)知识点解析:由函数proc()可知,变量sum中存放n个数的和,因此,【1】处填“sum+=x[i]”;然后求其平方差,因此,【2】处填“abs+=(x[i]-avg)*(x[i]-avg)”;最后求10个数的方差,因此,【3】处填“sqrt(abs/10)”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数proc()的功能是:从字符串str中,删除所有大写字母’F’。请修改程序中的错误,使它能得到正确结果。注意:不要改动main()函数,不

温馨提示

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

评论

0/150

提交评论