程序设计基础习题.docx

上传人:b****0 文档编号:17779906 上传时间:2023-08-03 格式:DOCX 页数:30 大小:39.42KB
下载 相关 举报
程序设计基础习题.docx_第1页
第1页 / 共30页
程序设计基础习题.docx_第2页
第2页 / 共30页
程序设计基础习题.docx_第3页
第3页 / 共30页
程序设计基础习题.docx_第4页
第4页 / 共30页
程序设计基础习题.docx_第5页
第5页 / 共30页
程序设计基础习题.docx_第6页
第6页 / 共30页
程序设计基础习题.docx_第7页
第7页 / 共30页
程序设计基础习题.docx_第8页
第8页 / 共30页
程序设计基础习题.docx_第9页
第9页 / 共30页
程序设计基础习题.docx_第10页
第10页 / 共30页
程序设计基础习题.docx_第11页
第11页 / 共30页
程序设计基础习题.docx_第12页
第12页 / 共30页
程序设计基础习题.docx_第13页
第13页 / 共30页
程序设计基础习题.docx_第14页
第14页 / 共30页
程序设计基础习题.docx_第15页
第15页 / 共30页
程序设计基础习题.docx_第16页
第16页 / 共30页
程序设计基础习题.docx_第17页
第17页 / 共30页
程序设计基础习题.docx_第18页
第18页 / 共30页
程序设计基础习题.docx_第19页
第19页 / 共30页
程序设计基础习题.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序设计基础习题.docx

《程序设计基础习题.docx》由会员分享,可在线阅读,更多相关《程序设计基础习题.docx(30页珍藏版)》请在冰点文库上搜索。

程序设计基础习题.docx

程序设计基础习题

习题7.8

程序,从键盘输入一个正整数,如果该数为素数,则输出该素数,否则编制一个C1.

)。

