ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:45KB ,
资源ID:1318238      下载积分:5000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-1318238.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(【计算机类职业资格】C程序基本结构及答案解析.doc)为本站会员(syndromehi216)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

【计算机类职业资格】C程序基本结构及答案解析.doc

1、C 程序基本结构及答案解析(总分:100.00,做题时间:90 分钟)一、程序修改(总题数:3,分数:48.00)1.函数 fun()的功能是:统计 substr 所指子字符串在 str 所指字符串中出现的次数。例如,若字符串为aaas 1kaaas,子字符串为 as,则应输出 2。#includestdio.hint fun(char*str,char*substr)int i,j,k,num=0;/*found*/for(i=0,stri,i+)for(j=i,k=0;substrk=strj;k+,j+)/*found*/If(substrk+1=/0)num+;break;return

2、 num;main()char str80,substr80;printf(“Input a string:“);gets(str);printf(“Input a substring:“);gets(substr);printf(“%d/n“,fun(str,substr);(分数:16.00)_2.给定程序 MOD11.C 中函数 fun()的功能是:用递归算法计算斐波拉契数列中第 n 项的值。从第 1 项起,斐波拉契数列为 1、1、2、3、5、8、13、21例如,若给 n 输入 7,该项的斐波拉契数值为 13。#includestdio.hlong fun(int g)/*found*/

3、switch(g);case 0:return 0;/*found*/case 1;case 2;return 1;retum(fun(g-1)+fun(g-2);main()long fib;int n;printf(“Input n:“);scanf(“%d“,printf(“n=%d/n“,n);fib=fun(n);printf(“fib=%dn/n/n,fib);(分数:16.00)_3.fun()的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给 hum1 和 num2 分别输入 49 和 21,则输出的最大公约数为 7;若给 num1 和 num2 分别输入

4、27和 81,则输出的最大公约数为 27。#includestdio.hint fun(int a,int b)int r,t;if(ab)/*found*/t=a;b=a;a=t;r=a%b;while(r!=0)a=b;b=r;r=a%b;/*found*/return(a);main()int num1,num2,a;printf(“Input num1 num2:“);scanf(“%d%d“,printf(“num1=%d num2=%d/n/n“,num1,num2);a=fun(num1,num2);printf(“The maximun common divisor is%d/

5、n/n“,a);(分数:16.00)_二、程序填空(总题数:2,分数:36.00)4.函数 fun()的功能是:将形参 a 所指数组中的前半部分元素的值和后半部分元素的值对换。形参 n 中存放数组中数据的个数,若 n 为奇数,则中间的元素不动。例如,若 a 所指数组中的数据依次为1、2、3、4、5、6、7、8、9,则调换后为 6、7、8、9、5、1、2、3、4。#includestdio.h#define N 9void fun(int a,int n)int i,t,p;/*found*/p=(n%2=0)?n/2:n/2+ (1) ;for(i=0;in/2;i+)t=ai;/*found

6、*/ai=ap+ (2) ;/*found*/(3) =t;main()int bN=1,2,3,4,5,6,7,8,9,i;printf(“/nThe original data:/n“);for(i=0;iN;i+)printf(“%4d“,bi);printf(“/n”);fun(b,N);printf(“nThe data after moving:/n“);for(i=0;iN;i+)printf(“%4d“,bi);printf(“/n“);(分数:18.00)填空项 1:_5.给定程序中,函数 fun()的功能是计算下式直到 (分数:18.00)填空项 1:_三、程序设计(总题数

7、:1,分数:16.00)6.函数 fun()的功能是:将 s 所指字符串中除了下标为奇数,同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在 t 所指的数组中。例如,若 s 所指字符串中的内容为“ABCDEFG12345”,其中字符 A 的 ASCII 码值虽为奇数,但所在元素的下标为偶数,因此必须删除;而字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数,因此不应当删除;以此类推,最后 t 所指数组中的内容应是“135”。#includestdio.h#includestring.hvoid fun(char*s,char t)main

8、()char s100,t100;void NONO();printf(“/nPlease enter string S:“);scanf(“%s“,s);fun(s,t);printf(“/nThe result is:%s/n“,t);(分数:16.00)_C 程序基本结构答案解析(总分:100.00,做题时间:90 分钟)一、程序修改(总题数:3,分数:48.00)1.函数 fun()的功能是:统计 substr 所指子字符串在 str 所指字符串中出现的次数。例如,若字符串为aaas 1kaaas,子字符串为 as,则应输出 2。#includestdio.hint fun(char*

9、str,char*substr)int i,j,k,num=0;/*found*/for(i=0,stri,i+)for(j=i,k=0;substrk=strj;k+,j+)/*found*/If(substrk+1=/0)num+;break;return num;main()char str80,substr80;printf(“Input a string:“);gets(str);printf(“Input a substring:“);gets(substr);printf(“%d/n“,fun(str,substr);(分数:16.00)_正确答案:(1)for(i=0;stri

10、;i+) (2)if(substrk+1=/0)解析:解析 本题中函数的功能是统计子字符串 substr 在字符串 str 中出现的次数。解题过程是在 str中查找指定的子串,并且统计了串出现的次数。第二个标识下的 for 循环中的循环表达式之间应使用分号来分隔,所以第二个标识下的“for(i=0,stri,i+)”应改为“for(i=0;stri;i+)”。第二个标识下“If(substrk+1=/0)”,其含义是判断 substr 是否到达了尾部。这里应该用 if 来判断,在 C 语言中没有“If”关键字,故第二个标识处应改成“if(substrk+1=/0)”。考点 函数定义,for 循

11、环语句。2.给定程序 MOD11.C 中函数 fun()的功能是:用递归算法计算斐波拉契数列中第 n 项的值。从第 1 项起,斐波拉契数列为 1、1、2、3、5、8、13、21例如,若给 n 输入 7,该项的斐波拉契数值为 13。#includestdio.hlong fun(int g)/*found*/switch(g);case 0:return 0;/*found*/case 1;case 2;return 1;retum(fun(g-1)+fun(g-2);main()long fib;int n;printf(“Input n:“);scanf(“%d“,printf(“n=%d/

12、n“,n);fib=fun(n);printf(“fib=%dn/n/n,fib);(分数:16.00)_正确答案:(1)switch(g) (2)case 1:return 1;case 2:return 1;)解析:解析 本题中函数的功能是用递归算法计算斐波拉契级数数列中第 n 项的值。本题主要是对switch.case 语法的考查。第一个标识下的 switch 后用括号括起来的表达式的标准语法后面是没有“;”的,所以“switch(g);”应改为“switch(g)”。第二个标识下的 case 加常量表达式的后面用冒号连接选择语句,所以“case 1;”应改为“case 1:”。“cas

