专转本C语言复习题3.docx
《专转本C语言复习题3.docx》由会员分享,可在线阅读,更多相关《专转本C语言复习题3.docx(6页珍藏版)》请在冰豆网上搜索。
专转本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]。
位置腾出来后,把输入的数放到寻找到的位置。
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,对了!#includevoidmain(){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;}elseleft=mid+1;}printf("没找到!\n");} 4.求100至200间的全部素数。#includevoidmain(){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=016.求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行)。1111211331146411510105125.打印以下图案:*************************26.打印以下图案:****************27.打印以下图案:11211232112343211234543211234565432128.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分,最高分和最低分,及格率。29.请编程一个函数实现查找如下字符串“thePeople’sRepublicofChina.”中第一个“of”单词在字符串中的位置,并返回该值;通过主函数调用该函数,并输出结果。30.请编程实现如下功能:从键盘输入一个任意正整数,求其各位数字立方和。
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,对了!
inta[10]={12,45,67,89,92,105,378,456,897,900};
intb,i,left=0,right=9,mid;
while(left<=right)
mid=(left+right)/2;
if(b==a[mid])
printf("%d在数组的第%d位",b,mid+1);
return;
elseif(b{right=mid-1;}elseleft=mid+1;}printf("没找到!\n");} 4.求100至200间的全部素数。#includevoidmain(){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=016.求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行)。1111211331146411510105125.打印以下图案:*************************26.打印以下图案:****************27.打印以下图案:11211232112343211234543211234565432128.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分,最高分和最低分,及格率。29.请编程一个函数实现查找如下字符串“thePeople’sRepublicofChina.”中第一个“of”单词在字符串中的位置,并返回该值;通过主函数调用该函数,并输出结果。30.请编程实现如下功能:从键盘输入一个任意正整数,求其各位数字立方和。
right=mid-1;
else
left=mid+1;
printf("没找到!
\n");
4.求100至200间的全部素数。
inti,j;
for(i=100;i<=200;i++)
for(j=2;j<=i-1;j++)
if(i%j==0)
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.打印以下图案:
12321
1234321
123454321
12345654321
28.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分,最高分和最低分,及格率。
29.请编程一个函数实现查找如下字符串“thePeople’sRepublicofChina.”中第一个“of”单词在字符串中的位置,并返回该值;通过主函数调用该函数,并输出结果。
30.请编程实现如下功能:
从键盘输入一个任意正整数,求其各位数字立方和。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1