




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机试模拟题 (10套) 看不清楚的,自己调整字体大小 请补充main函数,该函数的功能是:计算两个自然数n和m(m #include #include void main() int n,m; long sum; 【1】; system(“CLS“); printf(“nInput n,mn“); scanf(“%d,%d“, while(n #include #include double fun(int m) double t=1.0; int I; for(I=2;I #include #include void fun(char *tt,int pp ) void main( ) FILE *wf; char aa1000; int bb26, k; system(“CLS“); printf(“nPlease enter a char string : “) ; scanf(“%s“,aa); fun(aa,bb); for (k=0 ;k=a 【2】; for (i=0;i #include long fun(long num) /*found*/ long k; do k *=num%10; /*found*/ num =10; while(num); return(k); main() int n; printf(“Please enter a number: “); scanf(“%ld“, printf(“n%ldn“,fun(n); 【参考答案】 (1)错误:long k;正确:long k=1; (2)错误:num=10; 正确:num/ =10; 【考点分析】 变量初始化,保存乘积的变量初始化为1。 【解题思路】 (1)k用来存放各位数字的积,初值应为1。 (2)这里是一个符号错误,除号使用“/“来表示的。 【解题宝典】明确C语言中的算术运算符: 加法运算符“+“:为双目运算符,即应有两个量参与加法运算。 减法运算符“-“:为双目运算符。但“-“也可作负值运算符,此时为单 目运算,如-x,-5等具有左结合性。 乘法运算符“*“:双目运算符,具有左结合性。 除法运算符“/“:双目运算符,具有左结合性。参与运算量均为整型 时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果 为双精度实型。 求余运算符(模运算符)“%“:双目运算,具有左结合性。要求参与 运算的量均为整型。 求余运算的结果等于两数相除后的余数。 第二套 改错题 请编写一个函数fun,它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define M 100 void fun(int m, int *a, int *n) void main() FILE *wf; int aaM,n,k; system(“CLS“); fun(50,aa, for(k=0;k long fun(int n) if (【1】) return(n*fun(【2】); return【3】; void main() printf(“10!=%ldn“,fun(10); 【参考答案】 (1)n1或11和 n=1这两种情况的处理方法不同,需要分开 考虑。 填空2:阶乘的算法是,当n1时,n!=n*(n-1)!,即 fun(n)=n*fun(n-1)。 填空3:n=1是递归的终止条件,返回值为1。 第三套 填空题 下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整 除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include int fun(int k) int m=0,mc=0, j; while(k=2) system(“CLS“); printf(“%fn “,fun(20); /*/ wf=fopen(“out.dat“,“w“); fprintf(wf,“%f“,fun(20); fclose(wf); /*/ 【参考答案】 double fun(int m) int i; double s=0.0; for(i=1;i #include #define N 10 void main() int bbNN; int I,j,n; system(“CLS“); printf(“ nInput n:n“); scanf(“%d“, for(I=0;I long fun(int g) /*found*/ switch(g); case 0:return 0; /*found*/ case 1; case 2:return 1; return (fun(g-1)+fun(g-2); void main() long fib; int n; printf(“Input n:“);scanf(“%d“, printf(“n=%dn“,n); fib=fun(n); printf(“fib=%dnn“,fib); 【参考答案】 (1)错误:switch(g); 正确:去掉分号 (2)错误:case 1;case 2: return 1; 正确:case 1:case 2:return 1; 【考点分析】 switch语句,其一般形式为: switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default : 语句n+1; “ 其中,switch(表达式)后不带有“;“,同时case语 句常量后应该是“:“。 【解题思路】 C语言中,switch语句之后不能有分号,并且 case语句常量后该用是冒号。 第四套 改错题 请编写函数fun,函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 例如,若二维数组中的值为 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define M 4 #define N 5 int fun( int a MN) void main() FILE *wf; int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0; int i, j, y; system(“CLS“); printf (“The original data is :n “); for(i=0; i int c1,c2,c3; void fun(long n) c1=c2=c3=0; while(n) switch(【1】) case 1: c1+;【2】; case 2: c2+;【3】; case 3: c3+; n/=10; main() long n=123114350L; fun(n); printf(“nThe result: n“); printf(“n=%ld c1=%d c2=%d c3=%dn“,n,c1,c2,c3); 【参考答案】 (1) n%10 (2) break (3) break 【考点分析】 本题考查:switch语句,注意该语句的一般形 式。如何提取数值n某一位上的数。break语 句的使用。 【解题思路】 填空1:要统计长整数n的各位上出现数字1、 2、3的次数,就需要判断各位上的数是多少 。那么,通过n除以10求余,可得到个位上的 数,所以填入n%10。 填空2和填空3:switch语句是多分支选择语句 ,在每个分支中要加入break,不然会依次执行 后面的分支。continue是结束当前分支的运 行,而break结束整个switch语句的运行。 第五套 填空题 下列给定程序中函数fun的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接 到t串的后面。例如,当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include void fun (char *s, char *t ) int I,s1; s1=strlen(s); for (I=0;I #include #include #define N 81 void fun(char*s) main() char aN; FILE *out; printf(“Enter a string:“); gets(a); printf(“The original string is:“); puts(a); fun(a); printf(“n“); printf(“The string after modified:“); puts(a); strcpy(a,“Hello World!“); fun(a); /*/ out=fopen(“out.dat“,“w“); fprintf(out,“%s“,a); fclose(out); /*/ 【参考答案】 void fun(char *s) char ch; int i,m,n; i=0; m=n=strlen(s)-1; while(i #include #include double fun(double x10) int I; long t; double avg=0.0; double sum=0.0; for(I=0;I #include #include fun(char *p) int i, t; char c80; for(i=0,t=0;pi;i+) if(!isspace(*(p+i) ct+=pi; /*found*/ ct=“0“; strcpy(p,c); void main() char c,s80; int i=0; printf(“Input a string: “); c=getchar(); while(c!=#) si=c;i+;c=getchar(); si=0; fun(s); puts(s); 【参考答案】 (1)错误:ct=“0“; 正确:ct=0; 【考点分析】 字符串结束标识0, 0属于一个字符,其 ASCII码为0。 【解题思路】 该程序的if条件中应用了isspace函数,该函 数的功能是检查ch是否空格、跳格符(制表 符)或换行符。字符串常量占的内存字节数 等于字符串中字节数加1。增加的一个字 节中存放字符0(ASCII码为0),这是字符串 结束的标志。 第六套 改错题 编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用*作为结束输入的标志)。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include char *fun(char (*a)81, int num, char *max) void main() FILE *wf; char ss1081,*ps=NULL; char s381=“abcd“,“deg“,“diegns“,*p=NULL; int i=0,n; system(“CLS“); printf(“输入若干个字符串:“); gets(ssi); puts(ssi); while(!strcmp(ssi, “*“)=0) /*用4个星号作为结束输入的标志*/ i+; gets(ssi); puts(ssi); n=i; ps=fun(ss,n,ps); printf(“nmax=%sn“,ps); /*/ wf=fopen(“out.dat“,“w“); p=fun(s,3,p); fprintf(wf,“%s“,p); fclose(wf); /*/ 【参考答案】 char *fun(char (*a)81, int num, char *max) int i=0; max=a0; /*找出最长的一个字符串*/ for(i=0;i #include #include void main() long int n; system(“CLS“); printf(“Enter the data:n“); scanf(【1】); printf(“* the absolute value *n“); if(n #include #include char *fun(char tt) int I; /*found*/ for(I=0;ttI;I+) if(a # define N 50 # define M 11 void fun(int *a, int *b) double rnd() static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return(double)r/m); void main() FILE *wf; int ageN, i,dM; int bN=32,45,15,12,86,49,97,3,44,52,17,95,63; for(i=0; i=100) b10+; /*如果年龄大于等于100,b10自增1*/ else bai/10+;/*如果年龄小于100,则将其分别统计到 bai/10中*/ 【考点分析】 本题考查:数组元素赋初值;ifelse语句。 【解题思路】 本题是一个分段函数的问题,用两个循环来完成。 第1个循环的作用是使b中的所有元素值都为0,这个循环不能省略, 因为若未对b中的元素赋初值,则它们的值是不可预测的。 第2个循环的作用是分别统计a中各年龄段的人数。当时,按题意要 将其统计到b10中。else的作用是如果年龄小于100,则将其分别 统计到bai/10中。由运算优先级可知,先进行ai/10的运算,所得 结果作为b的下标。若ai为0至9时,ai/10的值为0,且0至9岁的人 数正好要存入b0中。若ai为10至19岁时,ai/10的值为1,且10至 19岁的人数正好要存入b1中,依此类推。 第七套 编程题 请补充main函数,该函数的功能是:从键盘输入两个字符串并分别保存在字符数组str1和 str2中,用字符串str2替换字符串str1前面的所有字符。注意:str2的长度不大于str1,否则需 要重新输入。 例如,如果输入str1=“abced“,str2=“fk“,则输出“fkced“。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表 达式或语句。 试题程序: #include #include #include void main() char str181,str281; char *p1=str1,*p2=str2; system(“CLS“); do printf(“ Input str1 n“); gets(str1); printf(“ Input str2 n“); gets(str2); while(【1】); while(【2】) *p1+=*p2+; printf(“ Display str1 n“); puts(【3】); 【参考答案】 (1) strlen(str1) #include #include /*found*/ void fun(int a,b) int t; /*found*/ t=b;b=a;a=t; void main() int a,b; system(“CLS“); printf(“Enter a, b: “); scanf(“%d%d“, fun( printf(“a=%d b=%dn “, a,b); 【参考答案】 (1)错误:void fun(int a,b) 正确:void fun(int *a,int *b) (2)错误:t=b;b=a;a=t; 正确:t=*b;*b=*a;*a=t; 【考点分析】 本题考查:函数定义,指针型变量做函数参数, 对于形参列表,必须给出其类型说明;变量值 交换算法。 【解题思路】 本题考查指针变量做函数参数。采用一般变 量做参数,不能改变实参的值,采用指针变量 作参数,则能够改变实参的值。主函数中fun( )的调用方式说明函数fun的参数应当为指针 类型。另外,值得一提的是“交换法则“,这题 的错误比较明显,如果程序段中有隐蔽的交 换错误,一般不容易发现,希望学习者引起注 意。 第八套 改错题 下列程序定义了的二维数组,并在主函数中自动赋值。请编写函数fun(int aN),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为: a=1 9 7 2 3 8 4 5 6 则返回主程序后a数组中的值应为: 0 9 7 0 0 8 0 0 0 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define N 5 void fun (int aN) void main() FILE *wf; int aNN,i,j; int bNN=1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4; system(“CLS“); printf(“*The array*n“); for(i=0;i void fun(char *s) int I,n,k; char c; n=0; for(I=0;sI!=0;I+) n+; if(n%2=0) k=n-【1】; else k=n-2; c=【2】; for(I=k-2;I=1;I=I-2) sI+2=sI; sI=【3】; main() char s80=“abcdefgh“; printf(“nThe original string is:%sn“,s); fun(s); printf(“nThe result is:%sn“,s); 【参考答案】 (1) 1 (2) sk或*(s+k) (3) c 【考点分析】 本题考查:指针型变量;ifelse语句 ;赋值语句。 【解题思路】 填空1:函数fun中n统计字符的长度 ,假如长度为偶数,则k=n-1;假如长 度为基数,则k=n-2,使得下标为奇 数的最后一个元素有效 (不是“0“) 。 填空2:了解k的作用后,则将最右边 的奇数位置的数赋值给c。 填空3:将最后一个下标为奇数的元 素移到第一个奇数位置。 第九套 填空题 下列给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include #define MAXLINE 20 /*found*/ fun(char *pstr6) int I, j; char *p; for(I=0;I0) p=*(pstr+I); /*found*/ *(pstr+I)=pstr+j; *(pstr+j)=p; void main() int i; char *pstr6,str6MAXLINE; system(“CLS“); for(i=0;i0) 正确:if(strcmp(*(pstr+i),*(pstr+j)0) (3)错误:*(pstr+i)=pstr+j; 正确:*(pstr+i)= *(pstr+j); 【考点分析】 本题考查: 冒泡排序算法;函数定义;if语句。 【解题思路】 用冒泡法对字符串从小到大排序的方法是将相邻两 个字符比较,将小的调到前面。令x等于字符串的第i 位字符,若该字符的前一位字符大于x,则将该字符与x 互换位置。从字符串中的第2位字符到字符串的最后 一位字符重复以上过程,即可完成排序。该题可用循 环语句实现。 【解题宝典】 冒泡法是最简单常用的排序方法,多数考生理解冒泡 方法的思想,只是不能将其应用到程序中,这里我们以 对m个数进行升序排列为例,请考生认真理解并牢记 如下代码: for(j=1;jai+1)/*注意判断条件*/ t=ai;ai=ai+1;ai+1=t; 第九套 改错题 已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成 绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include #define N 10 typedef struct ss /*定义结构体*/ char num10; int s; STU; fun(STU a, STU *s) void main() FILE *wf; STU aN= “A01“,81, “A02“,89, “A03“,66, “A04“,87, “A05“,77, “A06“,90, “A07“,79, “A08“,61, “A09“,80, “A10“,71,m; int i; system(“CLS“); printf(“*The original data*“); for(i=0;isss“等 价于“(*s).s“。 第九套 编程题 请补充main函数,该函数的功能是:把文本文件B中的内容追加到文本文件A的内容之后。 例如,文件B的内容为“I m ten.“,文件A的内容为“I m a student!“,追加之后文件A的内容为“I m a student ! I m ten.“。 注意:部分源程序给出如下。 试题程序: #include #include #include #define N 80 void main() FILE *fp,*fp1,*fp2; int i; char cN,ch; system(“CLS“); if(fp=fopen(“A.dat“,“r“)=NULL) printf(“file A cannot be openedn“); exit(0); printf(“n A contents are : nn“); for(i=0;(ch=fgetc(fp)!=EOF;i+) ci=ch; putchar(ci); fclose(fp); if(fp=fopen(“B.dat“,“r“)=NULL) printf(“file B cannot be openedn“); exit(0); printf(“nnnB contents are : nn“); for(i=0;(ch=fgetc(fp)!=EOF;i+) ci=ch; putchar(ci); fclose(fp); if(fp1=fopen(“A.dat“,“a“) 【1】 (fp2=fopen(“B.dat“,“r“) while(ch=fgetc(fp2)!=EOF) 【2】; else printf(“Can not open A B !n“); fclose(fp2); fclose(fp1); printf(“n*new A contents*nn“); if(fp=fopen(“A.dat“,“r“)=NULL) printf(“file A cannot be openedn“); exit(0); for(i=0;(ch=fgetc(fp)!=EOF;i+) ci=ch; putchar(ci); 【3】; 【参考答案】 (1) 写字符函数fputc,功能是把一个字符写 入指定的文件中;文件关闭函数fclose。 【解题思路】 填空1:当两个文件都被成功打开时,才能将文件B 中的内容追加到文件A中,所以应该用“与“运算符 “ struct aa *next; NODE; int fun (NODE *h) int sum=0; NODE *p; p=h-next; /*found*/ while(p-next) if(p-data%2=0) sum+=p-data; /*found*/ p=h-next; return sum; NODE *creatlink(int n) NODE *h,*p,*s; int i; h=p=(NODE*)malloc(sizeof(NODE); for(i=1;idata=rand()%16; s-next=p-next; p-next=s; p=p-next; p-next=NULL; return h; outlink(NODE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国脚印盒行业项目调研及市场前景预测评估报告
- 全球化背景下的选举制度改革趋势分析-洞察及研究
- 2025年光伏储能系统协同控制技术在光伏发电领域的创新突破
- 在线教育的发展及其对教育公平的贡献-洞察及研究
- 孤独症谱系障碍
- 丰田音响施工方案设计
- 银行从业资格考试机位及答案解析
- 压力性损伤预防及护理进展
- 奶茶店稽查工作年度总结
- 陈情表教学课件
- 光伏电站安全风险辨识及风险库管理制度
- 铁路机车防火安全教育
- 企业内训师培养与培训课程设计
- 网架防腐刷漆施工方案
- 《采矿方法的选择案例综述》1700字
- 新冀教版二年级数学上册教学计划与课程标准对接
- (完整版)《珠心算口诀表》
- 微粒贷逾期立案通知函
- 【课件】校园心理危机干预理论与技巧
- TSG07-2019锅炉安装工艺+焊接专用工艺卡+施工记录表
- 工厂与车间制图规定
评论
0/150
提交评论