大一上学期c语言PTA错题总结(自用)(02)

1.下列程序段的输出结果是(C)。

​
int main(void)
{   
      int  a = 2, b = -1, c = 2;
      
      if(a < b)
            if(b < 0)  
                  c = 0;
      else  c++;
      printf("%d\n",c);    
      
      return 0;
}

​

A.0

B.1

C.2

D.3

else与之前与其最近的且不带else的if配对,虽然这个题中没有加括号,但要清楚程序的执行顺序。上面的代码和下面等价:

#include 


int main(void) {
	int  a = 2, b = -1, c = 2;

	if (a < b) {

		if (b < 0) {

			c = 0;
		} else {

			c++;
		}
	}
	printf("%d\n", c);

	return 0;
}

2.当字符型变量ch 取何值(或何范围)时输出“YES”(A)

char ch;
scanf("%c",&ch);
if(ch>='A'&&ch<='Z')
if(ch!='I'&&ch!='K')printf("NO");
else printf("YES");

A.I和K

B.除I和K以外的大写字母

C.除大写字母外的其他字符

D.大写字母

和上一个题大同小异,同样需要正确的刨析if语句中每一层的关系。 


3.设变量已正确定义,以下(BCD)是合法的switch语句。

A.

switch(choice){
      case 1: price = 3.0; break;
      case 2: price = 2.5; break;
      case 3: price = 4.0; break;
      case 4: price = 3.5; break;
      case 1: price = 3.0; break;
      default: price = 0.0; break;
}

B.

switch(choice){
      case 1: price = 3.0; break;
      case 2+2: price = 3.5; break;
}

C.

switch(9){
      case 3: price = 4.0; break;
      case 2: price = 2.5; break;
}

D.

switch(choice* choice+1){
      default: price = 0.0; break;
      case 2: price = 2.5; break;
}

当时的主要困惑是C的9是否正确,9也算一个表达式。 

另外,做关于switch的题时一定要关注break的使用。 


4.对下列代码的描述正确的是:C

#include "stdio.h"
int main(){
    long num=1;
    while(num++ > 0) for(long i=num; i >=0; i--)printf("i :=\n \t %ld \n" , i);
    return 0;
}

A.

程序有编译错误,不能执行

B.

循环条件永为真,循环无限次,程序根本停不下来,打印输出无限行

C.

循环有限次,程序正常结束,打印输出有限行

D.

程序运行过程必定会出错(崩溃),结果打印输出有限行

 变量越界而反问题,在错题(1)中有具体介绍。

但同时发现,有些题会给出几个选项问到下列哪一个不是死循环,这时有时候便不会考虑这个问题,而是将这一问题笼统的归结为死循环,还是要具体问题具体分析,选出最优解。


 5. 以下说法正确的是:(D)

A.一个C语言源文件(.c文件)必须包含main函数

B.一个C语言源文件(.c文件)可以包含两个以上main函数

C.C语言头文件(.h文件)和源文件(.c文件)都可以进行编译

D.在一个可以正确执行的C语言程序中,一个C语言函数的声明(原型)可以出现任意多次

一个函数的声明确实可以出现很多次,而一个c的项目可以包含很多.c文件,其中有且只能有一个有main函数 。


6. 关于递归函数以下叙述错误的是(B )。

A.

递归函数是自己调用自己。

B.

递归函数的运行速度很快。

C.

递归函数占用较多的存储空间。

D.

递归函数的运行速度一般比较慢。 

递归函数运行速度一般比较慢,记住就好。 


7.If all variables have been defined and declared in the following program, all the variables which can be used in function fun() are _A_.(如果在下面的程序中定义并声明了所有变量,那么fun()函数中可以使用的所有变量都是_A_。)

void fun(int x)
{
    static int y;
    ……
    return;
}
int z;
void main( )
{
    int a,b;
    fun(a);
    ……
}

A.x,y

B.x,y,z

C.a,b,y,z

D.a,b,x,y,z

  

z虽然是全局变量,但定义在函数fun之后,调用不到,而a、b是主函数里的,也调用不到 


8. 静态变量的作用域是整个文件。(×)

看具体定义位置。

9.当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在静态区。(×)

以上两题都是关于变量的存储方式问题,个人总结有以下需要注意的点:

《1. 全局变量全部存放在静态存储区;

《2.形参、函数中定义的没有用static声明的变量全部分配到动态存储区;


10.The following piece of code prints out_B_.

for (a=1,i=-1; -1<=i<1; i++) {
    a++;
    printf("%2d", a);
}
printf("%2d", i);

 A.2 3 1

B.-1

C.1 2 0

D.3

在这个题的循环判断条件中的连续判断里面,从左到右先判断-1<=i,显然成立,返回1,之后再判断1<1,不成立,故不进入for循环,直接输出i。


本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/66582a5860.html