大一上学期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 <stdio.h>


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。


### 回答1: a. 一个c语言源文件(.c文件)必须包含main函数 是正确的。因为main函数是C语言程序的入口函数,没有它程序无法执行。 b. 一个c语言源文件(.c文件)可以包含两个以上main函数 是错误的。每个程序只能有一个入口函数main。 c. c语言头文件(.h文件)和源文件(.c文件)都可以进行编译 是正确的。头文件和源文件都需要编译成目标文件才能链接成可执行程序。 d. 在一个可以正确执行的c语言程序中,一个c语言函数的声明(原)可以出现任意多次 是正确的。函数的声明可以在多个文件中出现,只要它们的函数名和参数列表相同即可。 ### 回答2: a. 一个C语言源文件(.c文件)必须包含main函数是正确的。main函数是C程序的入口点,编译器在编译需要找到这个函数来生成可执行文件。 b. 一个C语言源文件(.c文件)不可以包含两个以上的main函数。只能有一个main函数作为程序的入口,如果有多个main函数会导致编译出错。 c. C语言头文件(.h文件)和源文件(.c文件)都可以编译是正确的。头文件和源文件都可以编译成目标文件,它们一般都是被链接器连接成最终的可执行文件。 d. 在一个可以正确执行的C语言程序中,一个C语言函数的声明(原)可以出现任意多次是正确的。函数声明只是告诉编译器函数的名称、参数和返回值等信息,在函数定义之前声明多次是可以的,但是如果函数定义和声明信息不匹配就会导致编译出错。 ### 回答3: 答案:只有选项a和c是正确的。 a. 首先,一个C语言源文件(.c文件)中通常包含一个main函数,它是程序入口。如果没有main函数,编译器将无法识别程序的入口点,也就无法正确执行程序。 b. 一个C语言源文件(.c文件)不应该包含两个以上的main函数。因为只有一个main函数可以作为程序入口,而且在同一个程序中,有多个入口会造成混乱。如果确实需要多个入口,则可以将main函数定义在不同的源文件中,并在编译链接起来。 c. C语言头文件(.h文件)和源文件(.c文件)都可以进行编译。头文件通常包含函数声明、类定义、常量定义等信息。它们不包含实际的代码,因此可以被多个源文件共享。在编译,头文件将被包含在每个引用它的源文件中,然后一起编译成目标文件。 d. 在一个可以正确执行的C语言程序中,一个C语言函数的声明(原)只能出现一次。函数原告诉编译器函数的返回值类、参数类和数量,以便在调用该函数进行参数类检查和类转换。如果一个函数原出现多次,编译器将无法确定哪个是真正的原,从而导致编译错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值