《计算机二级上机考试题库.pdf》由会员分享,可在线阅读,更多相关《计算机二级上机考试题库.pdf(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、上 机 考 试 复 习 一、考 试 题 型:1、程 序 填 空 题 18分 2、程 序 改 错 题 18分 3、编 程 题 24分 二、考 试 时 间:90分 钟 三、考 试 参 考 书:全 国 计 算 机 等 级 考 试 二 级 C 语 言 上 机 考 试 习 题 集 全 国 计 算 机 等 级 考 试 命 题 组 编 2013年 3月 专 用 南 开 大 学 出 版 社 四、上 机 调 试 环 境:机 试 C 语 言 的 调 试 环 境 是 VC+6.0。五、题 型 类 型 1、数 值 计 算(阶 乘、求 和、求 积、数 的 合 并 与 分 解)2、求 素 数、偶 数、奇 数、公 约 数
2、类 型 3、函 数 调 用(递 归 调 用、函 数 类 型 等)4、排 序 类 型(换 排 序,选 择 排 序、冒 泡 排 序、插 入 排 序)5、字 符 串 类 型(数 值 转 换、位 置 变 换,排 序)6、结 构 链 表 类 型 7、文 件 类 型五、上 机 典 型 例 题(一)填 空 题 1.填 空 题 一 般 是 两 空 或 三 空,切 记!填 完 空 后,要 将 下 画 线 删 除,得 到 正 确 结 果 后,一 定 不 要 忘 记 把 修 改 后 将 程 序 保 存。例 1(常 考 题):请 补 充 f u n函 数,f u n函 数 的 功 能 是:计 算 并 输 出 n(包
3、括 n)以 内 能 被 3 或 7 整 除 的 所 有 自 然 数 的 倒 数 之 和。例 如,在 主 函 数 中 输 入 5 0,输 出 为:s=1.425889。注 意:部 分 源 程 序 已 给 出。不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!仅 在 f u n函 数 的 横 线 上 填 入。#include double fun(int n)(int i;double sum=0.0;for(i=l;1;i+)if(i%3=0 2 i%7=0)sum+二 3/i;return sum;main()int n;double s;printf(nlnput n:);
4、scanf(%d,&n);s=fun(n);printf(nns=%fn,s);例 2(常 考 题)给 定 程 序 中,函 数 fun的 功 能 是:计 算 下 式 前 n 项 的 花 作 为 函 数 值 返 回:S=l*3/2*2+3*5/4*4+5*7/6*6+(2n-l)*(2n+2)/(2n)*(2n)例 如:当 行 参 n 的 值 为 10时,函 数 返 回 9.612558。请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:部 分 源 程 序 已 给 出。不 得 增 行 或 删 行,也 不 得
5、 更 改 程 序 的 结 构!#include double fun(int n)int i;double s,t;/7,*1*7,7,7,*1 7,7,7,7,/不 个 小 不 小 不 不 不 不 不 不 小 不 不 不 不 不 下 不 不/S=1;/不 不 不 不 不 不 不 不 不 不 t1*c 1不 不 不 不 不 不 不 不 不 不/for(i=1;i=2;i+)t=2.0*i;/7,*1*7,7,、*7,%L*7,f*1 7,7,7,、*7,*1*1*/不 个 小 不 小 不 不 不 不 不 不 小 不 不 不 不 不 下 不 不/s=s+(2.0*i-l)*(2.0*i+l)/3
6、return s;main()int n=-l;while(n0):);scanf(%d,&n);printf(The result is:%fn,fun(n);例 3 在 主 函 数 中 从 键 盘 输 入 若 干 个 数 放 入 数 组 a 中,用 0 结 束 输 入 但 不 计 入 数 组。下 列 给 定 程 序 中,函 数 fun的 功 能 是:输 出 数 组 元 素 中 小 于 平 均 值 的 元 素。例 如,数 组 中 元 素 的 值 依 次 为 34、54、675、456、453、1 2 1,则 程 序 的 运 行 结 果 为 34、54、121o请 在 程 序 的 下 划 线
7、处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!#include#include void f u n(1,int n)double count=0.0;double average=0.0;int i=0;for(i=0;in;i+)2;average=3fdr(i=0;in;i+)if(aiaverage)9if(i%5=0)printf(n);printf(%d,ai);)main()(int a1000;int i=0;printf(nPlease enter
8、 datas(end with 0):);do(scanf(%d,&ai);while(ai+!=0);fun(a,i-l);例 4.(常 考 题)给 定 程 序 中,函 数 的 功 能 是 计 算 并 输 出 high以 内 最 上 的 10个 素 数 之 和。H igh由 主 函 数 传 给 fun函 数。若 high的 值 为 1 0 0,则 函 数 的 值 为 732。请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!。#incl
9、ude#include int fun(int high)int sum=0,n=0,j,yes;/*fk)und*/w hile(high=2)&1)yes=l;for(j=2;j=high/2;j+)if(high%j=O)/*f)und*/y e s=0;2;)if(yes)sum+=high;n+;/7,7,7,7,*1*1*7,7,7,*1*7,/不 不 不 不 不 不 不 不 不 不 Toi 1 n d 不 不 不 不 不 不 不 不 不 不/3)return sum;)main(),printf(%dn,fun(100);例 5(常 考 题)请 补 充 fun函 数,fun函 数
10、 的 功 能 是:寻 找 两 个 整 数 之 间 的 所 有 素 数(包 括 这 两 个 整 数),把 结 果 保 存 在 数 组 bb中,函 数 返 回 素 数 的 个 数。例 如,输 入 3和 17,输 出 为:3、5、7、11、13、17o注 意:部 分 源 程 序 已 给 出。不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!仅 在 fun函 数 的 横 线 上 填 入。(类 似 题 目 有 15道)#include#include#define N 1000int fun(int n,int m,int bbN)int i,j,k=0,flag;for(j=n;j=
11、m;j+)(1;for(i=2;ij;i+)if(2)flag=0;break;)if(3)bbk+=j;return k;main()int n=0,m=0,i,k;int bbN;printf(Input nn);scanf(%d,&n);printf(Input mn);scanf(%d,&m);for(i=0;im-n;i+)bbi=0;k=fun(n,m,bb);for(i=0;ik;i+)printf(%4d,bbi);)例 6(常 考 题):请 在 fun函 数 的 横 线 上 填 写 若 干 表 达 式,使 从 键 盘 输 入 一 个 整 数 n,输 出 斐 纳 契 数 列,斐
12、 纳 契 数 列 一 种 整 数 数 列,其 中 每 数 等 于 前 面 两 数 之 和,如 0 1 1 2 3 813。注 意:部 分 源 程 序 已 给 出。不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!仅 在 fun函 数 的 横 线 上 填 入。(类 似 题目 有 7 道)#include int fun(int n);main()int i,n=0;scanf(%d,&n);for(i=0;in;i+)printf(%d,fun(i);int fun(int n)if(_ I_)return 0;else if(2)return 1;elsereturn 3:例
13、 7(常 考 题):给 定 程 序 中,函 数 fu n的 功 能 是:将 形 参 n中 各 位 上 为 偶 数 的 数 取 出,按 原 来 从 高 位 到 低 位 的 顺 序 组 成 一 个 新 的 数,并 作 为 函 数 值 返 回。例 如,从 主 函 数 输 入 一 个 整 数 27638496,函 数 返 回 值 为 26846o请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!(此 类 题 型 有 6 道)#include un
14、signed long fun(unsigned long n)unsigned long x=0,s,i;int t;s=n;/*/i=_J_;/*f)und*/w h i l e(2)t=s%10;if(t%2=0)/*found*/x=x+t*i;i=3:s=s/10;return x;main()unsigned long n=-l;while(n99999999|n0)printf(input(0n100000000):);scanf(%ld,&n);printf(nThe result is:%ldn,fun(n);例 8(常 考 题):给 定 程 序 的 功 能 是 十 进 制
15、正 整 数 m转 换 成 k进 制(2=k=9)数 的 数 字 输 出,若 输 入 8 和 2,则 输 出 1000(gp十 进 制 8 转 换 成 二 进 制 表 示 为 1000)o 请 在 程 序 的 下 划 中 线 填 入 正 确 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 结 果。不 得 删 行 或 减 行,也 不 得 更 改 程 序 结 构。(此 类 型 有 3 道)#include void fun(int m,int k)int aa20,i;for(i=0;m;i+)/*f)und*/aai=1 _;/7,*1*7,7,1*1*1*7,7,7,/不 不 不
16、 不 不 不 不 不 不 不 c i i n d 不 不 不 不 不 不 小 不 不 不/2,,for(;i;i-)/*und*/printf(%d,3);main()int b,n;printf(nPlease enter a number and a base:n);scanf(%d%d,&n,&b);fun(n,b);9.给 定 程 序 中,函 数 fun的 功 能 是:把 形 参 a 所 指 数 组 中 的 偶 数 按 原 顺 序 依 次 存 放 到 a0、al,a2中,把 奇 数 从 数 组 中 删 除,偶 数 个 数 通 过 函 数 值 返 回。例 如 a 所 指 数 组 中 数
17、据 最 初 排 列 为:9、1、4、2、3、6、5、8、7,删 除 奇 数 后 a 所 指 数 组 的 数 据 为:2、4、6、8,返 回 值 为 4。请 在 下 划 中 线 填 入 正 确 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 结 果。不 得 删 行 或 减 行,也 不 得 更 改 程 序 结 构。#include#define N 9int fun(int a,int n)int i,j;j=0;for(i=0;in;i+)/7,7,7,7,1 7,*.1*7,7,7,/不 不 不 不 不 不 不 不 不 不 t c i】不 不 下 不 不 不 不 不 不 不/i
18、f(_ 1 _=0)/*fk)und*/2=ai;j+;/7,7,*1*1*KL*7,7,C*1 7,7,7,7,/不 个 不 不 不 不 不 不 小 不 t m 不 小 不 不 不 不 不 下 不 不/return 3;main()int bN=9,l,4,2,3,6,5,8,7),i,n;printf(nThe original data:n);for(i=0;iN;i+)printf(%4d,bi);printf(n);n=fun(b,N);printf(nThe number of even:%dn,n);printf(nThe even:n);for(i=0;in;i+)printf
19、(%4d,bi);printf(n);例 10(常 考 题)程 序 填 空 题:给 定 程 序 中,函 数 fu n的 功 能 是 用 函 数 指 料 指 向 要 调 用 的 函 数,并 进 行 调 用。规 定 在 第 2 处 使 f 指 向 函 数 f l,在 第 3 处 使 f 指 向 函 数 f 2。当 调 用 正 确 时,程 序 输 出:x 1=5.000000,x2=3.000000,xl*xl+xl*x2=40.000000请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:源 程 序 已 给
20、出。不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 彳 勾!#include double f l(double x)return x*x;Jdouble f2(double x,double y)return x*y;double fun(aouble a,double b)/1/不 不 不 不 不 不 不 不 不 不,ci 不 不 不 不 不 不 不 不 不 不/_ 1 _(*。();double rl,r2;/7,7,7,7,1 7,7,/不 不 不 不 不 不 不 不 不 不 t c i】不 不 下 不 不 不 不 不 不 不/f二 _ 2_/*point founti
21、on fl*/rl=f(a);/*und*/f=3:/*point fountion f2*/r2=(*f)(a,b);return rl+r2;)main()double xl=5,x2=3,r;r=fun(xl,x2);printf(xl=%f,x2=%f,x 1*x 1+x 1*x2=%fn,x l,x2,r);例 11(常 考 题):给 定 程 序 的 功 能 是:将 未 在 字 符 串 s 中 出 现,而 在 字 符 串 t 中 出 现 的 字 符,构 成 一 个 新 字 符 串 放 在 u 中,U 中 的 字 符 按 原 字 符 串 中 字 符 顺 序 排 列,去 掉 重 复 字
22、符。例如:当 S=“12345”,t=“24677”时,u 中 的 字 符 串 为:“67”。请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构.(此 类 型 有 15道)#include#include void fun(char*s,char*t,char*u)int i,j,si,tl,k,ul=0;si=strlen(s);tl=strlen(t);for(i=0;itl;i+)for(j=0;j=si)for(k=0;k=ul)u
23、ul+=-2;_ 3=0;main()char s100,t100,u100;printf(nPlease enter string s:);scanf(%s,s);printf(nPlease enter string t:);scanf(%s,t);1fun(s,t,u);printf(The result is:%sn,u);例 12(结 构 类 常 考 题):人 员 的 记 录 由 编 号 和 出 生 年、月、日 组 成,N名 人 员 的 数 据 已 在 主 函 数 中 存 入 结 构 体 数 组 s t d 中,且 编 号 唯 一。函 数 fu n功 能 是:找 出 指 定 编 号
24、人 员 的 数 据,作 为 函 数 值 返 回,由 主 函 数 输 出,若 指 定 的 编 号 不 存 在,返 回 数 据 中 编 号 为 空 串。请 在 程 序 的 下 划 中 线 填 入 正 确 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 结 果。不 得 删 行 或 减 行,也 不 得 更 改 程 序 结 构。此 类 型 有 7 道#include#include#define N 8typedef struct char num10;int year,month,day;STU;/*0und*/fun(STU*std,char*num)int i;STU a=,999
25、9,99,99);for(i=0;iN;i+,std+)/*found*/if(s t r c m p(2,n u m)=0)/*found*/return 3:return a;main()STUstdN=1111H,1984,2,15,222222,1983,9,21,333333,1984,9,1,(-444444,1983,7,15,555555,1984,9,28,666666,1983,11,15,777777,1983,6,22,8888881984 8;STU p;char n10=666666;p=fun(std,n);if(p.num0=0)printf(nNot foun
26、d!n);elseprintf(nSucceed!n);printf(%s%d-%d-%dn,p.num,p.year,p.month,p.day);例 13(常 考 题)程 序 通 过 定 义 学 生 结 构 体 变 量,存 储 了 学 生 的 学 号、姓 名 和 3 门 课 的 成 绩。函 数 f u n的 功 能 是 将 形 参 a 所 指 结 构 体 变 量 s中 的 数 据 进 行 修 改,并 把 a 中 地 址 作 为 函 数 值 返 回 主 函 数,在 主 函 数 中 输 出 修 改 后 的 数 据。例 如:a 所 指 变 量 s 中 的 学 号、姓 名、和 三 门 课 的 成
27、绩 依 次 是:1000k ZhangSan,95、80、8 8,修 改 后 输 出 t中 的 数 据 应 为:10002,LiSi 96、81、890请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 牖 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!#include#include struct studentlong sno;char name 10;float score31;/*乐 氏)und*/fun(struct student*a)int i;a-sno=10002;/KL
28、s*trcpy(a-nam1e?LiSi);/不 不 不 不 不 不 不 不 不 不 una不 不 不 不 不 不 不 不 不 不/for(i=0;i3;i+)+=1;/*und*/return;main()struct student s=10001,ZhangSan,95,80,88,*t;int i;DrintfCThe original data:n);3rintf(No:%la Name:%snScores:,s.sno,s.name);?or(i=0;isno,t-name);?or(i=0;iscorei);例 14(常 考 题)请 补 充 main函 数,该 函 数 的 功 能
29、 是:先 以 只 读 方 式 打 开 文 件 out.dat,再 把 字 符 串 str中 的 字 符 保 存 到 这 个 磁 盘 文 件 中。在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构.(此 类 型 有 9 道)#include#include#define N 80main()FILE*fp;int i=0;char ch;char strN=Im a students!;if(fp=fopen(out.dat,1)=NULL)pr
30、intf(cannot open out52.datn);exit(0);while(stri)ch=strfi;fputcfch,2);putchar(ch);i+;)3;)15.程 序 填 空 题(常 考 题)函 数 的 功 能 是:把 文 本 文 件 B 中 的 内 容 追 加 到 文 本 文 件 A 的 内 容 之 后。例 如,文 件 B 的 内 容 为 T m ten.”,文 件 A 的 内 容 为 Tm a student!追 加 之 后 文 件 A 的 内 容 为 T m a student!I?m ten.”请 在 程 序 的 下 划 线 处 填 入 正 确 的 内 容 并 把
31、 下 划 线 删 除,使 程 序 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!#include#include#include#definemain()N 80FILE*fp,*fpl,*fp2;int i;char cN,t,ch;system(cls);if(fp=fopen(A.dat,r)=NULL)printf(file A cannot be openedn);exit(0);printf(A contents are:n);for(i=0;(ch=fgetc(fp)!=EOF;i+)ci=ch;putchar(ci);f
32、close(fp);if(fp=fopen(B.dat,r)=NULL)printf(file B cannot be openedn);exit(0);printf(B contents are:n);for(i=0;(ch=fgetc(fp)!=EOF;i+)ci=ch;putchar(ci);fclose(fp);/*found*/if(fpl=fopen(A.dat,a)1(fp2=fopen(B.dat,r)while(ch=fgetc(fp2)!=EOF)/7,7,7,7,*1*1*7,7,*L*7,*1*7,/不 不 不 不 不 不 不 不 不 不 Toi 1 n d 不 不 不
33、 不 不 不 不 不 不 不/2;)else printf(Can not open A B!n);fclose(fp2);fclose(fpl);printf(n*new A contents*nn);if(fp=fopen(A.dat,r)=NULL)printf(file A cannot be openedn);exit(O);for(i=0;(ch=fgetc(fp)!=EOF;i+)ci=ch;putchar(ci);/不 不 不 不 不 不 不 不 不 不,i*c i 1*不 1 不*1 不*1 不*1*不*1*不 不 不 不 K 不*!/一 3;(二)改 错 题 1.上 机 改
34、 错 的 试 题 中 通 常 包 含 两 个 或 三 个 错 误 需 要 修 改,试 题 中 用”*found*/来 提 示 在 下 一 行 或 下 面 几 行 有 错。2.错 误 的 基 本 分 语 法 错 和 逻 辑 错 两 种,也 有 些 试 题 要 求 把 语 句 添 加 在 下 划 线 处。只 能 在 出 错 的 行 上 进 行 修 改,不 要 改 动 程 序 行 的 顺 序,更 不 要 自 己 另 编 程 序。此 外,结 果 正 确 后 一 定 不 要 忘 记 把 修 改 后 将 程 序 保 存。(1).书 写 标 识 符 时,忽 略 了 大 小 写 字 母 的 区 别。main(
35、)int b=10;printf(%d,B);编 译 程 序 把 b 和 B 认 为 是 两 个 不 同 的 变 量 名,而 显 示 出 错 信 息。C 认 为 大 写 字 母 和 小 写 字 母 是 两 个 不 同 的 字 符。习 惯 上,符 号 常 量 名 用 大 写,变 量 名 用 小 写 表 示,以 增 加 可 读 性。.忽 略 了 变 量 的 类 型,进 行 了 不 合 法 的 运 算。main()float a,b;printf(%d,a%b);%是 求 余 运 算,得 到 a/b的 整 余 数。整 型 变 量 a 和 b 可 以 进 行 求 余 运 算,而 实 型 变 量 则 不
36、 允 许 进 行“求 余”运 算。(3).将 字 符 常 量 与 字 符 串 常 量 混 淆。char c;c=a;在 这 里 就 混 淆 了 字 符 常 量 与 字 符 串 常 量,字 符 常 量 是 由 一 对 单 引 号 括 起 来 的 单 个 字 符,字 符 串 常 量 是 一 对 双 引 号 括 起 来 的 字 符 序 列。C 规 定 以“”作 字 符 串 结 束 标 志,它 是 由 系 统 自 动 加 上 的,所 以 字 符 串“a”实 际 上 包 含 两 个 字 符:9 和,而 把 它 赋 给 一 个 字 符 变 量 是 不 行 的。(4).忽 略 了“二”与“二 二”的 区 别
37、。C 语 言 中,“二”是 赋 值 运 算 符,“二 二”是 关 系 运 算 符。如:if(a=3)a=b;前 者 是 进 行 比 较,a 是 否 和 3 相 等,后 者 表 示 如 果 a 和 3 相 等,把 b 值 赋 给 a。由 于 习 惯 问 题,初 学 者 往 往 会 犯 这 样 的 错 误。(5).忘 记 加 分 号。分 号 是 C 语 句 中 不 可 缺 少 的 一 部 分,语 句 末 尾 必 须 有 分 号。a=lb=2编 译 时,编 译 程 序 在“a=l”后 面 没 发 现 分 号,就 把 下 一 行“b=2”也 作 为 上 一 行 语 句 的 一 部 分,这 就 会 出
38、现 语 法 错 误。改 错 时,有 时 在 被 指 出 有 错 的 一 行 中 未 发 现 错 误,就 需 要 看 一 下 上 一 行 是 否 漏 掉 了 分 号。z=x+y;t=z/100;printf(%f,t);对 于 复 合 语 句 来 说,最 后 一 个 语 句 中 最 后 的 分 号 不 能 忽 略 不 写。(6).多 加 分 号 或 少 了 分 号。对 于 一 个 复 合 语 句,如:z=x+y;t=z/100;printf(%f,t);复 合 语 句 的 花 括 号 后 不 应 再 加 分 号,否 则 将 会 画 蛇 添 足。if(a%3=0);i+;本 是 如 果 3 整 除
39、 a,贝 U i加 1。但 由 于 if(a%3=0)后 多 加 了 分 号,则 i f语 句 到 此 结 束,程 序 将 执 行 i+语 句,不 论 3 是 否 整 除 a,i 都 将 自 动 加 1。再 如:for(i=0;i5;i+);scanf(%d,&x);printf(%d,x);本 意 是 先 后 输 入 5 个 数,每 输 入 一 个 数 后 再 将 它 输 出。由 于 for()后 多 加 了 一 个 分 号,使 循 环 体 变 为 空 语 句,此 时 只 能 输 入 一 个 数 并 输 出 它。(7).输 入 变 量 时 忘 记 加 地 址 运 算 符 int a,b;sc
40、anf(%d%d,a,b);_ 瓯 an f函 数 的 作 用 是:按 照 a、b 在 内 存 的 地 址 将 a、b 的 值 存 进 去。“&a”指 a 在 内 存 中 的 地 址。8.输 入 数 据 的 方 式 与 要 求 不 符。(9).switch语 句 中 漏 写 break语 句。例 如:根 据 考 试 成 绩 的 等 级 打 印 出 百 分 制 数 段。switch(grade)case A:printf(85100n);case B:printf(7084n);case C:printf(6069n);case D:printf(60n);default:printf(erro
41、rn);由 于 漏 写 了 break语 句,case只 起 标 号 的 作 用,而 不 起 判 断 作 用。因 此,当 grade值 为 A 时,printf函 数 在 执 行 完 第 一 个 语 句 后 接 着 执 行 第 二、三、四、五 个 printf函 数 语 句。正 确 写 法 应 在 每 个 分 支 后 再 加 上“break;。例 如 case A:printf(85100n);break;(10).在 定 义 数 组 时,将 定 义 的“元 素 个 数”误 认 为 是 可 使 的 最 大 下 标 值。main()static int a10=1,2,3,4,5,6,7,8,9
42、,10;printf(%d,a10);C 语 言 规 定:定 义 时 用 a 1 0,表 示 a 数 组 有 10个 元 素。其 下 标 值 由 0 开 始,所 以 数 组 元 素 a10是 不 存 在 的。(11).在 不 应 加 地 址 运 算 符&的 位 置 加 了 地 址 运 算 符。scanf(%s,&str);C 语 言 编 译 系 统 对 数 组 名 的 处 理 是:数 组 名 代 表 该 数 组 的 起 始 地 址,且 scanf函 数 中 的 输 入 项 是 字 符 数 组 名,不 必 要 再 加 地 址 符&。应 改 为:scanf(%s,str);典 型 例 题:例 1(
43、常 考 题)给 定 程 序 的 功 能 是:读 入 一 个 整 数 k(2WkW1000),打 印 它 的 所 有 质 因 子。例 如,若 输 入 整 数 2310,则 应 输 出:2、3、5、7、I E请 改 正 程 序 中 的 错 误,使 程 序 能 输 出 正 确 的 结 果。注 意:不 要 改 动 main函 数,不 得 删 行 或 减 行。(此 类 型 有 7 道)#include#include/*Qund*/IsPrime(int n);int i,m;m=1;/*found*/for(i=2;in;i+)if!(n%i)m=0;break;return(m);main()int
44、 j,k;printf(nplease enter an integer number between 2 and10 面 0:”);scanf(%d,&k);printf(nnThe prime factor(s)of%d is(are):,k);for d=2;ik;i+)if(!(k%j)&(IsPrime(j)printf(%4d,j);printf(n);例 2(常 考 题)在 给 定 程 序 中,函 数 fun()的 功 能 是:为 一 个 偶 数 寻 找 两 个 素 数,这 两 个 素 数 之 和 等 于 该 偶 数,并 将 这 两 个 素 数 通 过 形 参 指 针 传 回 主
45、 函 数。请 改 正 函 数 fun中 指 定 部 位 的 错 误,使 其 能 得 出 正 确 的 结 果。注 意:不 要 改 动 main函 数,不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!(此 类 型 有 7 道)#include#include void fun(int a,int*b,int*c)int i,j,d,y;for(i=3;iv=a/2;i=i+2)/7,7,7,7,7,/*1 7,、1*1*7,7,7,、f*7,7,、!,7,7,*!*/不 不 不 不 不 不 不 不 不 不 i*oi 1 n d 不 不 不 不 小 不 不 不 不 不 不 不 不
46、 不 不/y二 lfor(j=2;j=sqrt(double)i);j+)if(i%j=O)y=0;if(y=l)d=a-I;for(j-2;j=sqrt(double)d);j+)if(d%j=O)y=0;if(y=l)*b=i;*c二 d;main()int a,b,c;do printf(Input a:);scanf(%d,&a);while(a%2);fun(a,&b,&c);printf(%d=%d+%dn,a,b,c);例 3(常 考 题)给 定 函 数 fun的 功 能 是:把 m(k=m=10)个 字 符 串 连 接 起 来,组 成 一 个 新 串,放 入 pt中。例 如:把
47、 3 个 串“abc”,“CD”,“EF”连 接 起 来,结 果 是“abcCDEF”。请 改 正 程 序 中 的 两 个 错 误,使 它 能 得 出 正 确 的 结 果。注 意:不 得 增 行 或 删 行,也 不 得 修 改 程 序 的 结 构。#include#include#include int fun(char str10,int m,char/*found*/Int k,q,i;for(k=0;k m;k+)q=strlen(str k);for(i=0;iq;i+)*pt)/*found*/ptij=strk,i;pt+=q;ptO=0;m ain()int n,h;chars1
48、010,p120J;printf(nPlease enter n:);scanf(%d,&n);printf(nPlease enter%d string:n,n);for(h=0;h n;h+)scanf(%s,sh);fun(s,n,p);printf(nThe result is:%sn,p);例 4(常 考 题)以 下 程 序 中,函 数 fun的 功 能 是:求 s 的 值。设 s=22/(l*3)x42/(3*5)x62/(5*7)x.x(2k)2/(2k*(2k+l)例 如 当 k 为 10时,函 数 值 应 为 1.533852,请 改 正 程 序 中 的 错 误,使 程 序
49、能 输 出 正 确 的 结 果。注 意:不 要 改 动 主 函 数。(此 类 型 有 7 道)#include#include#include/*1*1*1*7,/fun(int k)int n;float s,w,p,q;n=l;s=1.0;while(n/rj*p*4*J*/return s main()printf(fn”,fun(10);例 5(常 考 题)在 给 定 程 序 中,函 数 fun的 功 能 是:统 计 子 字 符 串 substr在 字 符 串 str中 的 出 现 次 数。例 如,若 字 符 串 为 aaaslkaaas,字 字 符 串 为 as,则 应 输 出 2。
50、请 改 正 函 数 fun中 指 定 部 位 的 错 误,使 其 能 得 出 正 确 的 结 果。(此 类 型 有 9 道)注 意:不 要 改 动 main函 数,不 得 增 行 或 删 行,也 不 得 更 改 程 序 的 结 构!#include/*found*/int fun(char*str,*substr)int i,j,k,num=0;/*found*/for(i=0,stri,i+)for(j=i,k=0;substrk strj;k+,j+)if(substrk+l=0)num+;break;return num;main()char str80,substr80;printf(