上海市计算机二级C语言复习资料_第1页
上海市计算机二级C语言复习资料_第2页
上海市计算机二级C语言复习资料_第3页
上海市计算机二级C语言复习资料_第4页
上海市计算机二级C语言复习资料_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上海市方老老联鼾算机等级老做二级伍程停做计1

03年上海市高等学校计算机等级考试试卷

二级(C程序设计)

(本试卷答卷时间为120分钟)

试题一(28分,每小题4分)

解答下列各小题,把正确的解答写在答卷纸的对应栏内。

(1)设有变量说明:

inta=5,b=4,c=3,rl,r2;

请写出执行下列语句后rl和r2的值。

rl=a>b>c;

r2=a>b&&b>c;rl=0r2=l

(2)试写出下列算式的C语言表达式。

标sin75

Ix-iog2yI

exp(ln(a)/3)*sin(75,0/180*3.14)/fabs(x-ln(y)/ln(2))

(3)执行下列语句后,i,j,k的值是多少?

for(i=k=0j=6;i<j;i-H-j—)k+=4*i・5*j;

i=3j=3k=-63

(4)执行下列程序后,b和c的值各为多少?

#include<stdio.h>

voidmain()

{int*a[10],b,c;

a[0]=&b;

*a[0]=5;

c=(*a[0])-H-;

printf(4U%d%d\n,\b,c);

b=6c=5

(5)设有如下程序:

#include<stdio.h>

voidmain()

{intclock;floatf;charcpu[20];

scanf(t4%4d%f%s,,,&clock,&f,cpu);

printf(u%d%.0f%s\n,,,clock,f,cpu);

}

假设输入数据流为200015.0P4isGOOD!,请写出执行该程序后的输出结果。

200015P4

上海市方老老联鼾算机等级老做二级伍程停做计1

(6)下列程序的输出结果是什么?

#include<stdio.h>

main()

{intcl=0,c2=0,c3=0,c4=0;

char*p="12395632123378”;

while(*p)

{switch(*p)

{caseT:cl-H-;break;

case'2’:c2++;

case'3':c3++;break;

default:c4++;

}

P";

}

printfpc1=%dc2=%dc3=%dc4=%d\n,,,c1,c2,c3,c4);

}

cl=2c2=3c3=7c4=5

7执行下列程序后,s的值为多少?

#definesq(X)X*X

voidinain()

{ints=15,a=2,b=l;

printf(us=%d\n,,,s=sq(a+b)/sq(a+b));

)

s=7

试题二(12分,每小题6分)

阅读下列程序,把程序的输出结果写在答卷纸的对应栏内。

(1)【程序2.1】

#defineN6

voidmain()

