C语言作业五

1. 选择题

以下正确的说法是( )

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

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

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

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

答案:C 

原因:

A:形参的类型说明不可以放在函数体内。形参的类型说明应该放在函数声明部分。

Breturn 后边的值可以是一个表达式。

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

2. 选择题 

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

A. 没有返回值

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

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

D. 返回⼀个不确定的值

答案:D

原因:

若函数中没有 return 语句,若函数不声明为 void 型,调用函数的时候会得到 int 型的不确定的返回值。

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

解释:

printf 中输入 a + c , b 的值也就是 10 ,5 进入函数 fun 后,因为是 float 类型,所以第一次输出结果为 15.000000,又因为强制转换为 int 类型,所以结果转换为 15。第二次输入函数 fun 的值为 15 ,-6 所以输出结果为 9,因为打印的类型为 %3.0f,小数点之前要输出三位数,位数不够时用空格代替,所以最终结果为 [空格][空格]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

解释:

第一次循环,i 的值为 2f 函数输出 1j 的值为 1。第二次循环,i 的值为 3,因为输入的值不为 1,所以 f 函数中输出 2j 的值为 3。第三次,由于 i 不符合 i < 3,所以循环结束,输出 3

5. 编程题 

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

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

2. 位数为5的正整数,即 之间的正整数。

#include <stdio.h>
int palindrome(int n) 
{
    int num1 = n;
    int num2 = 0;
    int meiwei;
    while(n != 0)
    {
        int meiwei = n % 10;
        num2 = num2 * 10 + meiwei;
        n /= 10;
    }
    if (num2 == num1)
    {
        return 1;
    } 
    else
    {
        return 0;
    }
}
 
int main() {
    int count = 0;
    for (int i = 10000; i <= 99999; i++) 
    {
        if (palindrome(i)) 
        {
            count++;
        }
    }
    printf("%d", count);
    return 0;
} 

 

6. 附加题 

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

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

#include <stdio.h>
int palindrome(int n) 
{
    int num1 = n;
    int num2 = 0;
    int meiwei;
    while(n != 0)
	{
        int meiwei = n % 10;
        num2 = num2 * 10 + meiwei;
        n /= 10;
    }
    if (num2 == num1)
	{
        return 1;
    } 
	else
	{
        return 0;
    }
}
 
int symPalindrome(int n) 
{
    int sq;
	sq = n * n;
    if(palindrome(sq) == 1 && palindrome(n) == 1)
    {
    	return 1;
	}
}
 
int main() 
{
    int count = 0;
    for (int i = 10000; i <= 99999; i++) 
	{
        if (symPalindrome(i)) 
		{
            count++;
        }
    }
    printf("%d", count);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值