二级C语言机试-133
国家二级C语言机试(程序设计题)模拟试卷2(题后含答案及解析)

国家二级C语言机试(程序设计题)模拟试卷2(题后含答案及解析) 题型有:1.1.使用VC++2010打开考生文件夹下prog1中的解决方案。
此解决方案的项目中包含一个源程序文件prog1.c。
在此程序中,函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。
例如,若8所指字符串中的内容为“ABCDEFG12345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。
最后t所指的数组中的内容应是“BDF12345”。
注意:部分源程序在文件PROG1.C中。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:#include<stdio.h>#include<string.h>void fun(char*s,char t[]){}main( ){char s[100],t[100];void NONO( );printf(“\nPlease enter string S:”);Scanf(“%s”,s);fun(s,t);printf(“\nThe result is:%s\n”,t);NONO( );}void NONO( ){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
*/chars[100],t[100];FTLE*rf,*wf;int i;rf=fopen(“in.dat”,”r”);wf=fopen(“out.dat”,”w”);for(i=0;i<10;i++){fscanf(rf,”%s”,s);fun(s,t);fprintf(wf,”%s\n”,t);}fclose(rf);fclose(wf);}正确答案:void fun(char*s,char t[]){int i,j=0;for(i=0;i<strlen(s);i++)if(!((i%2)==0&&(s[i]%2)))t[j++]=s[i];t[j]=0;}解析:本题是从一个字符串按要求生成另一个新的字符串。
国家二级(C语言)机试模拟试卷88(题后含答案及解析)_0

国家二级(C语言)机试模拟试卷88(题后含答案及解析)题型有:1. 程序填空题 2. 程序修改题 3. 程序设计题程序填空题(30分)1.请补充main函数,该函数的功能是:把字符串str1中的非空格字符拷贝到字符串str2中。
例如,若sffl=“glad to see you!”,则str2=“gladtoseeyou!”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:#include<stdio.h>#define N 80 main( ) { static char strl [N] =“glad to see you!”; char str2 IN]; int i=0, j=0; clrscr ( ); printf(“\n***** strl*****\n “); puts (str1); while (str1 [i] ) {if(【】) str2 [J++] =strl [i];【】; } printf(“\n***** str2 *****\n “); for (i=0; i<j; i++) printf (“%c”, str2 [i] ); }正确答案:str1[i]!=‘‘i++解析:第一空:如果当前字符不为空格,则将它保存在字符串str2中。
第二空:在while循环中,通过1忖取得字符串str1中当前字符的下一个字符,继续判断是否为空格。
程序修改题(30分)2.下列给定程序中,函数fun( )的功能是:给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。
例如,n=8时,输入193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763,所得平均值为195.838745,在平均值以上的实数个数应为5。
请改正程序中的错误,使它能得出正确的结果。
二级C语言机试-113_真题-无答案

二级C语言机试-113(总分100,考试时间90分钟)1、填空题请补充main函数,该函数的功能是求方程ax2+bx+c=0的两个实数根。
方程的系数a、b、c 从键盘输入,如果判别式(disc=b*b-4*a*c)小于0,则要求重新输入a、b、c的值。
例如,当a=1,b=2,c=1时,方程的两个根分别是:x1=-1.00,x2=-1.00。
注意:部分源程序已给出。
请勿改动函数中的其他任何内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:#include<math.h>#include<stdio.h>void main()double a,b,C,x1,x2,disc;doprintf("Input a,b,c:");scanf("%1f,%1f,%1f”,&a,&b,&c);disc=b*b-4*a*c;if(disc<0)printf("disc=%1f\n Input again!\n",disc);while( (1) );printf("******the result******\n");x1=(-b+ (2) (disc))/(2*a);x2=(-b- (3) (disc))/(2*a);printf("\nx1=%6.21f\nx2=%6.21fkn",x1,x2);1.2.3.2、改错题1. 由N个有序整数组成的数列已放在一维数组中,下列给定程序函数fun的功能是:利用折半查找法查找整数m在数组中的位置。
若找到,返回其下标值;否则,返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围low和high(low<high),然后用m与中间位置(mid)上元素的值进行比较。
如果m的值大于中间位置元素的值,则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中,直到low>high,查找结束。
国家二级C语言机试(程序修改题)模拟试卷6(题后含答案及解析)

