物联1234 C语言 第五次作业

物联1234 C语言 第五次作业

第一题

题⽬:以下正确的说法是( )。
A. 定义函数时,形参的类型说明可以放在函数体内。
B. return后边的值不能为表达式。
C. 如果函数值的类型与返回值类型不⼀致,以函数值类型为准。
D. 如果形参与实参类型不⼀致,以实参类型为准。

答案:C

原因:

A选项错误在于,形参的类型说明不能放在函数体内。在C中,形参的类型说明在函数声明部分进行定义,而不是在函数体中。

B选项错误在于,return语句后面的值不能为表达式。在C中,return语句用于返回函数值,其后面的值应该是一个常量或者一个常量的表达式。

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

D选项错误在于,形参与实参类型不匹配时,以实参类型为准。在C中,如果形参与实参类型不匹配,编译器会报错提示类型不匹配。因此,D选项中“以实参类型为准”是不正确的。正确的说法是,如果形参与实参类型不匹配,以形参类型为准。

第二题

题⽬:若调⽤⼀个函数,且此函数中没有return语句,则正确的说法是:该函数()。
A. 没有返回值
B. 返回若⼲个系统默认值
C. 能返回⼀个⽤户所希望的值
D. 返回⼀个不确定的值

答案:A

原因:

因为C语言规定,如果一个函数没有return语句,那么它的返回值是undefined。因此,在这种情况下,函数不会返回任何值。

第三题

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

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));
}

解释:
1.定义一个名为 fun 的函数,该函数接受两个整数参数 xy,并返回它们的和。
2.在 main 函数中,定义了三个整数变量 abc,它们的值分别为 2、5 和 8。
3.调用 fun 函数,将 a + cb 的值作为参数传递,并将结果存储在变量 x 中。
4.调用 fun 函数,将 xa - c 的值作为参数传递,并将结果存储在变量 y 中。
5.输出 y 的值,格式化输出为 3 位小数。

输出结果:
根据上述代码,我们可以得到输出结果为 9。

第四题

题⽬:有以下程序,程序运⾏后的输出结果是()。

#include <stdio.h>

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);
}

解释:
1.定义一个名为 f 的函数,该函数接受一个整数参数 n,并返回 n 的斐波那契数。
2.在 main 函数中,定义了一个整数变量 j 并将其初始化为 0。
3.定义了一个循环变量 i,并将其初始化为 1。循环内执行以下操作:
4.将 i 的值递增 1。
5.将 j 的值递增 f(i)。
5.循环结束后,输出 j 的值。

输出结果:
根据上述代码,我们可以得到输出结果为 3。因为在循环中,j 的值在第一次迭代时加上了 f(1) = 1,第二次迭代时加上了 f(2) = 2,所以最终 j 的值为 3。

第五题

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

#include <stdio.h>
#include <stdlib.h>

int palindrome(char *s);

int main()
{
    char s[20];
    scanf("%s", s);
    if (palindrome(s))
        printf("YES\n");
    else
        printf("NO\n");
    system("pause");
    return 0;
}

int palindrome(char *s)
{
    int i,strat, end;
    for (i = 0; s[i] != '\0'; i++);
    for (strat = 0, end = i - 1; strat < end; strat++, end--){
        if (s[strat] != s[end])
            return 0;
    }
    return 1;
}

在这里插入图片描述

解释:
main函数中,程序首先创建了一个长度为20的字符数组s,然后调用scanf函数从用户输入中读取字符串,并将其存储在s数组中。接着调用palindrome函数检查字符串是否是回文,并根据结果输出"YES"或"NO"。最后调用system函数暂停程序的执行,并返回0。

palindrome函数用于检查一个字符串是否是回文。函数首先定义了一个整数变量i,用于遍历字符串中的每个字符。然后使用一个for循环遍历字符串,直到字符串的最后一个字符被遍历。

for循环内部,程序定义了两个变量stratend,分别表示回文检查的起始和结束位置。然后使用另一个for循环遍历字符串的子串,从起始位置strat到结束位置end。在每次迭代中,程序检查子串中的第一个字符和最后一个字符是否相等。如果不相等,函数返回0,表示字符串不是回文。如果所有字符都相等,函数返回1,表示字符串是回文。

main函数中,程序调用palindrome函数并检查返回值。如果返回值为1,表示字符串是回文,输出"YES",否则输出"NO"。

第六题

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

#include <stdio.h>
#include <stdlib.h>

int syPalindrome(long long num, int n); // n 嵌套层数

int main()
{
    int sum = 0, judge = 0;
    for (long long i = 10000; i <= 99999; i++){
        sum += syPalindrome(i, 2);
    }
    printf("第五位共有%d个对称回文数,分别是:", sum);
    for (long long i = 10000; i <= 99999; i++){
        if (syPalindrome(i, 2)){
            if (judge)
                printf("、");
            printf("%d", i);
            judge = 1;
        }
    }
    printf("。\n");
    system("pause");
    return 0;
}

// 通用回文判断(几位都可以)
int syPalindrome(long long num, int n)
{
    if (n){
        long long start = 1, end = 1; // 定义回文数的起始位置和结束位置
        for (end = 1; num / (end * 10) != 0; end *= 10); // 计算num的位数
        // 判断num是否是回文数
        while (end > start){
            // 如果num不是回文数,则返回0
            if ((num % (end * 10)) / end != (num % (start * 10)) / start)
                return 0;
            start *= 10;
            end /= 10;
        }
        if (syPalindrome(num * num, --n))// 递归调用函数,判断num的平方是否是回文数
            return 1;
        else
            return 0;
    }
    return 1; // 如果num是回文数,则返回1
}

运行效果
在这里插入图片描述

解释:

main函数中,程序首先初始化两个整数变量sumjudge,用于记录回文数的总数和当前是否已经输出过回文数。然后使用一个for循环遍历数字10000到99999,并调用syPalindrome函数判断每个数字是否是回文数。如果一个数字是回文数,则将其加到sum变量中。

syPalindrome函数用于判断一个数字是否是回文数。函数首先检查n(嵌套层数) 是否大于0,如果是,则表示需要判断数字的位数。如果n大于0,则使用一个for循环计算数字的位数,并判断数字是否是回文数。如果数字是回文数,则递归调用函数判断数字的平方是否是回文数。如果数字和数字的平方都是回文数,则返回1,否则返回0。如果n等于0,则表示需要判断数字是否是回文数,如果是,则返回1,否则返回0。

在main函数中,程序调用syPalindrome函数并检查返回值。如果返回值为1,表示数字是回文数,将其加到sum变量中。如果返回值为0,表示数字不是回文数,跳过此次循环。


  1. 对称回⽂数指某数与其平⽅都是回⽂数。例如:11的平方是121,111的平方是12321,它们都是对称回文数。 ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值