c语言参考题目-填空题

更新时间:2024-06-08 18:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

c语言参考题目---填空题

1. 代码填空

如果只提供加减乘除的基本运算能力,你能实现求平方根吗?可以的!先随便猜一个根,用它试除目标数字,如果结果恰好等于所猜的数,则问题解决。否则用结果与所猜的数字的平均值再去试除….

假设待开方的数字为 double a;

double t = a / 2 ; double t2; for(;;){ }

t2 = a / t;

if(fabs(t-t2)<0.001) break; t = ___(t+t2)/2______;

2. 代码填空

下列代码把一个串p复制到新的位置q。请填写缺少的语句;

char* p = \

char* q = (char*)malloc(strlen(p)+1);

for(int i=0;____i< strlen(p)+1_________; i++) q[i] = p[i];

3. 代码填空

“考拉兹猜想”(又称3n+1猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想) 和“哥德巴赫猜想”一样目前还没有用数学方法证明其完全成立。在1930年,德国汉堡大学的学生考拉兹,曾经研究过这个猜想,因而得名。在1960年,日本人角谷静夫也研究过这个猜想。

该猜想的叙述十分简单:从任何一个正整数n出发,若是偶数就除以2,若是奇数就乘3再加1,如此继续下去,经过有限步骤,总能得到1。例如:

17-52-26-13-40-20-10-5-16-8-4-2-1 该猜想虽然没有完全证明,但用计算机验证有限范围的数字却十分容易。以下是验证的代码,请补全缺少的部分。

for(int n=2; n<=10000; n++) {

int m = n; for(;;) {

if(____m%2==0________)

m = m / 2; else

第 1/9 页

};

}

{ }

m = m * 3 + 1;

if( m == 1 )

