二级C语言机试-294
(总分:100.00,做题时间:90分钟)
一、填空题(总题数:1,分数:30.00)
1.请在函数fun()的横线上填写若干表达式,使从键盘上输入一个整数n,输出n对应的斐波那契数列。斐波那契数列是一整数数列,该数列自第三项开始,每数等于前面两数之和,即0,1,1,2,3,5,8,13,21,34,55,…。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
int fun(int n);
main()
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
int fun(int n);
main()
int i,n=0;
scanf("%d",&n);
for(i=0;i<n; i++)
printf("%d",fun(i));
int fun(int n)
if( 【1】 )
return 0;
else
if( 【2】 )
return 1;
else
return 【3】 ;
scanf("%d",&n);
for(i=0;i<n; i++)
printf("%d",fun(i));
int fun(int n)
if( 【1】 )
return 0;
else
if( 【2】 )
return 1;
else
return 【3】 ;
(分数:30.00)
__________________________________________________________________________________________
正确答案:([1]n==0 [2]n==1 [3]fun(n-1)+fun(n-2))
正确答案:([1]n==0 [2]n==1 [3]fun(n-1)+fun(n-2))
解析:[解析] 填空1:斐波那契数列的特点是,第一项为0,第二项为1,从第三项开始,每数等于前面两数之和,所以n==0和n==1都是递归的终止条件,当n==0时,返回0。填空2:当n==1时,返回1。填空3:当n为非0和非1的数时,n对应的斐波那契数为前两项之和,即返回fun(n-1)+fun(n-2)。
二、改错题(总题数:1,分数:30.00)
2.下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,并作为函数值返回。例如,若给num1和num2输入49和21,则输出的最大公约数为7:若给num1和num2分别输入27和81,则输出最大公约数为27。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
int fun(int a, int b)
int r,t;
if(a<b)
/******************found*****************/
t=a; b=a; a=t;
r=a%b;
while(r!=0)
a=b; b=r; r=a%b;
/******************found*****************/
return(a);
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
int fun(int a, int b)
int r,t;
if(a<b)
/******************found*****************/
t=a; b=a; a=t;
r=a%b;
while(r!=0)
a=b; b=r; r=a%b;
/******************found*****************/
return(a);
main()
int num1, num2, a;
printf("Input num1 num2:"); scanf("%d %d",&num1, &num2);
printf("num1=%d num2=%d/n/n",num1, num2);
a=fun(num1, num2);
printf("The maximun common divisor is %d/n/n", a);
(分数:30.00)
int num1, num2, a;
printf("Input num1 num2:"); scanf("%d %d",&num1, &num2);
printf("num1=%d num2=%d/n/n",num1, num2);
a=fun(num1, num2);
printf("The maximun common divisor is %d/n/n", a);
(分数:30.00)
__________________________________________________________________________________________
正确答案:((1)错误:{t=a;b=a;a=t;} 正确:{t=a;a=b;b=t;}
c语言斐波那契数列(2)错误:return(a); 正确:return(b);)
正确答案:((1)错误:{t=a;b=a;a=t;} 正确:{t=a;a=b;b=t;}
c语言斐波那契数列(2)错误:return(a); 正确:return(b);)
解析:[解析] 若求两个数的最大公约数,如果b除a的非零余数能够整除a,那么该余数就是
最大公约数;若余数为0,则最大公约数为a。该题程序中采用了循环语句,若b除以a的余数不等于0,则继续用a除以所得余数,直至余数为0,如此可以得到 a,b的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。
三、编程题(总题数:1,分数:40.00)
3.请编写一个函数fun(),它的功能是:出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
void fun(int a[],int n, int *max,int *d)
main()
int i, x[20], max, index, n=10;
randomize();
for(i=0; i<=n; i++)
x[i]=rand()%50;
printf("%4d",x[i]);
/*输出一个随机数组*/
printf("/n");
fun(x,n,&max,&index);
main()
int i, x[20], max, index, n=10;
randomize();
for(i=0; i<=n; i++)
x[i]=rand()%50;
printf("%4d",x[i]);
/*输出一个随机数组*/
printf("/n");
fun(x,n,&max,&index);
printf("Max=%5d,Index=%4d/n",max,index);
(分数:40.00)
(分数:40.00)
__________________________________________________________________________________________
正确答案:(void fun(int a[],int n,int *max,int *d)
{
int i;
*max=a[0];
*d=0;
for(i=0;i<n;i++) /*将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元*/
if(*max<a[i])
{*max=a[i];*d=i;}
正确答案:(void fun(int a[],int n,int *max,int *d)
{
int i;
*max=a[0];
*d=0;
for(i=0;i<n;i++) /*将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元*/
if(*max<a[i])
{*max=a[i];*d=i;}
})
解析:[解析] 该程序直接使用形参max和d,由于它们都是指针变量,所以要引用它所指向的变量时要对它进行指针运算,也即*号运算。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论