文档库 最新最全的文档下载
当前位置:文档库 › 程序填空

程序填空

程序填空
程序填空

程序填空

数学

1.三角形内切圆的面积

题目描述:

给出三角形三边的边长,求此三角形内切圆(如下图所示,三角形的内切圆是和三角形三边都相切的圆)的面积。

输入:

三个正实数a、b、c(满足a+b>c,b+c>a,c+a>b), 表示三角形三边的边长。

输出:

三角形内切圆的面积,结果四舍五入到小数点后面2位。

输入样例:

3 4 5

输出样例:

3.14

程序:

program program1;

var

a, b, c, r, s, t: real;

begin

read(a, b, c);

s := ( ① ) / 2;

t := ② (s * (s - a) * (s - b) * (s - c));

r := t / s;

writeln(3.1415927 * r * ③ : 0 : ④ );

end.

贪心

2.问题描述:工厂在每天的生产中,需要一定数量的零件,同时也可以知道每天生产一个零件的生产单价。在N天的生产中,当天生产的零件可以满足当天的需要,若当天用不完,可以放到下一天去使用,但要收取每个零件的保管费,不同的天收取的费用也不相同。

问题求解:求得一个N天的生产计划(即N天中每天应生产零件个数),使总的费用最少。

输入:N(天数N<=29)

每天的需求量(N个整数)

每天生产零件的单价(N个整数)

每天保管零件的单价(N个整数)

输出:每天的生产零件个数(N个整数)

例如:当N=3时,其需要量与费用如下:

程序说明: (应该特别注意)

b[n]:存放每天的需求量

c[n]:每天生产零件的单价

d[n]:每天保管零件的单价

e[n]:生产计划

程序:

Program exp5;

Var

i,j,n,yu,j0,j1,s:integer;

b,c,d,e: array[0..30]of integer;

begin

readln(n);

