printf(\
return 0; }
int func(int a, int b) {
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
6. 有以下程序
#include \
a=24 b=16 int abc(int u, int v);
u=24 v=16 main( )
u v w=u%v u=v v=w {
24 16 24=8 16 8 int a=24,b=16,c;
16 8 16%8=0 8 0 c=abc(a, b);
8 0 printf(\
return 0; }
int abc(int u, int v) {
int w; while(v) {
w=u%v; u=v; v=w; }
return u; }
输出结果是 。 8
三、程序填空题
1. 下面的函数将一个整型数组按降序排序后,结果仍存入该数组
sort(int array[ ], int num) {
int i,j,temp; for( 错误!未找到引用源。 ; j>0; j--) j=num for(i=0; i if( 错误!未找到引用源。 ) array[i] { temp=array[i]; array[i]=array[i+1]; array[i+1]=temp; 46 } } } ① j=num ②Array[i] 2. 下面程序用于求S?1!?2!???n!,试将其补充完整。 long int factor(int n) { int i; long int t=1; for(i=1;i<=n;i++) t= ① ; t*i return t; } main( ) { long int s=0; int k,n; scanf(\for(k=1;k<=n;k++) s= ② ; s+factor(n) printf(\ } 3. 输入两个正整数m和n,求其最大公约数和最小公倍数 f(int a, int b) { int i,max; for(i=1;i<=b/2;i++) if( ① ) (a%i= =0)&&(b%i= =0) max=i; return(max); } main( ) { int n,m,max,min; printf(―输入两个正整数 n , m:‖); scanf(―%d,%d‖,&n,&m); if(m>n) max=f(m,n); else max=f(n,m); mix= ② ; (m*n)/max printf(―最大公约数为:%d,最小公倍数为:%d‖,max,min); } 4. 下面程序能统计主函数调用count函数的次数(用字符#作为结束输入的标 志)。 47 #include\main( ) { char ch; while(1) { scanf (\ count (ch); if ( ① ) ch = = ' # ' break; } } count (char c) { static int i=0; i++; if ( ② ) c = = ' # ' printf (\ } 5. 统计两个数组中相应元素大于、等于或小于的次数,并由此决定那个数组较 大。 #include main( ) { int i,k=0,m=0,n=0,flag; int a[10]={1,3,5,7,9,8,6,4,2,0}; int b[10]={5,3,8,9,-1,-3,5,6,0,4}; for(i=0;i<10;i++) { flag=large(a[i],b[i]); if(flag==1) 错误!未找到引用源。 ; n++ else if(flag==0) m++; else k++; } printf(\d\\n\ if(n>k) printf(\ else if(n printf(\ 48 } int large(int x,int y) { int flag; if(x>y) flag=1; else if(x } 第8章 编译预处理 一、单项选择题 1. 以下有关宏替换的叙述不正确的是( )。D A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字符表示 2. 若有宏定义:#define MOD(x,y) x%y 则执行以下语句后的输出为( )。B int z,a=15,b=100; z=MOD(b,a); printf(―%d\\n‖,z++); A)11 B)10 C)6 D)宏定义不合法 3. 请选出以下程序段的输出结果( )。A #include #define MIN(x,y) (x)<(y)?(x):(y) main( ) { int i,j,k; i=10; j=15; k=10*MIN(i,j); printf(\ } A)15 B)100 C)10 D)150 4. 请读程序: #define ADD(x) x+x main( ) { int m=1,n=2,k=3; int sum=ADD(m+n)*k; m+n+m+n*k printf(―sum=%d‖,sum); } 上面程序的运行结果是( )。B A)sum=9 B)sum=10 C)sum=12 D)sum=18 5. 执行下面的程序后,a的值是( )。B #define SQR(X) X*X 49 main( ) { int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m); k+m*k+m/k+m*k+m printf(\ } A)10 B)1 C)9 D)0 6. 下列程序执行后的输出结果是( )。B #define MA(x) x*(x-1) main( ) { int a=1,b=2; printf(\ } A)6 B)8 C)10 D)12 7. 以下程序的输出结果是( )。 B #include ―stdio.h‖ #define FUDGE(y) 2.84+y #define PR(a) printf(\ #define PRINT1(a) PR(a); putchar(?\\n‘) main( ) { int x=2; PRINT1(FUDGE(5)*x); } A)11 B)12 C)13 D)15 8. 下面程序运行的结果是( )。 A #define f (x) 1+x+x*x #include int a=2, b=3; printf(\ } A)17 B)31 C)13 D)7 9. 以下for语句构成的循环执行了( )次。C ??#define N 2 ??#define M N+1 ??#define NUM (M+1)*M/2 ? main( ) ??{ int i , n=0; ?? for( i=1;i<=NUM;i + + ) (2+1+1)*2+1/2 4*2+0 ?? n++; 50