有以下程序:includemain(){int s=0,a=1,n; scanf("%d",&n); do {s+=1;a=a-2;} whi有以下程序: #include <stdio.h> main() { int s=0,a=1,n; scanf("%d",&n); do {s+=1;a=a-2;} while(a!=n); printf("%d\n",s); } 若要使程序的输出值为2,则应该从键盘给n输入的值是( )。A.-1B.-3C.-5D.0

题目
有以下程序:includemain(){int s=0,a=1,n; scanf("%d",&n); do {s+=1;a=a-2;} whi

有以下程序: #include <stdio.h> main() { int s=0,a=1,n; scanf("%d",&n); do {s+=1;a=a-2;} while(a!=n); printf("%d\n",s); } 若要使程序的输出值为2,则应该从键盘给n输入的值是( )。

A.-1

B.-3

C.-5

D.0


相似考题
更多“有以下程序:#include<stdio.h>main(){int s=0,a=1,n; scanf("%d",&amp;n); do {s+=1;a=a-2;} whi ”相关问题
  • 第1题:

    以下程序的功能是计算:。includemain(){int n; float s; s=1.0; for(n=10;n>1;n--)s=s+

    以下程序的功能是计算:。#include <stdio.h> main() { int n; float s; s=1.0; for(n=10;n>1;n--) s=s+1/n; printf("%6.4f\n",s); } 程序运行后输出结果错误,导致错误结果的程序行是( )。

    A.s=1.0;

    B.for(n=10;n>1;n--)

    C.s=s+1/n;

    D.printf("%6.4f\n",s);


    正确答案:C
    解析:该程序的运行结果是1.0000,算法错误。在s=s+1/n中,因为n为整型,所以循环中1/n始终为0。这就是本题算法错误的原因。应把s=s+1/n改为s=s+1.0/n。

  • 第2题:

    下面程序的运行结果是[]。include int f(int a[],int n){ if(n>1)return a[0]+f(a+1,n-1

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

    include <stdio.h>

    int f(int a[],int n)

    { if(n>1)

    return a[0]+f(a+1,n-1);

    else

    return a[0];

    }

    main()

    {int aa[10]={12,3,4,5,6,7,8,9,10},s;

    s=f (aa+2,4); printf("%d\n",s); }


    正确答案:18
    18 解析:实参中aa+2是指将数组元素3的地址传递绐形参a,应当注意—点,用数纽名作函数实参时,不是把数组的值传给形参,而是把实参数组的地址传绐形参数组,两个数组共用一段内存单元。所以a[]={3,4,5,6,7,8,9,10),n=4,a[0]=3。形参中a+1表示数组元素4的地址传递绐形参a,所以a[0]+f(a+1,n-1)=3+f(a+1)),3),此时a[]={4,5,6,7,8,9,10),n=3,a[0]=4。n=3同样满足n>1的条件a[0]+f(a+1,n-1)=4+f(a+1,2)此时a[]={5,67,8,9,10},n=2, a[0]=5。n=2同样满足n>1的条件a[0]+f(a+1,n-1)=5+f(a+1,2)此时a[]={6,7,8,9,10},n=1,a[0]=6。n=1不再满足条件返回a[0]=6, 6+5+4+3=18,所以最后的结果为18。

  • 第3题:

    有以下程序 include int fun(char s[]) { int n=O; whil

    有以下程序 #include <stdio.h> int fun(char s[]) { int n=O; while(*s<='9'&&*s>='0') { n=10*n+*s-'0'; s++; } return (n); } main() { char s[10]={ '6', '1', '*', '4', '*', '9', '*', '0', '*'}; printf("%d\n",fun(s)); }

    A.9

    B.61490

    C.61

    D.5


    正确答案:C
    解析:题目fun()函数中while循环的意思是:判断s所指内容是否为数字字符,如果是数字字符,则计算表达式11=10*n+*s-'0';。其中。s-'0'的作用是将相应的数字字符转换为数值,例如字符'8'减去字符'0'后,得到的结果就是数值8了。n=10*n+的作用是将累计变量n中原来内容乘以10,然后再加上刚转换的数字字符的数值,例如原来n的值为1,*s现在的内容为'2',那么执行了n=10*n+*s-'0,;语句后,n的值变为12,如果接下来再来一个'8'字符,执行n=10*n+*s-'0';语句后,n的值就是128了。故不难看出fun()函数的作用是“将数字字符串转换为相应的十进制数值,碰到非数字字符时结束”。从主函数中定义的字符数组s的初始化内容可以看出,fun()函数返回值应该是61。故应该选择C。

  • 第4题:

    以下程序运行后的输出结果是()。includevoid reverse(int a[],int n){int i,t;for(i=0;

    以下程序运行后的输出结果是( )。 #include<stdio.h> void reverse(int a[],int n) {int i,t; for(i=0;i<n/2;i++) {t==a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() {int b[10]={10,9,8,7,6,5,4,3,2,1};int i,s=0; reverse(b,10); for(i=0;i<3;i++)s+=b[i]; printf("%d\n",s); }

    A.27

    B.6

    C.25

    D.30


    正确答案:B
    解析:本题考查函数调用时的参数传递。函数reverse将数组b进行了逆置,此时b[10]={10,9,8,7,6,5,4,3,2,1),后面for语句的功能是将b中的后3个数累加,并将结果放在s中,最后将s输出,结果s=1+2+3=6。

  • 第5题:

    有以下程序includeintfun(chars[]){intn=0;while(*s<='9'&&*s>='0'){n=10*n+*

    有以下程序 #include <stdio.h> int fun(char s[]) { int n=0; while(*s<='9'&&*s>='0') {n=10*n+*s-'0';s++;} return(n); } main() {char s[10]={'6','1','*','4','*','9','*','0','*'}; printf("%d\n",fun(s)); } 程序的运行结果是

    A.9

    B.61490

    C.61

    D.5


    正确答案:C
    解析: 在fun函数中,while循环的功能是:逐个取字符数组s的字符判断其是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位将相应左移一个10进制位。当指针s指向数组的第3位时,循环条件不成立,循环结束,返回n的值,输出n的值为61。

  • 第6题:

    以下程序的功能是:将输入的正整数按逆序输出。例如:若输入135则输出531。请填空。

    include <stdio.h>

    main()

    { int n, s;

    printf("Enter a number:"); scanf("%d",&n);

    printf("Output: ");

    do

    { s=n%10; printf("%d",s); [ ]; }

    while (n!=0);

    printf("\n');

    }


    正确答案:n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10
    n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10 解析:根据s=n%10可知:此操作可以将输入的数据n的最后—位赋给s,根据题目的要求是要将输入的数据逆序输出,现在已经将原数据的个位输出,在其后如果执行n/=10司将原数据的个位数去掉,满足do....while的条件继续s=n%10操作,此时可求出十位上的数进行输出,继续执行n/=10操作,与上相同最后将百位上的数进行输出,所以该题答案为: n/=10。

  • 第7题:

    下面程序的运行结果是( )。 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。

  • 第8题:

    以下程序的输出结果是()。includevoid reverse(int a [],int n){int i,t; for(i=0;i

    以下程序的输出结果是( )。 #include <stdio.h> void reverse(int a [],int n) { int i,t; for(i=0;i<n/2;i++) { t=a[i]; a[i]=a[n-1 -i];a[n-1-i] =t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8); for(i=6;i<10;i++)s+=b[i]; printf("%d\n",s); }

    A.22

    B.10

    C.34

    D.30


    正确答案:A
    解析:在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7],…,b[9]的值相加,结果为22。

  • 第9题:

    有以下程序 main() { int s=0, a=1, n; scanf ( "%d", &n); do { s+=l; a=a-2; } while (a! =n); print f ( "%d\n" , s ); 若要使程序的输出值为2,则应该从键盘给n输入不敷出值是

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:本题考核的知识点是do-while循环的简单应用。根据题目要求,最后要使输出的s值为2,在程序中改变s的值语句只有循环体中的s+=1;语句,而初始s的值为0,显然要使s的值变为2,该语句必须执行两次,即do-while循环中的循环体要执行两次,而在do-while中,首先不进行条件而执行do后面的循环体语句,然后在判断while循环条件。所以说不管循环判断条件是否为真s+=1;语句至少执行一次,根据分析,只需要while后面括号的循环判断表达式的值为真成立一次且只能为真一次,将四个选项中的内容依次代入该程序中不难得到只有n=-3刚好使循环判断条件a!=n为真一次.故4个选项中选项B符合题意。

  • 第10题:

    有以下程序:includeint f(int t[],int n);main(){int a[4]={1,2,3,4},s;s=f(a,2);prin

    有以下程序: #include<stdio.h> int f(int t[],int n); main() {int a[4]={1,2,3,4},s; s=f(a,2);printf("%d\n",s); } int f(int t[],int n) {if((n>0)&&(n<5))return t[n+1]+f(t,n-1); else return 0; } 程序运行后的输出结果是( )。

    A.4

    B.7

    C.10

    D.61


    正确答案:B

  • 第11题:

    有以下程序:include main(){ int i,n=0;for(i=2;i<5;i++){do {if(i%3) continue;n++;

    有以下程序: #include <stdio.h> main() { int i,n=0; for(i=2;i<5;i++) { do { if(i%3) continue; n++; } while(! i); n++; } printf("n=%d\n",n); } 程序执行后的输出结果是( )。

    A.n=5

    B.n=2

    C.n=3

    D.n=4


    正确答案:D
    解析:for循环中,当i=2时,i%3为真,结束本次while循环,!i为假,执行n++,n为1;当i=3时,i%3=0,执行n++,n为2,!i为假,执行n++,n为3;当i=4时,i%3为真,结束本次while循环,!i为假,执行n++,n为4;当i=5时,for循环结束。这时输出n=4。

  • 第12题:

    有以下程序:include main( ){int i,s=0,t[] = {1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)

    有以下程序:#include <stdio.h>main( ){ int i,s=0,t[] = {1,2,3,4,5,6,7,8,9}; for(i=0;i<9;i+=2) s+=*(t+i); prinff("% d \n ",s);

    A.45

    B.20

    C.25

    D.36


    正确答案:C
    解析:程序中的*(t+i)相当于t[i]。由于for循环变量的增量为2,因此i分别取值0,2,4,6,8,因为t[0]=1,t[2]=3,t[4]=5,t[6]=7,t[8]=9,对其进行求和运算,结果为25。

  • 第13题:

    有以下程序

    main( )

    { int s=0,a=1,n;

    scanf("%d",&n);

    do

    { s+=1; a=a-2; }

    while(a!=n);

    printf("%d\n",s);

    }

    若要使程序的输出值为2,则应该从键盘给n输入的值是

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:本题考查了循环的执行,因s在程序中起一个计数变量的作用,即记录循环执行的次数,若循环执行  两次,a的值等于n时退出循环,即a减两次2后应等于n,可推算出n的值为-3。

  • 第14题:

    有如下程序: main() { int s=0, a=1,n; scanf("% d", &n); do { s+=1; a=a-2;} while(a!=n) printf("% d\n", s); } 若要使程序输出2,则应该从键盘输入的值是______。

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:本题中如果printf函数输出为2,需要执行两次s+=1语句,第一次执行完循环语句后得s=1、a=1-2=-1,第二次执行完循环语句后得s=1+1=2、a=-1-2=-3,所以正确答案为-3。

  • 第15题:

    有以下程序 include void fun(int n, int *p) { int f1,t2; if(n==1 |

    有以下程序 #include <stdio.h> void fun(int n, int *p) { int f1,t2; if(n==1 ||n==2) *p=1; else { fun(n-1,&f1); fun(n-2,&f2); *p=f1+f2; } } main() { int s; fun(3,&s); printf("%d\n", s ); }

    A.2

    B.3

    C.4

    D.5


    正确答案:A
    解析:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。本题中的fun()函数直接调用了自身,所以它是一个递归函数。fun()函数中,当形参n为1或2时,让形参p所指内容为1。从这里可以看出形参p的用途是输出一个整数,所以我们不妨记作fun(1)=1、 fun(2)=1。如果是其他情况,那么输出结果*p的内容为f(n)=f(n-1)+f(n-2)。由此可见, fun()函数的作用是求斐波纳契数列第n项的值(斐波纳契数列第1和2项的值为1,以后各项分别为前两项之和:1、1、2、3、5、8、13……)。主函数中通过fun()函数,求第3项值;所以输出结果为2,故应该选择A。

  • 第16题:

    有以下程序 main() { int s=0,a=1,n; seanf("%d",&n); do {s+=1;a=a-2;} while(a!=n); printf("%d\n",s); } 若要使程序的输出值为2,则应该从键盘给n输入的值是

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:根据题目要求,最后要使输出的s值为2,在程序中改变。的值语句只有循环体中的s+=1;语句,而初始9的值为o,显然要使s的值变为2,该语句必须执行,两次,即do-while循环中的循环体要执行两次,而在do-while中,首先不进行条件而执行do后面的循环体语句,然后再判断while循环条件。所以说不管循环判断条件是否为真s+=1;语句至少执行一次,根据分析,只需要while后面括号的循环判断表达式的值为真一次且只能为真一次,将四个选项中的内容依次代入该程序中不难得到只有n=-3刚好使循环判断条件a!=n为真一次。

  • 第17题:

    有以下程序:includeint a=2;int f(int *a){return (*a) ++;}main(){ int s=0;{ int a=

    有以下程序: #include <stdio.h> int a=2; int f(int *a) { return (*a) ++;} main() { int s=0; { int a=5; s+=f(&a); } s+=f(&a); printf("%d\n",s) } 执行后的输出结果是( )。

    A.10

    B.9

    C.7

    D.8


    正确答案:C
    解析:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用这些变量。对于main函数中的{inta=5;s+=f(&a);},a只在花括号内有效。在函数之外定义的变量称为外部变量,外部变量是全局变量,它的有效范围是从定义该变量的位置开始到本源文件结束。程序开头的定义inta=2;使a成为全局变量,main函数中第二个s+=f(&a);语句中的a就是这个全局变量。

  • 第18题:

    有以下程序 include main() { int i=5; do { if(i%3==1)

    有以下程序 #include <stdio.h> main() { int i=5; do { if(i%3==1) if(i%5==2) { printf"*%d",i); break; } i++; } while(i!=0); printf("\n"); } 程序的运行结果是______。

    A.*7

    B.*3*5

    C.*5

    D.*2*6


    正确答案:A
    解析:do-while语句的特点是先执行循环体,然后判断循环条件是否成立,当循环条件的值为0时循环结束。break的特点;当break出现在循环体中,则在执行break后,跳出本层循环体。本题执行过程如下:
    i=5:不满足条件i%3=1,执行i++,此叫i=6;
    i=6:不满足条件i%3=1,执行i++,此时i=7;
    i=7:满足条件i%3=1,执行内嵌if,判断条件i%5=2,满足,输出“*7”,执行break,跳出do循坏体,执行“printf("\n");”,结束。

  • 第19题:

    以下程序的输出结果是()。includeint fun(int n,int *s){ int f1,f2;if(n==0||n==1)*s=

    以下程序的输出结果是( )。 #include<stdio.h> int fun(int n,int *s) { int f1,f2; if(n==0||n==1) *s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } void main() { int x; fun(6,&x); printf("\n%d" ,x);}

    A.7

    B.13

    C.9

    D.10


    正确答案:B
    解析:n=0或n=1是递归的终止条件。然后利用已知值逐步递推求出未知值。注意:通过传送地址值,在被调用函数中直接改变调用函数中的变量的值。

  • 第20题:

    以下程序的输出结果是【】。include main ( ) int a[3][3] ={{1,2,9},{3,4,8},{5,6,7} } ,

    以下程序的输出结果是【 】。

    include <stdio.h>

    main ( )

    int a[3][3] ={{1,2,9},{3,4,8},{5,6,7} } ,i,s=0;

    for(i=0;i<3;i++) s+ =a[i][i] + a[i][3-i-1];

    pfintf("% d \n" ,s);


    正确答案:30
    30 解析:当i=0时,s=0+a[0][0]+a[0][2]=10;i=1时,s=10+a[1][1]+ a[1][1]=18;i=2时,s=18+a[2][2]+a[2][0]=30。

  • 第21题:

    有以下程序includevoid fun(float* p1,int n1,float,*p2,int n2,float* s){ int i;s=(

    有以下程序 #include<stdio.h> void fun(float * p1,int n1,float,*p2,int n2,float * s) { int i; s=(float *)calloc(1,sizeof(float)); *s=0; for(i=0;i<n1;i++) *s+=*p1++; for(i=0;i<n2;i++) *s+=*p2++; } main() { float a[2]={1.1,2.2},b[3]={10.0,20.0,30.0),*s=a; fun(a,2,b,3,s); printf("%f\n",*s); } 上面程序的输出结果是( )

    A.60

    B.3.3

    C.63.3

    D.1.1


    正确答案:D

  • 第22题:

    有以下程序 include int fun(char s[ ]) { int n=0; while(*s<='9'&&*s>='0

    有以下程序

    #include <stdio.h>

    int fun(char s[ ])

    { int n=0;

    while(*s<='9'&&*s>='0') {n=10*n+*s-'0';s++;}

    retum(n);

    }

    main( )

    { char s[10]={'6','1','*','4','*','9','*','0','*'};

    printf("%d\n",fun(s));

    }

    程序的运行结果是

    A.9

    B.61490

    C.61

    D.5


    正确答案:C
    解析:在fin函数中,while循环的功能是:逐个取字符数组s的字符判断其是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位将相应左移一个十进制位。当指针s指向数组的第3位时,循环条件不成立,循环结束,返回n的值,输出n的值为61。

  • 第23题:

    有以下程序:includeint fun(char s[]){ intn=0;while(*s<='9'&&*s>='0'){n=10

    有以下程序: #include <stdio.h> int fun(char s[]) { int n=0; while(*s<='9'&&*s>='0') {n=10*n+*s-'0';s++;} return(n); } main() { char s[10]={'6','1','*','4','*','9','*','0','*'}; printf("%d\n",fun(s)); } 程序的运行结果是( )。

    A.9

    B.61490

    C.61

    D.5


    正确答案:C
    解析:题目fun()函数中while循环的意思是:判断s所指内容是否为数字字符,如果是数字字符,则计算表达式n=10*n+*s-'0';。其中*s-'0'的作用是将相应的数字字符转换为数值,例如字符'8'减去字符'0'后,得到的结果就是数值8了。n=10*n+的作用是将累计变量n中原来内容乘以10,然后再加上刚转换的数字字符的数值,例如原来n的值为1,*s现在的内容为'2',那么执行了n=10*n+*s-'0';语句后,n的值变为12,如果接下来再来一个'8'字符,执行n=10*n+*s-'O';语句后,n的值就是128了。故不难看出fun()函数的作用是“将数字字符串转换为相应的十进制数值,碰到非数字字符时结束”。从主函数中定义的字符数组s的初始化内容可以看出,fun()函数返回值应该是61。故应该选择C。