13、e 1:”和“case 2:”都是返回 1,应该写两个“return 1”。考点 switch 分支语句。3.fun()的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给 hum1 和 num2 分别输入 49 和 21,则输出的最大公约数为 7;若给 num1 和 num2 分别输入 27和 81,则输出的最大公约数为 27。#includestdio.hint fun(int a,int b)int r,t;if(ab)/*found*/t=a;b=a;a=t;r=a%b;while(r!=0)a=b;b=r;r=a%b;/*found*/return(a);main(

14、)int num1,num2,a;printf(“Input num1 num2:“);scanf(“%d%d“,printf(“num1=%d num2=%d/n/n“,num1,num2);a=fun(num1,num2);printf(“The maximun common divisor is%d/n/n“,a);(分数:16.00)_正确答案:(1)t=a;a=b;b=t; (2)return(b);)解析:解析 本题中函数的功能是求出两个非零正整数的最大公约数。其中,最大公约数是指能最大约去给出的几个数字的数字。例如,15 和 30 能最大约去的数字是 15,所以 15 就是它们的

15、最大公约数。从源程序的 main()主函数开始入手,从键盘输入两个正整数,通过语句“a=fun(num1,num2);”调用fun()函数求得它们的最大公约数。根据算法分析,首先要确保 a、b 两个数中 a 是较大数,b 是较小数,如果不是,则交换 a 和 b。但是第一个标识下,交换 a 和 b 两个数的算法有误,所以应将“t=a;b=a;a=t;”改为“t=a;a=b;b=t;”。算法到循环结束,最后余数为 0 时,b 中所存的数即为最大公约数,也就是函数要返回的值。因此,第二个标识下面的“return(a);”改为“return(b)”。考点 函数实现的逻辑关系。二、程序填空(总题数:2,

16、分数:36.00)4.函数 fun()的功能是:将形参 a 所指数组中的前半部分元素的值和后半部分元素的值对换。形参 n 中存放数组中数据的个数,若 n 为奇数,则中间的元素不动。例如,若 a 所指数组中的数据依次为1、2、3、4、5、6、7、8、9,则调换后为 6、7、8、9、5、1、2、3、4。#includestdio.h#define N 9void fun(int a,int n)int i,t,p;/*found*/p=(n%2=0)?n/2:n/2+ (1) ;for(i=0;in/2;i+)t=ai;/*found*/ai=ap+ (2) ;/*found*/(3) =t;ma