除去1与自身输出该数的所有因子(N,然后计算并输出编制一个C程序,从键盘输入一个正整数2.

||N12S=2?

22?

?

1?

最后计算并输出111

1?

K1?

?

?

?

1?

)(T=

23KK?

S的整数部分。

其中

3.编制一个C程序,计算并输出多项式的值

0.5(0.5?

1)0.5(0.5?

1)(0.5?

2)0.5(0.5?

1)(0.5?

n?

1)n23x0.5x?

?

x?

x?

?

S1?

n

2!

3!

n!

的值,直到|S-S|<0.000001为止。

其中x从键盘输入。

n-1n4.编制一个C程序,计算下列级数和:

s=1+(2/1)+(3/2)+(5/3)+(8/5)+(13/8)+…+(a/a)n-1nn其中n≥1,由键盘输入;s=1。

15.编制一个C程序,计算并输出下列级数之和:

23nxxxx?

?

?

?

x?

e?

1

2!

3!

n!

其中n与x从键盘输入。

6.编制一个C程序,输出能写成两个数平方之和的所有三位数。

7.如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。

例如,6的因子为1、2、3,且1+2+3=6,即6是一个“完数”。

编制一个C程序,计算并输出1000以内的所有“完数”之和。

8.编制一个C程序,从键盘输入30个实数,分别计算并输出以下5个量:

所有正数之和,所有负数之和,所有数的绝对值之和,正数的个数,负数的个数。

9.100元钱买100只鸡,母鸡3元/只,公鸡2元/只,小鸡0.5元/只。

编制一个C程序,制定买鸡方案。

10.设A,B,C,D,E五人,每人额头上贴了一张或黑或白的纸。

五人对坐,每人都可以看到其他人额头上的纸的颜色,但都不知道自己额头上的纸的颜色。

五人相互观察后开始说话:

A说:

我看见有三人额头上贴的是白纸,一人额头上贴的是黑纸。

B说:

我看见其他四人额头上贴的都是黑纸。

C说:

我看见有一人额头上贴的是白纸,其他三人额头上贴的是黑纸。

D说:

我看见四人额头上贴的都是白纸。

E什么也没说。

现在已知额头上贴黑纸的人说的都是真话,额头上贴白纸的人说的都是假话。

编制一个程序,确定这五人中谁的额头上贴白纸,谁的额头上贴黑纸?

C.

,计算并输个素数(去掉重复的素数)10个素数与最大的1011.寻找1000以内最小的

个素数之和。

出这20具体要求:

画出计算过程的结构化流程图。

(1)

个最小素数与1000以内不够10虽然

(2)1000以内素数个数超过20个,但仍要求考虑

个素数与最大的10个素数有重复的情况。

10个最大素数,以及最小的10(3)输出要有文字说明。

输出形式为

10,素数2,…,素数zuixiaosushu:

素数1

102,…素数1:

素数,素数zuidasushu

和的具体值sushuzhihe:

在程序内部加必要的注释(至少有三处)。

(4)

方法说明:

k中到0,然后对2对于某个(从小到大与从大到小)自然数k,开始时置标志flag为

,表示不必再对别的自然数进行为1kj是的因子,就置flag的自然数j进行检测,当发现k中的所有自然数都不是k不是素数了,只有当2的因到检测,因为此时已经可以确定k子(即flag保持为0)时,说明k为素数,输出k,并进行累加。

12.A、B、C、D、E五人分苹果。

A将所有的苹果分为五份,将多余的一个苹果吃掉后再拿走自己的一份苹果;B将剩下的苹果分为五份,将多余的一个苹果吃掉后再拿走自己的一份苹果;C、D、E依次按同样的方法,将剩下的苹果分为五份,吃掉多余的一个苹果后拿走自己的一份苹果。

编程计算原来至少有多少个苹果?

A、B、C、D、E各得到多少个苹果?

具体要求:

(1)画出计算过程的结构化流程图。

(2)输出要有文字说明。

(3)在程序内部加必要的注释(至少有三处)。

方法说明:

采用逐步试探的方法。

设当前试探的苹果数为n。

如果n满足下列条件:

n-1(多余的一个被吃掉)后要能被5整除;

拿走一份后,余下的四份苹果数为4*(n-1)/5。

按上述策略连续进行五次分配,如果每次分配时均满足其中的条件,则试探的n即为原来的苹果数x。

为了第一次能分配,试探从6开始。

根据分配策略,最后A,B,C,D,E五人得到的苹果数(不包括吃掉的一个苹果)可以按如下公式依次计算:

a=(x-1)/5

b=(4*a-1)/5

c=(4*b-1)/5

d=(4*c-1)/5

e=(4*d-1)/5

13.某单位要在A,B,C,D,E,F六人中选派若干人去执行一项任务,选人的条件如下:

(1)若C不去,则B也不去;

(2)C和D两人中去一个;

(3)D和E要么都去,要么都不去;

(4)A,B,F三人中要去两个;

(5)C和F不能一起去:

(6)E和F两人中至少去一个。

问应该选哪几个人去?

具体要求:

(1)画出计算过程的结构化流程图。

(2)输出要有文字说明。

(3)在程序内部加必要的注释(至少有三处)。

8.5习题

1.编写一个函数sabc(),根据给定的三角形三条边长a,b,c,函数返回三角形的面积。

2.编写一个计算阶乘值的函数p()(该函数为双精度实型);再编写一个主函数,从键m!

n)。

,计算的值(即求盘输入两个正整数m与n(m≥n),通过调用函数p()Am

(m?

n)!

3.编写一个函数,计算并返回给定正整数m与n的最大公约数。

4.编写一个主函数,调用例8.3中的函数sushu(),输出小于1000的最大五个素数。

5.编写一个主函数,调用例8.3中的函数sushu(),验证6到1000中的所有偶数均能表示成两个素数之和。

6.编写一个递归函数,计算并返回菲波那契(Fibonacci)数列中第n项的值。

菲波那契数列的定义如下:

Fib

(1)=1,Fib

(2)=1

Fib(n)=Fib(n-1)+Fib(n-2)

7.编写一个递归函数,计算并返回阿克玛(Ackermann)函数值。

阿克玛函数的定义如下:

x?

1n?

0?

?

n?

1x且y?

0?

?

0y?

?

2且0n?

Ack(n,x,y)?

n?

3且1y?

0?

?

n2?

4且y?

0?

n?

Ack(n1,Ack?

0且y),,xy?

1x)?