{inti,j,a[N];

for(i=l;i<N;i++)

{a[i]=l;

fbr(j=i-l;j>l;j-)

a[j]+=a[H];

for(j=l;j<=i;j++)

printf(“%4d”,a[j]);

printfC'\n");

)

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

1

11

121

1331

14641

(2)【程序2.2】

#include<stdio.h>

voidfiin(char*s)

{while(*s)

{*s=(*s-'0'+3)%10+'0‘;

-H-S;

)

}

voidmain()

{chara[]=”314762985”;inti;

fun(a+3);

fbr(i=0;i<3;++i)

printf("%c\n”a3*i+l]);

1

9

1

试题三(12分,每小题6分)

改错。下列程序中都有三个错误,按原来程序的要求,纠正错误,并以“将#XX

行改为YYYY”的形式进行解答,代码左边的“#01”、“#02”、…是附加的行号。

(1)程序3.1功能是输入一个字符串,并将其中的字符H用字符串“shu”替代后输出。如输

入为"123abcaHello,\则输出为“123shubcshuHelloM«

【程序3.1】

#01#include<stdio.h>

#02voidmain()

#03{inti;charline[81];

#04scanf("%s”,&line);

#05for(i=0;line[i]!='\n';i++)

#06if(line[i]==,a,)

#07printf(“shu”);

#08else

#09printf("%s”,line[i]);

#10}

改scanf(a%sv,line);

for(i=0;line[i]!=,\0';i++)

printf(a%cv,line[i]);

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

(2)程序3.2实现对输入的长度小于100的英文字母(空格表示结束)进行头尾相接,围成

一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI,IJ,

ST,总共出现3次)。

【程序3.2】

#01#include<string.h>

#02voidmain()

#03{chars[100];

#04intk,len,no;

#05scanfC%s”,s);

#06len=strlen(s);

#07s[len]=s[0];

#08s[len++]=,\0,;

#09fbr(k=0;k<len;k++)

#10if(s[k-l]+l=s[k])

#11{printff'%c%c\n,\s[k-1],s[k]);

#12no++;

#13}

#14printf("%d\n",no);

#15}

ZU第#o4

I行改为intk,len,no=0;

J第#o8

-d行改为s[++len]=,\0';

第#O9

行改为k=l:k<len:k++

试题四(18分,每小题

6分)

按指定的要求编写C程序段,把解答写在答卷纸对应的栏内。不要求写完整的程

序,也不必定义语句中出现的变量。

(1)求出任意一个数m(设4WmW10000)的所有素因子。例如,37的素因子是37;420

的素因子是2,2,3,5,7。

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

main()

{inti=2,m;

scanf(〃%d〃,&m);

while(i<=m)

if(!(m%i))

{printf(〃%3d〃,i);

m/=i;

)

elsei++;

printf(〃\n〃);

)

(2)设有一维数组说明charT[5],存放,A:旧"TT,'E,五个字母,请编写一个

程序段,按以下格式输出结果。

ABCDE

BCDEA

CDEAB

DEABC

EABCD

ttinclude<stdio.h>

Sinclude<string.h>

voidfun(chara[],intn)

{chark,j,b[20];

for(k=0;k〈n;k++)

b[k+n]=b[k]=a[k];

for(j=0;j<n;j++)

{for(k=j;k<j+n;k++)

printf("%c",b[k]);

printf(〃\n〃);

)

)

mainO

{chars[80],n;

scanf(〃%s〃,s);

n=strlen(s);

fun(s,n);

(3)输入正偶数n,计算以下级数之和并输出结果(显示结果保留小数点后5位)

123n山的补丁却依*、

S=1…H-(此题找不到答案)

4916(〃+1)2

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

试题五(15分,每空3分)

阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写

在答卷纸的对应栏内。

【问题描述】

程序5不断地从键盘输入字符,直到输入EOF(Control+Z)为止。对于输入的小写字符,

先转换为相应的大写字符,其它字符不变,然后逐个输出到文件text.txt中,行结束符回车

(\壮)也作为一个字符对待,最后统计文件中的字符个数和行数。

【程序5】

#inckide<stdio.h>

main()

{FILE*fp;

charc,str[256];

inti=0,no=0,line=0;

t,,

if((fp=fbpenCtext.txt9⑴))=NULL)

{pr血ff'Can'topenthis

exit(O);

}

printf(uPleaseinputastring.\nv);

while((c=getchar())!=EOF)

{if(c>=H&&cv=Z)⑵

fputc((3),ip);

fclose(fp);

if((fp=fbpenCfctext.txtn;Y,))==NULL)

{printff'Can'topenthisfile.'n'');

exit(O);

)

while(!feof(fp))

{c=(4);

no-H-;

if([5))line++;

printfi(ttline=%dcharcter_no=%d\n,,,line,no);

fclose(fp);

(1)“w”

(2)c二c-32或c二c-'a'+'A'

(3)c

(4)fgetc(fp)

(5)c==,\n,

上海市方老老联鼾算机等级老做二级伍程停做计1

试题六(15分,每空3分)

阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写

在答卷纸的对应栏内。

【问题描述】

已知X和Y是两个整型数组,而且X中的数据按从小到大的顺序排列,Y中的数据按从大

到小的顺序排列。程序6将X和Y中数归并,并按从小到大的顺序保存到整型数组Z中,

然后输出数组Z中的各个元素。例如,X数组为{1,12,23,37},Y数组为{123,78,36,

3},归并后生成的新数组Z为{1,3,12,23,36,37,78,123}。

【程序6】

voidsorted(intup[],intdown[],intmerged[],intn)

{inti,j,k,m;

i=k=0;j=n-l;

while((1))

if(up[i]<=down[j])

{(2);

i++;

k++;

)

else

{merged[k]=(3);

j-;

k++;

}

if(i==n&&j>=0)

for(;j>=O;j-)

merged[k++]=⑷;

if(j=O&&i<n)

for(;i<n;i++)

merged[k++]=[5];

}

voidmain()

{intup[]={l,12,23,37},down[]={123,78,36,3},merged[8],k;

sorted(up,down,merged,4);

for(k=0;k<8;k++)

printf("%d”,merged。;

printfi("\n”);

上海市方老老联鼾算机等级老做二级伍程停做计1

(1)i<n&&j>=0

(2)merged[k]=up[i]

(3)down[j]

(4)down[j]

2004年上海市高等学校计算机等级考试试卷

二级(C程序设计)

(本试卷答卷时间为120分钟)

试题一(28分),每小题4分)

解答下列各小题,把正确的解答写在答卷纸的对应栏内。

(1)假设对n(n>0)个学生按下列方法进行分班:每班k(k>0)个学生,最后一个

班若不足k人也单独编成一个班,试用C语言中的条件表达式表示所编

班级个数。

n%k>0?n/k+l:n/k

(2)设有变量定义:

structrec{

intx;

inty;

}s[]={{4,28},{9,36}},*p=s;

99

计算表达式(p->y/p->x*s[1].x+s[1].y)的值。

(3)写出下列程序的输出结果。

#include<stdio.h>

voidmain(){

chars[]="2473'',c,i;

for(i=0;c=s[i];i-H-){

switch(c-'0'){

case2:

case3:putchar(c+4);continue;

case4:putchar(c+4);break;

case5:putchar(c+3);

default:putchar(c+2);

putchar('\n');

上海市方老老联鼾算机等级老做二级伍程停做计1

68

9

7

(4)分别写出下列4个指针变量pl,p2,p3,p4的含义。

int*pl,*p2[5],(*p3)(),(*p4)[5];

pl是指向整型变量的指针变量

p2是指针数组,它由5个指向整型变量的指针元素组成

p3是函数指针,它所指向的函数返回一个整型值

p4是数组指针,指向每行具有5个整型元素的二维数组的行指针

(5)写出程序的输出结果(假定类型unsignedint的字长为16位)。

#include<stdio.h>

voidmain(){

unsignedintul=0x958,u2,u3;

u2=(ul&0xFF)«4;

u3=(ul&0xFF00)»4;

prin氓"%x%x%x\n,5,u2,u3,u2|u3));

58090590

(6)阅读如下程序段,把其中的switch语句改写成等价的条件语句。

intx,y;

scanf("%d”,&x);

switch(x!=0){

case0:y=0;break;

case1:switch(x>0){

case1:y=l;break;

case0:y=-l;

}

}

y=x==0?0:(x>0?l:-l);

(7)描述函数conv()的功能,并写出下列程序的输出结果。

Voidconv(intm){

if(m>=2)

conv(m/2);

printf("%d”,m%2);

J

voidmain(){

conv(13);

上海市方老老联鼾算机等级老做二级伍程停做计1

使用递归将10进制整数m转换为对应二进制整数,结果为1101

试题二(12分,每小题6分)

阅读下列程序并回答问题,把答案写在答卷纸的对应栏内。

(1)【程序2.1】

/include<stdio.h>

voidsort(inta[],intn){

int

for(i=0;i<n-l;i++)

fbr(j=i+1;j<n;j++)

if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t;

)

intdelsame(intx[],intn){

inti,j,m=n;

for(i=0;i<m;i++){

while(x[i]==x[i+l]){

for(j=i;j<m;j++)

x[j]=x[j+l];

m-;

returnm;

)

voidmain(){

intx[]={74,4,35,4,65,65,72,74,35},i,m,n;

n=sizeof(x)/sizeof[x[0]);

sort(x,n);

m=delsame(x,n);

for(i=0;i<m;i++)printf("%3d”,x[i]);

printfC'iT);

)

(a)函数sort()的功能是什么?(b)函数delsame()的功能是什么?(c)程序的输出

是什么?

函数sort()的功能是对数组进行从小到大排序

函数delsame。的功能是把数组中相同的元素删除到一个,删除后,数组剩下的元素个

数作为函数的返回值

程序的输出是:435657274

(2)【程序2.2】

#include<stdio.h>;

#defineM4

voidmain(){

inti,j,k,m,a[4];

printfC'Enter4numbers:");

fbr(i=O;i<M;i-H-)scanf("%d”,&a[i]);

for(i=M;i>0;i—){

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

k=a[M-l];

for(j=M-l;j>0;j—)

a[j]=a|j-l];

a[O]=k;

fbr(m=0;m<M;m++)

printfr%d”,a[m]);

printff'W");

设一维数组a的4个输入整数是1,2,3,4,则程序的输出是什么?

4123

3412

2341

1234

试题三(12分,每小题6分)

改错。下列程序中都有三个错误,按原来程序的要求,纠正错误,并以“将#XX行改为YYYY”

的形式进行解答,代码左边的“#01“、“#02",…是附加的行号。

(1)程序3.1输入10个正整数,计算其中的素数之和并输出结果(不考虑溢

出情况)。

【程序3.1】

#01#include<stdio.h>

#02intsum(int*b,intm){

#03ints=0,is_prime(long);

#04while(m—)

#05iffis_prime(*b-H-))s+=*b;

#06returns;

#07}

#08intis_prime(longm){

#09intk;

#10if(m<=l)return0;

#11if(m==2||m==3)return1;

#12for(k=2;k*k<=m;k++)

#13if(m%k==0)return0;

#14elsereturn1;

#15}

#16voidmain(){

#17intx[10],i;

#18for(i=0;i<10;i++)scanf(“%d",x++);

#19printf("sum=%d\n",sum(x,10));

#20}

将第#05行改为:S+=*(b-l)

将第#14行改为:elseif(k*k>=m)return1;

将第#18行改为:scanf(,l%d",x+i);

(2)程序3.2计算字符串s中最后一次出现子串t的地址,通过函数值返回,在主

上海市方老老联鼾算机等级老做二级伍程停做计1

函数中输出此地址开始的字符串:若未找到,函数返回NULL(例如字符串s

为“456712345678abcd',当子串为"567”时,输出为“5678abcd”:当t为”789”时,

输出“Notfound!")。

【程序3.21

#01#include<stdio.h>

#02char*fun(char*t){

#03char*p,*a;

#04a=null;

#05while(*s){

#06p=s;r=t;

#07while(*r)

#08if(r==p){r++;p++;}

#09elsebreak;

#10if(*r='\0')a=s;

#11s++;

#12)

#13returna;

#14)

#15voidmain(){

#16chars[100],t[100],*p;

#17printfif'AnPleaseenterstrings:");scanf("%s”,s):

#18printf(4fc\nPleaseentersubstringt:");scanf("%s",t);

#19P=fun(s,t);

#20if(p)printf(cu\nTheresultis:%s\n",p);

#21elseprintf(u\nNotfound!\n");

#22)

将第#02行改为:char*fun(char*s,char*t)

将第#04行改为:a=0;(或a=NULL;)

将第#08行改为:if(*r==*p){r++;p++;}

试题四(18分,每小题9分)

按指定的要求编写C程序段,把解答写在答卷纸的对应栏内,不要求写完整的程序,也不

必定义语句中出现的变量。

(1)万的值可以使用下公式计算

乃।1I2123

2335357

请编写函数compute_pi(doubleeps)计算乃的近似值,当公式中某一项的值

小于eps(例如,eps=le-5)时,停止计算并返回结果

上海市方老老联鼾算机等级老做二级伍程停做计1

doublecompute_pi(doubleeps)

(

intm=1;

doubleterm=1.0,s=0.0;

while(term>=eps)

{s+=term;

term=term*m/(2*m+1);

m++;

)

return(2*s);}

(2)编写函数fun,它的功能是:对于输入字符串s,先将s中的字符逆序放

到字符串t中(t的初始值为空串),再把字符串s正序连接到字符串t后面(例

如,若s为"ABCDE”,则最后生成的字符串t为"EDCBAABCDE")。

#include<stdio.h>

#include<string.h>

voidfun(chars[],chart[])

{inti,slen;slen=strlen(s);

for(i=0;i<slen;i++)

t[i]=s[slen-i-1];

for(i=0;i<slen;i++)t[slen+i]=s[i];

t[slen*2]=i\0);

)

main()

{chars[100]="ABCDE”,

t[100];

fun(s,t);

printfC'Therunresultis%s\n",t);

试题五(15分,每空3分)

阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写在答卷纸的对应栏

内。

【问题描述】

输入任意一个三位数d(要求d不等于495且其百位、十位、个位不全相等

否则重复输入),求出由此数年的百位、十位、个位三位数字组成的最大数max

和最小数min(百位数可以为0),再求出新三位数max-min,即max和min的

差(如结果小于100,则百位数视为0);只要该数不等于495,重复以上运算,

则经过有限次计算后,必定得到495。在程序中,函数get_maxmin()计算由三位

数的百位、十位、个位所组成的最大数和最小数。

例如,对于输入792,有下列计算过程:

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

972-279=693f963-369=594-954-459=495

对于输入202,有下列计算过程:

220-22=198f981-189=792f972-279=693f963-459=594-

954-459=495

【程序5】

#include<stdio.h>

voidget_maxmin(inta,intb,intc,(1))

{

intt;

ififavb)t=a,a=b,b=t;

if(a<c)t=a,a=c,c=t;

if(b<c)t=b,b=c,c=t;

⑵:

⑶:

voidmain()

(

inta,b,c,max,min,d;

do

{scanfT%d”,&d);

a=d/100;

b=d%100/10;

c=d%10;

)while((4));

while(d!=495)

(

getmaxmin((5));

d=max-min;

a=d/100;

b=d%100/10;

c=d%10;

printfTend_d=%d\iT,d);

(1)int*max,int*min

(2)*max=a*100+b*10+c

(3)*min=c*100+b*10+a

⑷d==49511a==b&&a==c

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

(5)a,b,c,&max,&min

试题六(15分,每空3分)

阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写在答卷纸的对应

栏内。

【问题描述】

给出两个链表,按交替的顺序轮流从这两个链表中取其成员归并成为一个新

的链表,如其中一个链表的成员取完,另一个链表的多余成员依次接到新链表的

尾部,并把指向新链表的指针作为函数值返回。例如,若两个链表成员分别是

{1,2,3,8,10,15}和亿13』},则链接成的新链表是{1,7,2,13,3,1,8,10,15}。

【程序6】

#include<stdio.h>

typedefstructnode

{

intdata;

structnode*next;

);

structnode*createlink(structnode*list,intx)

(

structnode*u=list,*p;

P=⑴;

(2);

p->next=NULL;

if(list=NULL)list=p;

else{while(u->next!=NULL)u=u->next;

u->next=p;}

returnlist;

)

structnode*ShuffleMerge(structnode*a,structnode*b){

structnodedummy;

structnode*tail=&dummy;

dummy.next=NULL;

while((3))

(

if((4))

(

tail->next=b;

break;

)

elseif(b==NULL)

tail->next=a;

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

break;

else{/*轮流从两个链表中取其成员链接到新链表的尾部*/

tail->next=a;tail=a;a=a->next;

tail->next=b;tail=b;b=b->next;

)

return((5));

}

voidmain(){

intx;

structnodealist=NULL,blist=NULL,*list=NULL;

do{scanf(“%d”,&x);/*建立alist链表*/

if(x<0)break;

alist=createlink(alist,x);

}while(x>0);

do{scanf("%d",&x);/*建立blist链表*/

if(x<0)break;

blist=createlink(blist,x);

}while(x>0);

list=ShuffleMerge(alist,blist);

(1)p=(structnode*)malloc(sizeof(structnode))

(2)p->data=x

(3)1

(4)a==NULL

(5)dummy,next

2005年上海市高等学校计算机等级考试试卷

二级(C程序设计)

(本试卷答卷时间为120分钟)

试题一(28分,每小题4分)

解答下列各小题,把解答写在答卷纸的对应栏内。

(1)试写出下列命题的C语言表达式。

上海市方老老联鼾算机等级老做二级伍程停做计1

当字符变量m取英文字母时表达式的值为真。

m>='a'&&m<='z'||m>='A'&&m<='Z'

⑵执行下述语句后,a,b,m,n变量的值分别是什么?

inta=l,b=2,c=3,d=4,m=5,n=6;

a=(m=a>b)&&(n=c>d)||++a==b—;

a=1,b=l,m=0,n=6

(3)执行下列语句后的输出结果是什么?

chars[81]=Ma_stringH,t[81];

strcpy(t,s);

printfy'%d;%d\n%s\n”,sizeof(s),strlen(s),t+2);

81;8

string

(4)写出下列C语句的功能。

#include<string.h>

dogets(s);

while(strcmp(s,"passwd"));

不断地从键盘输入字符串,直到输入passwd循环终止

(或者:输入口令passwd)

(5)执行下列程序后的输出结果是什么?

#defineSQR(x)x*x

voidmain()

{

ints=8,a=2,b=3;

s=SQR(a+b)*4;

printfT?=%d\n”,s);}

(5)s=20

(6)设有定义structdate{

intday;

charmonth;

intyear;

}dd,*pd=ⅆ

.写出引用结构变量dd的成员成.day的其他两种描述形式。

pd->day

(*pd).day

(7)设有如下程序段:

inta[4]={0,4,5,13},*p;

P=&a[2];

printf(,,-H-(*p)=%d\nn,++(*p));

printf(n*-p=%d\nn,*-p);

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

prints*'*p-H-=%d\nf,,*p++);

printf(n%d\nn,a[O]);

试写出执行该程序段后的输出结果。

-H-(*p)=6

*-p=4

*p-H-=4

0

试题二(12分,每小题6分)

阅读下列程序,把程序的输出结果写在答卷纸的对应栏内。

(1)【程序2.1]

#include<stdio.h>

voidmain()

{

intk[]={65,30,3,123,831,54};

intj,ml=32767,m2=0,nl,n2;

for(j=0;j<6;j++)

if(ml>kU])

{ml=k[j];

nl=j;}

elseif(m2<k[j])

{m2=k[j];

n2=j;}

printffm1=%d,n1=%d\n”,m1,n1);

printffm2=%d,n2=%d\n”,m2,n2);

ml=3,nl=2

m2=831,n2=4

(2)【程序2.2]

#include<stdio.h>

voidfunc(int*x,inty)

{

statick=3;

y=*x+y;

*x=y%k;

k++;

printf(H*x=%d,y=%d\n",*x,y);

)

voidmain()

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

intx=12,y=5;

fiinc(&x,y);

printf(nx1=%d,y1=%d\n”,x,y);

func(&y,x);

printf(,,x2=%d,y2=%d\n,,,x,y);

*x=2,y=17

xl=2,yl=5

*x=3,y=7

x2=2,y2=3

试题三(12分,每小题6分)

下列程序中都有三个错误,按题中的计算要求,纠正错误,并以“将#XX”行改为“YYYY”的

形式进行解答,把解答写在答卷纸的对应栏内。代码左边的#1、#2、…是附加的行号。

(1)用冒泡排序法求出由21个整数组成的数组的中间值,并输出所有大于中间值的偶数。

【程序3.1】

#0#include<stdio.h>

#1voidmain()

#2{

#3intij,temp;

#4intarray[21];

#5for(i=0;i<21;i++)scanff'%d",array[i]);

#6for(i=0;i<21;i++)

#7for(j=0;j<20;j++)

#8if(array[j]>array[j+l])

#9

#10temp=array[j];

#11array[j]=array[j+l];

#12array[j+l]=temp;

#13

#14printf(H%dn,array[10]);

#15for(i=0;i<l0;i++)

#16if(array[i]/2==0)printf(n%d”,array。]);

#17

将第5行中的array[i];改为&array[i];

将第15行中的fbr(i=0;i<10;i++)改为for(i=ll;i<21;i++)

将第16行中的array[i]/2==0改为array[i]%2==0

(2)用下面的方法可以计算y年m月d日是星期几(w):

w=[y-1+(y-l)/4-(y-1)/100+(y-1)/400+y_d(y,m,d)]%7

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

其中,符号/表示计算整数商,%表示计算余数,y_d(y,m,d)表示y年m月d日是从

同年元旦算起到该日的总天数。

【程序3.2】

#1intday_tab[]={0,31,28,31,30,31,30,31,31,30,31,30,31);

#2inty_d(inty,intm,intd){

#3inti,all;

#4y=y%4==0&&y%100||y%400==0;

#5for(i=0;i<=m;i-H-)all+=day_tab[i];/*统计某月份(m月)之前的天数*/

#6all+=y;/*对闰年考虑2月份是29天*/

#7returnall+d;

#8}

#9voidmain(){

#10inty=2005,m=7,d=11,w;

#11w=y-1+(y-1)/4-(y-l)/100+(y-1)/400+y_d(y,m,d);

#12w%=7;

#13printf(n%d年%(1月%d日是星期%d\n”,y,m,d,w);

#14}

将第3行中的inti,all;改为inti,all=0;

将第5行中的fbr(i=0;i<=m;i++)改为for(i=0;i<m;i++)

将第6行中的all+=y改为all+=y*(m>2);

或者改为if(m>=3)al1+=y;

或者改为all=m>=3?all+y:all;

试题四(18分,每小题9分)

按指定的要求编写程序段,把解答写在答卷纸的对应栏内。

(1)输入无符号整型范围内的整数,求出它的位数以及各位数字之和。

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

#include<stdio.h>

voidmain()

i

unsignedintm,ws=0,p=0;

scanfif"%u”,&m);

do{ws-H-;

p=p+(m%10);

}while(m/=10);

printf("%d\t%u\n”,ws,p);

(2)将长度为n的字符串s分成两个子串,前m(任意值)个字符生成子串S],后n-m

个字符生成子串S2。约定:当m2n时,si等于原串,S2为空串;当m<0时,s]为空

串S2等于原串。编写程序段时,可以使用库函数strcpy。

voidsplit(chars[],charsl[],chars2[],intm)

{

intn,i,j;

n=strlen(s);

if(m>=n)

{

strcpy(sl,s);

strcpy(s2,*n,);

)

elseif(m==0)

(

strcpy(s2,s);

strcpy(sl;,n);

}

else

fbr(i=0;i〈m;i++)

sl[i]=s[i];

sl[i]=)(r;

for(j=0;s2[j]=s[i];i++,j4-+);

/*或者{strcpy(sl,s);sl[m]=,\0,;strcpy(s2,s+m)}*/

试题五(15分,每个空格3分)

阅读下列问题描述和相应的程序,把应填入其中(n)处的内容写在答卷纸的对应栏内。

【问题描述】

本程序运行时,从键盘不断接收用户输入的字符串并进行处理,直到用户输入的字符串

为“end”时终止。对用户输入的每个字符串的处理是:将字符串内的每一个十进制数字字符

置换成下列表格中右边所对应的一个字符串(所有其他字符不变),然后将转换的结果显示

在屏幕上;并分别计算每个数字的置换次数。

十进制数字字符置换成

上海市龙博学喉付算枇等被考轼二级伍程本被奸,

0(Zero)

1(One)

2(Two)

3(Three)

4(Four)

5(Five)

6(Six)

7(Seven)

8(Eight)

9(Nine)

例如,若用户输入的字符串为

Pagel12-Line3,

则程序5的输出是:

Page(One)(One)(Two)-Line(Three)

数字0到9的置换次数分别是0211000000

[程序5]

#include<stdio.h>

voidmain()

{char*table[]={M(Zero),,,M(One)”,"(Two)”'(Three)”,"(Four)”,

“(Five)”J(Six)”J(Seven)",H(Eight)”」(Nine)”};

charstrl[64],str2[255],*p;

intj,k,n,no[10];

for(;;){

printf(MInput:");

gets((1));/*读入字符串*/

for(k=0;k<10;k-H-)no[k]=0;

iftstrcmp(strl,"end")=0)(2);/*输入end时程序运行终止*/

for0=k=O;strl[j]!-\O';++j)/*对输入字符串进行扫描*/

(

if(⑶)/*当前字符不是数字字符*/

{str2[k++]=strl[j];

continue;

)

/*当前字符是数字字符*/

n=strl[j]-'O';

no[n]++;

for(p=table[n];*p!='\0';++p)

str2[k++]=⑷;/*把要置换的字符串逐个连接到str2上*/

}

str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论