专转本C语言复习题3.docx

上传人:b****5 文档编号:6112619 上传时间:2023-01-03 格式:DOCX 页数:6 大小:20.64KB
下载 相关 举报
专转本C语言复习题3.docx_第1页
第1页 / 共6页
专转本C语言复习题3.docx_第2页
第2页 / 共6页
专转本C语言复习题3.docx_第3页
第3页 / 共6页
专转本C语言复习题3.docx_第4页
第4页 / 共6页
专转本C语言复习题3.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

专转本C语言复习题3.docx

《专转本C语言复习题3.docx》由会员分享,可在线阅读,更多相关《专转本C语言复习题3.docx(6页珍藏版)》请在冰豆网上搜索。

专转本C语言复习题3.docx

专转本C语言复习题3

专转本C语言复习题3

本文给出的C程序代码,全部在VC6中测试,运行结果正确,大家可以放心使用----罗军2011-2-27。

1.用

公式求π。

试题分析:

⏹本题型经常考,大家先把每一项的计算方法写出来,大家注意三个要素:

一是分子的变化规律,二是分母的变化规律,三是每个数的正负号的变化规律。

分析完成后,就成了数的累加。

⏹分析右边的式子,每个数的规律:

⏹分子全为1,

⏹分母分别为1,3,5,7,9。

如果循环变量i从0开始,每次i++,那么分母为2*i+1。

⏹每一项的符号是正负相间,这种有较好的解决办法,用个变量flag=1;每次循环时,flag=flag*(-1)。

⏹因此每项的通项公式,可写为1.0/(2*i+1)*flag

⏹这种无穷级数,可以无限制的循环下去,因此,题目一般会给出退出条件,即最后一项的值小于多少时退出,如果没有指明,可以当绝对值小于0.000001时退出循环。

如果用for循环做,本题循环执行条件应为

(1.0/(2*i+1)>0.000001),即小于float的表示精度,可认为已经计算到最精确的值了。

大家可以测试,这种方式,其结果为3.141594,非常接近了,如果用double型,其循环条件执行条件应变为>0.000000000001,可以把精度扩展到小数点后12位。

#include

voidmain()

{

floatpi=0;

inti,flag=1;

for(i=0;1.0/(2*i+1)>=0.000001;i++)

{

pi=pi+1.0/(2*i+1)*flag;

flag=flag*-1;

}

pi=pi*4;

printf("pi=%f",pi);

}

 

2.已有一个排好序的数组,要求输入一个数后,按原来的规律将它插入数组中。

试题分析:

先把这种抽象的题,具体化后分析,如一个排好序的数组为12567892105,这时候再输入一个数,这个数假如是89,大家看它的放到哪儿去?

其方法是:

先和第一个元素12比较,比12大,再和56比较,还是比56大,再和78比较,还大,再和92比较,比92小,这时候找到它的位置了,就应该让92及其后的数往后面挪一位。

把位置空出来后,再放输入的89。

它分为两个过程,一是寻找位置的过程,这可以用一个for循环,逐个取数组元素来比较,直接找到比当前输入的数大的位置停下来,比如是i。

二是把a[i]及后面的数往后挪的问题,可以用一个for循环,从最后一个数开始,把数往后挪一位,即a[j+1]=a[j]。

位置腾出来后,把输入的数放到寻找到的位置。

 

#include

voidmain()

{

inta[6]={12,45,67,89,92};

intb,i,j;

scanf("%d",&b);

//寻找插入位置;

for(i=0;i<5;i++)//此处i<5,,是因为数组中只有5个数。

if(b

{

break;

}

//如果是中途退出,就把后面的数,往后挪一位。

if(i<5)

{

for(j=5;j>=i;j--)

a[j]=a[j-1];

}

a[i]=b;

//输出插入后的数组;

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

printf("%d\t",a[i]);

}

 

3.

已有一个排好序的数组,要求输入一个数后,请快速查找其位置。

分析:

用折半查找法最快。

//此方法和中央二台猜价格的方法相似。

比如1000低了,2000,高了,(1000+2000)/2=1500高了,(1000+1500)/2=1250,对了!

#include

voidmain()

{

inta[10]={12,45,67,89,92,105,378,456,897,900};

intb,i,left=0,right=9,mid;

scanf("%d",&b);

while(left<=right)

{

mid=(left+right)/2;

if(b==a[mid])

{

printf("%d在数组的第%d位",b,mid+1);

return;

}

elseif(b

{

right=mid-1;

}

else

left=mid+1;

}

printf("没找到!

\n");

}

 

4.求100至200间的全部素数。

#include

voidmain()

{

inti,j;

for(i=100;i<=200;i++)

{

for(j=2;j<=i-1;j++)

if(i%j==0)

break;

if(j==i)

printf("%d是素数!

\n",i);

}

}

5.把一个整数按大小顺序插入已排好序的数组中。

(同2题)

 

6.在二维数组a中选出各行最大的元素组成一个一维数组b。

7.输入五个国家的名称按字母顺序排列输出。

8.输入两个正整数m和n,求其最大公约数和最小公倍数。

(辗转相除法)

9.编程计算100至999之间有多少个数,其各位数字之和是5。

例如:

122、131是满足要求的数的两个例子。

(穷举法)

10.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

例如,153是一水仙花数,因为153=13+53+33。

11.求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。

例如:

2+22+222+2222+22222(此时n=5),n由键盘输入。

12.求100~200间的全部素数。

13.定义一个2*3矩阵,输入/输出数值。

14.求一个3*3矩阵对角线元素之和。

15.用二分法求下面方程在(-10,10)之间的根。

2x3-4x2+3x-6=0

16.求Fibonacci数列前40个数。

这个数列有如下特点:

第1,2两个数为1,1。

从第3个数开始,该数是其前面两个数之和。

即:

F1=1(n=1)

F2=1(n=2)

Fn=Fn-1+Fn-2(n>=3)

17.用起泡法对10个数排序(由小到大)。

18.用选择法对输入的10个整数排序。

19.写程序,判断某一年是否闰年。

20.将一个二维数组行和列元素互换,存到另一个二维数组中。

21.有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

22.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

23.用递归方法求n!

24.打印出以下的杨辉三角形(要求打印出10行)。

1

11

121

1331

14641

15101051

25.打印以下图案:

*****

*****

*****

*****

*****

26.打印以下图案:

*

**

***

****

***

**

*

27.打印以下图案:

1

121

12321

1234321

123454321

12345654321

28.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分,最高分和最低分,及格率。

29.请编程一个函数实现查找如下字符串“thePeople’sRepublicofChina.”中第一个“of”单词在字符串中的位置,并返回该值;通过主函数调用该函数,并输出结果。

30.请编程实现如下功能:

从键盘输入一个任意正整数,求其各位数字立方和。

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

当前位置:首页 > 经管营销 > 销售营销

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

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