判断题
1-1 预处理命令的前面必须加一个“#”号。T
1-2 #define MAX 100
和 int MAX=100;
的效果相同,都是定义一个变量MAX
并使其值为100。F,宏定义使MAX成为常量100
1-3 若有宏定义:#define S(a,b) t=a;a=b;b=t 由于变量t没定义,所以此宏定义是错误的。F
1-4 C语言中,编译预处理后,所有的符号常量名和宏名都用相应的字符串替换。T
1-5 调用printf
函数前,应使用编译预处理命令#include <stdio.h>
。T
1-6 include <stdoi.h>
是正确的编译预处理命令。F
1-7 #define ADD(X,Y) X+Y
的效果完全等同于定义一个函数ADD(X,Y)
。F,注意,应该是#define ADD(X,Y) ((X)+(Y))
1-8 C语言中的预处理命令都以“#”开头。T
1-9 #include <stdio.h>
是一条编译预处理命令 。T
1-10 #define PI 3.1415926
是一条C语句。F,是预处理指令
1-11 宏定义不存在类型问题,宏名无类型,它的参数也无类型。T
1-12 宏名必须用大写字母表示。F
1-13 调用数学库函数时,编译预处理命令为 include math.h
。F,应该是#include <math.h>
1-14 调用输入输出库函数时,编译预处理命令为#include <stdio.h>
。T
1-15 在 C 程序开头行使用 #include<stdio.h>
语句就可以使用 scanf()
、printf()
和 fabs()
函数。F,fabs()是math.h内的函数
单选题
2-1 要调用数学处理函数时,在#include命令行中应包含()。
A."stdio.h" B."string.h" C."math.h" D."ctype.h"
选择C
2-2 对于以下递归函数f,调用f(4),其返回值为() 。
int f(int n)
{ if (n) return f(n - 1) + n;
else return n;
}
A.10 B.4 C.0 D.以上均不是
选择A,函数为求1+2+……+n
2-3 执行下列程序后变量i的值应为()。
#define MA(x, y) ( x*y )
i = 5;
i = MA(i, i + 1) – 7;
A.30 B.19 C.23 D.1
选择B,MA(i,i+1)=5*5+1=26
2-4 宏定义“#define DIV(a, b) a/b”,经DIV(x + 5, y - 5) 引用,替换展开后是()。
A.x + 5 / y - 5 B.(x + 5 / y – 5) C.(x + 5) / (y - 5) D.(x + 5) / (y - 5);
选择A
2-5 执行下面程序,正确的输出是()。
int x = 5, y = 7;
void swap ( )
{
int z ;
z = x ; x = y ; y = z ;
}
int main(void)
{
int x = 3, y = 8;
swap ( ) ;
printf ("%d,%d \n", x , y ) ;
return 0 ;
}
A.3,8 B.8,3 C.5,7 D.7,5
选择A,swap没有实际交换x和y的值,应该是swap(&x,&y)
程序填空题
5-1 正整数逆序输出
输入一个正整数n,将其逆序输出。要求定义和调用函数reverse(num),其功能是将num逆序输出,要求用递归实现。例如,输入12345,输出54321。
void reverse (int num)
{
if (num<10){
printf("%d", num);
}else{
printf("%d",num%10);
reverse(num/10);
}
}
5-2 递归求和
定义递归函数sum(n)计算1+2+...+n, 其中n的类型是int,函数类型是double。
double sum(int n)
{
if (n<=0){
return 0;
}else{
return n+sum(n-1);
}
}
5-3 用递归函数实现求n!
本题要求定义一个递归函数fact(n),计算非负整数n的阶乘, 其中n的类型是int,函数类型是double。
double fact(int n)
{
double result;
if (n==0||n==1){
return 1;
}else{
return n*fact(n-1);
}
return result;
}
5-4 使用递归函数求最大公约数
定义函数gcd( m, n),用递归法求m和n的最大公约数。
使用辗转相除法求最大公约数的递归算法描述如下:
int gcd(int m, int n)
{
if(m%n==0){
return n;
}else{
return gcd(n,m%n);
}
}