t=max(x,y); m=max(t,z); printf(\}
int max(int a,int b) {
if(a>b) return(a); else
return(b); }
运行时若输入:10,15,9 则输出:___ 15
运行时若输入:300,129,300 则输出:___ (7)
#include
int n1,n2; long a;
scanf(\ a=sum(n1,n2); printf(\}
long sum(int a,int b) {
long c1,c2; c1=factorial(a); c2=factorial(b); return(c1+c2); }
long factorial(int n) {
long rtn=1; int i;
for(i=1;i<=n;i++) rtn*=i; return(rtn); }
运行时若输入:2,3 则输出:___ 8 运行时若输入:0, 5 则输出:___ 121
300 (8)
#include
int n; x=1;y=2; n=s();
printf(\} int s() {
int z; x=3;y=4; z=x+y; return(z); }
程序运行后输出:___ 3,4,7
(9) 以下程序的输出结果是a=___,b=___,c=___。 #include
int a=1,b=2,c; c=func(a,&b); b=func(c,&a); a=func(b,&c);
printf(\ }
int func(int a,int *p) {
a++; *p=a+2; return(*p+a); }
36 16 19
第九章 预处理
A部分(本、专科必做)
一、选择题
1、 以下不正确的叙述是(D)
A、宏替换不占用运行时间。 B、宏名无类型。 C、宏替换只是字符替换。 D、宏名必须用大写字母表示。
2、 C语言的编译系统对宏命令的处理(D)
A、在程序运行时进行的。 B、在程序连接时进行。 C、和C程序中的其它语句同时进行编译的。 D、在对源程序中其它语句正式编译之前进行的。 3、以下程序的输出结果是(C)。 A、15 B、100 C、10 D、150 #define MIN(x,y) (x)<(y)?(x):(y) void main() { int I,j,k; i=10;j=15;k=10*MIN(i,j); printf(“%d\\n”,k);
}
4、以下叙述中正确的是(D)
A、 用#include包含的文件的后缀必须是“.h”。 B、 若一些源程序中包含某个头文件;当该文件有错时,只需对该头文件进行修改,包
含此头文件的所有源程序不必重新进行编译。 C、 宏命令行可以看作是一行C语句。 D、 预处理是在编译之前进行的。 5、以下叙述中正确的是(C) A、源程序中所有的行都参加编译。 B、宏定义常量与const定义常量是一样的。 C、宏定义可以嵌套定义,即在宏定义中的字符串可以引用另一个宏定义的标识符。 D、以上都不正确。 二、填空题
1、 以下程序中for 循环执行的次数是 6 。
#define N 2 #define M N+1
#define NUM (M+1)*M/2 void main() { int i; for(i=1;i<=NUM;i++); printf(“%d\\n”,i); }
2、以下程序的输出结果是 x=93 。 #define A 3 #define B(a) ((A+1)*a) void main() { int x; x=3*(A+B(7)); printf(“x=%d\\n”,x);
}
B部分(本科必做)
编程:请写出一个宏定义MYALPHA(c),用以判断c是否是字母字符,若是,得1,否则,得0。
解:#define MYALPHA(c) ((c>=?A?&&c<=?Z?)||( c>=?a?&&c<=?z?)?1:0)
第十章 指针
A部分(本、专科必做)
一、选择题
1、若有定义:int x,*pb;则以下正确的表达式是(A) A、pb=&x B、pb=x C、*pb=&x D、*pb=*x 2、以下程序的输出结果是(B) A、因变量无定义输出不定值 B、0 C、-1 D、1 #include
{printf(“%d\\n”,NULL);}
3、以下程序的输出结果是(B) A、5,2,3 B、-5,-12,-7 C、-5,-12,-17 D、5,-2,-7
#include
void sub(int x,int y,int *z) {*z=y-x;} void main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(“%d,%d,%d\\n”,a,b,c);
}
4、以下程序的输出结果是(C) A、4 B、6 C、8 D、10
#include
}
5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(B)。 A、20 B、30 C、21 D、31 a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50 (图一)
6、已知指针p的指向(图一)的a[1],则表达式*++p的值是(B)。
A、20 B、30 C、21 D、31
7、已知指针p的指向(图一)的a[1],则表达式++*p的值是(C)。 A、20 B、30 C、21 D、31 8、以下程序的输出结果是(D)。 A、23 B、24 C、25 D、26
#include
{printf(“%d\\n”,++*x);} void main() { int a=25;prtv(&a);
}
9、以下程序的输出结果是(B)。 A、运行出错 B、100 C、a的地址 D、b的地址
#include
int **k,*a,b=100;
a=&b;k=&a; printf(“%d\\n”,**k);
}
10、以下程序运行后,输出结果是(D)。
A) 8 B) 7 C) 6 D) 5 #include
{ char *p=s; while(*p) p++; return(p-s); }
main()
{ char *a=\ int i; i=ss(a);
printf(\ }
二、填空题
1、若有定义:char ch; (1)使指针p指向变量ch的定义语句是 char *p=&ch; 。 (2)若已定义char *p;,使指针p指向变量ch的赋值语句是 p=&ch; 。 (3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是 scanf(“%c”,p); 。 (4)在(1)的基础上,通过指针p给变量ch赋字符?a?的语句是*p=?a?; 。 (5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是