printf(\break;

4. 代码填空

1+3 = 4, 1+3+5 = 9, 1+3+5+7 = 16 它们的结果都是平方数。这是偶然的巧合吗?下面代码验证对于累加至1000以内的情况都成立。试完善之。

int n = 1;

for(int i=1; i<1000/2; i++) { }

n += 2 * i + 1;

int m = ___i+1 ___________; if( m * m != n) { }

printf(\加至%d 时不成立!\\n\break;

5. 代码填空

给定一个串,例如“abcdefg”,我们希望求出它的反转串,即:“gfedcba”。下列代码实现反转,请补充空白的部分。

char p[] = \

for(int i=0;___i<(strlen(p)/2)_______________; i++) { }

char t = p[i];

p[i] = p[strlen(p)-1-i]; p[strlen(p)-1-i] = t;

6. 代码填空

第 2/9 页

生活中人们往往靠直觉来进行粗略的判断,但有的时候直觉往往很不可靠。比如:如果你们班有30名同学,那么出现同一天生日的概率有多大呢?你可能不相信,这个概率高达70%左右。

以下的程序就是用计算机随机模拟,再统计结果。仔细阅读代码,补全空白的部分。

#define N 30 ......

printf(\int a[N];

srand( time( NULL ) ); int n = 0;

for(int k=0; k<10000; k++) { }

for(int i=0; i

a[i] = rand() % 365;

bool tag = false; // 假设没有相同 for(i=1; i

if(tag) n++;

for(int j=0; j

____if(tag) break________________;

if(a[i]==a[j]) { }

tag = true; break;

7. 代码填空

假设a,b,c是3个互不相等的整数。下列代码取出它们中居中的数值,记录在m中。其中的swap()函数可以交换两个变量的值。请完善代码。

if(a>b) swap(&a, &b); if(b>c) swap(&b, &c);

if(a>b)_swap(&a,&b)_____________________; int m = b;

8. 代码填空

第 3/9 页

给定一个串,例如“aabbbcddddkkkmmmmaakkkk”我们希望去掉连续的重复字母,得出串:“abcdkmak”,下面代码实现了该功能,请完善之。

printf(\char* q = p; int i=0; for(;*q;) { }

buf[i] = '\\0';

if(____i==0 _______|| *q != *(q-1)) { } q++;

buf[i++] = *q;

char* p = \char buf[100];

9. 代码填空

口袋中有5只红球,4只白球。随机从口袋中取出3个球,则取出1个红球2个白球的概率是多大?类似这样的数学问题,在计算的时候往往十分复杂。但如果通过计算机模拟这个过程,比如进行100000次取球模拟,统计一下指定情况出现的次数对计算机来说是方便且快速的。同样,这个原理也适用于像天气预报这样复杂的系统过程。

以下的程序就是用于解决取球概率问题的。仔细阅读代码,补全空白的部分。

for(int j=0; j<3; j++) {

int k = rand() % (9-j); if(x[k]==1)

a++; b++; else

int n = 0;

for(int i=0; i<100000; i++) {

char x[] = {1, 1, 1, 1, 1, 2, 2, 2, 2}; int a = 0; // 取到的红球的数目 int b = 0; // 取到的白球的数目 srand( (unsigned)time( NULL ) );

第 4/9 页

}

}

___x[k]=x[9-j-1]____if(x[k]==1)_x[k]=2;_______________;

if(a==1 && b==2) n++;

printf(\概率=%f\\n\

10. 代码填空

下列代码把一个二进制的串转换为整数。请填写缺少的语句;

char* p = \ int n = 0;

for(int i=0;i

n = __n+((p[strlen(p)-1-i])=='1'?pow(2,i):0)____ ______; // n+(*p++-‘\\0’)*(2^(strlen(p)-i-1)) //n*2+(p[i]-‘0’) }

printf(\

11. 代码填空

数列:Sn=1+ 1/2 + 1/3 + … 1/n 被称为调和数列,它“刚好”是不收敛的。这个数列和增长的速度是惊人缓慢的。下列代码求出n至少为多大,才能保证Sn > m。试完善之。

double m = 20; double x = 1; int i = 2; while(x

printf(\

x += __1.00/(i++)____________;

12. 代码填空

仍一枚硬币,正面和反面向上的概率都是0.5,但多次仍硬币,总会出现连续多次同一面的情况。我们把每次的实验结果记录下来,形成一个串(0,1分别代表正面、反面向上)。

第 5/9 页

下面的程序统计出0或1最大连续出现的次数。试完善之。

char* p = \ int len = strlen(p); int max_k = 1; int k = 1;

for(int i=1; i

printf(\

if(p[i]==p[i-1]) { }

__max_k=max_k>k?max_k:k_______________________; k = 1; k++; else

13. 代码填空

形如:“abccba”,“abcba”的串称为回文串,下列代码判断一个串是否为回文串。请补充空白的部分。

char buf[] = \ int x = 1;

for(int i=0; i

if(_____buf[i]!=buf[strlen(buf)-i-1]______________) { }

x = 0; break;

printf(\是\否\

14. 代码填空

计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域。但有些情况下,也可以利用计算机计算速度快的特点通过巧妙的推理来解决问题。下列的程序计算了m个A,n个B可以组合成多少个不同排列的问题。请完善它。

int f(int m, int n) { }

if(m==0 || n==0) return 1;

return ____ (m+n)!/(m!)/(n!) ___________________; f(m-1,n)+f(n-1,m)

第 6/9 页

15. 代码填空

因数分解是十分基本的数学运算,应用广泛。下面的程序对整数n(n>1)进行因数分解。比如,n=60, 则输出:2 3 5 2。请补充缺失的部分。

void f(int n) { }

for(int i=2; i

if(n>1) printf(\

while(n%(i)==0)____________________ { }

printf(\n = n / i;

16. 代码填空

下列代码实现把一个串“轮换”拷贝。既是:把\拷贝为:\。请补充缺少的语句。

char* p = \

char* q = (char*)malloc(strlen(p)+1);

for(int i=0, int len=strlen(p); i

q[i] = p[i+1]; q[len-1] = p[0];

____q[len]=’\\0’ _________________; printf(\

17. 代码填空

穷举法是计算机解决某些问题的重要手段。为了估算可能性的数目,经常需要计算组合或排列的数目,下面的代码输出从m个物体中任取出n个物体的不同方案的数目(此处假设:m, n>1 且 m>=n)。试完善之。

int f(int m, int n) {

int a = 1; int m1 = m;

_while(m1>1)_____________ a *= m1--;

第 7/9 页

}

int b = 1; while(n>1)

b *= n--; return a / b;

18. 代码填空

任意给定一个4位数(不能所有位都相同),比如:3278,重新组合出最大数:8723,再重新组合出最小数:2378,相减,得到新的4位数(如不足则补0),重复这个过程,最后必然得到一个数字:6174。这个现象被称为:数字黑洞。下面的函数实现由给定的4位整数求出下一个整数的功能。请完善之。

int f(int n) {

int N[4];

for(int i=0; i<4; i++) { }

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

for(int j=0; j<3-i; j++)

if(N[j]>N[j+1]) { }

int t = N[j+1]; N[j+1] = N[j]; N[j] = t;

N[3-i] = n % 10;

_n=n/10__________________;

int n_min=0; for(i=0; i<4; i++)

n_min = n_min * 10 + N[i] ; // int n_max = 0; for(i=3; i>=0; i--)

return n_max-n_min; }

n_max = n_max * 10 + N[i];

19. 代码填空

第 8/9 页

公交车票价为5角。假设每位乘客只持有两种币值的货币:5角、1元。再假设持有5角的乘客有m人,持有1元的乘客有n人。由于特殊情况,开始的时候,售票员没有零钱可找。我们想知道这m+n名乘客以什么样的顺序购票则可以顺利完成购票过程。显然,m < n的时候,无论如何都不能完成,m >=n的时候,有些情况也不行。比如,第一个购票的乘客就持有1元。下面的程序计算出这m+n名乘客所有可能顺利完成购票的不同情况的组合数目。注意:只关心5角和1元交替出现的次序的不同排列,持有同样币值的两名乘客交换位置并不算做一种新的情况来计数。

//m: 持有5角币的人数 //n: 持有1元币的人数

//返回:所有顺利完成购票过程的购票次序的种类数 int f(int m, int n) { if(m < n) return 0; if(n==0) return 1;

return ______ f(m-1,n)+f(m,n-1)_________________;

}

第 9/9 页

本文来源:https://www.bwwdw.com/article/6u56.html

Top