Sdut——PTA地信 客观题错题总结

1.switch 语句中多个 case 标号可以共用一组语句。

在 switch 语句的使用中,当多个 case 标号对应的执行语句相同或类似时,可以将它们合并成一组共同的语句,并在最后一个 case 标号中使用 break 语句来终止整个 switch 语句的执行流程。

下面是一个示例代码:

#include <stdio.h>

int main() {
    int day = 3;
    switch(day) {
        case 1:
        case 2:
        case 3:
            printf("今天是周%d,是工作日\n", day);
            break;
        case 4:
        case 5:
            printf("今天是周%d,是休息日\n", day);
            break;
        default:
            printf("输入错误\n");
            break;
    }
    return 0;
}

在这个示例代码中,当 day 的值为 1、2 或 3 时,会输出“今天是周X,是工作日”;当 day 的值为 4 或 5 时,会输出“今天是周X,是休息日”;否则会输出“输入错误”。可以看到,当 day 的值为 1、2 或 3 时,它们共用了一组输出语句。这种用法可以简化代码,提高可读性

2.以数组名作函数参数时,数据传递的方向是“双向的”,因此我们可以说,在此情况下,函数带回的返回值可能不止一个。(错误)

不完全正确。虽然在 C 语言中,数组名作为函数参数时可以实现双向数据传递,但是函数仍然只能返回一个值,因此函数带回的返回值只有一个。

数组名作为函数参数时,实际上传递给函数的是数组的首地址,因此函数可以通过该地址访问到数组中的所有元素,包括读取和修改它们的值。因此,当函数对数组进行修改时,会影响到调用函数的地方的数组元素的值,实现了双向数据传递。

但是,函数仍然只能返回一个值,因此函数带回的返回值只有一个。如果需要返回多个值,可以使用结构体或指针等方式实现。例如,可以定义一个结构体来包含多个返回值,或者使用指针参数返回多个值。

3.语句 char *pstr="lalala!" 的含义是定义了一个指向字符型数据的指针变量 pstr,它指向字符串常量 "lalala!" 的首地址。

4.(float)(1/2)的值为0.5。(错误)

值为0.0    因为在 C 语言中,整数相除时采用的是整数除法,并截断小数部分,因此表达式 1/2 的结果为 0。然后将其强制转换为 float 类型,即 (float)0,得到的结果为 0.0。

如果要得到 0.5 这个浮点数值,可以将其中一个操作数强制转换为浮点类型,例如 (float)1/2 或者 1.0/2,这样就可以得到正确的结果 0.5。

5.指针变量中保存的一定是一个地址

6.语句int *p;printf("%d",*p);中的*p含义相同(错误)

语句 int *p; 定义了一个指向整型数据的指针变量 p,它可以存储一个整型变量的地址。这个语句并没有对指针 p 所指向的内存进行初始化,因此 p 指向的地址是不确定的,它可能指向任意一个整型变量的地址,也可能是一个未定义的地址。

语句 printf("%d",*p); 中的 *p 表示对指针变量 p 所指向的内存位置进行解引用(即取出该内存位置存储的数据)。由于此时 p 指向的内存地址是不确定的,因此该语句的行为是未定义的,它可能会导致程序崩溃或出现其他不可预测的错误。

7.宏名并不一定要用大写字母表示,只是一种常见的约定俗成的写法。

宏是 C 语言中的一种预处理指令,用于在程序编译前进行文本替换。宏名是定义宏时使用的标识符,可以使用任何合法的标识符名称。通常情况下,为了与其他标识符区分开来,宏名使用大写字母表示,这样可以更容易地识别出宏名。但是,这并不是 C 语言的规定,只是一种编程风格和惯例。

需要注意的是,宏名和其他标识符名称一样,也要遵循 C 语言中标识符的命名规则,即只能由字母、数字和下划线组成,且首字符必须是字母或下划线,不能使用 C 语言中的关键字作为宏名。此外,在编写宏时,还需要注意宏定义的正确性和安全性,以避免出现不必要的错误和安全漏洞。

8.可以将一个整型数据赋给一个指针变量,如p=3000。(错误)

可以将一个整型数据赋给一个指针变量,但是这样的赋值通常是不安全的,可能会导致程序出现未定义的行为。

指针变量是用来存储内存地址的,而整型数据是用来存储数值的,它们的类型不同。在 C 语言中,将整型数据赋值给指针变量时,编译器会将整型数据解释为一个内存地址,然后将该地址存储到指针变量中。例如,赋值语句 p = 3000; 将整数 3000 解释为一个内存地址,并将该地址存储到指针变量 p 中。但是,这个地址可能是不合法的,可能会指向一个未定义的内存位置,或者指向一个已经被释放的内存区域,这样就会导致程序运行出现未定义的行为。

正确的做法是,将整型数据的地址赋值给指针变量。例如,可以通过取地址符 & 来取得一个整型变量的地址,然后将该地址赋值给指针变量。例如,赋值语句 p = &i; 将整型变量 i 的地址存储到指针变量 p 中,这样就可以安全地使用指针变量来访问整型变量 i 的值。

9.有如下定义,char s[80],*p=s; 不能给数组s输入字符串的是( D)。(正确答案判断出错)

A.gets(s[0]);    B.  gets(s);    C.  gets(&s[0]));   D.   gets(p)

10.若有说明:int *p,m=5,n;以下正确的程序段是( A)。

A.p=&n;*p=m;   B.scanf("%d",&n);  *p=n;    C.p=&n;scanf("%d",*p);    D.p=&n;scanf("%d",&p);

AI解释:选项 A 和 B 是正确的程序段,而选项 C 和 D 是错误的。

选项 A 中,首先将指针变量 p 指向变量 n 的地址,然后通过指针变量 p 修改变量 n 的值,这是一种常见的使用指针变量的方式,是正确的。

选项 B 中,通过 scanf() 函数从标准输入中读取一个整数,存储到变量 n 中,然后将变量 n 的值通过指针变量 p 赋值给另一个变量,也是一种合法的语句序列。

选项 C 中,将指针变量 p 指向变量 n 的地址后,通过 scanf() 函数从标准输入中读取一个整数,存储到指针变量 p 所指向的内存地址中,这是错误的,因为 scanf() 函数需要传递一个指向变量的指针作为参数,而不是一个指向指针变量的指针。

选项 D 中,将变量 n 的地址存储到指针变量 p 中后,通过 scanf() 函数从标准输入中读取一个整数,存储到指针变量 p 所指向的内存地址中,这也是错误的,因为 scanf() 函数需要传递一个指向变量的指针作为参数,而不是一个指针变量的地址。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值