0,(n?

其中n,x,y均为非负整数。

8.编写计算n!

的递归函数。

9.编写一个递归函数,其功能是将一个正整数n转换成字符串(要求各字符之间用一个空格分隔)输出。

例如,输入的正整数为735,应输出字符串“735”。

其中正整数在主函数中从键盘输入,要求判断其输入的合理性。

10.计算并输出500以内的所有“亲密数”对,并输出所有“完数”之和。

具体要求:

(1)编写一个函数facsum(n),返回给定正整数n的所有因子(包括1但不包括自身)之和。

以内的所有“亲密500,寻找并输出facsum(n)中的函数

(1)编写一个主函数,调用

(2)

数”对以及计算所有“完数”之和。

(3)分别画出函数facsum(n)和主函数计算过程的结构化流程图。

(4)在输出每对“亲密数”时,要求小数在前、大数在后,并去掉重复的数对。

例如,220与284是一对“亲密数”,而284与220也是一对“亲密数”,此时只要求输出220与284这对“亲密数”。

(5)输出要有文字说明(英文或汉语拼音)。

输出时每对“亲密数”用一对圆括号括起来,两数之间用逗号分隔,且所有的“亲密数”对占一行。

输出形式为

各对“亲密数”

“完数”之和

(6)在程序内部加必要的注释(至少有三处)。

(7)将两个函数分别放在两个文件中进行编译、连接并运行。

(8)将两个函数放在一个文件中进行编译、连接并运行。

方法说明:

如果自然数M的所有因子(包括1但不包括自身,下同)之和为N,而N的所有因子之和为M,则称M与N为一对“亲密数”。

例如,6的所有因子之和为1+2+3=6,因此,6与它自身构成一对“亲密数”;又如,220的所有因子之和为1+2+4+5+10+11+20+22+44+55+110=284,而284的所有因子之和为1+2+4+71+142=220,因此,220与284为一对“亲密数”。

如果一个自然数的所有因子之和恰好等于它自身,则称该自然数为“完数”。

例如,6不仅与它自身构成一对“亲密数”,且6是一个“完数”。

?

k!

的值。

计算并输出11.

?

具体要求:

(1)编写一个计算k!

的递归函数,其函数名返回k!

的值。

(2)编写一个主函数,首先从键盘输入m和n的值(要求n≥m≥0),然后调用

(1)中的?

k!

的值。

函数计算

?

(3)在计算k!

的递归函数中,要检查形参k的合理性,当k<0时,应输出出错信息,并返回0值。

(4)在主函数中应检查从键盘输入的数据的合理性,对于不合理的输入,应输出出错信息,并不再调用计算。

(5)分别输入(m,n)=(-3,7),(0,0),(1,7),(9,13),(9,4)运行你的程序。

3.利用变步长梯形求积法计算定积分。

具体要求:

(1)编写一个函数st(a,b,eps)(要求该函数放在独立的文件中),其功能是利用变步长梯形求积法计算定积分

b?

dxx?

)f(sa其中eps为精度要求。

要求画出该函数处理的结构化流程图。

(2)编写一个主函数以及计算被积函数值的函数fun(x),在主函数中调用

(1)中的函数st(a,

,计算并输出下列积分值b,eps).

18?

?

sdx

x4。

精度要求为eps=0.0001要求主函数与函数fun(x)放在同一个文件中。

中的函数(3)编写另一个主函数以及计算被积函数值的函数fun(x),在主函数中调用

(1)

st(a,b,eps),计算并输出下列积分值11?

dxs?

21x?

1?

精度要求为eps=0.00001。

同样要求主函数与函数fun(x)放在同一个文件中。

方法说明:

变步长梯形求积法的基本步骤如下:

利用梯形公式计算积分。

即取①h=b-a,n=1则有n?

1h?

)]xf()T?

