若有如下程序: main() {int a=0,t=0; while(!a!=0) t+=a++; printf("%d,%d\n",t,A) ; } 则程序运行后的输出结果是( )A.0,1B.1,0C.0,0D.1,1

题目

若有如下程序: main() {int a=0,t=0; while(!a!=0) t+=a++; printf("%d,%d\n",t,A) ; } 则程序运行后的输出结果是( )

A.0,1

B.1,0

C.0,0

D.1,1


相似考题
更多“若有如下程序:main(){int a=0,t=0;while(!a!=0)t+=a++;printf("%d,%d\n",t,A) ;}则程序运行后的 ”相关问题
  • 第1题:

    有以下程序: int a=2; int f(int n) {static int a=3; int t=0; if(n%2){static int a=4;t+=a++;} else{static int a=5;t+=a++;} return t+a++; } main() {int s=a,i; for(i=0;i<3;i++)s+=f(i); printf("%d\n",s); } 程序运行后的输出结果是( )。

    A.26

    B.28

    C.29

    D.24


    正确答案:C
    解析:定义“int a=2;”中的全局变量a,起作用的范围是从定义此变量的位置开始到本源文件结束;定义“static int a=3;”中的静态局部变量a的作用范围是其所在的函数f,并对其只赋一次初值,以后每次调用函数时不再重新赋值,而只保留上次函数调用结束时的值;复合语句“{staticint a=4;t+=a++;}”和“{static int a=5;t+=a++;)”中定义的两个变量a属于复合语句中定义的变量,作用的范围只在其本身所在的复合语句内,对于本程序来讲,第三行定义的静态局部变量并不会对第4、5

  • 第2题:

    有以下程序: int a=4; int f(int n) {int t=0;static int a=5; if(n%2) {int a=6;t+=a++;} else{int a;7;t+=a++;} return t+a++; } main() {int s=a,i=0; for(;i<2;i++)s+=f(i); printf("%d\n",s); } 程序运行后的输出结果是______。

    A.24

    B.28

    C.32

    D.36


    正确答案:B
    解析: 在主函数main()中定义了两个变量s和i,同时给s赋初值a=4,i赋初值0。当i=0时。执行“s+=f(i);”语句,调用f()并将i的初值 0传递给形参n。首先执行if语句中内条件:n%2,若条件为假。则执行else下的语句,a=7,t=7+0=7,使用return返回t,t=7+(a++)=7+5=12,此时a运算完后自增1,变为6;返回主函数中,s=4+12=16。当i=1时,执行“s+=f(i);”语句,调用f()并将i的初值1传递给形参n。首先执行if语句中的条件:n%2,条件为真,执行if

  • 第3题:

    有以下程序 int a=2; int f(int n) { static int a=3; int t=0; if(n%2) {static int a=4; t+=a++;} else {static int a=5; t+=a++;} return t+a++; } main ( ) { int s=a, i; for (i=0;i<3; i++) s+=f (i) print f ("%d\n" , s ); } 程序运行后的输出结果是

    A.26

    B.28

    C.29

    D.24


    正确答案:C
    解析:全局变量的生存期是整个程序的运行期间,作用域是从变量定义的位置开始,到整个源文件结束止。但是,若全局变量和某一函数或语句块中的局部变量同名,则在该函数或语句块中,此全局变量被屏蔽,即在该函数或语句块内,访问的是局部变量,与同名的全局变量不发生任何关系。静态局部变量的生存期与全局变量相同,作用域和局部变量一样都是整个函数成语旬块内有效。程序第一行定义了一个全局变量a,在f()函数开头也定义了一个静态局部变量a,而且在后面if语句的两个子句中都定义了静态局部变量a。这4个变量a虽然名字一样,但却是4个独立的变量,而且在整个程序运行期都存在。在主函数中,在定义变量s时将s初始化为全局变量a的值2,然后使用一个for循环分别调用了3次f(0)、f(1)、f(2),并将得到的值累加到变量s中。第1次调用n=0为偶数,执行else子句,此时t累加的是else子句中的变量a,所以执行后else子句中的a变为6,t变为5,然后return语句中的a是函数f()开头定义的a,执行后函数开头的a变为4,所以返回值是5+3=8。第2次调用n为1是奇数,执行if子句,所以t变为4,if子句中的a变为5,然后返回时函数开头的a变为5,返回值是4+4=8。第3次调用n为2是偶数,又执行else子句,else子句中的a现在还是上次执行后的值6,所以t=6,然后返回时加上函数开头的a的当前值5,最后返回11。所以s最终的值是2+8+8+11=29。故应该选择C。

  • 第4题:

    若有如下程序: main() {char a[]={"1234"};int i,t=0; for(i=0;a[i]>='0'&&a[i]<='9';i+=2) t=10*t+a[i]一-'0'; printf("%d\n',t);} 则程序运行后的输出结果是( )。

    A.13

    B.1234

    C.24

    D.123


    正确答案:A
    解析:程序中首先以字符串常量定义并初始化了一个字符数组a,此时数组a包含5个元素{'1','2','3','4','\0'},然后定义了一个变量t,并初始化为0。接下来是一个for循环,循环变量i从0开始每次递增2,循环条件a[i]是一个数字字符。因为a[0]、a[2]分别是数字字符'1'、'3'而a[4]不是,所以循环体执行了两次,第一次执行前t为0,执行后t=10*t+a[i]-'0'=10*0+'1'-'0'=1,所以第二次执行结果为t=10*t+a[i]-'0'=10*1+'3'-'0'=13。程序运行后的输出结果是13,本题选A。

  • 第5题:

    有以下程序: int a=4; int f(int n) { int t=0; static int a=5; if(n%2) {int a=6; t+=a++;} else {int a=7; t+=a++;} return t+a++; } main() { int s=a,i=0; for(;i<2; i++) s+=f(i); printf("%d\n",s); } 程序运行后的输出结果是( )。

    A.24

    B.28

    C.32

    D.36


    正确答案:B
    解析:题目中第1行声明了一个全局变量a,在函数f()中,也声明了一个静态变量a,这时全局变量被屏蔽,即在f()函数中用到的a是其内部定义的这个静态变量a,而不是全局变量。但f()函数的if子句和else子句又分别了局部变量a,这时静态变量a又被屏蔽,即在if子句中使用的是if子句自己定义的a,else子句也是这样。在主函数中,通过for语句连续执行了2次f()函数,并将返回值累加到s中,且s被全局变量a初始化,即初始值是4。第1次调用f(),参数值为0,0能被2整除,执行if子句,t被自增6,a增1不会影响外面的变量a。函数返回t和静态变量a的和,即11,此时,静态变量a被增1,这次对a的改变会带入到下一次f()函数的调用小去。第2次调用f(),参数值为1,1不能被2整除,执行else子句,t被自增7,a增1不会影响外面的变量a。函数返回t和静态变量a的和,此时a的值为上次调用f()时增1后的值6,即返回7+6=13。所以,主函数中s现在的值为4+11+13=28。故应该选择B。