计算机等级考试培训教案主讲夏敏捷.docx
- 文档编号:6678883
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:21
- 大小:22.85KB
计算机等级考试培训教案主讲夏敏捷.docx
《计算机等级考试培训教案主讲夏敏捷.docx》由会员分享,可在线阅读,更多相关《计算机等级考试培训教案主讲夏敏捷.docx(21页珍藏版)》请在冰豆网上搜索。
计算机等级考试培训教案主讲夏敏捷
计算机等级考试培训教案
主讲:
夏敏捷2009-05-21
上机部分:
第一套
1.填空题
请补充main函数,该函数的功能是:
把1~100间的所有素数保存在数组aa中,然后输出这些素数并计算它们的和。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
voidmain()
{
inti,j,k,flag,sum;
intaa[50];
sum=0;
k=0;
system("CLS");
for(i=2;i<100;i++)
{
【1】;
for(j=2;j
if(i%j==0)
{
【2】;
}
if(flag)
{
sum+=i;
【3】;
}
}
printf("\n***primenumber***\n");
for(i=0;i { if(i%10==0) printf("\n"); printf("%4d",aa[i]); } printf("\nsum=%d",sum); 1.填空题 【1】flag=1 【2】flag=0 【3】aa[k++]=i 【解析】填空1: 由后面的if语句可以看出,当flag为1时,当前数是素数,所以此处先假设当前数为素数,即置flag为1,再进行判断,如果不是素数,则再将flag清零。 填空2: 如果一个数能被除了1和其自身之外的数整除,即余数为0,则这个数不是素数。 如果当前数不是素数,则将flag清零。 填空3: 如果当前数是素数,则将它保存在数组bb 2.改错题 下列给定程序中,函数fun()的功能是: 利用插入排序法对字符串中的字符按从小到大的顺序进行排序。 插入法的基本方法是: 先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #defineN80 voidinsert(char*aa) {inti,j,n;charch; n=strlen(aa); for(i=1;i /**********************found***********************/ {c=aa[i]; j=i-1; while((j>=0)&&(ch {aa[j+1]=aa[j]; j--; } aa[j+1]=ch; } } voidmain() {chara[N]="QWERTYUIOPASDFGHJKLMNBVCXZ"; printf("Theoriginalstring: %s\n",a); insert(a); printf("Thestringaftersorting: %s\n\n",a); } 2.改错题 错误: c=aa[i]; 正确: ch=aa[i]; 【解析】对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。 对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位置,使得将该末尾元素插入该位置之后,前m项仍然保持升序。 这样循环后,就可以得到全部元素的排序。 3.编程题 编写函数fun(),它的功能是: 计算和输出下列级数的和。 S=1/(1×2)+1/(2×3)+…+1/(n×(n+1)) 例如,当n=10时,函数值为0.909091。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include doublefun(intn) { } voidmain() { system("CLS"); printf("%f\n",fun(10)); } 3.编程题 doublefun(intn) { inti; doubles=0.0; for(i=1;i<=n;i++) s=s+1.0/(i*(i+1)); /*求级数的和*/ returns; } 【解析】解决数学序列的问题,我们的思路依然是"数学先行",即先看清楚题目的数学逻辑,然后再根据C语言来"翻译"出来。 本题中,每一项的值都是n*(n+1)的倒数。 当输入n时,从1开始循环,注意,此处for(i=1;i<=n;i++)中的"="号必须要有,另外,表达式1.0/(i*(i+1))中的两对小括号一个都不能少。 若写成1.0/i*(i+1)则相当于(i+1)/i,结果就差之千里。 第二套 1.填空题 请补充main函数,该函数的功能是: 从键盘输入两上字符串并分别保存在字符数组str1和str2中,用字符串str2替换字符串str1前面的所有字符,注意,str2的长度不大于str1,否则需要重新输入。 例如,如果输入str1="abced",str2="fk",则输出"fkced"。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include voidmain() { charstr1[81],str2[81]; char*p1=str1,*p2=str2; system("CLS"); do { printf("Inputstr1\n"); gets(str1); printf("Inputstr2\n"); gets(str2); }while(【1】); while(【2】) *p1++=*p2++; printf("Displaystr1\n"); puts(【3】); } 1.填空题 【1】strlen(str1) 【2】*p2 【3】str1 【解析】填空1: 如果字符串str2的长度大于字符串str1的长度,则要重新输入,即继续执行do-while循环。 填空2: 如果p2所指的字符不为′\0′,即还没有执行到str2的最后一个字符,则将这个字符赋给字符串str1的对应字符。 填空3: 函数puts()的功能是将一个字符串输出到终端设备,由程序可以知道,此时应该输出字符串str1。 2.改错题 下列给定程序中,函数fun()的功能是: 输出M行N列整数方阵,然后求两条对角线上的各元素之和,返回此和数。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #defineM5 /**********************found***********************/ intfun(intn,intxx[][]) {inti,j,sum=0; printf("\nThe%dx%dmatrix: \n",M,M); for(i=0;i {for(j=0;j /**********************found***********************/ printf("%4f",xx[i][j]); printf("\n"); } for(i=0;i sum+=xx[i][i]+xx[i][n-i-1]; return(sum); } voidmain() {intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; system("CLS"); printf("\nThesumofallelementson2diagnalsis%d",fun(M,aa)); } 2.改错题 (1)错误: intfun(intn,intxx[][]) 正确: intfun(intn,intxx[][M]) (2)错误: printf("%4f",xx[i][j]); 正确: printf("%4d",xx[i][j]); 【解析】该题错误比较隐蔽,一般的C语言上机考试很少涉及printf函数中的错误,在这里,我们只要明白"d"和"f"的区别就OK了。 格式字符d表示: 以带符号的十进制形式输出整数(正整数不输出符号);格式字符f表示: 以小数形式输出单、双精度,隐含输出6位小数。 3.编程题 请编写函数fun(),该函数的功能是: 将两个两位数的正整数a,b合并形成一个整数放在c中。 合并的方式是: 将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。 例如,当a=45时,b=12,调用到该函数后,c=5142。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include voidfun(inta,intb,long*c) { } voidmain() { inta,b; longc; system("CLS"); printf("Inputa,b: "); scanf("%d%d",&a,&b); fun(a,b,&c); printf("Theresultis: %ld\n",c); } 3.编程题 voidfun(inta,intb,long*c) { *c=a%10*1000+b/10*100+a/10*10+ b%10; /*将a数的十位和个位数依次放在c 数的十位和千位上,b数的十位和 个位数依次放在c数的百位和个位上*/ } 【解析】本题中主要的问题是怎么取出a和b的个位数和十位数,取出后怎么表示成c中相应的位数。 由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。 如45/10结果为4而不是4.5(这是由于两个数都为整型,所以结果也为整型),45%10结果为5。 若a为45,则a/10*10的结果为40而非45。 乘1000,乘100和乘10的作用是分别使其前面的数成为*c的千位数、百位数和十位数。 注意要使用c时要注意进行指针运算,即*c,不能少了*号。 第三套 1.填空题 请补充main函数,该函数的功能是: 从键盘输入若干字符放到一个字符数组中,当按回车键时结束输入,最后输出这个字符数组中的所有字符。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include voidmain() { inti=0; chars[81]; char*p=s; system("CLS"); printf("Inputastring\n"); for(i=0;i<80;i++) { s[i]=getchar(); if(s[i]=='\n') 【1】; } s[i]=【2】; printf("displaythestring\n"); while(*p) putchar(【3】); } 1.填空题 【1】break 【2】′\0′ 【3】*p++ 【解析】填空1: 当输入的字符是回车符时,使用break语句跳出for循环,结束输入。 填空2: 结束输入后,在字符串s最后要加上结束标记符′\0′。 填空3: 最初指针p指向字符串s的首字符,通过p++逐一指向后面的每个字符,调用putchar()函数输出字符。 2.改错题 下列给定程序中,函数fun()的功能是: 将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。 高位仍在高位,低位仍在低位。 例如,当s中的数为87653142时,t中的数为8642。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include voidfun(longs,long*t) /**********************found***********************/ {intd; longs1=1; *t=0; while(s>0) {d=s%10; /**********************found***********************/ if(d%2=0) {*t=d*s1+*t; s1*=10; } /**********************found***********************/ s\=10; } } voidmain() {longs,t; system("CLS"); printf("\nPleaseenters: ");scanf("%ld",&s); fun(s,&t); printf("Theresultis: %ld\n",t); } 2.改错题 (1)错误: intd; 正确: longd; (2)错误: if(d%2=0) 正确: if(d%2==0) (3)错误: s\=10; 正确: s/=10; 【解析】其实,不论取出偶数还是奇数,思路应该是一样的。 我们在刚开始学习C语言的时候就学习过强制类型转换以及运算级别的问题,所以,这里的int就没有存在的理由。 错误2中的问题是怎么表达一个偶数的问题,归根结底还是"="和"=="的区别问题。 3.编程题 请编写函数fun(),其功能是: 将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。 例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include voidfun(char*s,chart[]) { } voidmain() { chars[100],t[100]; system("CLS"); printf("\nPleaseenterstringS: "); scanf("%s",s); fun(s,t); printf("\nTheresultis: %s\n",t); } 3.编程题 voidfun(char*s,chart[]) { inti,j=0,k=strlen(s); /*k为字符串的长度*/ for(i=1;i /*将s所指字符串中下标为奇数的 字符存入t所指字符串中*/ t[j++]=s[i]; t[j]='\0'; /*在字符串最后加上结束标志*/ } 【解析】本题使用了一种i永远是奇数的循环方法,即for(i=1;i 第四套 1.填空题 请补充main函数,该函数的功能是: 把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。 例如,如果str[3]={"efjh","efknls","owys"},则s="jsy"。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include voidmain() { inti=0; char*str[3]={"efjh","efknls", "owys"}; char**p; chars[8]; system("CLS"); 【1】; for(i=0;i<3;i++) { s[i]=*p[i]; while(*p[i]) { if(s[i]<*p[i]) s[i]=*p[i]; 【2】; } } 【3】; printf("newstring\n"); puts(s); } 1.填空题 【1】p=str 【2】p[i]++ 【3】s[i]=′\0′ 【解析】填空1: str是一个大小为3的指针数组,每个指针指向一个字符串,p是指向指针的指针,首先要使指针p指向数组str的首地址。 填空2: 通过p[i]++使p[i]指向第i个字符串的下一个字符。 填空3: 将每行字符串的最大字符都拷贝到字符数组s中后,不要忘了在数组s最后加上字符串结束标记符′\0′。 2.改错题 下列给定程序中,函数fun()的功能是: 判断一个整数m是否是素数,若是返回1,否则返回0。 在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO! 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include intfun(intm) {intk=2; while(k<=m&&(m%k)) /**********************found***********************/ k++ /**********************found***********************/ if(m=k) return1; elsereturn0; } voidmain() {intn; system("CLS"); printf("\nPleaseentern: ");scanf("%d",&n); if(fun(n))printf("YES\n"); elseprintf("NO! \n"); } 2.改错题 (1)错误: k++ 正确: k++; (2)错误: if(m=k) 正确: if(m==k) 【解析】函数fun()的功能是判断m是否为素数: m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。 3.编程题 请编写函数fun(),该函数的功能是: 将s所指字符串中ASCⅡ值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为ABCDEFG12345,其中字符B的ASCⅡ码值为偶数、…、字符2的ASCⅡ码值为偶数、…,都应当删除,其他依次类推。 最后t所指的数组中的内容应是ACEG135。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include voidfun(char*s,chart[]) { } voidmain() { chars[100],t[100]; system("CLS"); printf("\nPleaseenterstringS: "); scanf("%s",s); fun(s,t); printf("\nTheresultis: %s\n",t); } 3.编程题 voidfun(char*s,chart[]) { inti=0; for(;*s! ='\0';s++) /*找出ASCII值为奇数的字符依次 存入数组t中*/ if(*s%2==1) t[i++]=*s; t[i]='\0'; /*在字符串的末尾加上串结束符*/ } 【解析】要删除ASCII值为偶数的字符,也就是要留下ASCII值为奇数的字符,由于最终是要求求出剩余字符(即ASCII值为奇数)形成的新串,所以本题程序的算法是从原字符串的头到尾扫描并找出ASCII值为奇数的字符依次存入数组t中。 此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]的作用是先使用t[i]然后再使i自增1。 任何字符串的末尾都要有串结束符。 这种算法在很多题中都要用到,学习者可以举一反三地找一些其他相关习题练习一下。 第五套 1.填空题 请补充main函数,该函数的功能是: 把一个整数插入到一个已经按从小到大排序的数组中。 插入后,数组仍然有序。 例如,在数组bb[N]={12,23,31,44,51,63,71,79,85,95}中插入93,结果为: bb[N]{11,21,31,41,51,61,71,79,81,93,95} 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #defineN10 voidmain() { inti,j; intn; intbb[N+1]={12,23,31,44,51,63,71, 79,85,95}; system("CLS"); printf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机等级考试 培训 教案 主讲 敏捷
