作业五11.25

1. 以下正确的说法是( )。

A. 定义函数时,形参的类型说明可以放在函数体内。

B. return后边的值不能为表达式。

C. 如果函数值的类型与返回值类型不⼀致,以函数值类型为准。

D. 如果形参与实参类型不⼀致,以实参类型为准。

答案:D
原因:1.在定义函数时,形参的类型说明要放在函数声明中,不能放在函数体内。
           2.return 后边的值可以为表达式。
           3.如果函数值的类型与返回值类型不一致,以返回值类型为准。

2. 若调⽤⼀个函数,且此函数中没有return语句,则正确的说法是:该函数( )。

A. 没有返回值

B. 返回若⼲个系统默认值

C. 能返回⼀个⽤户所希望的值

D. 返回⼀个不确定的值 

 答案:A

原因:如果调用一个函数,而该函数中没有return语句,那么该函数将不会返回任何值,因此可以说该函数没有返回值,如void main(){}

3. 有以下程序,程序运⾏后的输出结果是( )。需附上简要解释。

float fun(int x, int y) {
    return (x + y);
}

void main()

{
    int a = 2,b = 5,c = 8;
    printf("%3.0f\n", fun((int) fun(a + c, b), a - c));
} 

 答案:  9(9前有两个空格)

原因:

1.先计算fun(a+c,b),结果为15。

2.然后计算fun((int)fun(a+c,b),a-c),结果为9。

3.输出%3.0f,数字占三位,从右边开始,小数点为0,则为空格空格9。

4. 有以下程序,程序运⾏后的输出结果是( )。 

int f (int n)
{
    if (n == 1) 
        return 1;
    else 
        return f(n - 1) + 1;
}

void main()
{
    int i, j = 0;
    for (i = 1; i < 3; i++) 
        j += f (i);
    printf ("%d\n", j);
}

答案:3

原因:1.f(1)=1,f(2)=f(1)+1=2

           2.j=f(1)+f(2)=1+2=3

5. 编写⼀个函数 palindrome , 该函数⽤于判断⼀个数是否是回⽂数。然后在主函数中使 ⽤该函数,判断位数为5的正整数的回⽂数数量。

📢1. 回⽂数是指某数与其反序数相等,如5、131、1551、345676543.

     2. 位数为5的正整数,即[10000, 99999)之间的正整数。

#include <stdio.h>

int palindrome(int x);

int main(void)
{
	int cnt=0, i, d;
	for (i=10000; i<99999; i++)    //对于五位数进行判断
	{
		cnt += palindrome(i);    //累加返回值0或1
	}
	printf("位数为5的正整数的回文数数量:%d", cnt);
	return 0;
 } 
 
int palindrome(int x)
{
	int isPrime=0, sum=0, n, temp;
	n = x;
	do {
		temp = x % 10;
		sum = sum * 10 + temp;
		x /= 10;
	} while (x>0);    //逆序
	if (sum==n)    //如果想等,返回1
		isPrime=1;
	return isPrime;
}

6.编写⼀个函数 symPalindrome , 该函数⽤于判断⼀个数是否为对称回⽂数。然后在主函 数中使⽤该函数,判断位数为5的正整数的对称回⽂数数量。

📢 对称回⽂数指某数与其平⽅都是回⽂数。例如,n=11时,11^{2}=121 ;n=111 时,111^{2}=12321 。 

#include <stdio.h>

int symPalindrome(int x);

int main(void)
{
	int cnt=0, i, d;
	for (i=10000; i<99999; i++)    //对于五位数进行判断
	{
		cnt += symPalindrome(i);
	}
	printf("位数为5的正整数的对称回文数数量:%d", cnt);
	return 0;
 } 
 
int symPalindrome(int x)
{
	int isPrime=0, sum1=0, sum2=0, n, temp, d, t;
	n = x;
	d = x * x;
	t = d;
	do {
		temp = x % 10;
		sum1 = sum1 * 10 + temp;
		x /= 10;
	} while (x>0);    //逆序x
	do {
		temp = d % 10;
		sum2 = sum2 * 10 + temp;
		d /= 10;
	} while (d>0);    //逆序x的平方
	if (sum1==n && sum2==t)    //如果x为回文数并且x的平方也是回文数则返回1
		isPrime=1;
	return isPrime;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值