PTA题选

判断题:

任何表达式语句都是表达式加分号组成的。True
C语言语句都有结束符

指向结构体变量的指针可以作函数参数,实现传址调用。True

结构体成员的类型必须是基本数据类型。False

if(a=5) 是允许的。True
(a=5)永远为真 

假设有变量定义语句float f = 1234567890123.123456;,打印语句printf("f = %f", f); 的输出是f = 1234567954432.000000 。那么可以这样解释这种想象:因为float类型的数据精度是十进制7~8位,第9位以后的数据是随机的,即下次再输出这个数时,第9位以后的数据可能会不一样。False

int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。False
它是一个数组指针,指向一个长度为4的数组。

选择题:

以下选项中不正确的整型常量是()。
A.12L B.-10 C.012 D.2,900 
解答:D
整型常量中不可有逗号 

若a为int类型,且其值为3,则执行完表达式a+= a-= a*a后,a的值是__。
A.-3 B.9 C.-12 D.6
解答:C
将a+= a-= a*a分解得
a=a-a*a;得a=-6 
a=a+a;得a=-12 

下面哪个表达式的值是2。
A.6%3 B.-5%3 C.5%-3 D.-5%-3
解答: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.程序运行过程必定会出错(崩溃),结果打印输出有限行
解答:C
具体原因请移步 https://blog.csdn.net/BAFH499/article/details/122116641 

以下程序段的输出结果是()。
    int a=5, b=4, c=6, d;
    printf("%d", d=a>b? a>c?a:c:b);
A.5 B.4 C.6 D.不确定
解答:C
其实就是顺序的问题
d=a>b? a>c?a:c:b实则为d=(a>b? (a>c?a:c):b)
先判断(a>c?a:c),再判断外层,最后赋值 

The following piece of code prints out__.
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
解答:B
这题就是对于-1<=i<1的判断
先判断-1<=i,成立得其值为1,再判断1<1,不成立不进入循环,直接输出i

下述代码执行后,a,b的值各为多少?
    int a = 0, b = 0;
    a = (b++, 4);
A.a=4, b=1 B.a=0,b=1 C.a=1,b=1 D.a=4,b=0
解答:A
这题考逗号表达式,(b++, 4)的值为最后一个表达式的值4 

对于定义 char str[] = "abc\000def\n"(注:其中0为数字零)求字符串str的长度len和数组str的大小size,len和size分别是:
A.12 ,13 B.3 ,11 C.3 ,9 D.3 ,4
解答:C
对于字符串数组,\0、\00 、\000都视为\0(当\后面的0多于3个就不是这样了),且总会在末尾加一个\0,所以空字符串大小为1,"abc\000def\n"的大小为9. 
而长度则是第一个\0前的字符数 

有如下定义:
struct Student{
    char name[10];
    int age;
    char gender;
}std[3], *p=std;
则以下各输入语句中错误的是:
A.scanf("%d",&(*p).age);
B.scanf("%c",&std[0].gender);
C.scanf("%c",&(p->gender));
D.scanf("%s",&std.name);
解答:D
std.name已经是数组的地址了,再加取地址符就是错误的 

下面的这个循环的循环次数是( )。 
for(int i=0,j=10; i=j=10; i++,j--)
A.语法错误,不能执行 B.无限次 C.10 D.1
解答:B
循环内的判断语句变为了赋值语句i=j=10,出不了循环 

以下名字,不能作为C语言标识符的是:
A.ThisIsQingdaoUniversity

B.$$

C.monkey~1

D._
解答:C
$$是一个例外,它是可以用的。 

If all variables have been defined and declared in the following program, all the variables which can be used in function fun() are __.
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
解答:A
z虽然是全局变量,但定义在函数fun之后,调用不到,而a、b是主函数里的,也调用不到

对于 C/C++语言的函数,下列叙述中正确的是( )。
A.函数的定义不能嵌套,但函数调用可以嵌套
B.函数的定义可以嵌套,但函数调用不能嵌套
C.函数的定义和调用都不能嵌套
D.函数的定义和调用都可以嵌套
解答:A
比如在主函数里,就不能定义一个fun函数,只能在主函数外定义。但是可以在主函数内调用fun函数,前提是已经声明或定义过了。 

函数调用语句function((a,b),c)中含有的实参个数为( )。
A.1 B.3 C.2 D.语法有误
解答:C
(a,b)的值作为一个实参

Given int a[2][3];. Which of the following can correctly make reference to array a?
A.a[2][!1]
B.a[2][3]
C.a[0][3]
D.a[1>2][ !1] 
解答:D
明显ABC是错的,D是可行的。 

有说明语句int a[4][5]; ,则a[2]+3表示__。
A.a数组行下标为2、列下标为3的元素的地址
B.a数组行下标为2、列下标为3的元素的值
C.a数组第2行的首地址
D.a数组第3行的首地址
解答:A

For definitions: char s[2][3]={"ab", "cd"}, *p=(char *)s; the expression __ is correct and its value is equivalent to the element s[1][1].
A.*(s+3)
B.*s+2
C.p[1][1]
D.*++p+2
解答:D
s[1][1]是d,*(s+3)是数组第四行的首地址,*s+2是数组第一行的第三个元素的地址,p[1][1]是有编译问题的
*++p+2是(*(p=p+1))+2,*(p=p+1)是b,加2后的字符为d,符合题意 

以上答案仅供参考
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值