for i:=1 to n do readln(b[[i],c[i],d[i]]; fori:=1 to n do e[i]:=0;

① :=10000;c[n+2]:=0;b[n+1]:=0;jO:=1; while (jO<=n)do

begin

yu:=c[j0]; j1:=jO; s:=b[j0];

while ② do

begin

③ j1:=j1+1;s:=s+b[j1];

end;

④ jO:=j1+1;

end;

for i:=1 to n do ⑤

readln;

end.

二分查找

3.木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。木头长度的单位是cm。原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。

输入:

第一行是两个正整数N和K(1 ≤ N ≤ 10000,1 ≤ K ≤ 10000),N是原木的数目,

K是需要得到的小段的数目。

接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。

输出:

输出能够切割得到的小段的最大长度。如果连1cm长的小段都切不出来,输出”0”。

输入样例:

3 7

232

124

456

输出样例:

114

程序:

var

n, k : integer;

len : array [1..10000] of integer;

i, left, right, mid : integer;

function isok(t : integer) : boolean;

var

num, i : integer;

begin

num := 0;

for i := 1 to n do begin

if num >= k then break;

num := ① ;

end;

if ② then isok := true

else isok := false;

end;

begin

readln(n, k);

right := 0;

for i := 1 to n do begin

readln(len[i]);

if right < len[i] then right := len[i];

end;

inc(right); ③ ;

while ④ < right do begin

mid := (left + right) div 2;

if ⑤ then right := mid

else left := mid;

end;

writeln(left);

end.

回溯法

4.问题描述:有n种基本物质(n≤10),分别记为P1,P2,……,Pn,用n种基本物质构造一种物品,物品使用在k个不同地区(k≤20),每个地区对物品提出自己的要求,这些要求用一个n 位的数表示:α1α2……αn,其中:

αi =1表示必须有第i种基本物质

=-1表示必须不能有第i种基本物质

=0无所谓

问题求解:当k个不同地区要求给出之后,给出一种方案,指出哪些物质被使用,哪些物质不被使用。

程序说明:数组b[1],b[2],...,b[n]表示某种物质是否需要

a[1..k,1..n]记录k个地区对物质的要求,其中:

a[I,j]=1表示第i个地区对第j种物质是需要的

a[i,j]=0表示第i个地区对第j种物质是无所谓的

a[i,j]=-1表示第i个地区对第j种物质是不需要的

程序:

program gxp2;

Var i, j ,k, n :integer;

p:boolean;

b :array [0..20] of 0..1;

a :array[1..20,1..10] of integer;

begin

readln(n,k);

for i:=1 to k do

begin

for j:=1 to n do read(a[i,j]);

readln;

end;

for i:=O to n do b[i]:=0;

p:=true;

while ① do

begin

j:=n;

while b[j]=1 do j:=j-1;

for i:=j+1 to n do b[I]:=0;

for i:=1 to k do

for j:=1 to n do

if( a[i,j]=1 ) and (b[j]=0) or ④

then p:=true; {明确p的含义}

end;

if ⑤

then writeln('找不到!‘)

else for i:=1 to n do

if (b[i]=1) then writeln('物质',i,’需要')

else writeln('物质',i,'不需要');

end.

5.将2n个0和2n个1,排成一个圈。从任一个位置开始,每次按逆时针的方向以长度为n+1的单位进行数二进制数。要求给出一种排法,用上面的方法产生出来的2n+1个二进制数都不相同。

例如,当n=2时,即22个0和22个1排成如下一圈:

比如,从A位置开始,逆时针方向取三个数000,然后再从B位置上开始取三个数001,接着从C开始取三个数010,…可以得到000,001,010,101,011,111,110,100共8个二进制数且都不相同。

程序说明{重要,可以先自己设计算法}

以N=4为例,即有16个0,16个1,数组A用以记录32个0,1的排法,数组B统计二进

制数是否已出现过。

程序清单

VAR

A :ARRAY[1..36] OF 0..1;

B :ARRAY[0..31] OF INTEGER;

I,J,K,S,P:INTEGER;

BEGIN

FOR I:=1 TO 36 DO A[I]:=0;

FOR I:=28 TO 32 DO A[I]:=1;

P:=1;A[6]:=1;

WHILE (P=1) DO

BEGIN

J:=27;

WHILE A[J]=1 DO J:=J-1;

(①)

FOR I:=J+1TO 27 DO(②)

FOR I:=0 TO 31 DO B[1]:=O;

FOR I:=1 TO 32 DO

BEGIN

(③)

FOR K:=I TO I+4 DO S:=S*2+A[K];

(④)

END;

S:=0;

FOR I:=0 TO 31 DO S:=S+B[I];

IF(⑤)THEN P:=0

END;

FOR I:=1 TO 32 DO FOR J:=I TO I+4 DO WRITE(A[J]);

WRITELN

END.

6.问题描述:将n个整数分成k组(k≤n,要求每组不能为空),显然这k个部分均可得到一个各自的和s1,s2,……sk,定义整数P为:

P=(S1-S2)2+(S1一S3)2+……+(S1-Sk)2+(s2-s3)2+……+(Sk-1-Sk)2

问题求解:求出一种分法,使P为最小(若有多种方案仅记一种〉

程序说明:

数组:a[1],a[2],...A[N]存放原数

s[1],s[2],...,s[K]存放每个部分的和b[1],b[2],...,b[N]穷举用临时空间d[1],d[2],...,d[N]存放最佳方案

程序:

program exp4;

Var i,j,n,k : integer;

a :array [1..100] of integer;

b,d:array [0..100] of integer;

s :array[1..30] of integer;

begin

readln(n,k);

for I:=1 to n do read(a[I]);

for I:=0 to n do b[I]:=1;

cmin:=1000000;

while (b[0]=1) do

begin

for I:=1 to k do ①

for I:=1 to n do

sum:=0;

for I:=1 to k-1 do

for j:= ③

sum:=sum+(s[I]-s[j])*(s[I]-s[j]); if ④ then

begin

cmin:=sum;

for I:=1 to n do d[I]:=b[I]; end;

j:=n;

while ⑤ do j:=j-1;

b[j]:=b[j]+1;

for I:=j+1 to n do ⑥

end;

writeln(cmin);

for I:=1 to n do write(d[I]:40); writeln;

end.

模拟

8.存储空间的回收算法。设在内存中已经存放了若干个作业A ,B ,C ,D 。其余的空间为可用的(如图一中(a))。

此时,可用空间可用一个二维数组dk[1..100,1..2 ]表示,(如下表一中(a)),其中:dk[i ,1]对应第i 个可用空间首址,dk[i ,2]对应第i 个可用空间长度如上图中,dk :

表一(a)

表一(b)

现某个作业释放一个区域,其首址为d ,长度为L ,此时将释放区域加入到可用空间表中。要求在加入时,若可用空间相邻时,则必须进行合并。因此出现下面的4种情况: (1)下靠,即回收区域和下面可用空间相邻,例如,d=80,L=20,此时成为表二中的(a)。 (2)上靠,例如,d=600,L=50,此时表成为表二中的(b)。

(3)上、下靠,例如,d=150,L=150,此时表成为表二中的(c)。 (4)上、下不靠,例如,d=430,L=20,此时表成为表二中的(d)。

表二(a)(下靠) 表二(b)(上靠) 表二(c)(上,下靠) 表二(d)(上,下不靠)

程序说明:对数组dk 预置2个标志,即头和尾标志,成为表一中(b),这样可使算法简单,sp 为dk 表末地址。 程序清单:

VAR I ,J ,SP ,D ,L :INTEGER ;

DK :ARRAY[0..100,1..2]OF INTEGER ; BEGIN

READLN(SP); FOR I:=1 TO SP DO

READLN(DK[I ,1],DK[I ,2]);

DK[0,1]:=0;DK[0,2]:=0; ① ;

DK[SP,1]:=10000;DK[SP,2]:=0;READLN(D,L);I:=1;

WHILE DK[I,1]

IF(DK[I,1]+DK[I,2]=D)THEN {与前面的一段靠在一起}

IF(D+L=DK[I+1,1])THEN {和后面的一段也靠在一起,即上下靠}

BEGIN

DK[I,2]:= ③;

FOR J:=I+1 TO SP-1 DO {删除dk[i+1]}

DK[J]:=DK[J+1];

SP:=SP-1;

END

ELSE DK[I,2]:=DK[I,2]+L {仅和前面靠}

ELSE IF(D+L=DK[I+1,1])THEN {仅和后面靠}

BEGIN

DK[I+1,1]:= ④;DK[I+1,2]:=DK[I+1,2]+L

END

ELSE BEGIN {都不靠,插入}

FOR J:=SP DOWNTO I+1 DO DK[J+1]:=DK[J];

⑤:=D;DK[I+1,2]:=L;SP:=SP+1;

END;

FOR I:=1 TO SP-1 DO WRITELN(DK[I,1]:4,DK[I,2]:4);READLN;

END.

9.Joseph

题目描述:

原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。

现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。

输入:

仅有的一个数字是k(0 < k <14)。

输出:

使得最先出列的k个人都是坏人的m的最小值。

输入样例:

4

输出样例:

30

程序:

program program2;

var

i, k, m, start: longint;

find: boolean;

function check(remain: integer): boolean; {remain目前剩余人数}

var result: integer;

begin

result:=( ① ) mod remain; {result这次出列的人的编号}

if( ② )then begin

start := result; check := true; {符合要求,为下一次做准备} end

else check := false; {不符合要求}

end;

begin

find := false;

read(k);

m := k; {枚举m}

while ( ③ ) do begin

find := true; start := 0; {人从0开始编号}

for i := 0 to k-1 do {模拟k次出列}

if( not check( ④ )) then begin

find := false; break; {不符合要求,停止此次,直接枚举下一个m} end;

inc(m);

end;

writeln( ⑤ );

end.

关键路径

10. 设有一个工程网络如下图表示(无环路的有向图):

其中,顶点表示活动,①表示工程开始,⑤表示工程结束(可变,用N表示),边上的数字表示活动延续的时间。

如上图中,活动①开始5天后活动②才能开始工作,而活动③则要等①、②完成之后才能开始,即最早也要7天后才能工作。

在工程网络中,延续时间最长的路径称为关键路径。上图中的关键路径为:①—②—③—④—⑤共18天完成。

关键路径的算法如下:

1.数据结构:{重要定义}

R[1..N,1..N]OF INTEGER;表示活动的延续时间,若无连线,则用-1表示;

EET[1..N] 表示活动最早可以开始的时间

ET[1..N] 表示活动最迟应该开始的时间

关键路径通过点J,具有如下的性质:EET[J]=ET[J]

2.约定:

结点的排列已经过拓扑排序,即序号前面的结点会影响序号后面结点的活动。

程序清单:

VAR I,J,N,MAX,MIN,W,X,Y:INTEGER;

R:ARRAY[1..20,1..20] OF INTEGER;

EET,ET:ARRAY[1..20] OF INTEGER;

BEGIN

READLN(N)

FOR I:=1 TO N DO

FOR J:=1 TO N DO

R[I,J]:=-1;

READLN(X,Y,W);{输入从活动X到活动Y的延续时间,以0为结束}

WHILE X<>0 DO

BEGIN

R[X,Y]:=W;①

END;

EET[1]:=0;{认为工程从0天开始}

FOR I:=2 TO N DO

BEGIN

MAX:=0;

FOR J:=1 TO N DO

IF R[J,I]<>-1 THEN

IF ②THEN MAX:=R[J,I]+EET[J];{模式}

EET[I]:=MAX;

END;

FOR I:=N-1 DOWNTO 1 DO

BEGIN

MIN:=10000;

FOR J:=1 TO N DO

IF R[I,J]<>-1 THEN

IF ④THEN MIN:=ET[J] - R[I,J];{模式}

ET[I]:=MIN;

END;

WRITELN(EET[N]);

FOR I:=1 TO N -1 DO

IF ⑤THEN WRITE(I,'→');{关键路径定义}

WRITE(N);READLN

END.

搜索

11.求出一棵树的深度和宽度。例如有如下的一棵树:

其树的深度为从根结点开始到叶结点结束的最大深度,树的宽度为同一层上结点数的最大值。在上图中树的深度为4,宽度为3。

用邻接表来表示树,上图中的树的邻接表示如下:

程序清单

VAR

I,J,SP1,SP2,L,MAX:INTEGER;

TREE:ARRAY[1..20,1..6] OF INTEGER;

Q:ARRAY[1..100,0..6] OF INTEGER;

D:ARRAY[0..20] OF INTEGER;

BEGIN

FOR I:=1 TO 14 DO FOR J:=1 TO 6 DO TREE[I,J]:=O;

FOR J:=1 TO 14 DO TREE[J,1]:=J;

TREE[1,2]:=2; TREE [1,3]:=3; TREE[1,4]:=4; TREE[2,2]:=5; TREE[2,3]:=6; TREE [3,2]:=7; TREE[3,3]:=8; TREE[4,2]:=9; TREE[4,3]:=10; TREE[4,4]:=11; TREE[7,2]:=12;

TREE[7,3]:=13; TREE[13,2]:=14;

SP1:=1; SP2:=1;

FOR I:=1 TO 6 DO Q[1,I]:=TREE[1,I];

Q[1,0]:=1;

WHILE(①) DO

BEGIN

L:=(②); J:=2;

WHILE(③)DO

BEGIN

SP2:=SP2+1;Q[SP2,0]:=L;Q[SP2,1]:=Q[SP1,J];

FOR I:=2 TO 6 DO

Q[SP2,I]:=TREE[Q[SP1,J],I];

J:=J+1

END;

SP1:=SP1+1

END;

WRITELN(④);

FOR I:=0 TO 20 DO D[I]:=0;

FOR I:=1 TO SP2 DO

D[Q[I,0]]:=(⑤);

MAX:=D[1];

FOR I:=2 TO 20 DO

IF D[I]>MAX THEN MAX:=D[I];

WRITELN(MAX);

READLN;

END.

题目描述:

一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后放回原处。在取3枚,取4枚……直至m枚。然后在从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中每一枚又是正面朝上为止。例如,m为1时,翻两次即可。

输入:仅有的一个数字是这摞硬币的枚数m ,0< m <1000。

输出:为了使这摞硬币中的每一枚都是朝正面朝上所必须翻的次数。

输入样例:30

输出样例:899

程序:

program Program1;

var m:integer;

function solve(m: integer):integer;

var i,t,d: integer;

flag: Boolean;

begin

if (m = 1) then

solve := (1)

else begin

d := 2*m+1; t := 2; i := 1; flag := False;

repeat

if (t = 1) then

begin

solve := (2)

; flag := True;

end

else if ( (3) ) then

begin

solve := i*m-1; flag := True;

end

else

t := (4)

;

i:=i+1;

until flag;

end

end;

begin

read(m); if (( (5) ) and (m<1000)) then

writeln( (6) );

13.OIM地形

题目描述:

二维离散世界有一种地形叫OIM(OI Mountain)。这种山的坡度只能上升('/')或下降('\'),而且两边的山脚都与地平线等高,山上所有地方都不低于地平线.例如:

/\ /\

/ \/\ 是一座OIM;而 / \ 不是。

\/

这个世界的地理学家们为了方便纪录,给OIM所有可能的形状用正整数编好号,而且每个正整数恰好对应一种山形。他们规定,若两座山的宽度不同,则较宽的编号较大;若宽度相同,则比较从左边开始第1个坡度不同的地方,坡度上升的编号较大。以下三座OIM的编号有小到大递增:

/\ /\ /\ /\

/ \/\ / \/\/\ / \/ \。显然/\的编号为1。但是地理学家在整理纪录是发觉,查找编号与山形的对应关系不是很方便。他们希望能快速地从编号得到山的形状。你自告奋勇答应他们写一个程序,输入编号,能马上输出山形。

输入:一个编号(编号大小不超过600,000,000),

输出:输入编号所对应的山形,1座山所占行数恰为它的高度,即山顶上不能有多余空行。

输入样例:15

输出样例: /\ /\

/ \/ \

程序:

program Program2;

const

L:integer =19; SZ: integer =50;

UP: char = '/'; DN: char = '\';

Var

i,nth,x,y,h,e,f:integer;

m: array[0..1,0..38,0..19] of integer;

pic: array[0..49,0..49] of char;

procedure init;

var k,s,a,b,c: integer;

begin

for a:=0 to 1 do

for b:=0 to 2*L do

for c:=0 to L do

m[a,b,c]:=0; m[0,0,0]:=1;

for k:=0 to 2*L-1 do

begin

for s:=1 to L do

begin

m[0,k+1,s] := m[0,k,s+1] + m[1,k,s+1];

m[1,k+1,s]:= (1) ;

end;

m[0,k+1,0] :=m[0,k,1]+m[1,k,1];

end;

end;

procedure draw(k,s,nth:integer);

begin

if (k=0) then exit;

if ((nth-m[1,k,s])>=0) then

begin

nth:=nth-m[1,k,s];

if (y>h) then (2) ;

pic[y,x]:=UP; y:=y+1; x:=x+1; draw( (3 ) );

end

else begin

y:=y - 1; pic[y,x]:=DN; x:=x+1; draw(k-1,s-1,nth);

end;

end;

begin

init;

read(nth);

for e:=0 to SZ-1 do

for f:=0 to SZ-1 do

pic[e,f]:= ' ';

x:=0;

y:=0

h:=0;

i:=0;

while ((nth-m[0,2*i,0])>=0) do

begin

nth:= nth-m[0,2*i,0];

(4) ;

end;

draw( (5) );

for i:=h downto x-1 do

begin

for e:=0 to x-1 do

write(pic[i,e]);

writeln(' ');

end;

end.

c语言程序填空题1

三、程序填空题 导读:在程斥填空题中,已经给出了程序的主干,读者首先要理解程序的思路, 再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步堂握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上己经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而白己编写程序乂不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。 ttinclude main() { int a, b; scanf (”%d%d", &a, &b): printf ("a=%d, b二%d\n", a, b); printf ("a=%d, b=%d\n/F, a, b): } a=b=a=①②③ 【3.2】下面程序的功能是根据近似公式:十/6~ 1/12+1/22+1/32+……+l/n2, 求兀值。廿include〈math? h> double pi(long n) { double s=0. 0; long i; for(i=l; i<=n; i++) s=s+ ①; return (②); } [3.3]下面的程序的功能是求一维数组中的最小元素。 findmin(int *s, int t,int *k) { int p; for(p=0, *k=p: p

for(i=0; i<10; i++) scanf &a[i]); findmin(a, 10, k); printf ("%d, %d\n", *k, a L*kJ); } 【3.4】下面程序的功能是计算1-3+5-7+……-99+101的值。 main() { int i, s=0: for(i=l; i<=101: i+=2) {①; s二s+t: ②; } printf ("%d\n", s); } [3.5]有以下程序段: s=l. 0; for(k=1: k<=n: k++) s=s+l. 0/(k*(k+1)); printf ("%f\n", s); 填空完成下述程斥,使之与上述程序的功能完全相同。 s=0. 0: ①; k=0; do { s二s+d; ②; d=1.0/(k*(k+l)); }while(③); printf ("%f\n", s); [3.6]下而程用的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。 main () ;、float x, amax, amin; scanf &x); amax=x: amin=x;

程序阅读及填空(答案)

一.程序阅读题 1.若运行时输入100↙,写出以下程序的运行结果。main ( ) { int a ; scanf(“%d”,&a); printf(“%s”,(a%2!=0)?”No”:”Yes”); } 答案: Yes 2.写出以下程序的运行结果。 main ( ) { int a=2,b=7,c=5; switch (a>0) { case 1: switch (b<0) { case 1: printf(“”); break ; case 2: printf(“!”); break ; } case 0: switch (c==5) { case 1: pritnf(“*”) ; break ; case 2: printf(“#”) ; break ; default : printf(“#”) ; break ; } default : p rintf(“&”); } printf(“\n”); } 答案: *& 3.写出下面程序运行的结果。 main ( ) { int i,b,k=0 ; for (i=1; i<=5 ; i++) { b=i%2; while (b--==0) k++ ; } printf(“%d,%d”,k,b); } 答案:2 0 4.写出下面程序运行的结果。 main ( ) { int k=1,n=263 ; do { k*= n%10 ; n/=10 ; } while (n) ; printf(“%d\n”,k); } 答案:36 5.写出下面程序运行的结果。

{ int a=10,y=0 ; do { a+=2 ; y+=a ; if (y>50) break ; } while (a=14) ; printf(“a=%d y=%d\n”,a,y) ; } 答案:a=16 y=60 数组部分: 1.写出下面程序的运行结果。 main ( ) 答案: { int a[6][6],i,j ; for (i=1; i<6 ; i++) for (j=1 ; j<6 ; j++) a[i][j]=(i/j)*(j/i) ; for (i=1;i<6 ; i++) { for (j=1 ; j<6 ; j++) printf(“%2d”,a[i][j]) ; printf(“\n”); } } 2.写出下面程序的运行结果。 main ( ) { int i=0; char a[ ]=”abm”, b[ ]=”aqid”, c[10]; while (a[i]!=’\0’ && b[i]!=’\0’) { if (a[i]>=b[i]) c[i]=a[i]-32 ; else c[i]=b[i]-32 ; i++; } c[i]=’\0’; puts(c); } 答案:AQM 3.当运行下面程序时,从键盘上输入AabD↙,则写出下面程序的运行结果。 main ( ) { char s[80]; int i=0; gets(s); while (s[i]!=’\0’) { if (s[i]<=’z’ && s[i]>=’a’) s[i]=’z’+’a’-s[i] ; i++;

程序填空题(1)

程序填空题1、 #include int find(char *str) { char *fstr="the"; int i=0,j,n=0; while (str[i]!='\0') { for(______1______) //for(j=0; j<=2; j++) if (str[j+i]!=fstr[j]) break; if (______2______) n++; // j==3 i++; } return n; } void main() { char a[80]; gets(a); printf("%d",find(a)); } 2、 #include void main() { int n,k=0; scanf("%d",&n); while( _____1_____ ) // 1)n 2) n!=0; { k++;

_____2_____; n=n/10 } printf("%d\n",k); } 3、 #include #include #define f(x) x*x-5*x+sin(x) void main() { int x; float max; ______1______ // max=f(1); for(x=2;x<=10;x++) ______2______ // if(f(i)>max) max=f(i); printf("%f\n",max); } 4、 #include void main() { char c; c=getchar(); if(______1______) // c>='a' && c<'v' c=c+5; else if (c>='v' && c<='z') ______2______ //c=c-21; putchar(c); } 5、

程序填空题

1.下列程序由键盘输入一个文件名,然后把从键盘输入的字符依次存放到磁盘文件中,直到输入一个"#"为止。 #include "" main( ) { FILE *fp; char ch,filename[10]; scanf("%s",filename); /*用户输入存在磁盘上的文件名*/ if((fp= ⑦ (filename,"w"))==NULL) { printf("cannot open file\n"); exit(0); } while((ch=getchar())!='#') ⑧ ; fclose(fp); } 2.下列程序的功能是输出一个整数x的绝对值。将程序补充完整,填在空内。 #include <> main() { int x, ① ; scanf("%d",&x); y= ② ; printf("%d\n",y); } 3.下列程序的功能是输出1~100之间能被7整除的所有整数。将程序补充完整,填在空内。 main() { int i;

for(i=1; ③ ;i++) { if(i%7) ④ ; printf("%d ",i); } } 4.以下程序用以删除字符串中所有的空格,请填空。 main() { char s[100]={"Our teacher teach C language!"}; int i,j; for(i=j=0;s[i]!= '\0';i++) if(s[i]!= ' ') { ⑤ ;j++;} s[j]= ⑥ ; printf("%s\n",s); } 5.结构体数组中存有三个人的姓名和年龄,以下函数fun的功能是输出三人中最年长者的姓名和年龄。 struct man { char name[20];int age;}person[]={{"Mary",16},{"Tom",21},{"Jim",18}}; void fun( ⑦ person[ ] ) { int i,old=0; for(i=0;i<2;i ++) if(person[old].age

c语言程序填空题(1)

三、程序填空题 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。 #include main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); a= ① ; b= ② ; a= ③ ; printf("a=%d,b=%d\n",a,b); } 【3.2】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。 #include double pi(long n) { double s=0.0; long i;

for(i=1;i<=n;i++) s=s+ ① ; return( ② ); } 【3.3】下面的程序的功能是求一维数组中的最小元素。findmin(int *s,int t,int *k) { int p; for(p=0,*k=p;p

vb程序阅读题与填空题

VB程序阅读题与程序填空题综合练习 1、阅读下面程序,当单击窗体之后,窗体上输出的是。 Private Sub Form_Click( ) Dim i As Integer, j As Integer Dim k As Integer k=0 For i = 0 To 10 Step 3 For j = 1 To 10 If j > = 5 Then i = i +4: Exit For j = j + 1 k = k + 1 Next If i > 8 Then Exit For Next Print k End Sub 2、阅读下面的事件过程。单击窗体后,在文本框Text1和Text2中显示的内容分别 是和;若将程序中A语句与B语句的位置互换,再次执行程序,单击窗体后在Text1和Text2中显示的内容分别是和。 Private Sub Form_Click( ) Dim x As Integer, y As Integer x = 1 : y = 0 Do While x < 3 y = y + x 'A语句 x = x + 1 'B语句 Loop Text1.Text = x Text2.Text = y End Sub 3、下面程序段中,k循环共执行次,在窗体上显示的结果是。 Dim b As Integer, k As Integer b = 1 For k =1 To 5 b = b * k If b > = 15 Then Exit For Else

k = k + 1 End If Next k Print k, b 4、以下是按钮cmdl的Click事件过程,求1~100之间的所有质数。质数的个数显示在窗 体上,在划线处填上缺少的内容。 Private Sub cmdl_Click( ) Dim intNum As Integer, int1 As Integer, int2 As Integer intNum = 0 For int1 = For int2 = 2 To int1 \2 If (int1 Mod int2) = 0 Then intNum=1 End If Next If sNum = sNum + 1 End If Next Print End Sub 5、若命令按钮的名称为CmdExit,程序要求单击以上命令按钮时,程序停止运行。请在画线处中填入适当的内容。 Private Sub CmdExit_ ( ) End Sub 6、下面的事件过程判断文本框txt1中输入的数所在区间,并在文本框txt2中输出判断结果。在画线处填入正确的内容。 Private Sub Comandl_Click( ) Dim int1 As Integer int1 =val (txt1.Text) Select Case int1 Case txt2.Text = "值为0" Case txt2.Text = "值在1和10之间(包括1和10)" Case txt2.Text = "值大于10"

C程序填空题练习

程序填空题 1、下列程序的功能是把从键盘上输入的整数取绝对值后输出。 main() { int x; scanf("%d",&x); if(x<0) ; printf("%d\n",x); } 2、输入 20个学生的成绩,输出最低分数。 main() { int i; float x,min=100; for (i=0;i<20;i++) { scanf( “ %f” ,&x); if(x

} printf("A=%d,B=%d,C=%d\n",k1,k2,k3); } 5、下列程序的功能是将一个字符串str 的内容颠倒过来。 #include "string.h" main() { int i,j,k; char str[]="1234567"; for(i=0,j=____________;is[k]) __________; printf("k=%d\n",k); } 9、下列程序的功能是把输入的十进制长整型数以十六进制数的形式输出。 main() { char b[]="0123456789ABCDEF"; int c[64],d,i=0,base=16; long n; scanf("%ld",&n);

程序填空

#include #include /***********SPACE***********/ double f(【?】) { /***********SPACE*********** 答案: =======(答案1)======= float x =======(答案2)======= double y =======(答案3)======= x<=2 =======(答案4)======= return y 题目:已定义一个含有30个元素的数组s,函数fun1的功能是按顺序分别赋予各元素从2开始的偶数,函数fun2则按顺序 每五个元素求一个平均值, 并将该值存放在数组w中。 程序中有4个空,填空使程序完整。 答案: =======(答案1)======= s[i]=k; =======(答案2)======= if( ( i + 1 )%5 == 0 ) =======(答案3)======= sum=0; =======(答案4)======= fun2(s,w); 五、程序改错共1题(共计6分) 第1题(6.0分) /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 题目:函数fun的功能是:输出Fabonacci数列的前20项,要求变量类型定义成浮点型,输出时只输出整数部分,输出项

数不得多于或少于20。 请改正程序中的4个错误,使它能得出正确的结果。 -------------------------------------------------------- 答案: =======(答案1)======= printf("%8.0f",f1); =======(答案2)======= for(i=1;i<20;i++) =======(答案3)======= f1=f2; =======(答案4)======= f2=f3; 题目:要求输出结果为: A,B 65,66 答案: =======(答案1)======= b; =======(答案2)======= 'a' =========或========= 97 =======(答案3)======= 32 题目:以下程序的功能是对任一整数N(N≠0),它都可以分解成1 (或-1)和一些质数(素数)因子的形式。如N=150时,可分解成1×2×3×5×5;N=-150时,可分解为-1×2×3×5×5。 下边程序能实现这种分解过程。当N=150,输出以下分解结 果:N= 1* 2* 3* 5* 5 答案 n>0 i=2 r=n%i n=n/i 题目:输入一个学生的生日(年:y0、月:m0、日:d0),并输入当前日期(年:y1、月:m1、日:d1)。求出该学生的 年龄(实足年龄) 答案: =======(答案1)=======

-程序填空部分试题及答案

第1.题*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:下面的程序是求1!+3!+5!+……+n!的和。 -------------------------------------------------------*/ #include main() { long int f,s; int i,j,n; /***********SPACE***********/ 【?】; scanf("%d",&n); /***********SPACE***********/ for(i=1;i<=n; 【?】) { f=1; /***********SPACE***********/ for(j=1; 【?】;j++) /***********SPACE***********/ 【?】; s=s+f; } printf("n=%d,s=%ld\n",n,s); } 第2题./*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:以下程序是用选择法对10个整数按升序排序。 -------------------------------------------------------*/ #include /***********SPACE***********/ 【?】 main()

湖南省计算机二级3[1].(6分)程序阅读填空

程序填空题一 1. 下面C语言程序将两个递增有序的数值a和b 合并一个数组c,并保持递增次序,最后输出数组c. #include < stodio.h> #define M6 #define N5 main( ) {int a[M]={1,3,5,7,9,11} b[N]={2,4,6,8,10} int c[M+N] int i ,j, k; i=j=k=0 while( 1 ) if a[i]

printf(%dxt,c[k]; ) 其中(1)(2)(3)(4)处分别填一数据,使程序达到其功能。 答案: 1:i

解:(1)(*f)(x+y)/(*g)(y-x) (2)cos,sin,a,b [解析]本题考察的是函数的声明。要填写的两个空都出现在return语句中,所以要仔细分析函数的返回值。本题的第二个空相对要容易一些,只要根据题干和乘号前面的调用语句对比一下即可得到调用语句的四个参数。第一个空相对要难一些,函数fgh定义时用到了函数指针(*f)和(*g)是为了增加函数的灵活性。根据函数h的定义以及题干要求,可以看出函数fgh应该表示的是乘号两边的某一项。(*f)和(*g)用来表示sin或cos,参数x 和y的加减法运算作为sin或cos函数的参数,故应填写(*f)(x+y)/ (*g)(y-x)。

C语言-程序填空练习题

程序填空:阅读程序。在划线处填写适当的表达式或语句,使程序完整并符合题目要求 1.输入一个字符,判断该字符是数字、字母、空格还是其他字符。 main( ) { char ch; ch=getchar(); if( ch>=?a?&&ch<=?z?|| ch>=?A?&&ch<=?Z?) printf("It is an English character\n"); else if( ch>=?0?&&ch<=?9?) printf("It is a digit character\n"); else if( ch== …?) printf("It is a space character\n"); else printf("It is other character\n"); } 2.下列程序的功能是从输入的整数中,统计大于零的整数个数和小于零的整数个数。用输入0来结束输入,用i,j来放统计数,请填空完成程序。 void main() { int n,i=0,j=0; printf(“input a integer,0 for end\n”); scanf(“%d”,&n); while (n或n!=0 ) { if(n>0) i=i+1 ; else j=j+1; } printf(“i=%4d,j=%4d\n”,i,j); } 3.编程计算1+3+5+……+101的值 #include void main() { int i, sum = 0; for (i = 1;i<=101 ; i++ ) sum = sum + i; printf("sum=%d\n", sum);

程序填空

'【程序填空】 '------------------------------------------------------- '功能:下面的程序段用于实现以下功能:利用冒泡法将一组整数' 从小到大排序。 '------------------------------------------------------- Private Sub Form_Click() Const n = 15 Dim a(1 To n) As Integer, work As Boolean Dim i As Integer, j As Integer, x As Integer Randomize For i = 1 To n a(i) = Int((90 * Rnd) + 10) Next i For i = 1 To n Print a(i); Next i Print '**********SPACE********** For i = n To 2 【?】step-1 work = True For j = 1 To i - 1 If a(j) > a(j + 1) Then x = a(j): a(j) = a(j + 1): a(j + 1) = x '**********SPACE********** 【?】work=False End If Next j '**********SPACE********** If work Then 【?】Exit For Next i For i = 1 To n Print a(i); Next i End Sub 答案 1). Step -1 2). work = False 或work=0 或not work = true 3). Exit For '功能:以下程序用于判断一个正整数(≥3)是否为素数。 '-------------------------------------------------------

VFP程序填空与阅读试题

2005届计算机专业《VFP》程序填空与阅读试卷汇编一 班级姓名 一、程序填空(每空3分,共27分) 1.有一商场的商品销售数据库XS.DBF,其记录如下: 记录号商品名单价数量总价 1 电冰箱2000 3 6000 2 彩电1800 5 9000 3 电冰箱2010 1 2010 4 空调机1600 2 3200 5 彩电1900 2 3800 …… 下面程序用于分类统计各种商品总的销售数量和总的销售额(总价),并计算出平均 销售单价。 SET TALK OFF USE XS INDE ON __________________ TO SY ____________________ TO TJK USE TJK REPL _____________________ LIST USE SET TALK ON 2.任意输入两个正整数X和Y,求X与Y的最小公倍数。 SET TALK OFF INPUT "X="TO X INPUT "Y="TO Y IF X>Y T=X X=Y Y=T ENDI N=Y DO WHILE N<=__________________ IF ________________ EXIT ENDI N=_______________________ ENDDO ?"最小公倍数是:"+STR(N) SET TALK ON 3.现有一数据库CJ.DBF,该数据库文件中仅有一个数值型字段"数据",且无记录。要求键盘输入十个数,将这些数保存到CJ.DBF的"数据"字段中,并由大到小显示出来。 SET TALK OFF

USE CJ K=1 DO WHIL K<=10 _________________ @K+5,1 SAY "第"+STR(K,2)+"数是:" GET 数据 READ __________________ ENDD INDE ON _______________ TO TMP LIST USE SET TALK ON 二、程序填空(每空3分,共18分) 1.男子100米短跑成绩已录入数据库Male100.DBF,现要求将前3名运动员的成绩转入获奖数据库gainer.dbf和gainer.txt文件中。阅读下列程序, 填写空位处的代码,使程序能正确有效地实现上述要求。 set Talk off clear @14,20 say "请稍候…" use Male100 ___________ on 成绩/D To temp use Temp Copy _________________ To gainer.dbf use gainer copy to gainer.txt _________________ use @14,20 say "操作完毕!" Return 2.现有一户籍数据库People.DBF,存贮有该地区各位公民的档案资料,现要求按"出生日期"字段(日期型),以索引查询方式,快速查找并显示所有与指定出生日期相同的记录。 Set Talk off Set Safe off Clear use people Index On 出生日期To Ipeople Born=" / / " @14,20 Say "请输入查询的出生日期:" Get Bom picture _________ Read ________________________ Do while .NOT.EOF( ).AND. _________________ Display Skip Enddo

c++程序填空十套

第一套 1.完成程序填空,实现求两数最小公倍数 #include main() { intm,n,i=1; printf("input m,n:"); scanf("%d,%d",&m,&n); do { /***********SPACE***********/ if(【?】) /***********SPACE***********/ if(i%n【?】) /***********SPACE***********/ { printf("%d\n",i);【?】; } i++; } while(i!=0); } 1)i%m==0 2)==0 3)break 2.有一个已排好的数组,完成程序填空,实现要求输入一个数后,按原来排序的规律将它插入到数组中。 #include #define N 10 int main() { int a[N+1]={-73,-67,-54,0,32,84,86,90,234,312}; intnum,i,left,right,mid,find=0; //find=0,未找到;find=1,找到。left=0; right=N-1; printf("please input:"); scanf("%d",&num); /***********SPACE***********/ while( find【?】&& left<=right) { mid=(left+right)/2; if(num>a[mid]) left=mid+1; else if(num

Java复习题(三)阅读程序题_软件

《JA V A程序设计》复习题之(三)阅读程序题 三、程序阅读题 1.阅读以下程序 import java.io.*; public class Reverse2 { public static void main(String args[ ]){ int i,n=10; int a[] = new int[10]; try { BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); a[i] = Integer.parseInt(br.readLine() ); } catch (IOException e) { }; for (i= n-1; i >= 0; i=i-2) System.out.print(a[i]+" "); System.out.println(); } } 请写出该程序的功能: 该程序使用字符缓冲输入流从键盘输入10个数,然后倒序并间隔打印出来。 2.阅读以下程序 import java.io.* ; public class abc { public static void main(String args[ ]) { int i, s = 0 ; int a[] = { 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120 }; for ( i = 0 ; i< a.length ; i++ ) if (i % 3 == 0) s += a[i]; System.out.println("s=" + s); } } 请写出该程序的输出结果: s=260 3、阅读以下程序: import java.io.*; public class TestRandomAccess { public static void main(String args[]) { int data_arr[]={65,66,56,23,27,1,43,65,4,99}; try { RandomAccessFile randf=new RandomAccessFile("temp.dat","rw"); for (int i=0; i

C语言程序填空题及答案

程序填空题 1、 #include void main() { int n,k=0; scanf("%d",&n); while( _____1_____ ) // 1)n 2) n!=0; { k++; _____2_____; n=n/10 } printf("%d\n",k); } 2、 #include #include #define f(x) x*x-5*x+sin(x) void main() { int x; float max; ______1______ // max=f(1); for(x=2;x<=10;x++) ______2______ // if(f(i)>max) max=f(i); printf("%f\n",max); } 3、 #include void main() { char c; c=getchar(); if(______1______) // c>='a' && c<'v' c=c+5; else if (c>='v' && c<='z') ______2______ //c=c-21; putchar(c); } 4、

#include void Dec2Bin(int m) { int bin[32],j; for(j=0;m!=0;j++) { bin[j]= ______1______; // m%2 m=m/2; } for(;j!=0;j--) printf("%d", ______2______ ); // bin[j-1] } void main() { int n; scanf("%d",&n); Dec2Bin(n); } 5、 #include #include void main() { int n,s=0; scanf("%d",&n); ______ 1 ______ //n=(n>0?n:-n) ; 2)n=fabs(n); while(n!=0) { ______ 2 ______ // s=s+n%10; n=n/10; } printf("%d\n",s); } 6、 /#include void swap(______1______) //int *pa , int *pb { /*交换两个数的位置*/ int temp; temp = *pa; *pa = *pb;

程序填空题

程序填空 1. 下面程序打印如图所示的杨辉三角形。阅读程序,请填空。 Private Sub Form_click() Dim a(9, 9) As Integer For i = 0 To 9 a(i, i) = 1 a(i, 0) = 1 Next i For i = 2 To 9 M = i - 1 For j = 1 To M a(i, j) = a(i - 1, j) + a(i - 1, j - 1) Next j Next i For i = 0 To 9 For j = 0 To i Print a(i, j); Next j Print Next i End Sub 2.下面的程序是进行加、减、乘、除的程序,运行界面如下图。输入两个操作数和一个运算符,根据运算符决定所进行的运算。阅读程序,请填空。 Private Sub Command1_Click()

Dim a As Integer, b As Integer a = Val(Text1.Text) b = Val(Text3.Text) '以下判断运算符 op = Text2 Select Case op Case "+" r = a + b Case "-" r = a - b Case "*" r = a * b Case "/" If b = 0 Then MsgBox "除法运算的操作的除数不能为0" Text3.Text = "" Exit Sub End If r = a / b Case Else MsgBox "运算符非法,请重新输入" Text2.Text = "" Text2.SetFocus Exit Sub End Select Text4 = r End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Text1 = "" Text2 = "" Text3 = "" Text4 = "" End Sub

程序填空和分析题

1、阅读下列程序,说明程序的功能 MOV DPTR,#DATA1 LOOP: MOV R1,#00H HERE: JZ HERE INC DPTR INC R1 SJMP LOOP (分值:4 分) 答案: .功能:统计首址为DATA1的片外RAM中的数组在出现0以前数据的个数(不包括0,且小于255)并存于R1单元中。 片内RAM首址DATA1 统计数组长度(不包括0) 在出现0以前的数组 数组长度小于255,存于CONT单元。 2、见右图,通过8031单片机的P1口接8只发光二极管,读如下程序后回答问题: ORG 0000H LJMP 0200H ORG 0200H START:MOV A,#01H LOOP: MOV P1,A LCALL D2S;调用延时2秒子程序 RL A;A循环左移 SJMP LOOP D2S:……;子程序略 RET END 1.第一次调用子程序时,哪个发光二极管亮? 2.第二次调用子程序时,哪个发光二极管亮? 3. 第八次调用子程序时,哪个发光二极管亮? 4. 第九次调用子程序时,哪个发光二极管亮?(分值:4 分) 答案: 1.L1(最上面的发光二级管)亮,即P1.0C对应的二极管亮 2.L2亮 3.L8亮(最下面的二极管) 4.L1又亮

3、8031外部扩展DAC0831芯片,见右图,输入寄存器为1B28H,DAC寄存器为1B29H,假定00H对应D/A输出0V,FFH对应D/A输出5V,阅读如下程序,回答问题 ORG 0000H LJMP START ORG 0200H START:MOV DPTR,#1B28H MOV A,#0 LP1: MOVX @DPTR,A INC DPTR MOVX @DPTR,A ACALL D1MS;调用1ms子程序 INC A CJNE A,#0FFH,LP1 NOP LP2:MOV DPTR,#1B28H MOVX @DPTR,A INC DPTR MOVX @DPTR,A ACALLL D1MS;调用1ms(1毫秒)子程序 DEC A CJNE A,#0,LP2 SJMP LP1 延时1ms(1毫秒)子程序略去 1.该程序运行后,D/A转换输出( )波形 2.波形周期为( )秒(忽略指令时间) (分值:8 分) 答案: 三角波$0.51秒 4、阅读下列程序段并回答问题。1)、该程序执行何种操作? 2)、已知初值(60H)=23H,(61H)=61H,运行程序后(62H)=? CLR C MOV A,#9AH SUBB A,60H ADD A,61H DA A MOV 62H,A (分值:5 分) 答案: 1)、该程序是单字节BCD码运算,是将(61H)—(60H)→62H 2)、(62H)=38H 5、某8031单片机时钟频率12MHz,T1为工作方式1,2毫秒定时中断,其部分初始化程序如下,请指出错误,并改正之。 MOV TMOD,#01H

相关文档