?

[f(x1kkn?

20?

k其中x=a+kh。

k②将求积区间再二等分一次(即由原来的n等分变成2n等分),在每一个小区间内仍利用梯形公式计算。

即有

n?

1f(x)?

f(x)f(x)?

f(x)h?

1?

0.k?

0.55k?

kk][?

?

T

n22220k?

n?

n?

11hh?

?

=)f?

(x?

[f(x)f(x)]50.kkk?

1?

240k?

0?

kn?

1h1?

=)(T?

xf5?

0.nk

220k?

③判断二等分前后两次的积分值之差的绝对值是否小于所规定的误差。

若条件

|T-T|

n2n成立,则二等分后的积分值T即为结果;否则作如下处理:

2nh=h/2,n=2*n,T=T2nn然后重复②。

9.6习题

1.编写一个C程序,从键盘为一个长度为10的整型一维数组输入数据。

最后按逆序输出数组中的元素,并输出数组中最大元素的下标值。

2.编写一个C程序,将两个长度相同的一维数组中各下标相同的对应元素相乘,并将结果存放到另一个一维数组中。

3.编写一个C程序,从键盘为5×5的一个整型二维数组输入数据。

最后输出该二维数组中的对角线元素。

4.编写一个C程序,从键盘为4×6的一个整型二维数组输入数据。

最后输出该二维数组中最小元素的行下标与列下标。

5.从键盘输入5行5列二维整型数组的数据。

编制一个函数,计算二维数组中每一行中的最小值,并将此最小值顺序存放在一个长度为5的一维数组中。

最后按矩阵形式输出二维数组中的各元素,且各行中的最小值(即一维数组中的元素)输出到相应行的右边。

6.编写一个C函数,将一个一维数组中的元素逆转。

逆转是指将数组中的第一个元素与最后一个元素进行交换,第二个元素与倒数第二个元素进行交换,以此类推,直到数组的中间一个元素为止。

7.编写一个C函数,将矩阵进行转置后输出。

8.设有两个整型一维有序数组(即数组中的元素按从小到大进行排列),编写一个C函数,将这两个有序数组合并存放到另一个一维数组中,并保证合并后的一维数组也是有序的。

9.编制一个C程序,从键盘输入一个由5个字符组成的单词,然后判断该单词是否是China。

要求给出判断结果的提示信息。

10.编写一个C程序,从键盘输入50个字符,并统计其中英文字母(不分大小写)与数字字符的个数。

11.中国有句俗语叫“三天打鱼,两天晒网”。

现某人从2000年1月1日起开始“三天打鱼,两天晒网”,请编程判断此人在以后的某年某月某日是在“打鱼”还是在“晒网”。

其中以后的某年某月某日从键盘输入。

12.一辆汽车在开始出发前其里程表上的读数是一个对称数95859,后匀速行驶两小时后,发现里程表上是一个新的对称数。

问该新的对称数是多少?

汽车的速度是多少?

注:

所谓对称数是指从左向右读与从右向左读完全一样。

13.计算多项式函数

65432+0.5x-3.7-0.8xP(x)=1.5x-6.5x+3.2x+1.4x6在x=-2.3,-1.1,-0.6,0.8,2.1,3.6处的函数值。

具体要求:

(1)编写一个函数,其功能是:

给定一个x值,返回多项式函数值。

(2)编写一个主函数,定义两个一维数组,分别存放多项式的系数和需要计算的各x值。

然后在主函数中调用

(1)中的函数逐个计算各x值时的多项式值。

(3)在主函数中的输出形式为

P(x值)=具体的多项式值

方法说明:

设多项式为

nn-1+…x+aP(x)=axx+a+a01nnn-1可以表述成如下嵌套形式:

P(x)=(…((ax+a)x+a)x+…+a)x+a0

n-2nn1n-1利用上式的特殊结构,从里往外一层一层地进行计算,即按如下递推关系进行计算:

u=an

u=ux+a,k=n-1,…,1,0

k最后计算得到的u即是多项式的值P(x)。

n14.产生100个0~1之间均匀分布的随机数,并将这些随机数按非递减顺序进行排序,存放到一个一维数组中。

最后输出该有序数组。

具体要求:

(1)在产生随机数的过程中,每产生一个随机数就将它插入到前面已经有序的数组中。

(2)输出时要求每行输出10个数据,并上下对齐。

方法说明:

产生随机数p(k=1,2,…,100)的公式为k16)2=mod(2053r+13849,rk-1k16/2=rpkk其中初值r=1。

0解决本问题的流程图如图9.4所示。

定义数a[100]

r=1,k=0

k<100

1)r=mod(2053r+13849,

16p=r/

j=k-1

0p

a[j+1]=a[j]

j=j-1

a[j+1]=p

k=k+1

输出a[k],k=0,1,…,99

9.4实验练习2的流程图图

15.利用高斯(Gauss)消去法求解线性代数方程组。

具体要求:

(1)编写一个用高斯(列选主元)消去法求解给定线性代数方程组的函数

gauss(a,b,x)

其中a为系数矩阵,b为常数向量,x为解向量。

(2)编写一个主函数,调用

(1)中的函数求解下列线性代数方程组:

1.1161x?

0.1254x?

0.1397x?

0.1490x?

1.5471?

4321?

?

1.1871x.6471.?

1.1675x?

01768x?

0x0.1582?

4231?

8471.?

.2671x11?

23680.x?

0.2471x0.2568x?

?

4321?

7471x2071?

1.2168x.?

2271x1?

0.?

.01968x0.?

4123其中系数矩阵与常数向量利用初始化赋初值。

(3)在主函数中要求输出系数矩阵与常数向量。

输出形式为

MATA=

1.11610.12540.13970.1490

0.15821.16750.17680.1871

0.23680.24710.25681.2671

0.19680.20711.21680.2271

MATB=

1.7471

1.84711.64711.5471

(4)结果输出形式为

x

(1)=具体值

x

(2)=具体值

x(3)=具体值

x(4)=具体值

(5)在函数gauss()中至少要求有五处加注释。

方法说明:

设线性代数方程组为AX=B。

高斯消去法求解线性代数方程组的步骤如下:

①对于k从1到n-1,作如下操作:

进行列选主元

a=a/a,j=k+1,…,nkkkjkj

b=b/akk

kk这一步称为归一化。

然后作

a=a-aa,i=k+1,…,n;j=k+1,…,nkjikijijb=b-ab,i=k+1,…,nkiiki这一步称为消去。

②进行回代

x=b/annnnn?

x?

ax?

b,i=n-1,…,2,1

jiiij1ij?

?

列选主元的基本思想是在变换到第k步时,从第k列的a以下(包括a)的所有元素kkkk中选出绝对值最大者,然后通过行交换将它交换到a的位置上。

由于交换系数矩阵中的两kk行(包括交换常数向量中的两个相应元素),只相当于两个方程的位置被交换了,因此,列选主元不影响求解结果。

最后需要说明的是,在C语言中,数组的下标是从0开始的,不是从1开始的。

另外,注意在函数gauss()中要将二维数组的下标转换成一维数组的下标。

10.8习题

1.阅读下列C程序:

(1)

#include

main()

{inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};

int(*ptr)[3]=a,*p=a[0];

printf(%d\n,*(p+5)+*(*(ptr+1)+2));

}

输出结果为()。

(2)

#include

main()

{inta[5]={2,4,6,8,10};

int*p=a,**k,z;

k=&p;z=*p;p=p+1;z=z+**k;

printf(%d\n,z);

}

输出结果为()。

(3)

#include

voidast(intx,inty,int*cp,int*dp)

{*cp=x+y;*dp=x-y;

return;

}

main()

{inta,b,c,d;

a=4;b=3;

ast(a,b,&c,&d);

printf(%d\n,c+d);

}

输出结果为()。

2.编写一个C程序,从键盘输入两个字符串,然后按先小后大的顺序显示输出。

3.编写一个C程序,利用指针数组,显示输出如下信息:

File

Edit

Write

Read

Exit

4.编写函数voiddisp(char*s,intn),将在s指向的字符串中连续显示输出n个字符,若字符串中不够n个字符,则输出到字符串结束符为止。

再编写一个主函数,从键盘输入一个字符串,调用函数disp(),将该字符串中的第4到第10个之间的字符显示输出。

5.编写一个函数,功能是计算给定字符串的长度。

再编写一个主函数调用该函数来计算字符串的长度,其中字符串在执行程序时的命令行中作为参数输入。

6.利用指针数组实现矩阵相乘C=AB。

其中矩阵相乘函数为通用的,在主函数中对矩阵A与B进行初始化,并显示输出矩阵A、B与乘积矩阵C。

7.编写一个C函数,将一个字符串连接到另一个字符串的后面。

8.编写一个C函数,将两个有序字符串(其中字符按ASCII码从小到大排列)合并到另一个有序字符串中,要求合并后的字符串仍是有序的。

9.编写一个C程序,从键盘输入一个月份号,输出与之对应的英文名称。

例如,输入“5”,则输出“MAY”。

要求用指针数组处理。

10.编写一个C函数intstr_cmp(char*str1,char*str2),实现两个字符串的比较(即实现strcmp(str1,str2)的功能)。

11.编写一个主函数,其功能是将执行该程序时所输入的命令行中所有的字符串显示输出。

z。

cos(z)、余弦sin(z)以及正弦ln(z)、对数e的指数z=x+jy计算给定复数12.

具体要求:

分别编写计算给定复数的指数、对数、正弦和余弦的四个函数。

这四个函数的形参

(1)

并且,在每一个函数中v以及计算结果的实部u、虚部分别是给定复数的实部x、虚部y应允许存放计算结果的变量与给定复数的变量具有相同的存储地址。

再首先调用计算复数指数的函数计算并输出复数z=2+j3的指数,

(2)编写一个主函数,然后调用计算复数正弦的函调用复数对数的函数计算并输出该结果(为一个复数)的对数,最后调用计算复数余弦的函数计算并输出新结数计算并输出新结果(为一个复数)的正弦,果(为一个复数)的余弦。

为u与v(3)在主函数中输出结果的形式为(其中x与y为复数实部与虚部的具体值,

计算结果中实部与虚部的具体值)exp(x+jy)=u+jv

ln(x+jy)=u+jv

sin(x+jy)=u+jv

cos(x+jy)=u+jv

方法说明:

z=x+jy。

则设给定的复数为

z的指数为

(1)复数

x+jy

z=ew=u+jv=e

x(cos(y)+jsin(y))=e

xxsin(y)cos(y),v=e即u=e。

z的对数为

(2)复数

w=u+jv=ln(z)=ln(x+jy)

22+jArctg(y/x)=lnyx?

22,v=Arctg(y/x)u=ln。

即yx?

(3)复数z的正弦为

w=u+jv=sin(z)=sin(x+jy)

=sin(x)cos(jy)+cos(x)sin(jy)

y-yy-y)/2=sin(x)(e)/2+jcos(x)(e+e-e

y-yy-y)/2。

-e)/2,即u=sin(x)(ev=cos(x)(e+e

(4)复数z的余弦为

w=u+jv=cos(z)=cos(x+jy)

=cos(x)cos

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

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2