大一新生的pta错题归纳
**仅自用**,适用于大一新生,pat选择题易错点总结:
1. 执行以下程序段后,k的值为4?
int k = 3;
sizeof(++k);
false
sizeof 不能里面进行运算
2. 实型数据可以进行求余数运算%。
false
只能是整型数据
3. 运行包含以下代码段的程序将可能进入死循环。
int i = 1;
while(i>0)
{ i++;
printf("%d ",i); }
false
数据的溢出现象
0->正数->负数->0
4.假设有变量定义语句float f = 1234567890123.123456;
,打印语句printf("f = %f", f);
的输出是f = 1234567954432.000000
。那么可以这样解释这种想象:因为float类型的数据精度是十进制7~8位,第9位以后的数据是随机的,即下次再输出这个数时,第9位以后的数据可能会不一样。
false
float只有六位有效数字,且每次输出的数据不会变
5."a"是合法的字符常量。
false
"a"为字符串,‘a’为字符字符常量
6.以下标识符中,不合法的是( )。
A.my4a
B._4a
C.m_a
D.4a
D
数字不可以放第一位
但下划线可以哦!
7.以下选项中,合法的C语言常量是( )。
A.9,123,456
B.'\029'
C.0x28
D.2E3.5
C
不要忘记十六进制
8.在嵌套使用if语句时,C语言规定else总是?
A.和之前与其具有相同缩进位置的if配对
B.和之前与其最近的if配对
C.和之前与其最近的且不带else的if配对
D.和之前的第一个if配对
C
9.
double f = 2.5e5;
printf ("f=%5.4lf\n", f);
The output will be f=250000.0000
true
整数部分怎么可能被数字限制住呢
10.表达式 (3<x<5)
的值恒为1。
true
双目运算符(除了赋值运算符)结合方向都是从左至右
11.下面这段代码,打印输出的结果是3333
。
#include <stdio.h>
int main(){
int a,b;
a = 0123;
b = 3210;
printf("%d", a+b);
return 0;
}
false
不要忘记八进制的表达,没错,a是一个八进制数
12.任何表达式语句都是表达式加分号组成的。
true
记住就好了,没什么好说的
13.表达式(a^a)
的值恒为0。
true
这是“异或”运算,不懂就去查这个知识点吧,以后还会有这类题的
14.判断整型变量a是否是偶数的表达式为a%2=0。
false
注意这个等号有没有什么问题,没错,只有一个等号
15.假设有float f=7;则f%2的值为1。
false
取余运算符%怎么可以有浮点数
16.二维数组定义的一般形式如下,其中的类型名指定数组名的类型。 类型名 数组名[行长度][列长度];
false
行长度改为行数,列长度改为列数,他们有什么区别,自行体会.
17.设有定义语句:int a[ ][3]={{0},{1},{2}}; 则数组元素 a[1][2]的值是*NULL*
虽然书上说默认值是0,但这题答案为NULL,其实也就是0的意思,就是换了一种表示方法
18.在代码中,对于某个自己设计的函数,那么该函数声明、函数调用、函数定义(亦称函数的实现)三者在代码中的先后位置关系通常为:“函数声明”先于“函数调用”,“函数调用”先于 “函数定义”。
true
19.语句是 C 语言程序的基本结构模块。
false
基本结构模块是函数
20.按照C语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。
flase
参数传递是单向的
21.以下函数值的类型是 ( )。
fun ( float x )
{ float y; y= 3*x-4; return y; }
A.int
B.不确定
C.void
D.float
A
默认是int类型
22.一个函数的返回值类型是()决定的。
A.return语句中表达式类型
B.定义函数时所指定的函数类型
C.调用该函数的主调函数的类型
D.在调用时临时指定的类型
B
加这题的原因是我错了,加个备忘录
23.if-else语句的一般形式如下,其中的语句1、语句2只能是一条语句。
if (表达式)
语句1
else
语句2
true
没得大括号,你还想写多少条语句?
24.如果变量已经正确定义,则执行以下程序段后,x
的值不变。
x = 4;
if (x < 0){
y = -1;
}else if (x = 0){
y = 0;
}else{
y = 1;
}
false
第一次写我也错了,仔细看过之后才发现,第二个括号里的表达式是在赋值。。。
25.判断字符串a和b是否相等的表达式为if (a==b)。
flase
字符串不能直接比较,记得strcmp函数
26.有以下程序,执行后输出结果是()。
#include<stdio.h>
void f(int v , int w)
{ int t;
t=v;v=w;w=t;
}
int main( )
{
int x=1,y=3,z=2;
if(x>y)
f(x,y);
else if(y>z)
f(y,z);
else
f(x,z);
printf("%d,%d,%d",x,y,z);
return 0;
}
A.1,2,3
B.3,1,2
C.1,3,2
D.2,3,1
C
f函数和主函数没有任何关联(只有值的传递,并不会改变实参的值)
27.阅读以下两段代码:
1
int i;
for(i=0; i<100; i++){
/**
此处省略代码若干行
**/
}
2
int i=0;
while(i<100){
/**
此处省略代码若干行
**/
i++;
}
第一段用for语句实现的循环,一定等价于第二段用while语句实现的循环(两个循环中省略的代码相同)。
false
当存在continue时,两者就不相等了
28.语句for(i=1,j=10;i<j;++i, j--);执行之后i,j的值均为5。
false
万恶的前加加和后减减,具体区别自行百度
29.语句填空:下列 for循环语句将输出: 0 1 2 0 1 2 0 1 2
for( i=1; i<=9; i++ ) printf("%2d", ----);
(i - 1) % 3
30.空语句不是一条合法的语句,因为它没有作用。
false
31.对于定义 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
**\000**这里面无论多少个0都视为**\0**
32.以下说法正确的是:
A.一个C语言源文件(.c文件)必须包含main函数
B.一个C语言源文件(.c文件)可以包含两个以上main函数
C.C语言头文件(.h文件)和源文件(.c文件)都可以进行编译
D.在一个可以正确执行的C语言程序中,一个C语言函数的声明(原型)可以出现任意多次
D
大家还有什么难题可以分享在评论区
补:
33.对于结构数组s
,既可以引用数组的元素s[i]
,也可以引用s[i]
中的结构成员。
true
34.结构体类型不可以嵌套定义。
false
其他函数不可嵌套定义,但结构体类型可以,典型代表为链表
35.以下程序的输出结果是( )。
struct stu{
int x;
int *y;
} *p;
int dt[4] = {10, 20, 30, 40};
struct stu a[4] = {50, &dt[0], 60, &dt[1], 70, &dt[2], 80, &dt[3]};
int main( )
{
p=a;
printf("%d,", ++p->x);
printf("%d,", (++p)->x);
printf("%d", ++(*p->y));
return 0;
}
A.10,20,20
B.50,60,21
C.51,60,21
D.60,70,31
C
指向结构体成员运算符->优先级高于自增运算符++
36.执行以下程序段,输入10
,输出10.00
。
double x;
scanf("%d", &x);
printf("%.2f", x);
false
数据类型不匹配,输出结果为0.00
37.break语句只能用于循环语句中。
false
break可用于循环体和switch结构,而continue只能用于循环体
具体请见此文章break和continue的区别
38.寄存器类变量的作用域和寿命与自动类变量的相同。
true
补充:自动类变量:函数中的形参和在函数中定义的局部变量
39.以下程序是某个C语言源文件的内容:
extern int k;
int main(){
k = 3;
return 0;
}
若某个C语言的工程(Project)仅包含这个源文件,则这个源文件可以通过编译,但工程无法成功链接、运行。
true
extern表示声明外部变量
40.有一段程序如下:
int getSum(int k){
int s;
s = getSum(k+1) + k;
return s;
}
int main(){
int sum;
sum = getSum(0);
return 0;
}
递归函数getSum
设计不合理,这段程序将无限递归,始终不能结束。
false
当栈溢出后递归会停止
41.C语言中,通过函数调用只能获得一个返回值。
false
返回结构体时可以获得多个返回值。
42.在代码中,对于某个自己设计的函数,那么该函数声明、函数调用、函数定义(亦称函数的实现)三者在代码中的先后位置关系通常为:“函数声明”先于“函数调用”,“函数调用”先于 “函数定义”。
true
43.以下叙述是错误的。
局部变量可以和全局变量同名,在编译的时候不会出现错误,一旦不小心,可能导致使用错误变量,所以定义局部变量的时候不要和全局变量重名。
false
44.以数组名作函数参数时,实参数组与形参数组都不必定义长度,因为实参与形参的结合方式是地址结合,与数组长度无关。
true
45.不用递归就不能实现二叉树的前序遍历。
false
这怎么可能
46.数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。
false
数组名就是数组的首地址,没有代表一说
47.调用strcmp函数比较字符串大小时,通常较长的字符串会较大。
false
字符串大小与字符串长度没有必然联系
48.对二维数组初始化时,经常采用如下分行赋初值的方式,即在定义数组时,把初值表k
中的数据依次赋给第k
行的元素。
类型名 数组名[行长度][列长度] = {{初值表0},… {初值表k},……};
true
虽然刚开始我也认为应该是第k+1行,但行数是从0开始的
49.char s[80],*p=s; p="hello";这样赋值是可以的。
true
这是将字符串”fello“的地址赋给p,不是在对s复赋值
50.下面哪个表达式的值是2。
A.6%3
B.-5%3
C.5%-3
D.-5%-3
C
求模运算的结果的符号取决于第一个数的符号
51.下列程序段输出结果为 ____。
int x = -3, y = 2;
if(x>y);
x = -x;
if(x<y)
y = -y;
printf("x=%d,y=%d\n", x, y);
A.x=3,y=-2
B.x=3,y=2
C.x=-3,y=2
D.x=-3,y=-2
B
强调细节
注意第一个if后面的;
52.请读程序:
#include<stdio.h>
void main()
{
int x=1,y=0,a=0,b=0;
switch(x){
case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
A.a=2,b=1
B.a=1,b=1
C.a=1,b=0
D.a=2,b=2
A
进行case 1,后还会进行case 2
54.若有int x=1;,执行下列程序段后,变量x的正确结果是:
switch (x*10) {
case 9: x+=1; break;
case 10: x+=1;
case 11: x+=1;
default: x+=1;
}
A.1
B.2
C.3
D.4
D
没有break,switch语句不会停止,而是继续进行下去
55.对于以下递归函数,调用f(2, '1', '2', '3')的输出结果是( )。
void f(int n, char a, char b, char c)
{
if (n == 1){
printf("%c->%c#", a, b) ;
}else{
f(n-1, a, c, b);
printf("%c->%c#", a, b);
f(n-1, c, b, a);
}
}
A.1->2#1->3#3->2#
B.3->2#1->2#1->3#
C.'1'->'3'#'3'->'2'#'1'->'2'#
D.1->3#1->2#3->2#
D
注意:每次调用函数a,b,c的位置都有变换
56.下面叙述中错误的是( )。
A.C语言程序是由函数组成的
B.C语言的函数就是一段程序
C.C语言的函数可以直接使用,无须事先定义或声明
D.C语言的函数可以单独编译
C
57.有以下程序:
#include <stdio. h>
int fun(int x[], int n)
{
static int sum=0;
int i;
for(i=0; i<n; i++) sum+ =x[i];
return sum;
}
int main()
{
int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a, 5)+fun(b, 4);
printf("%d\n", s);
return 0;
}
程序执行后的输出结果是( )。
A.45
B.50
C.60
D.55
C
sum是一个静态变量,每次执行完后不会被释放(重新赋值)
fun( a, 5)的结果为15,fun( b, 4)的结果为45
58.关于C语言以下说法正确的是( )
A.实参和与其对应的形参各占用独立的存储单元
B.实参和与其对应的形参共占用一个存储单元
C.只有当实参和与其对应的形参同名时才共占用存储单元
D.形参是虚拟的,不占用存储单元
A
纯理论题
59.以下说法正确的是( )
A.定义函数时,形参的类型说明可以放在函数体内,也可以放在函数体外
B.return后边的值不能为表达式
C.如果函数值的类型与返回值类型不一致,以函数值类型为准
D.如果形参与实参的类型不一致,以实参类型为准
C
纯理论题
60.若有语句“int a[3][4]={{1,3,5,7},{2,4,6,8}};”,则 *(*a+1)
的值为( ) 。
A.1
B.2
C.3
D.4
C
a表示的是第0行第0列的元素的地址,*a具体来说是*(a+0)即a[0]的意思,此时*a指向行,*a+1表示第0行第1个元素的地址,*(*a+1)就是a[0[1]的意思
具体知识讲解请见唐浩强《C程序设计(第五版)》第244页
61.若有语句“int n; cin>>n;”,则申请和释放长度为n的动态数组的语句正确的是( ) 。
A.int *p=new int (n); delete p;
B.int *p=new int (n); delete [] p;
C.int *p=new int [n]; delete p;
D.int *p=new int [n]; delete [] p;
D
62.若有语句int a[3][4], *p=&a[0][0];
则与*(*(a+1)+2)
等价的是 ( )。
A.
*(*(p+1)+2)
B.a[1][2]
C.p[1][2]
D.
*(p+1)+2
B
(*p)[]与*p的区别
更多推荐
所有评论(0)