国家二级C语言机试(程序修改题)模拟试卷6(题后含答案及解析) 题型有:1.1.使用VC++2010打开考生文件夹下modi1中的解决方案。
此解决方案的项目中包含一个源程序文件modi1.c。
在此程序中,函数fun的功能是:根据整型参数m,计算如下公式的值。
例如,若m=2000,则应输出0.000160。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C 中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/*********found*********/fun(int m){double y=0,d;int i;/*********found*********/for(i=100,i<=m,i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}void main( ){int n=2000;system(“CLS”);printf(“\nThe result is%1f\n”,fun(n));}正确答案:(1)double fun(int m)(2)for(i=100;i<=m;i+=100)解析:(1)题目要求在函数fun中求级数前m项和,可用循环语句,每次计算级数中的一项,然后累加。
第一处错误在于定义fun(int m),由函数的返回值y 可知此处应该定义为double fun(int m)。
(2)for(i=100,i<=m,i+=100)中是一个简单的语法错误。
for循环语句的形式为for(表达式1;表达式2;表达式3),其表达式之间应以”;”相隔。
2.下列给定程序中,函数fun的功能是:比较两个字符串,将长的字符串的首地址作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件NODll.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include<conio.h>#include<stdio.h >/*********found*********/double fun(char*s,char*t){ int s1=0,t1=0;char*ss,* tt;ss=s;tt=t;while(*ss) { s1++;/*********found*********/(*ss)++;} while(*tt) { t1++;/*********found*********/(*tt)++;} if(t1>s1) Eeturn t;else return s;}void main( ){ char a[80],b[80];printf(“\nEnter a string:”);gets(a);printf(“\nEnter a string a-gain:”);gets(b);printf(“\nThe longer is:\n\n%s\n”,fun(a,b));}正确答案:(1)char*fun(char*s,char*t)(2)ss++;(3)tt++;解析:(1)在主函数的输出语句中,函数fun是以字符串格式输出的,所以定义函数时应为char*fun(char*s,char*t)。
二级C语言机试-123_真题-无答案

二级C语言机试-123(总分100,考试时间90分钟)1、填空题给定程序的功能是分别统计字符串中大写字母和小写字母的个数。
例如,给字符串ss输入:AaaaBBb123CCccccd,则输出结果应为:upper=5,lower=9 注意:部分源程序已给出。
请勿改动函数中的其他内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:#include<stdio.h>void fun(char*8,int*a,int*b)while(*s)if(*s>='A'&&*s<='Z')(1) ;if(*s>='a'&&*s<='z')(2) ;s++:main()char s[100];int upper=0,lower=0;printf("\nPlease a string:");gets(s);fun(s,&upper,&lower);printf("\n upper=%d,lower=%d\n", (3) );1.2.3.2、改错题1. 下列给定程序中函数fun的功能是:求出如下分数序列的前n项之和,和值通过函数值返回。
例如,若n=5,则应输出8.391667。
请改正程序中的错误,使其得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/**********found**********/fun(int n)int a=2,b=1,c,k;return(s);void main()double s=0.0;for(k=1;k<=n;k++)/*********found*********/s=s+(double)a/b;c=a;a=a+b;b=c;int n=5;system("CLS");printf("\nThe value of function is:%f\n",fun(n));3、编程题1. 请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。
国家二级C语言机试(程序修改题)模拟试卷23(题后含答案及解析)

国家二级C语言机试(程序修改题)模拟试卷23(题后含答案及解析) 题型有:1.1.给定程序MODI1.C的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。
例如,若输入整数:2310,则应输出:2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>/**********found**********/IsPrime (int n);{ int i,m;m=1;for (i=2;i<n;i++)/**********found**********/if !(n%i) { m=0;break;) return(m);} main( ) { int j,k;printf(“\nPlease enter an integer number between 2 and 10 000:“);scanf(“%d”,&k);printf(“\n\nThe prime factor(s)of%d is(are):”,k);for(j=2;j<=k;j++) if((!(k%j))&&(IsPrime(j)) )printf(“\n%4d”,j);printf(“\n”);}正确答案:(1)IsPrime(irit n) (2)if(!(n%i))解析:函数功能是求整数n的素数因子,IsPrime自定义函数的功能是判断i是否为素数。
(1)第一个标识下面的“IsPrime(int n);”在程序中显然是一个函数,因此应将后面的分号去掉。
(2)第二个标识下面的if语句后面缺少括号,因此,if!(n%i)应改为if(!(n%i))。
该题主要考查标点符号、运算符、基本定义。
2.给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。
国家二级C语言机试(操作题)模拟试卷105(题后含答案及解析)
国家二级C语言机试(操作题)模拟试卷105(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.下列给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的宁符串中后面的宁符删除,只保留前面的k个字符。
ss所指字符串数组中共有N个字符串,且串长小于M。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构! 试题程序:#include <stdio.h>#include<string.h>#define N 5#define M 10/**********found***********/void fun(char(*SS)【1】,int k){ int i=0;/**********found***********/ while(i<【2】){/**********found***********/ ss[i][k]=【3】;i++;)}main( ){ char x[N][M]={“Create”,“Nodify”,“Sort”,“skip”,“Delete”};int i; printf(“\nThe original string\n\n”);for(i=0;i<N;i++)puts(x[i]);printf(“\n”); fun(x,4);printf(“\nThe string after deleted:\n\n”);for(i=0,i<N;i++)puts(x[i]);printf(“\n”);}正确答案:(1)[M] (2)N (3)‘\0’解析:填空1:根据main函数中的函数调用语句,确定函数定义时的形式参数,所以填入[M]。
填空2:while循环语句需要对所有字符串进行操作,因此循环条件是i<N。
填空3:字符串结尾加入字符串结束标以‘\0’。
国家二级C语言机试(操作题)模拟试卷333(题后含答案及解析)
国家二级C语言机试(操作题)模拟试卷333(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。
例如,形参s 所指的字符串为:abcdef35adgh3kjsdf7。
输出结果为:4。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 void fun(char *s,int *t)3 { int i,n;4 n=0;5 /**********found**********/6 for(i=0; __1__ !=0;i++)7 /**********found**********/8 if(s[i]>=‘0’ &&s[i]<=__2__)n++;9 /**********found**********/10 __3__;11 }12 main( )13 {char s[80]=‘‘abcdef35adgh3kjsdf7’’;14 int t;15 printf(‘‘\nThe original string is:%s\n’’,s);16 fun(s,&t)’17 printf(‘‘\nThe result is:%d\n’’,t);}正确答案:(1)s[i] (2)’9’(3)*t=n解析:搜索整个字符串,判断s[i]>=‘0’且s[i]<=‘9’,满足该条件后,计数变量加1,因此第一空:循环终止条件是达到了字符串的尾部,字符串以“\0”(或NULL)结束,故第一空处应为s[i]。
第二空:数字字符的判断是s[i]>=‘0’且s[i]<=‘9’,故第二空处应为“‘9’”。
第三空:这里是将数字字符出现的次数存放在形参t里,n记录了数字字符的个数,而形参t是指针变量,故第三处应为“*t=n”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二级C语言机试-133
(总分:100.00,做题时间:90分钟)
一、填空题(总题数:1,分数:30.00)
1.请补充main函数,该函数的功能是:计算每个学生成绩的平均分,并把结果保存在数组bb中。
例如,当scorer[N][M]=83.5,82,86,65,67),80,91.5,84, 99,95)90.5,95,86,95,97时,三个学生的平
均分为76.7 89.9 92.7。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在 main函数的横线上填入所编写的若千表达式或语句。
试题程序:
#include<stdio.h>
#define N 3
#define M 5
main()
int i,j;
static float score[N][M]=83.5,82,86,
65,67,80,91.5,84,99,95,90.5,95,
86,95,97;
float bb[N];
clrscr();
for(i=0;i<N;i++)
【1】;
for(i=0;i<N;i++)
for (j=0; j<M; j++)
【2】;
bb [i]/=M;
for (i=0; i<N; i++)
print f (" knstudent %d/t average
=%5.1f",i+l,bb[i]);
(分数:30.00)
填空项1:__________________ (正确答案:[1]bb[i]=0 [2]bb[i]+=score[i][j])
解析:[解析]填空1:每个人的平均分都保存在数组bb[N]中,所以在使用前要对数组bb的各元素赋初值
0。埴中2:为了求出平均分,首先要求㈩每个学生的总分,并存于数组bb中。
二、改错题(总题数:1,分数:30.00)
2.以下程序可把输入的十进制数以十六进制数的形式输出。
请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序;
main ()
char b[17]="0123456789ABCDEF";
int c[64] ,d,i=0,base=16;
long n;
printf("Enter a number:/n");
scanf ("%ld", &n);
do
/*****************found****************/
c[i]=______; i++; n=n/base;
while (n!=0);
printf("Transmite new base:/n");
for(--i;i>=0;--i)
/***************found*******************/
d=c[i];printf("%c",b______);
printf("/n");
(分数:30.00)
填空项1:__________________ (正确答案:错误:缺少语句 正确:应填入n%base或%16
(2)错误:缺少语句 正确:应填入[d])
解析:[解析] 在该程序中,字符数组b存储十六进制的16个数字符,整型数组c存储译出的十六进制数
的各位数值。从整数n译出它的各位十六进制数值,需采用除16取余的方法,即求n除16的余,得到它
的十六进制的个位数,接着将n除以16。在n不等于0的情况下循环,能顺序求出n的十六进制的个位数、
十位数、百位数等。程序中变量base已预置16,所以在第1个空框处可填代码n%base或n%16。当n的
十六进制数的个位、十位、百位等依次存放于数组c中后,就从最高位至最低位,参照数组c[i]的内容d(以
其内容为下标),取十六进制数字符表中的字符b[d]输出。所以在第2个空框处可填入代码[d]。
三、编程题(总题数:1,分数:40.00)
3.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fjun(),
该函数的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形
参n传回,平均分通过函数值返回。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#define N 12
typede f struct
char num[10];
double s;
STREC;
double fun (STREC *a,STREC *b, int *n)
main ( )
STREC s IN] = "GA05", 85 , "GA03", 76 ,
"GA02", 69, "GA04", 85, "GA01", 91,
"GA07", 72, "GA08", 64, "GA06", 87,
"GA09", 60, "GAll", 79 , "GA12", 73,
"GA10", 90 ;
STREC h[N],t;
FILE *out;
int i ,j,n;
double ave;
ave=fun (s, h, &n);
printf("The %d student data which is
higher than %7.3f: In", n, ave);
for(i=0; i<n; i++)
printf ("%s %4.1f/n",h[i] .num, h[i] .s);
printf ("/n");
out=fopen ("out90.dat", "w");
fprintf(out, "%dkn %7.3f/n",n,ave);
for(i=0; i<n-1; i++)
for (j=i+l; j<n; j ++)
if (h[i] .s<h[j ] .s)
t=h Ii] ;h[i]=h[j] ;h[j]=t;
/*分数从高到低排列*/
for(i=0; i<n; i++)
fprintf(out, "%4.1f/n",h[i] .s);
fclose (out);
(分数:40.00)
__________________________________________________________________________________________
正确答案:(double fun (STREC *a, STREC *b, int *n)
{
int i;
double ay=0.0;
*n=0;
for(i=0;i<N;i++)
av=av+a[i].s;
ay=ay/N; /*求平均值*/
for(i=0;i<N;i++)
if(av<=a[i].s)
{ b[*n]=a[i];*n-*n+l;} /*将高于等于平均分的学生存从所指存储单元中,并统计人数*/
return ay; /*返回严均分*/
})
解析:[解析] 本题中第1个循环的作用求出所有分数的总和,只有进行了av=av/N后才得到平均值(我们
在前面的程序中碰到过类似问题)。第2个循环的作用是将高于等于平均分的学生存入b所指存储单元中。
同一结构体变量之间可以互相赋值。
本程序中直接用*n来表示b的下标,注意开始时要给,*n赋0,且使用时不能少*号。因为单独的n是一
个指针变量,而我们要用的是它所指向的那个存储单元中的值。