设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf(“%d”,s); 则(50)。A.运行程序段后输出0B.运行程序段后输出1C.程序段中的控制表达式是非法的D.程序段执行无限次

题目

设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf(“%d”,s); 则(50)。

A.运行程序段后输出0

B.运行程序段后输出1

C.程序段中的控制表达式是非法的

D.程序段执行无限次


相似考题

2.●试题四阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【程序4.1说明】"背包问题"的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,...,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。如下程序均能求得"背包问题"的一组解,其中程序4.1是"背包问题"的递归解法,而程序4.2是"背包问题"的非递归解法。【程序4.1】#include<stdio.h>#define N 7#define S 15int w[N+1]={0,1,4,3,4,5,2,7};int knap(int s,int n){ if(s==0)return 1;if (s<0||(s>0& &n<1))return 0;if( (1) )){printf(″%4d″,w[n]);return 1;}return (2) ;}main(){if( knap(S,N))printf(″OK!\n″);else printf(″N0!\n″);}【程序4.2】#include<stdio.h>#define N 7#define S 15typedef struct {int s;int n:int job;} KNAPTP;int w[N+1]={0,1,4,3,4,5,2,7};int knap (int s,int n);main( ) {if (knap (S,N)) printf (″OK!\n″);else printf (″NO!\n″);}int knap (int s,int n){ KNAPTP stack[100],x;int top,k,rep;x.s=s;x.n=n;x.job=0;top=l;stack[top]=x;k=0;while( (3) ) {x=stack [ top ];rep=1;while ( !k && rep ) {if (x.s==0)k=1;/*已求得一组解*/else if (x.s<0 || x.n <=0)rep=0;else{x.s= (4) ;x.job=1;(5) =x;}}if(!k){rep=1;while(top>=1&&rep){x=stack[top--];if(x.job==1){x.s+=w[x.n+1];x.job=2;stack[++top]=x;(6) ;}}}}if(k){/*输出一组解*/while(top>=1){x=stack[top--];if(x.job==1)printf(″%d\t″,w[x.n+1]);}}return k;}

3.阅读下列程序说明和C++代码,将应填入(n)处。【说明】“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。如下程序均能求得“背包问题”的一组解,其中程序4.1是“背包问题”的递归解法,而程序4.2是“背包问题”的非递归解法。【程序4.1】include<stdio.h>define N 7define S 15int w[N+1]={0,1,4,3,4,5,2,7};int knap(int s,int n){ if(s==0)return 1;if(s<0||(s>0& &n<1))return 0;if((1)))|printf("%4d",w[n]);return 1;} return (2);}main(){if(knap(S,N))printf("OK!\n");else printf("NO!\n");}【程序4.2】include<stdio.h>define N 7define S 15typedef struct{int s;int n:int job;} KNAPTP;int w[N+1]={0,1,4,3,4,5,2,7};int knap(int s,int n);main(){if(knap(S,N))printf("OK!\n");else printf("NO!\n");}int knap(int s,int n){ KNAPTP stack[100],x;int top,k,rep;x.s=s;x.n=n;x.job=0;top=|;Stack[top]=x;k=0;while((3)){x=Stack[top];rep=1;while(!k && rep){if(x.s==0)k=1;/*已求得一组解*/else if(x.s<0||x.n <=0)rep=0;else{x.s=(4);x.job=1;(5)=x;}}if(!k){rep=1;while(top>=1&&rep){x=stack[top--];if(x.job==1){x.s+=W[x.n+1];x.job=2;Stack[++top]=x;(6);}}}}if(k){/*输出一组解*/while(top>=1){x=staCk[top--];if(x.job==1)printf("%d\t",w[x.n+1]);}}return k;}