17、in()int bN=1,2,3,4,5,6,7,8,9,i;printf(“/nThe original data:/n“);for(i=0;iN;i+)printf(“%4d“,bi);printf(“/n”);fun(b,N);printf(“nThe data after moving:/n“);for(i=0;iN;i+)printf(“%4d“,bi);printf(“/n“);(分数:18.00)填空项 1:_ (正确答案:(1)1 (2)I (3)ap+i)解析:解析 解析 本题中函数 fun()的功能是将形参 a 所指数组中的前半部分元素的值和后半部分元素的值对换。具体分为两

18、种情况:a 的长度是奇数和偶数。a 的长度是奇数时,最中间的元素不移动,将前半部分和后半部分对换;a 的长度为偶数时,直接将前半部分和后半部分对换。第一空:在“p=(n%2=0)?n/2:n/2+ (1) ;”和“ai=ap+ (2) ;”中,由“n%2=0”判断是否是偶数,ai和 ap+ (2) 交换。如果 n 是偶数,a0和 an/2交换;如果 n 是奇数,那么 a0和 an/2+1交换,依此类推,故 n 为偶数时 ai和 ai+n/2交换,n 为奇数时 ai和 ai+n/2+1交换。因此,如果 n 是奇数的话,p 应该等于 n/2+1,故第一空处应为“1”。第二空:由上分析可知,ai和

19、ai+p交换,故第二空处应为“i”。第三空:“t=ai;ai=ap+i;”,故第三处应该是把 ai赋值给 ap+i,ai保存在 t 中,故第三空处应为“ap+i”。考点 参数调用,形参、实参的应用。5.给定程序中,函数 fun()的功能是计算下式直到 (分数:18.00)填空项 1:_ (正确答案:(1)0 (2)i+ (3)2.0*i)解析:解析 解析 函数 fun()的功能是求级数和。由观察可知,级数项有规律变化,可以用循环来累加求和。第一空:由“return s;”可知 s 是返回值,s 的初始化值为 0,故循环累加是从第一项开始累加的。在循环体“ (2) ;x=(2.0*i-1)/(

20、(3) *(2.0*i);s=s+x;”中,变量 i 没有递增,故第二空处应为“i+”。当 X 是级数的第一项时,i=1(i+之后变成 1),故 i 的初始化值为 0,因此第一空处应为“0”。第二空:由上面的分析可知,第二空处应为“i+”。第三空:“x=(2.0*i-1)/( (3) )*(2.0*i);”是求级数项的值,根据题干给出的级数项特征可知,级数项的分母是(2.0*i)的平方,故第三空处应为“2.0*i”。考点 函数功能。三、程序设计(总题数:1,分数:16.00)6.函数 fun()的功能是:将 s 所指字符串中除了下标为奇数,同时 ASCII 值也为奇数的字符之外,其余的所有字符

21、都删除,串中剩余字符所形成的一个新串放在 t 所指的数组中。例如,若 s 所指字符串中的内容为“ABCDEFG12345”,其中字符 A 的 ASCII 码值虽为奇数,但所在元素的下标为偶数,因此必须删除;而字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数,因此不应当删除;以此类推,最后 t 所指数组中的内容应是“135”。#includestdio.h#includestring.hvoid fun(char*s,char t)main()char s100,t100;void NONO();printf(“/nPlease enter string S:“);scanf(“%

22、s“,s);fun(s,t);printf(“/nThe result is:%s/n“,t);(分数:16.00)_正确答案:(int i,j=0;for(i=1;istrlen(s);i+=2)If(i%2=0tj=/0;)解析:解析 解析 该程序的功能是将字符串中除了下标为奇数、ASCII 值也为奇数的字符外,其余的全都删除。在解题过程中,利用 if 判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。判断一个字符串中的某一字符下标 i 是否为奇数,可用“i%2!=0”来实现,也可以从下标 1 开始,每次移动 2 个位置;而判断字符的 ASCII 码值是否为奇数,则可用“sj%2!=0”来实现。对串 s 中各个字符串逐个进行判定,满足条件的字符就顺序放在新串 t 中,否则就不存放。所有字符处理完后,记得在新串 t 的末尾加上结束符“/0”。考点 数组操作,函数传值,if 条件语句,for 循环语句。

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1