1. 选择题
以下正确的说法是( )
A. 定义函数时,形参的类型说明可以放在函数体内。
B. return后边的值不能为表达式。
C. 如果函数值的类型与返回值类型不⼀致,以函数值类型为准。
D. 如果形参与实参类型不⼀致,以实参类型为准。
答案:C
原因:
A:形参的类型说明不可以放在函数体内。形参的类型说明应该放在函数声明部分。
B:return 后边的值可以是一个表达式。
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 的值为 2,f 函数输出 1,j 的值为 1。第二次循环,i 的值为 3,因为输入的值不为 1,所以 f 函数中输出 2,j 的值为 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时,=121 ;n=111 时,=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);
}