更多“设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf(“%d”,s); 则(50)。A.运行 ”相关问题
  • 第1题:

    设有以下程序段

    int x=0,s=0;

    while(!x!=0)s+=++x;

    printf("%d",s);

    A.运行程序段后输出0

    B.运行程序段后输出1

    C.程序段中的控制表达式是非法的

    D.程序段执行无限次


    正确答案:B

  • 第2题:

    阅读下列程序,并给出运行结果

    SET,FALK OFF

    CLEAR

    STORE 0 T0 X,Y,S1,S2,S3

    D0 WHILE X<1O

    X=X +l

    DO CASE

    CASE INT(X/2)=X/2

    S1:SI+X/2

    CASE MOD(XJ 3)=0

    S2=S2+X/3

    CASE INT(X/2)<>X/2

    S3=S3+1

    ENDCASE

    ENDDO

    ?S1,S2,S3

    SET TALK 0N

    RETURN

    运行以上程序后,屏幕显示【 】。


    正确答案:15.0000 4.0000 3
    15.0000 4.0000 3

  • 第3题:

    以下程序运行后的输出结果是【】。includemain(){int k=1,s=0; do{ if((k%2)!=0)continue;

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

    include<stdio.h>

    main()

    { int k=1,s=0;

    do{

    if((k%2)!=0) continue;

    s+=k; k++;

    }while(k>10);

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

    }


    正确答案:s=0
    s=0 解析:do-while循环结构的形式如下:
    do
    循环体
    while(表达式);
    循环的执行过程如下:
    ①执行do后面循环体中的语句。
    ②计算while后—对圆括号中表达式的值。当值为非0时,转去执行步骤1;当值为0时,执行步骤3。
    ③退出do-while循环。
    在本题中先判断k是否为偶数,如果不是则结束本次循环,进行下—次的循环条件判定,由于没有改变k的值,k>10的不成立,退出do-while循环,执行后面的printf("s=%d\n",s);语句,因为s=0,所以输出结果为s=0。

  • 第4题:

    有以下程序: main() { int x[8]={8,7,6,5,0,0},*s; s=x+3; printf("%d\n",s[2]); } 程序运行后的输出结果是______。

    A.随机值

    B.0

    C.5

    D.6


    正确答案:B
    解析:本题定义了数组x[8]和指针变量s,由C语言规定,指针加1的含义是使指针指向数组的下一个元素,而不是指针值简单的加1,因此通过s=x+3;使s指向数组元素x[3]。由于指向数据的指针变量可以带下标表示,如s[i]与*(s+i)等价。因此题目要求输出s[2]的值,即*(s+2)的值,也就是x[5]的值,为0。

  • 第5题:

    有以下程序 int a=3; main() { int s=0; { int a=5;s+=a++;} s+=a++; printf("%d\n",s); } 程序运行后的输出结果是______。

    A.8

    B.10

    C.7

    D.11


    正确答案:A

  • 第6题:

    以下程序运行后的输出结果是( )。 include main() { int x=20; printf("%d", 0

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

    include<stdio.h>

    main()

    { int x=20;

    printf("%d", 0<x<20);

    printf("%d\n", 0<x && x<20);

    }


    正确答案:10
    10 解析:表达式0x20,首先计算0x,其值为1,再计算120,其值为1,输出1;表达式0x && x20,0x为1,x20为0,再计算1 && 0,其值为0,输出0。所以输出结果为10。

  • 第7题:

    下列程序的运行结果是()。includevoid sub(int*s,int*y){static int m=4;*y=s[0];m++;}

    下列程序的运行结果是( )。 #include<stdio.h> void sub(int*s,int*y) {static int m=4; *y=s[0]; m++; } void main() {int a[]={1,2,3,4,5},k; int x; printf("\n"); for(k=0;k<=4;k++) {sub(a,&x); printf("%d,",x); } }

    A.1,1,1,1,1,

    B.1,2,3,4,5,

    C.0,0,0,0,0,

    D.4,4,4,4,4,


    正确答案:A
    解析:本题中sub(int*s,int*y)函数的参数是两个指针型变量,在函数体内将数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通过for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1赋给x,并输出。

  • 第8题:

    【程序说明】程序功能是计算一个整数的各位数字之和。

    【程序】

    SET TALK OFF

    INPUT“x=”TO x

    s=0

    DO WHILE x!=0

    s=s+ MOD(x,10)

    (1)

    (2)

    ? S

    SET TALK ON

    (1)

    A.x=INT(x*10)

    B.x=INT(x/10)

    C.x=x-INT(x/10)

    D.x=x-INT(x*10)


    正确答案:B
    解析:此程序运行步骤如下:首先等待用户屏幕输入一个数字,由变量x保存该数字;将0赋值给变量s,此变量用于计算各位数字和;使用一个DO WHILE循环语句,首先判断x是否等于0,如果等于0,退出循环,如果不等于零,则使用MOD()(取余)函数求出x除以10的余数(数字的个位数),并累加到变量s中。接下来,程序应当将变量x除以10并取整,使之缩小10倍,以便将x的10位数字变为个位数字,所以在此应当选择选项B。

  • 第9题:

    有以下程序:include main(){union{charch[2];int d;} s;s.d=0x4321;printf("%x,%x\n",

    有以下程序: #include <stdio.h> main() { union { charch[2]; int d; } s; s.d=0x4321; printf("%x,%x\n",s.ch[0],s.ch[1]); } 在16位编译系统上,程序执行后的输出结果是( )。

    A.21,43

    B.43,21

    C.43,00

    D.21,00


    正确答案:A
    解析:int型变量和字符数组ch共用两个字节的存储单元,通常ch[0]位于低字节,ch[1]位于高字节,所以s.ch[0]=21,s.c[1]=43。

  • 第10题:

    设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s);

    A.运行程序段后输出0

    B.运行程序段后输出1

    C.程序段中的控制表达式是非法的

    D.程序段执行无限次


    正确答案:B
    解析:本题考查逻辑非运算符和不等于运算符的区别,逻辑非运算符“!”的优先级大于不等于运算符“!=”的优先级。注意:for语句和do…while语句的使用。

  • 第11题:

    main( )

    { int x=31,y=2,s=0;

    do

    { s-=x*y;

    x+=2;

    y-=3;} while( x%3==0);

    printf(“x=%d\ty=%d\ts=%d\n”,x,y,s);

    }


    正确答案:
    2.x=35 y=-4 s=-29

  • 第12题:

    多选题
    设有程序段:intx=0,s=0;while(x!=0)s+=++x;printf("%d",s);,则运行程序段后()
    A

    输出0

    B

    输出1

    C

    控制表达式是非法的

    D

    执行无限次


    正确答案: B,C
    解析: 暂无解析

  • 第13题:

    有以下程序main(int argc,char *argv[]){ int n,i=0;while(argv[1][i]!='\0'){ n=fun(); i++;}printf("%d\n",n*argc);}int fun(){ static int s=0;s+=1;return s;}假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令exam 123〈回车〉则运行结果为

    A.6

    B.8

    C.3

    D.4


    正确答案:A
    解析:本题中主函数带有两个参数,DOS下执行命令examl23后,argc为2,argv[1]为“exam”,argv [2]为“123”,且变量s由static定义后,每次调用fun()函数,s保留上一次的值,所以表达式n*argc最终值为3X2=6。

  • 第14题:

    阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    “背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn。希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。

    如下程序均能求得“背包问题”的一组解,其中程序1是“背包问题”的递归解法,而程序2是“背包问题”的非递归解法。

    【程序1】

    include<stdio.h>

    define N 7

    define S 15

    int w[N+1]={0,1,4,3,4,5,2,7};

    int knap(int s, int n)

    {

    if(s==0) return 1;

    if(s<0 || (s>0 && n<1))return 0;

    if((1)){/*考虑物品n被选择的情况*/

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

    return 1;

    }

    return (2);/*考虑不选择物品n的情况*/

    }

    main()

    {

    if(knap(S,N))printf("OK!\n");

    else printf("N0!\n");

    }

    【程序2】

    include<stdio.h>

    define N 7

    define S 15

    typedef struct{

    int s;

    int n;

    int job;

    }KNAPTP;

    int w[N+1]={0,1,4,3,4,5,2,7};

    int knap(int s, int n);

    main()

    {

    if(knap(S,N)) printf("0K!\n");

    else printf("N0!\n");

    }

    int knap(int s, int n)

    {

    KNAPTP stack[100],x;

    int top, k, rep;

    x.s=s;x.n=n;

    x.job=0;

    top=1; stack[top]=x;

    k=0;

    while( (3) ){

    x=stack[top];

    rep=1;

    while(!k && rep){

    if(x.s==0) k=1;/*已求得一组解*/

    else if(x.s<0 || x.n<=0) rep=0;

    else{

    x.s=(4);

    x.job=1;

    (5)=x;

    }

    }/*while*/

    if(!k){

    rep=1;

    while(top>=1 && rep){

    x=stack[top--];

    if(x.job==1){

    x.s +=w[x.n+1];

    x.job=2;

    stack[++top]=x;

    (6);

    }/*if*/

    }/*while*/

    }/*if*/

    /*while*/

    if(k){&nbs


    正确答案:(1) knap(s-w[n]n-1) (2) knap(sn-1) (3) top>=1 && !k 或 top>0 && k==0 (4) x.s-w[x.n--] (5) stack[++top] (6) rep=0
    (1) knap(s-w[n],n-1) (2) knap(s,n-1) (3) top>=1 && !k 或 top>0 && k==0 (4) x.s-w[x.n--] (5) stack[++top] (6) rep=0 解析:本题考查“背包”问题,这是一个非常经典的问题,一般采用递归法实现。
    典型做法是逐个考查每一件物品,对于第i件物品的选择考虑有两种可能。
    .考虑物品i被选择,这种可能仅当包含它不会超过方案总重量限制时才是可行的。选中后继续递归考虑其余物品的选择。
    .考虑物品i不被选择,这种可能仅当不包含物品i也有可能找到价值更大的方案时才是可行的。
    程序1是递归算法实现。对每个物品i,考查选择放入和不放入背包两种情况。函数knap(int s,int n)中,形参s是考查完物品i后背包还能装载的重量,n是考查完物品i后下一个待考查的物品。每次选择一个物品放入背包,那么剩余的物品和背包剩余重量又构成一个“背包问题”。根据注释,空(1)是考查物品n放入背包的情况,既然放入背包,则背包剩余可装重量为 s-w[n],继续考查物品n-1。这点可从主函数的调用形式“knap(S,N)”分析出。故空(1)应填“knap(s-w[n],n-1)”。空(2)是考查物品n不放入背包的情况,既然不放入背包,则背包可装重量仍为s,继续考查物品n-1。故空(2)应填“knap(s,n-1)”。
    程序2是非递归算法实现,相对较难。算法思想仍是对每个物品i分别考查选择放入和不放入两种情况,借助栈实现,即数组stack。其实就是手动完成递归算法中由系统自动完成的压栈、出栈操作。
    据注释“k=1时则求得一组解”可知k为是否求得解的标志:k=0表示没有解,继续求解。经分析,结构变量KNAPTP表示经过考查的物品:分量s表示考查过该物品后,背包所能盛放的物品的重量,分量n表示待考查的下一个物品在数组w中的下标,分量job表示物品当前的状态,job等于1表示物品n可以放入背包,job等于2表示物品不能放入背包,在以后的选取中将不再考虑该物品,初始时job等于0表示背包中没有放入任何物品。rep是一个标志变量,等于。表示结束当前的动作,等于1表示继续进行当前的动作;当栈顶物品不能装入背包时,将rep置为0,表示下一步不再从数组w中取物品。rep初值为1。x为工作节点。
    while( (3) )循环体内的语句可以肯定是考查各个物品n的选择情况。对物品n,先考查将物品放入背包的情况。显然,如果物品n满足放入背包的条件,则空(4)和空(5)完成将物品放入背包的操作,其中空(4)应该是将工作节点x的分量s值减去所考查物品的重量。且n要减1,修改背包可容纳物品的重量和设置下一个待考查物品。而空(5)则需要将修改后的工作节点x送到栈顶,将下一个待考查的物品入栈。故空(4)应填“x.s-w[x.n--]”,空(5)应填“stack[++top]”。
    if(!k)后的程序段是处理所考查的物品不满足放入背包的条件时的情况(rep=0,while(!k && rep)循环结束),则将该物品从背包中取出,修改其job值为2,用以标记该物品不能放入背包。修改完后跳出while(top>=1 && rep)循环,因此需要将rep置为0,用以结束循环。故空(6)应填“rep=0”。

  • 第15题:

    有以下程序段:intx=0,s=0;while(!x!=0)s+=++x;printf("%d",s);则有以下程序段()。

    A.运行程序段后输出0

    B.运行程序段后输出1

    C.程序段中的控制表达式是非法的

    D.程序段执行无限次


    正确答案:B

  • 第16题:

    程序的结果为______。include"iostream.h" template T total(T*data) { Ts=0; while(

    程序的结果为______。

    include"iostream.h"

    template<typename T>

    T total(T*data)

    Ts=0;

    while(*data)

    S+=*data++;

    return S;

    int main()

    {int x[]={2,4,6,8,0,12,14,16,18};

    cout<<total(x);

    retum 0;

    cout<<endl;}


    正确答案:20
    20

  • 第17题:

    有以下程序

    main( )

    { int i=0,x=0;

    for (;;)

    { if(i==3||i==5) continue;

    if (i==6) break;

    i++;

    s+=i;

    };

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

    }

    程序运行后的输出结果是

    A.10

    B.13

    C.21

    D.程序进入死循环


    正确答案:D
    解析:由于程序中for循环没有条件,只有靠其内部的break跳转循环,但在循环执行二次之后,i的值变为3,会使循环一直执行if(i= =3| | i= =5)continue这条语句,使程序进入死循环。

  • 第18题:

    以下程序通过函数sunFun求。这里f(x)=x2+1

    main( )

    { printf("The sum=%d\n",SunFun(10)); }

    SunFun(int n)

    { int x,s=0;

    for(x=0;x<=n;x++) s+=F(【 】);

    return s;

    }

    F( int x)

    { return 【 】);}


    正确答案:x*x+1
    x*x+1 解析:本题中F(  )函数实现表达示f(x) =x2+1,SunFun(  )函数实现循环累加F(0)...F(10)的值因此[14]填x,[15]填x*x+1。

  • 第19题:

    有以下程序:includeusing namespace std;int f(int x);int sum(int n){ int x,s=0; f

    有以下程序: #include<iostream> using namespace std; int f(int x); int sum(int n) { int x,s=0; for(x = 0;x<=n;x++) s+=f(x); return s; } int f(int x) { return (x*x+1); } int main() { int a,b; cout<<"Enter a integer number:"; cin>>a; b=sum(a) ; cout<<a<<","<<b<<end1; return 0; } 如果输入数字3,其输出结果是( )。

    A.3,12

    B.3,16

    C.3,18

    D.4,20


    正确答案:C
    解析:这还是有关调用函数的程序,而且有两层关系。根据程序逐步分析:①本程序包含了3个函数,其中主函数main调用了sam()函数,而在sum()函数中又调用了f函数。②在主函数中,先从键盘输入一整数,并赋值给a。在这里题目开始已给出输入的是整数3,调用函数sum(),并把3传值给形参n,最后输出a,b的值。③在sum()函数中,有一个for循环语句,在每次循环时调用函数f,并把当前的x值传给形参x,循环结束后,返回s值。④在f()函数中,变量x接收实参的值后,执行表达式“x*x+1”,并返回表达式的运算结果。⑤在sum()函数中,由于n值为3,不难看出,当x=0、x=1、x=2和x=3时,都能执行循环体,即调用函数f,第1次循环更改s值为1,第2次循环更改s值为3,第3次更改为8,第4次更改为18,也就是最后一次循环,即最终sum()返回值将是18。⑥在主函数收到sum()函数的返回值,并输出3,18。

  • 第20题:

    以下程序的输出结果是#include <stdio.h>main(){ int k=4,s=0; do{ if((k%3)==0) continue; s+=k;k++; }while(k>10); printf("s=%d\n",s);}


    正确答案:s=4
    在本题中,程序首先定义了两个整型变量k和s,其中k的初值为4,s为0。然后开始做do…while结构的循环。
    第一次循环时,变量k和s的值分别是4和0,条件判断语句的条件结果为假,执行s+=k,此时s的值变为4,而k的值变为5,此时k的值小于10,循环结束;最终输出变量s的结果为s=4。

  • 第21题:

    设有以下程序段: int X=0,s=0; while(!X!=0.s+=++X; prinff(”%d”,S.; 则( )。

    A.运行程序段后输出0

    B.运行程序段后输出l

    C.程序段中的控制表达式是非法的

    D.程序段执行无限次


    正确答案:B
    考查while语句的使用,逻辑非运算符和不等于运算符的区别,逻辑非运算符”!”的优先级大于不等于运算符”!=”的优先级。

  • 第22题:

    设有以下程序段: int x=0,s=0; whUe( ! x! =0) s+ = ++x; printf("%d",s); 则( )。

    A.运行程序段后输出0

    B.运行程序段后输出1

    C.程序段中的控制表达式是非法的

    D.程序段执行无限次


    正确答案:B
    解析:本题中,逻辑非“!”运算符比不等于“!=”运算符优先级高,因此第一次循环时!x!=0的运算结果为真,s的运算结果为1;第二次循环时!x!=0的运算结果为假,循环结束,输出s的结果为1。

  • 第23题:

    设有程序段:intx=0,s=0;while(x!=0)s+=++x;printf("%d",s);,则运行程序段后()

    • A、输出0
    • B、输出1
    • C、控制表达式是非法的
    • D、执行无限次

    正确答案:A,B