niusouti.com

四、程序填空题(每空4分,共16分) 2.下面程序功能是由键盘输入两个整数,按代数值由小到大的顺序输出这两个数,请完成程序中的空行(3)、(4)、(5)和(6),使程序实现其功能。 #include <stdio.h> int main() { int m,n,t; scanf("%d,%d",&m,&n); (3) //如果m大于n { (4) //以下三个空行实现m与n的值交换 (5) (6) } printf("%d,%dn",m,n); return 0; }

题目

四、程序填空题(每空4分,共16分) 2.下面程序功能是由键盘输入两个整数,按代数值由小到大的顺序输出这两个数,请完成程序中的空行(3)、(4)、(5)和(6),使程序实现其功能。 #include <stdio.h> int main() { int m,n,t; scanf("%d,%d",&m,&n); (3) //如果m大于n { (4) //以下三个空行实现m与n的值交换 (5) (6) } printf("%d,%dn",m,n); return 0; }


相似考题
更多“四、程序填空题(每空4分,共16分) 2.下面程序功能是由键盘输入两个整数,按代数值由小到大的顺序输出这两个数,请完成程序中的空行(3)、(4)、(5)和(6),使程序实现其功能。 #include <stdio.h> int main() { int m,n,t; scanf("%d,%d",&m,&n); (3) //如果m大于n { (4) //以下三个空行实现m与n的值交换 (5) (6) } printf("%d,%dn",m,n); return 0; }”相关问题
  • 第1题:

    下列给定程序中,函数fun()的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由 main()函数输出。

    例如,若输入2,则输出1 2

    2 4

    输入4,则输出1 2 3 4

    2 4 6 8

    3 6 9 12

    4 8 12 16

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.

    试题程序:

    include <conio.h>

    include <stdio. h>

    define M 10

    int aiM] [MI={0};

    /***************found*******************/

    fun( int **a, int m)

    {int j,k;

    for (j=0; j<m; j++)

    for (k=0; k<m; k++)

    /***************found*******************/

    a[j] [k]=k*j;

    }

    main ( )

    {int i, j, n;

    clrscr ();

    printf ("Enter n\n"); scanf ("%d", &n);

    fun (a, n);

    for (i=0; i<n; i++)

    { for (j=0;j<n;j++)

    printf ("%4d ",a[i] [j]);

    printf ("\n ");

    }

    }


    正确答案:(1)错误:fun(int**a int m) 正确:void fun(int(*a)[M]int m) (2)错误:a[j][k]=k*j; 正确:a[j][k]=(k+1)*(j+1);
    (1)错误:fun(int**a, int m) 正确:void fun(int(*a)[M],int m) (2)错误:a[j][k]=k*j; 正确:a[j][k]=(k+1)*(j+1); 解析:对于二维数组,应该理解成为是由几个一维数组作元素组成的一维数组,或者说,二维数组实际是一个一维数组,只不过它的每个数组元素又都是一个一维数组。我们先来看看指针数组的表示形式:
    (1)p+i和a+i均表示a[i]的地址,或者讲,它们均指向数组第i号元素,即指向a[i]。
    (2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为a[i]。
    (3)指向数组元素的指针,也可以表示成数组的形式,也就是说,它允许指针变量带下标,如p[i]与*(p+i)等价。因此,二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j),它们都与a[i][j]等价,或者还可写成(*(a+i))[j]。了解了以上这些内容后本题就好解决了。

  • 第2题:

    下列程序的输出结果是 #include"stdio.h" #define N 3 #define M 3 void fun(int a[M][N]) { printf("%d\n",*(a[1]+2));} main() { int a[M][N]; int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j]=i+j-(i-j); fun(a);}

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:若有以下定义:inta[3][4],i,j;且当0=i3,0=j4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。

  • 第3题:

    执行以下程序的输出结果是( )。 includedefine M 5define N M+M main(){int k; k=N*N*5;

    执行以下程序的输出结果是( )。

    include<stdio.h>

    define M 5

    define N M+M

    main()

    { int k;

    k=N*N*5;printf(”%d\n" ,k);

    }


    正确答案:55
    55 解析:本题考查的重点是对宏定义的理解。#define指令定义一个标识符和一个串,编译程序在对C源程序处理时.发现该标识符都用该串替换,因此,在语句k=N*N*5将替换成k=M+M*M+M*5后,M被替换成5,从而k=5+5*5+5*5=55。

  • 第4题:

    运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为______。 main() { int m,n; printf("En

    运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为______。 main() { int m,n; printf("Enter m,n:"); scanf("%d%d",&m,&n); while(m!=n) { while(m>n)m-=n; while(n>m)n-=m; } printf("m=%d\n",m); }

    A.m=3

    B.m=2

    C.m=1

    D.m=0


    正确答案:C

  • 第5题:

    以下程序的运行结果是()。includemain() {int a=3,b=4,c=8,d=4,m=1,n=3;printf("%d\n",

    以下程序的运行结果是( )。 #include<stdio.h> main() {int a=3,b=4,c=8,d=4,m=1,n=3; printf("%d\n",(m=a>B)&&(n=c>D)); }

    A.0

    B.1

    C.2

    D.3


    正确答案:A
    解析:逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为1时,整个表达式的值为1,否则为0。因为a=3b=4,即m=0,所以整个表达式的值为0。

  • 第6题:

    有以下程序:include define N 20fun(int a[] ,int n,int m){int i,j;for(i=m;i> :n;i

    有以下程序: #include <stdio.h> #define N 20 fun(int a[] ,int n,int m) { int i,j; for(i=m;i> :n;i--) a[i+1] =a[i]; } main( ) { int i,a[N.] = 11,2.3,4,5,6,7,8,9,10[; fun( a,2,9) for(i =0;i<5;i ++ ) printf("% d" ,a[i] );程序运行后的输出结果是( )。

    A.10234

    B.12344

    C.12334

    D.12234


    正确答案:C
    解析:本题函数fun的作用是将指定的数组元素(下标从n~m)向后移一位。调用函数fun(a,2,9)将a[2]到a[9]的各元素依次向后移一位,最后a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,程序输出数组的前5个元素:12334。

  • 第7题:

    下列程序的输出结果是 #include"stdio.h" #define M(x,y) x%y main() { int a,m=12,n=100; a=M(n,m); printf("%d\n",a--);}

    A.2

    B.3

    C.4

    D.5


    正确答案:C
    解析: 带参数的宏定义命令行形式如下:
    #define宏名(形参表)替换文本
    在编译的时候编译预处理程序用“替换文本”来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间。

  • 第8题:

    下列程序的功能是:将不超过整数m(m<2000)的所有素数存入数组xx。请编写函数 num(int m,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。

    例如:若输入30,则应输出:2,3,5,7,11,13,17,19,23,29。

    部分源程序已给出。

    请勿改动主函数main()和输出数据函数readwriteDat()的内容。

    include <conio.h>

    include <stdio.h>

    void readwriteDat();

    int num(int m, int xx[])

    {

    }

    main ( )

    {

    int m,n,xx[2000];

    clrscr();

    printf("\nPlease enter the integer m:");

    scanf(" %d" ,&m);

    n = num(m, xx);

    for(m-0;m printf(" %d" ,xx[m]);

    printf("\n" );

    readwriteDat();

    }

    viod readwriteDat ()

    {

    int m,n,xx[1000], i;

    FILE *rf,*wf;

    rf=fopen("in.dat" ," r" );

    wf=fopen(" out.dat" ," w" );

    for(i=0;i<10;i++){

    fscanf(rf," %d" ,&m);

    n=num(m, xx);

    for(m=0;m<n;m++)fprintf(wf," %d" ,xx[m]);

    fprintf(wf,"\n" );

    }

    fclose(rf);

    fclose(wf);

    }


    正确答案:int hum(int m int xx[]) { int s=0; int flag[2000]; /*初始化标记数组*/ for (i=0; i=m; i++) flag[i]=0; /*0和1不是素数*/ flag[0]=flag[1]=1; /*从2开始搜索素数*/ for(i=2; i=m;i++) { /*被标记为1的不是素数*/ if(flag[i])continue; /*i是素数输出*/ xx[s++]=i; /*将所有i的倍数标记为1*/ /*小优化:小于i*i的数必有小于i的素因数已标记*/ for(j=i*i;i=m;j+=i) flag[j]=1; } /*返回不超过m的素数个数*/ return S; }
    int hum(int m, int xx[]) { int s=0; int flag[2000]; /*初始化标记数组*/ for (i=0; i=m; i++) flag[i]=0; /*0和1不是素数*/ flag[0]=flag[1]=1; /*从2开始搜索素数*/ for(i=2; i=m;i++) { /*被标记为1的不是素数*/ if(flag[i])continue; /*i是素数,输出*/ xx[s++]=i; /*将所有i的倍数标记为1*/ /*小优化:小于i*i的数必有小于i的素因数,已标记*/ for(j=i*i;i=m;j+=i) flag[j]=1; } /*返回不超过m的素数个数*/ return S; } 解析:类型:素数筛选。
    关键点:素数筛选算法。
    求给定范围1~n内的所有素数的题,可以使用筛选法,步骤如下:
    创建一个0-1标志数组,对应1~n,1代表该数非素数,0代表素数。初始化全为0,以下面的方式将某些位置以1标记:
    (1)标记位置1为1(1不是素数),当前位置为2。
    (2)从当前位置开始,找到第一个标记为0的数p,p是素数;若找不到,转到6。
    (3)遍历数组,将所有p的倍数的位置标记为1。
    (4)当前位置前进到p+1。
    (5)返回2继续。
    (6)输出数组中所有标记为0的数(此步可并入第2步,找到一个输出一个)。

  • 第9题:

    下面程序的运行结果是( )。 include main() {int a,s,n,m; a=2;s=0;n=1;m=1; while(m<=4

    下面程序的运行结果是( )。 include<stdio.h> main() {int a,s,n,m; a=2;s=0;n=1;m=1; while(m<=4){n=n*a;s=s+n;++m;} printf("s=%d",s); }


    正确答案:s=30
    s=30 解析:分析循环条件“m=1,m=4”,所以循环4次。第1次:n=n*a=2,s=s+n=2;m=2。第2次:n=n*a=4,s=s+n=6;m=3。第3次:n=n*a=8,s=s+n=14;m=4。第4次:n=n*a=16,s=s+n=30。

  • 第10题:

    下列程序的输出结果是 #include"stdio.h" #define N3 #define M3 void fun(int a[M][N]) { printf("%d\n",*(a[1]+2));} main() { int a[M][N]; int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j]=i+j-(i-j); fun(a);}

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析: 若有以下定义:int a[3][4],i,j;且当 0=i3,0=j4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:
    a[a][j],*(a[i]+j),*(*(a+i)+j),(*(a+i)[j],*(&a [0][0]+4*i+j)”。

  • 第11题:

    下列给定程序中,函数fun()的功能是:输出M行N列整数方阵,然后求两条对角线上的各元素之和,返回此和数。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.

    试题程序:

    include <conio.h>

    include <stdio.h>

    define M 5

    /**********************************/

    iht fun(int n, int xx[ ][ ])

    { int i, j, sum=0;

    printf("\nThe %d x %d matrix:\n",M,M);

    for(i=0;i<M;i++)

    { for (j=0; j<M; j++)

    /**********************************/

    printf("%4f",xx[i][j]);

    printf("\n");

    }

    for(i=0;i<n;i++)

    sum+=xx[i][i]+xx[i][n-i-1];

    return(sum);

    }

    main ()

    { int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},

    {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

    clrscr();

    printf("\nThe sum of all elements on 2

    diagnals is %d",fun(M, aa));

    }


    正确答案:(1)错误: int fun(iht nintxx[][]) 正确: int ltm(iht mint r.x[][M]) (2)错误: printf("%4ff'xx[i]fj]); 正确: printf("%4d"xx[i][j]);
    (1)错误: int fun(iht n,intxx[][]) 正确: int ltm(iht mint r.x[][M]) (2)错误: printf("%4f,f',xx[i]fj]); 正确: printf("%4d",xx[i][j]); 解析:该题错误比较隐蔽,一般的C语言上机考试很少涉及printf顺数中的错误,在这里,我们只要明白“d”和“f”的区别就OK了。格式字符d表示:以带符号的十进制形式输出整数(正整数不输出符号);格式字符f表示;以小数形式输出单、双精度,隐含输出6位小数。

  • 第12题:

    若有如下程序: sub(int *t,int a[3][4]) { int m,n; for(m=0;m<3;m++) for(n=0;n<4;n++) { *t=a[m][n];t++;} } main() { int*t,s[3][4)={{1,2,3),{4,5,6),{7,8,9}}; t=(int*)malloc(50); sub(t,s); printf("%d,%d\n",t[4],t[7]); } 则程序运行后的输出结果是( )。

    A.4,7

    B.4,0

    C.5,8

    D.程序错误


    正确答案:B
    解析:本题定义了一个sub()函数,其作用为将一个二维数组按行复制到t所指的连续内存空间内。主程序中首先使用malloc()函数为t申请了50个字节的内存空间,然后调用sub()函数,将二维数组s的内容复制到t申请的内存空间内,最后输出t的第5个元素(t[4])和第8个元素(t[7]),即为3行4列二维数组中的s[1][0]和s[1][3]。s[1][0]是初始化列表中第二个大括号中的第一个值4,而s[1][3]应该是初始化列表中第二个大括号中的第4个值,但没有这么多初始值,C语言在这种情况下会自动将该元素设置为0,即s[3][4]={{1,2,3},{4,5,6},{7,8,9}}等价于s[3][4]={{1,2,3,0},{4,5,6,0),{7,8,9,0}}。所以最后输出结果是4,0,应该选择B。

  • 第13题:

    给定程序MODllC中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。

    inClude<coMo.h>

    inClude<stdio.h>

    dehne M 5

    /************fOUnd************/

    int fun(int n,int xx[][])

    {int i,j,sum=0;

    printf("\n The%dx%d matrix:\n"M,M);

    for(i=0;i<M;i++)

    { for(j=0;j<M;j++)

    /************found************/

    printf("%f",xx[i][j]);

    printf("\n");

    }

    for(i=0;i<n;i++)

    sum+=xx[i][i]+XX[i][[n-i-1];

    return(sum);

    }

    main( )

    {int aa[M][M]={{1,2,3,4,5),{4,3,2,1,0),

    {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

    clrscr( );

    printf("\n The sum Of all elements On 2 diagnals is %d."fun(M,aa));

    }


    正确答案:int fun(int nint xx[][]) 改为 int fun(int nint xx[][M)) printf("%fxx[i][j]); 改为 printf("%d"xx[i][j]);
    int fun(int n,int xx[][]) 改为 int fun(int n,int xx[][M)) printf("%f,xx[i][j]); 改为 printf("%d,"xx[i][j]); 解析:二维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在格式输出函数中,血型数据输出时对应的控制符是%d.

  • 第14题:

    下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:

    4 1 2 3

    3 4 1 2

    2 3 4 1

    1 2 3 4

    请改正程序中的错误,使它能得出正确的结果。

    注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

    试题程序;

    include <stdio.h>

    define M 4

    /*******************************/

    void fun(int a)

    {int i,j,k,m;

    printf("Enter 4 number: ");

    for (i=0; i<M; i++) scanf ("%d", &a [i] );

    printf ("\n\n The result : \n\n ");

    for (i=M; i>0; i--)

    { k=a [M-1];

    for (j=M-1; j>0; j--)

    /**********************************/

    a[j]=a[j+1];

    a[0]=k;

    for (m=0 ;m<M; m++ ) printf ("%d ", a [m]);

    printf ("\n ");

    }

    }

    main ()

    {int a [M];

    fun(a); printf("\n\n ");

    }


    正确答案:(1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1];
    (1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1]; 解析:其实,该题中题目信息已经告诉我们按“如下规律”,这就需要去认真分析矩阵的“规律”了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;i>0;i--)和 for (j=M-1;j>0;j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];。

  • 第15题:

    下列程序的功能是:将大于整数m且紧靠m的k个被3除余1的素数存入数组xx。请编写函数num(int m,imt k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。

    例如:若输入17,5,则应输出:19,31,37,43,61。

    部分源程序已给出。

    请勿改动主函数main()和输出数据函数readwriteDat()的内容。

    include <conio.h>

    include <stdio.h>

    void readwriteDat();

    void num(int m, int k, int xx[])

    {

    }

    main ( )

    {

    int m,n,xx[1000];

    clrscr();

    printf("\nPlease enter two integers:");

    scanf(" %d%d" ,&m,&n);

    num(m,n,xx);

    for(m=0;m<n;m++)

    printf(" %d" ,xx[m]);

    printf("\n" );

    readwriteDat();

    }

    viod readwriteDat()

    {

    int m,n, xx[1000], i;

    FILE *rf,*wf;

    rf=fopen("in.dat" ," r" );

    wf=fopen(" out.dat" ," w" );

    for(i=0;i<10;i++){

    fscanf(rf," %d%d" ,&m,&n);

    num(m,n,xx);

    for(m=0;m<n;m++)fprintf(wf," %d" ,xx[m]

    fprintf(wf,"\n" );

    }

    fclose(rf);

    fclose(wf);

    }


    正确答案:int isP(int m) { int i; for ( i=2; im; i++) if(m % i==O)return 0; /*用小于m的所有整数去试除*/ /*除尽则m不是素数*/ /*此步有优化余地*/ return 1; } /*寻找满足条件的素数*/ void num(int m int k int xx[]) { int s=0; for (++m; k>0 ;m++) if (m%3==1 && isP(m) ) { xx[s++]=m; k--; } }
    int isP(int m) { int i; for ( i=2; im; i++) if(m % i==O)return 0; /*用小于m的所有整数去试除*/ /*除尽则m不是素数*/ /*此步有优化余地*/ return 1; } /*寻找满足条件的素数*/ void num(int m, int k, int xx[]) { int s=0; for (++m; k>0 ;m++) if (m%3==1 && isP(m) ) { xx[s++]=m; k--; } } 解析:类型:素数判断与运算。
    关键点:素数判定。
    求素数的题,可以先定义一个求素数的函数,然后在程序中直接调用,这样简单而且不容易出错。
    原程序如果给了求素数的函数,可以直接调用。

  • 第16题:

    若有如下程序: int sub(int m) { if(m==1||m==0) return 2; else return(sub(m-1)*sub(m-2));} main() { int n; scanf("%d",&n); printf("%d",sub(n)); } 如果从键盘输入4<回车>,则程序运行后的输出结果是( )。

    A.8

    B.16

    C.24

    D.32


    正确答案:D
    解析:本题的sub()函数是一个递归函数,当参数m为1或0时返回2,否则返回sub(m-1)*sub(m-2)。所以sub(4)递推下来就是sub(4)=sub(3)*sub(2)=sub(2)*sub(1)*sub(1)*sub(0)=sub(1)*sub(0)*2*2*2=25(上标)=32。所以正确答案是D。

  • 第17题:

    下面程序的运行结果是:[ ]。

    fun(int t[],int n)

    { int i,m;

    if(n=1) return t[0];

    else

    if(n>=2) {m=fun(t,n-1);return m;}

    }

    main()

    { int a[]={11,4,6,3,8,2,3,5,9,2};

    printf("%d\n",fun(a,10));

    }


    正确答案:11
    11 解析:此题主要考核的知识点是数组名作为函数参数及函数调用牙口参数的传递。调用实参可知n=10,形参数组t指向实参a的首地址t[0]=11。执行fun()函数的if-else语句,因为n=10所以执行else语句,在满足if(n>=2)的条件下:m=fun(t[0],9), m=fun(t[0],8), m=fun(t[0],7),......m=fun(t[0],2), .m=fun(t[0],1),当n=1时满足if(n=1)的条件,所以执行此处的return语句,返回数组首地址指向的值t[0],所以答案为11。

  • 第18题:

    有以下程序:include prt(int * m,int n)int i;for(i =0;i

    有以下程序:#include <stdio.h>prt(int * m,int n) int i; for(i =0;i<n;i ++ ) m[i] ++;main( )} int a[ ] = { 1,2,3,4,5} ,i; prt(a,5); for(i =0;i<5;i ++ ) printf( "% d," ,a[i] );}程序运行后的输出结果是( )。

    A.1,2,3,4,5,

    B.2,3,4,5,6,

    C.3,4,5,6,7,

    D.2,3,4,5,1


    正确答案:B
    解析:prt(a,5);用数组名a作函数实参,不是把a数组的值传递给形参m,而是将数组a的首地址传递给指针变量m,使指针变量m指向数组a的首地址,这样他们就占用同一段内存单元。当改变了指针变量所指向的存储单元中的内容,也就改变了数组a中的元素。函数pit的作用是将指针变量m所指向的存储单元中的各元素值加1,也就是数组a中各元素的值加l,所以输出结果为:2,3,4,5,6,

  • 第19题:

    下列程序的输出结果是

    #include "stdio.h"

    #define N 3

    #define M 3

    void fun(int a[M][N])

    { printf("%d\n",*(a[1]+2));}

    main()

    { int a[M][N];

    int i,j;

    for(i=0;i<M;i++)

    for(j=0;j<N;j++)

    a[i][j]=i+j-(i-j);

    fun(a);}

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:若有以下定义:int a[3][4],i,j;且当0<=i<3,0<=j<4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。

  • 第20题:

    下面程序的功能是求整数m、n的最大公约数,请填空。 main() {int m,n,r; scanf("%d,%d",&m,&

    下面程序的功能是求整数m、n的最大公约数,请填空。

    main()

    { int m,n,r;

    scanf("%d,%d",&m,&n);

    if(【 】){r=m;m=n;n=r;)

    while(【 】)

    { r=m%n;m=n;n=r; }

    printf("%d",m);

    }


    正确答案:mn或n>m r或r!=0
    mn或n>m r或r!=0 解析:本题使用的是“辗转相除”法求两个数的最大公约数,即以两个数中较大的除以较小的,如果余数不为0,则将较小的数和余数做同样处理,直到被除断为止,此时较小的数就是两个数的最大公约数。本题第一空要求填写一个if语句的判断条件,如果满足此条件则交换m和n的值,再看后面while循环的循环体,使用m%n求余,则此if语句的作用应该是保证m是两个数中较大的那个,故第一空填mn或n>m。接下来的while循环实现整个辗转相除的过程,其结束条件应该是余数r为0,所以while的循环条件应该填r或r!=0。

  • 第21题:

    下列给定程序中,函数fun()的功能是:判断一个整数m是否是素数,若是返回l,否则返回0。在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.

    试题程序:

    include <conio.h>

    include <stdio.h>

    int fun(int m)

    { int k=2;

    while (k<=m&&(m%k))

    /*************found*********************/

    k++

    /*************found*********************/

    if(m=k)

    return 1;

    else return O;

    }

    main ( )

    { iht n;

    clrscr ();

    printf("\nPlease enter n: ");

    scanf ("%d", &n);

    if (fun (n)) printf ("YES\n");

    else printf ("NO! \n");

    }


    正确答案:(1)错误:k++ 正确:k++ (2)错误:if(m=k) 正确:if(m==k)
    (1)错误:k++ 正确:k++ (2)错误:if(m=k) 正确:if(m==k) 解析:函数fun()的功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。

  • 第22题:

    有以下程序: include main( ){ int m =12,n=34;printf( "% d% d" ,m++ , ++n);printf(

    有以下程序: #include <stdio.h>main( ){ int m =12,n=34; printf( "% d% d" ,m++ , ++n); printf("% d% d \n" ,n ++ , ++m); }程序运行后的输出结果是( )。

    A.12353514

    B.12353513

    C.12343514

    D.12343513


    正确答案:A
    解析:程序执行printf("%d%d",m++,++n);后,输出的是m和n+1的值1235,然后m+1=13,再执行printf("%d%d\n",n++,++m);输出n和m+1的值3514,之后n+1=36。这里要注意的是m++和++m的区别:m++是先输出m的值,再执行m++;++m是先执行++m,再输出m的值。

  • 第23题:

    请编写函数fun( ),其功能是:将所有大于1小于整数m的素数存入xx所指数组中,素数的个数通过k传回。

    例如,输入25,则应输出2 3 5 7 11 13 17 19 23。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int m,int *k,int xx[ ])

    {

    }

    main( )

    {

    int m,n,zz[100];

    clrscr( );

    printf("/nPlease enter an integer number between 10 and 100:");

    scanf("%d",&n);

    fun(n,&m,zz);

    printf("\n\nThere are%d prime numbers

    less than %d:",m,n);

    for(n=0;n<m;n++)

    printf("\n %4d",zz[n]);

    }


    正确答案:void fun(int mint *kint XX[]) { int ijtn=0; for(i=2;im;i++) /*找出大于1小于整数m的素数*/ { t=l; for(j=2;ji;j++) if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ }
    void fun(int m,int *k,int XX[]) { int i,j,t,n=0; for(i=2;im;i++) /*找出大于1小于整数m的素数*/ { t=l; for(j=2;ji;j++) if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ } 解析:这道题是考查一个数是不是素数,只要掌握了判断素数的方法,问题便能顺利解决,请以此题为例,掌握判断素数的方法。

  • 第24题:

    单选题
    有以下程序:#include int a=2; int f(){ static int n;  int m;  m=n=0;  n++; a++; m++; return m+n+a; }main(){ int k;  for(k=0;k<3;k++)  printf(%d, ,f()); printf(); }程序的运行结果是(  )。
    A

    5,6,7,

    B

    5,7,9,

    C

    5,8,11,

    D

    5,5,5,


    正确答案: B
    解析:
    static变量编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。程序执行过程为:k=0,a=2,n=0,m=0;n=1,a=3,m=1,返回5;k=1,a=3,n=0,m=0;n=1,a=4,m=1,返回6;k=2,a=4,n=0,m=0;n=1,a=5,m=1,返回7;k=3退出循环。答案选择A选项。