计算机等级考试培训教案主讲夏敏捷Word文件下载.docx

上传人:b****6 文档编号:19695591 上传时间:2023-01-08 格式:DOCX 页数:21 大小:22.85KB
下载 相关 举报
计算机等级考试培训教案主讲夏敏捷Word文件下载.docx_第1页
第1页 / 共21页
计算机等级考试培训教案主讲夏敏捷Word文件下载.docx_第2页
第2页 / 共21页
计算机等级考试培训教案主讲夏敏捷Word文件下载.docx_第3页
第3页 / 共21页
计算机等级考试培训教案主讲夏敏捷Word文件下载.docx_第4页
第4页 / 共21页
计算机等级考试培训教案主讲夏敏捷Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

计算机等级考试培训教案主讲夏敏捷Word文件下载.docx

《计算机等级考试培训教案主讲夏敏捷Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机等级考试培训教案主讲夏敏捷Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

计算机等级考试培训教案主讲夏敏捷Word文件下载.docx

}

if(flag)

{

sum+=i;

【3】;

}

}

printf("

\n***primenumber***\n"

for(i=0;

k;

if(i%10==0)

printf("

\n"

printf("

%4d"

aa[i]);

\nsum=%d"

sum);

【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<

string.h>

#defineN80

voidinsert(char*aa)

{inti,j,n;

charch;

n=strlen(aa);

for(i=1;

n;

/**********************found***********************/

{c=aa[i];

j=i-1;

while((j>

=0)&

(ch<

aa[j]))

{aa[j+1]=aa[j];

j--;

aa[j+1]=ch;

}

{chara[N]="

QWERTYUIOPASDFGHJKLMNBVCXZ"

;

Theoriginalstring:

%s\n"

a);

insert(a);

Thestringaftersorting:

%s\n\n"

错误:

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的花括号中填入所编写的若干语句。

conio.h>

doublefun(intn)

{

%f\n"

fun(10));

inti;

doubles=0.0;

=n;

s=s+1.0/(i*(i+1));

/*求级数的和*/

returns;

【解析】解决数学序列的问题,我们的思路依然是"

数学先行"

,即先看清楚题目的数学逻辑,然后再根据C语言来"

翻译"

出来。

本题中,每一项的值都是n*(n+1)的倒数。

当输入n时,从1开始循环,注意,此处for(i=1;

i++)中的"

="

号必须要有,另外,表达式1.0/(i*(i+1))中的两对小括号一个都不能少。

若写成1.0/i*(i+1)则相当于(i+1)/i,结果就差之千里。

第二套

从键盘输入两上字符串并分别保存在字符数组str1和str2中,用字符串str2替换字符串str1前面的所有字符,注意,str2的长度不大于str1,否则需要重新输入。

例如,如果输入str1="

abced"

,str2="

fk"

,则输出"

fkced"

charstr1[81],str2[81];

char*p1=str1,*p2=str2;

do

Inputstr1\n"

gets(str1);

Inputstr2\n"

gets(str2);

}while(【1】);

while(【2】)

*p1++=*p2++;

Displaystr1\n"

puts(【3】);

【1】strlen(str1)<

strlen(str2)

【2】*p2

【3】str1

如果字符串str2的长度大于字符串str1的长度,则要重新输入,即继续执行do-while循环。

如果p2所指的字符不为′\0′,即还没有执行到str2的最后一个字符,则将这个字符赋给字符串str1的对应字符。

函数puts()的功能是将一个字符串输出到终端设备,由程序可以知道,此时应该输出字符串str1。

输出M行N列整数方阵,然后求两条对角线上的各元素之和,返回此和数。

#defineM5

intfun(intn,intxx[][])

{inti,j,sum=0;

\nThe%dx%dmatrix:

M,M);

M;

{for(j=0;

%4f"

xx[i][j]);

sum+=xx[i][i]+xx[i][n-i-1];

return(sum);

{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("

printf("

\nThesumofallelementson2diagnalsis%d"

fun(M,aa));

(1)错误:

intfun(intn,intxx[][])

intfun(intn,intxx[][M])

(2)错误:

【解析】该题错误比较隐蔽,一般的C语言上机考试很少涉及printf函数中的错误,在这里,我们只要明白"

d"

和"

f"

的区别就OK了。

格式字符d表示:

以带符号的十进制形式输出整数(正整数不输出符号);

格式字符f表示:

以小数形式输出单、双精度,隐含输出6位小数。

请编写函数fun(),该函数的功能是:

将两个两位数的正整数a,b合并形成一个整数放在c中。

合并的方式是:

将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45时,b=12,调用到该函数后,c=5142。

voidfun(inta,intb,long*c)

inta,b;

longc;

Inputa,b:

"

scanf("

%d%d"

&

a,&

b);

fun(a,b,&

c);

Theresultis:

%ld\n"

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,不能少了*号。

第三套

从键盘输入若干字符放到一个字符数组中,当按回车键时结束输入,最后输出这个字符数组中的所有字符。

ctype.h>

inti=0;

chars[81];

char*p=s;

system("

Inputastring\n"

80;

s[i]=getchar();

if(s[i]=='

\n'

【1】;

s[i]=【2】;

displaythestring\n"

while(*p)

putchar(【3】);

【1】break

【2】′\0′

【3】*p++

当输入的字符是回车符时,使用break语句跳出for循环,结束输入。

结束输入后,在字符串s最后要加上结束标记符′\0′。

最初指针p指向字符串s的首字符,通过p++逐一指向后面的每个字符,调用putchar()函数输出字符。

将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。

高位仍在高位,低位仍在低位。

例如,当s中的数为87653142时,t中的数为8642。

voidfun(longs,long*t)

{intd;

longs1=1;

*t=0;

while(s>

0)

{d=s%10;

if(d%2=0)

{*t=d*s1+*t;

s1*=10;

s\=10;

{longs,t;

\nPleaseenters:

%ld"

s);

fun(s,&

t);

t);

intd;

longd;

if(d%2=0)

if(d%2==0)

(3)错误:

s\=10;

s/=10;

【解析】其实,不论取出偶数还是奇数,思路应该是一样的。

我们在刚开始学习C语言的时候就学习过强制类型转换以及运算级别的问题,所以,这里的int就没有存在的理由。

错误2中的问题是怎么表达一个偶数的问题,归根结底还是"

=="

的区别问题。

请编写函数fun(),其功能是:

将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。

voidfun(char*s,chart[])

chars[100],t[100];

\nPleaseenterstringS:

%s"

s);

fun(s,t);

\nTheresultis:

%s\n"

inti,j=0,k=strlen(s);

/*k为字符串的长度*/

i=i+2)

/*将s所指字符串中下标为奇数的

字符存入t所指字符串中*/

t[j++]=s[i];

t[j]='

\0'

/*在字符串最后加上结束标志*/

【解析】本题使用了一种i永远是奇数的循环方法,即for(i=1;

i=i+2),因为开始时i的值为1,当i+2循环时,此值永远是奇数。

第四套

把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。

例如,如果str[3]={"

efjh"

,"

efknls"

owys"

},则s="

jsy"

char*str[3]={"

efjh"

"

"

};

char**p;

chars[8];

【1】;

3;

s[i]=*p[i];

while(*p[i])

if(s[i]<

*p[i])

s[i]=*p[i];

【2】;

【3】;

newstring\n"

puts(s);

【1】p=str

【2】p[i]++

【3】s[i]=′\0′

str是一个大小为3的指针数组,每个指针指向一个字符串,p是指向指针的指针,首先要使指针p指向数组str的首地址。

通过p[i]++使p[i]指向第i个字符串的下一个字符。

将每行字符串的最大字符都拷贝到字符数组s中后,不要忘了在数组s最后加上字符串结束标记符′\0′。

判断一个整数m是否是素数,若是返回1,否则返回0。

在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!

intfun(intm)

{intk=2;

while(k<

=m&

(m%k))

k++

if(m=k)

return1;

elsereturn0;

{intn;

\nPleaseentern:

%d"

n);

if(fun(n))printf("

YES\n"

elseprintf("

NO!

k++

k++;

if(m=k)

if(m==k)

【解析】函数fun()的功能是判断m是否为素数:

m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。

将s所指字符串中ASCⅡ值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为ABCDEFG12345,其中字符B的ASCⅡ码值为偶数、…、字符2的ASCⅡ码值为偶数、…,都应当删除,其他依次类推。

最后t所指的数组中的内容应是ACEG135。

voidfun(char*s,chart[])

%s"

\nTheresultis:

%s\n"

for(;

*s!

='

s++)

/*找出ASCII值为奇数的字符依次

存入数组t中*/

if(*s%2==1)

t[i++]=*s;

t[i]='

/*在字符串的末尾加上串结束符*/

【解析】要删除ASCII值为偶数的字符,也就是要留下ASCII值为奇数的字符,由于最终是要求求出剩余字符(即ASCII值为奇数)形成的新串,所以本题程序的算法是从原字符串的头到尾扫描并找出ASCII值为奇数的字符依次存入数组t中。

此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]的作用是先使用t[i]然后再使i自增1。

任何字符串的末尾都要有串结束符。

这种算法在很多题中都要用到,学习者可以举一反三地找一些其他相关习题练习一下。

第五套

把一个整数插入到一个已经按从小到大排序的数组中。

插入后,数组仍然有序。

例如,在数组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}

#defineN10

inti,j;

intn;

intbb[N+1]={12,23,31,44,51,63,71,

79,85,95};

printf(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1