【PTA基础题错题集】

1

语句int *p; *p=50;执行时,不会有任何错误
分析:有错误,这个指针是空指针,没有对应的地址,直接赋值会出现错误。

2

二维数组定义的一般形式如下,其中的类型名指定数组名的类型。 类型名 数组名[行长度][列长度];
分析:错误,类型名指定的是数组中的元素类型。

3

若变量已正确定义并赋值,符合C语言语法的表达式是 __.
A.a=2++;
B.a=3,5;
C.a=a+1=3;
D.12.3%4;
分析:选B
A 2++, 常量不能自加, 错误.
B a=3,5等效于a=3, 正确.
C a+1=3错误.
D%取余运算只能用于整型. 错误

4

运算符“+”不能作为单目运算符。
分析:错误,是可以的,表正数的意思

5

表达式 ~( ~2<<1)的值是5。
分析:正确,~的优先级高于<<

6

函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为( )。
int f(int m)
{ static int i=0;
int s=0;
for(;i<=m;i++)
s+=i;
return s;
}
解析:答案为15,原因是静态局部变量的生存周期为整个程序。

7

在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。
解析:非常正确。不过有点难懂是什么意思,这里我再讲明白一点。定义嵌套的结构类型,在内部的结构必须在外部结构定义之前被定义一下,否则会报错。
在这里插入图片描述
在这里插入图片描述

8

全局变量只能定义在程序的最前面,即第一个函数的前面。
分析:错误,原因如下:
在这里插入图片描述
原文链接:http://c.biancheng.net/view/1858.html

9

若变量已正确定义,执行以下while语句将陷入死循环。
i = 1;
while (i <= 10) ;
i++;
分析:注意第二行末尾的;(阴间考法)

10

下列程序输出结果为?
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;
}
解析:else与离他最近的且尚未配对的if配对,因此结果为2

11

设计几组样例?
解析:这一类题保证每一个分支和单个条件的每一种都跑到就可以了。(虽然我觉得没有必要)

12

执行以下程序段,输入1.1 0.01 365,输出1.1#0.010#365。
int day;
double factor, initial;
scanf(“%lf %d %lf”, &initial, &factor, &day);
printf(“%.1f#%.3f#%d”, initial, factor, day);
解析:读入类型不匹配,出错。

13

c语言源程序是文本文件,目标文件和可执行文件是二进制文件。
解析:正确。

14

定义FILE *fp; 则文件指针fp 指向的是()。(2分)
A,文件在磁盘上的读写位置
B,文件在缓冲区上的读写位置
C,整个磁盘文件
D,文件类型结构体
答案:D

15

在定义结构类型时,关键字struct和它后面的结构名共同组成一个新的数据类型名。
正确(不过好像仅限于C,C++里面是可以不写struct的)

16

一个结构类型变量所占的内存空间是其各个成员所占内存空间之和。
错误,解析见下面那篇博客。

我转载过一篇博客,说明了这个问题(戳这里

17

C语言 随机操作只适用于文本文件
错误。随机操作文本指的是用seek函数重新定位文件指针进行读写操作,访问数组中的元素也是随机的,知道下标就可以,所以说随机操作不只是针对于文件来讲。

18

缓冲文件系统的文件缓冲区位于()。
A.磁盘缓冲区中
B.磁盘文件中
C.内存数据区中
D.程序文件中
正确答案:C。文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间

19

函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式必须是( )。
A.只写
B.追加
C.读或读写
D.答案B和C都正确
正确答案:D

20

int *p = 1000;请判断这个语句的正确性
答案:错误。在内存中常量的地址不能赋给指针。

21

执行以下程序段,sum的值是1.5。
int i, sum;
sum = 0;
for (i = 1; i <= 2; i++){
sum = sum + 1.0/i;
}
答案:错误。因为sum定义的类型为int

22

对于以下结构定义,(*p)->str++中的++加在()。
struct {
int len;
char *str
} *p;
答案:语法错误

23

以下程序运行后的输出结果是
#include<stdio.h>
void point(char *p)
{ p += 3; }
int main( )
{
char b[4] = {‘a’, ‘b’, ‘c’, ‘d’}, *p = b;
point§;
printf(“%c\n”, *p);
return 0;
}
答案:‘a’。形参和实参的问题。

24

对于 int 型的二级指针变量,它既可以指向同类型的一级指针变量,也可以指向同类型的普通(非指针)变量。
答案:错误
解析:二级指针间接引用一次后必须是地址值。

25

下列程序的运行结果为

#include <stdio.h>
int main()
{
    int x[5] = {2, 4, 6, 8, 10}, *p, **pp;
    
    p = x;
    pp = &p;
    printf("%d," , *(++p));
    printf("%d\n" , (**pp)+1);
    
    return 0;
}

答案:4,5

26

写出下列程序段的运行结果

const char *st[] = {"Hello", "world", "!"}, **p = st; 

p++;
printf("%s-%c\n", *p, **p);
(*p)++; 
printf("%s-%c-%c\n", *p, **p, (**p)+1);

第一行:world-w
第二行:orld-o-p
解析:关键就在(*p)++的理解,其实就是把p指向的地址从原来的world的首地址改为次首地址。

27

下列程序的输出结果为

#include <stdio.h>
int main()
{
	int a[4] = { 1, 2, 3, 4 };
	int *ptr1 = (int *)(&a + 1);
	printf( "%x", ptr1[-1]);
	return 0;
}

答案:4
解析:&a是一个4大小的数组指针,加一后指向4的下一个位置

28

#include<stdio.h>
int main()
{
    char  s[ ]="159",*p;
    p=s;
    printf("%c",*p++);
    printf("%c",*p++);
    return 0;
}

程序的运行结果为:15
解析:++加在距离它最近的变量上(从右往左)

29

若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用函数时,正确的调用方法是( )

A.
(*p)max(a+b);
B.
*pmax(a,b);
C.
(*p)(a,b);
D.
*p(a,b);

答案:C
解析:定义和调用均需要小括号

30

假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int *)。
答案:F
原因:应当是数组指针 (int *)[10]

31

对于以下程序,能够正确表示二维数组 t 的元素地址的表达式是( )。

int main(void)
{
    int k, t[3][2], *pt[3];
        
    for ( k = 0; k < 3; k++) {
        pt[k] = t[k];
        }
                
    return 0;
}

A.&t[3][2]
B.pt[0]
C.
(pt+1)
D.&pt[2]
选择:C
t的元素即是t[0] t[1] t[2]…

32

在 C 程序中,函数既可以嵌套定义,也可以嵌套调用。

答案:F
分析:可以嵌套调用,不能嵌套定义

33

有一段程序如下:

int getSum(int k){
    int s;
    s = getSum(k+1) + k;
    return s;
}
int main(){
    int sum;
    sum = getSum(0);
    return 0;
}

递归函数getSum设计不合理,这段程序将无限递归,始终不能结束。

答案:F
分析:当堆栈满了之后就会停下来

34

对于以下程序,能够正确表示二维数组 t 的元素地址的表达式是( )。

int main(void)
{
    int k, t[3][2], *pt[3];
        
    for ( k = 0; k < 3; k++) {
        pt[k] = t[k];
        }
                
    return 0;
}

A. &t[3][2]

B.*pt[0]

C.*(pt+1)

D.&pt[2]

答案:C
解析:题目要求找到一个一级指针
A越界
B元素的值
Cpt[1]一级指针
D 二级指针

  • 10
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crer_lu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值