当前位置: 首页 > news >正文

C语言期末考试复习PTA数据类型及表达式-分支结构程序-循环结构-数组经典选择题

 目录

 

 

第一章:C语言数据类型和表达式

第一题:

第二题:

第三题:

第四题:

第五题:

第六题:

第七题:

第八题:

第九题:

第二章:分支结构程序设计

第一题:

第二题:

第三题:

第四题:

第五题:

第六题:

第七题:

第八题:

第九题:

第三章:循环结构

第一题:

第二题:

第三题:

第四题:

第五题:

第六题:

第四章:数组

第一题:

第二题:

第三题:

第四题:

第五题:

第六题:

第七题:

第八题:

第九题:

第十题:

第十一题:

第十二题:


 

 

第一章:C语言数据类型和表达式

第一题:

设x 、y均为f1oat型变量,则以下不合法的赋值语句是 ( )。A.
x*=y+8;B.
x=y=0;C.
y=(x%2)/10;D.
y=1+x;

分析:对于c,取余运算两边必须是整型;

第二题:

下面四个选项中,均是合法整形常量的选项是( )A.
160 、 -0xffff 、 011B.
-01 、 986,012 、 0668C.
-0xcdf 、 01a 、 0xeD.
-0x48a 、 2e5 、 0x

分析:首先你要知道十六进制的数怎么表示,它是以0x为前缀使用 0-9 和 A-F(或 a-f)这些字符来表示数字 0-15,然后八进制是以0为前缀,使用数字 0-7 来表示数字 0-7

所以b错在0668,八进制中出现了8,

c错在01a,八进制出现了字母

d错在2e5,是一个浮点数,不是整数,0x是不完整的十六进制表示

第三题:

表达式下面的程序段将输出 ▁▁▁▁▁。double pi = 22 / 7, r = 2, g;
g = 2 * pi * r;
printf("%.2f\n", g);A.
12.57B.
0.00C.
12.00D.
13.00

分析:

22/7,因为双方都是整数,所以得出结果也是整数不会保留小数,所以22/7=3,然后最后是输出12.00

第四题:

为表示“a和b都不等于0”,应使用的C语言表达式是()。A.
(a!=0) || (b!=0)B.
a || bC.
!(a=0)&&(b!=0)D.
a && b

分析:首先读懂题,翻译成a和b都不等于0时为真,所以d肯定对

接下来分析a,b,c

a用||逻辑符,就是只要两边一个满足就为真,那么a不等于0是为真,这个时候b可以为0,照样表达式成立

b同上

c的表达式就已经错了,因为()里面表达式应该是判断,而不是进行赋值

第五题:

设 x、y、t均为int型变量,则执行语句:x=y=3; t= ++x || ++y; 后,y的值为____。A.
1B.
不定值C.
3D.
4

 

分析:执行语句t=++x || ++y;,根据短路逻辑运算符的特性,如果第一个表达式的值为真(非零),则不会执行第二个表达式。先把++x赋给t之后,这个表达式为真不会进行++y。

第六题:

设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )A.
n=(n*100+0.5)/100.0B.
n=n*100+0.5/100.0C.
n=(n/100+0.5)*100.0D.
m=n*100+0.5,n=m/100.0

分析:这道题看起来抽象,其实原理很简单,举个例子

假设n的值为3.4567。

按照选项A的表达式,首先计算 3.4567 * 100 = 345.67,将小数点后两位的数值变为整数部分。

接着加上0.5,得到 345.67 + 0.5 = 346.17,进行了四舍五入运算。

最后将结果除以100.0,得到 346.17 / 100.0 = 3.4617,将整数部分转换回小数点后两位的数值。

因此,选项A的表达式 (n*100+0.5)/100.0 能够实现将n中的数值保留小数点后两位,并进行四舍五入运算。

第七题:

表达式下面的程序段将输出 ▁▁▁▁▁ 。int n = 4, s;
s = 1 / 2 * n * (n + 1);
printf("%d\n", s);A.
10B.
0.025C.
0.625D.
0

思路:

写这种题,要明白优先运算的优先顺序,看s,先算小括号里的,然后从左至右一次运算,即先算1/2,但是1和2是整数运算得出0.5然后取整变成0,因此会输出0.

第八题:

表达式(x%3)等价于表达式( )。A.
x%3 == 2B.
x%3 == 0C.
x%3 == 1D.
x%3 != 0

 

 思路:

写这种题记住一点,无需想太多,要想表达式x%3成立,那么x%3的结果就不能为0,因为我们规定表达式值为0就为假,因此表达式等价D。

第九题:

下列不合法的用户标识符是A.
j2_KEYB.
_8_C.
4d_aD.
Double

思路:用户标识符遵循特定规则:

  1. 用户标识符只能包含字母(大小写敏感)、数字和下划线。
  2. 用户标识符不能以数字开头。
  3. 用户标识符不能包含空格或其他特殊字符。

因此选C

第二章:分支结构程序设计

第一题:

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

思路:

明白运算符的优先顺序,*的优先级高于=和+,因此先从a*a开始运算,a的值为3,a*a=9,然后,a-=9,相当于a=a-9,这个时候a还是3,然后3-9=-6即把-6赋给了a,然后a这个时候的值为-6,然后进行最后一语句,a+=-6,a这个时候是-6,这个表达式相当于a=a-6,所以最后a=-12;

 

 

第二题:

定义int score = 75; 则表达式 80 > score > 70 的值是:A.
0B.
trueC.
1D.
false

思路:

从左至右依次进行,首先80>75为真,那么这个时候表达式返回1,即变成1>70为假,所以返回0

第三题:

下列运算符中优先级最低的是__.A.
IIB.
>=C.
~D.
!=

思路:这里给大家整这道题,也是想给大家总结这个运算符的优先级,记住常见的。

4112528002e9414f89efe3022c94f3e3.png

67cf2a6ec8ab4a4788f29372ba7cfc39.png

37dd18c2f3ac4fedab7c7ab270f26ac0.png

观察规律,一目运算符>二目运算符>三目运算符,算术运算符就是+ - * / 这些,关系运算符就是> < 这些,并且记住赋值运算符比 逗号运算符强。

因此这道题选择A

第四题:

设有定义:int a = 1, b = 2, c = 3, d = 4, m = 2, n = 2;
则执行表达式(m = a > b) && (n = c > d);
后,n的值为____。A.
0B.
3C.
1D.
2

 

思路:

由上述介绍了运算符的优先级,那么这道题就如同探囊取物,看表达式,先是a>b,即1>2,为假,返回0,即变成m=0,就是把0赋给了m,表达式为真,然后呢c>d即3>4为假返回0,0赋给了n为真,所以n等于0 对吗?不对,为什么?错就错在你还未理解&&这个运算符,必须两边同时成立才为真,但当左边的表达式为假的时候,他根本不会进行第二个表达式的运算,所以n还是原来的值2,因此这道题为D

这就是逻辑运算符的短路原则,对于||只要第一个操作数为假则不会进行第二个操作数.

对于逻辑或运算符 ||,如果第一个操作数为真(非零),则整个表达式的值为真,不会再计算第二个操作数。只有当第一个操作数为假(0)时,才会计算第二个操作数。

 

 

第五题:

设 int x=1, y=1; 表达式(!x||y--)的值是( )。A.
-1B.
0C.
1D.
2

思路:

根据上题给大家介绍的逻辑运算符的短路规则,这道题很easy了吧

在这个表达式中,x 的值为 1,非零,所以 !x 为假(0)。因此,整个表达式 (!x || y--) 的值取决于 y-- 的结果。

y-- 表示先将 y 的值赋给表达式,然后再将 y 的值减 1。由于后缀自减运算符的优先级较低,所以 y-- 的值为 1,并且 y 的值被减 1 变为 0。

因此,(!x || y--) 的值为 0 || 1,即 1

答案是 C. 1。

 

第六题:

已知int i, a; 执行语句i=(a=2*3,a*5),a+6;后,变量i的值是( )。A.
6B.
30C.
36D.
12

思路:

还是考察运算符的优先级,之前给大家介绍=的优先级比 , 高,因此先执行逗号表达式a=2*3,a*5,其中a首先被赋值为6,然后计算a*5返回结果30,所以整个逗号表达式的值是30。接着,将这个值赋给变量i,即i=30

最后,执行语句a+6,但并没有把其结果赋给任何变量,所以该语句的执行对i的值没有影响。

因此,变量i的值是30,选项B正确。

 

第七题:

若变量已正确定义,表达式 (j=3, j++) 的值是____。A.
5B.
4C.
6D.
3

思路:

在表达式(j=3, j++)中,逗号操作符,会先执行左边的表达式j=3,将3赋值给变量j,然后再执行右边的表达式j++

但是需要注意的是,后置递增运算符++会在整个表达式执行完之后才生效。所以在这个表达式中,尽管执行了j=3的赋值操作,但是j++的递增操作并没有影响到整个表达式的值。

因此,表达式(j=3, j++)的值是3,选项D正确。

 

第八题:

设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d 的结果为( )。A.
3B.
4C.
2D.
1

思路:

对于这种多目运算的怎么分析?

答案就是一步步来,首先我们把这个值带进去,1<2为真所以a为表达式的值不执行后面。这里给大家延申一些,如果我是说如果,a<b为假的话,那么就会执行c<d,然后根据c<d是否为真进行判断是执行a还是执行d

 

第九题:

假设所有变量均为整型,则表达式(a = 2, b = 5, b++, a+b)的值是( )A.
2B.
7C.
6D.
8

思路:

在这个表达式中,首先执行 a = 2,将 2 赋给变量 a。然后执行 b = 5,将 5 赋给变量 b。接下来执行 b++,将 b 的值增加 1,此时 b 的值为 6。最后执行 a + b,即 2 + 6,结果为 8。

因此,表达式 (a = 2, b = 5, b++, a+b) 的值为 8。

在这里大家可能会有疑问,为什么不是7,因为b++只要不执行这个语句的时候b已经变成了6。如果说是还在b++这个语句里面,就是先用6然后再加1

 

第三章:循环结构

第一题:

下面这段程序,若scanf输入k的值为50,则程序将循环有限次,在打印输出有限行之后,程序将正常结束。#include <stdio.h>
int main(){int k;scanf("%d", &k);int i=100;while(i > k){printf("%d ", i);i++;}return 0;
}

思路:

这道题,可能很多人都是一知半解,觉得i>k为真,并且i还自增,必然一直循环下去,但是要知道int类型的数据所表达的范围有限。

在这段程序中,如果 scanf 输入的 k 值为 50,并且 i 的初始值为 100,循环条件 i > k 成立,循环体内的语句会被执行。

每次循环中,会打印输出 i 的值,并将 i 的值递增 1。由于 i 是使用整型变量声明的,整型变量在大多数系统中的范围是有限的。当 i 递增到超过整型变量所能表示的最大值时,整型溢出会发生。

对于大多数系统来说,int 类型的范围是 -2,147,483,648 到 2,147,483,647。当 i 的值增加到超过这个范围时,它将溢出并变成一个负值。

因此,当 i 递增到超过 int 类型所能表示的最大值时,循环会终止,程序将正常结束。

 

第二题:

下面这段程序中的循环将是无限循环,程序将始终运行、无法结束(假设运行该程序的计算机系统永远不会发生意外情况而崩溃或断电)。#include "stdio.h"
int main(){for(long num=1; num>0; num++)printf("%ld\n", num);return 0;
}

思路:

这道题也是与上道题,同理

 

第三题:

下列程序段输出结果为 ____。

下列程序段输出结果为 ____。int a=1,b=2,c=2,t;
while(a<b<c) {    t=a; a=b; b=t; c--;    }
printf( "%d,%d,%d", a, b, c);

思路:

首先看while循环条件,a<b即1<2为真返回1,变成1<c,即1<2为真然后进入循环体

然后看循环体前三条语句实际就是把a和b的值进行了交换,没看明白的可以画个图模拟一下,然后c--,这个时候c的值变成了1,接着再次进行循环条件的判断,a<b,因为a和b的值已经交换了,所以变成了2<1即为假,返回0,所以变成了0<c,c的值为1,所以0<1即为真,那么再次进入循环体,然后再次把a和b的值交换,这个时候a再次变成1b再次变成2,c再次--,c就变成了0,所以最终输出2,1,0

 

第四题:

 

对于循环while(!e) 语句,!e等价于____。A.
e!=1B.
e==0C.
e!=0D.
e==1

思路:

之前的内容讲过类似的,再次整出这道题想大家都整,明白,看懂代码,以后可能也需要写出这样的代码。

这次由大家自行解答,若有问题回到前文再看解析。

第五题:

设有程序段int m=20; while (m=0) m=m++;
则下面描述中正确的是( )。A.
循环体语句一次也不执行B.
循环体语句执行一次C.
while 循环执行 10 次D.
循环是无限循环

思路:

这道题和前面的类似,答案由你来书写。

第六题:

执行下面的程序后变量a的值是#include <stdio.h>
int main(void)
{int a, b;for (a = 1, b = 1; a <= 100; a++) {if (b > 10)break;if (b % 3 == 1) {b += 3;continue;}b -= 3;}printf("%d\n", a);return 0;
}A.
8B.
5C.
7D.
6

思路:

这道题考察就是简单循环的理解,建议大家重新理一遍这道题的逻辑,不要直接用编译器来求答案,理解代码的逻辑。看懂代码。

 

第四章:数组

第一题:

在对数组全部元素赋初值时,不可以省略行数,但能省略列数。TF

思路:

对于二维数组,行数可以省略,列数不能省略,举个例子,arr[][3]={{1,2},{1,2,3}},省略了行数,并不影响我们的理解,明显可以得出行数为2。列数不能省略,如果不指定列数, 它就不能知道一行放几个数据了。

第二题:

若有定义float a[6]={1,2,3};,则数组中含有3个元素。TF

 

思路:

数组有6个元素,只不过只指定了前三个元素,那么后三个元素的值。

后三个元素的值不确定。

第三题:

调用strcmp函数比较字符串大小时,通常较长的字符串会较大。TF

思路:

字符串比较大小是按照字典序来比较,不是说字符串长就大。

第四题:

一维数组定义的一般形式如下,其中的数组长度是一个整型常量表达式,给定数组的大小。类型名 数组名[数组长度];TF

思路:

记住即可,数字长度只能放常量不能放变量,比方说int a=100,arr[a]={0} 是错误的。因为a是变量。

第五题:

若字符数组s1和s2中均已正确存储字符串,则可以使用 if(s1>s2) 进行两字符串大小的比较。TF

思路:

不能直接通过关系运算符进行比较,除非在c++里面,可以通过strcmp来比较。

第六题:

一维数组定义的一般形式如下:类型名 数组名[数组长度];
数组元素引用的一般形式如下:数组名[下标]
在引用数组元素时,下标的合理取值范围是[0,数组长度-1],下标不能越界。TF

思路:

这个大家记住即可,答案为T

第七题:

"a" 和 'a'是等价的。TF

思路:

第一个是字符串,第二个是字符元素

第八题:

下面描述正确的是A.
字符个数多的字符串比字符个数少的字符串大B.
字符串“ STOP”和“STOP”相等C.
字符串“That”小于字符串“The”D.
两个字符串所包含的字符个数相同时才能比较字符串

思路:

看c因为第一个和第二个字符都相同,比较第三个,因为a的ascll小于e的ascll所以,第一个字符串小于第二个。

第九题:

以下关于二维数组初始化的说法,正确说法的个数是( )(1)语句int a[2][3]={0}; 能将int型数组a中的每个元素全部初始化为0。(2)语句int a[2][3]=0; 能将int型数组a中的每个元素全部初始化为0。(3)语句int a[2][3]; 能将int型数组中a的每个元素全部初始化为0。(4)语句int a[2][3]={{1,2},{3,4},{5,6}};能将int型数组元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]依次初始化为1,2,3,4,5,6。(5) 语句int a[][3]={1,2,3,4,5,6};能将int型数组元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]依次初始化为1,2,3,4,5,6。(6)语句int a[][3]={{1,2,3},{4,5,6}};能将int型数组元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]依次初始化为1,2,3,4,5,6。

思路:

正确说法的个数是3。(1)语句int a[2][3]={0}; 能将int型数组a中的每个元素全部初始化为0。—— 对,(2)语句int a[2][3]=0; 能将int型数组a中的每个元素全部初始化为0。—— 错误,这种语句是错误的,无法用这种方式对二维数组进行整体赋值。(3)语句int a[2][3]; 能将int型数组中a的每个元素全部初始化为0。—— 错误,这种方式只会在栈上分配空间,但不会对每个元素进行初始化。(4)语句int a[2][3]={{1,2},{3,4},{5,6}};能够将int型数组元素a[0][0],a[0][1],a[1][0],a[1][1],a[0][2],a[1][2]依次初始化为1,2,3,4,5,6,因此是原来的选项是错的(5) 语句int a[][3]={1,2,3,4,5,6};能将int型数组元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]依次初始化为1,2,3,4,5,6。—— 对,。(6)语句int a[][3]={{1,2,3},{4,5,6}};能将int型数组元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]依次初始化为1,2,3,4,5,6。—— 正确,这种方式可以对二维数组进行逐个初始化。

第十题:

对于定义 char str[] = "abc\000def\n"(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是:A.
3 ,9B.
3 ,11C.
12 ,13D.
3 ,4

思路:

对于定义 char str[] = "abc\000def\n"; ,字符串 str 的长度 len 是指有效字符的个数,不包括字符串结束符 \0。数组 str 的大小 size 则是指整个数组占用的内存空间大小。在这种情况下,字符串 str 的长度 len 为 3,因为 "abc" 是由三个有效字符组成。数组 str 的大小 size 可以通过使用 sizeof 运算符来获取。sizeof 运算符返回的是数组在内存中所占用的字节数。因为 str 是一个字符数组,所以它占用的内存空间大小等于每个元素的大小乘以元素的个数。每个字符元素的大小为 1 字节。因此,数组 str 的大小 size 取决于编译器和操作系统的实现。通常情况下,它将是 11 字节(包括字符串结束符 \0)。

并且\0和\n看作是一个字符,字符串末尾还有一个\0为显示。

第十一题:

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

思路:

a[2]+3实际上表示a数组第3行的首地址,并且向后偏移3个元素的地址。因此,a[2]+3可以表示a数组行下标为2、列下标为3的元素的地址。

所以,选项D.a数组行下标为2、列下标为3的元素的地址是正确的答案。

第十二题:

以下定义语句中不正确的是__。A.
int y[5]={0,1,3,5,7,9};B.
double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};    C.
char c1[]={'1', '2', '3', '4', '5'};    D.
char c2[]={'\x10', '\xa', '\x8'};

思路:

很明显A的数组越界了,因为数组下标从0,开始,最终最大也是y[4],只能存五个元素,而出现了6个就会越界。

 

 

最后,笔者能力有限,如有错误,请指出,一定改正一起进步。

 

相关文章:

  • 渗透测试学习day6
  • 第二十一章总结
  • HDFS常见题
  • ALTERNET STUDIO 9.1 Crack
  • 在Pytorch中使用Tensorboard可视化训练过程
  • jmeter接口自动化部署jenkins教程
  • 网站高性能架构设计——web前端与池化
  • hbuilder + uniapp +vue3 开发微信云小程序
  • 爬虫框架Scrapy
  • scrapy介绍,并创建第一个项目
  • 网上商城、宠物商城源码(Java)
  • 1.查看表的基本结构,表的详细结构和修改表名
  • CSS video控件去掉视频播放条
  • P5744 【深基7.习9】培训
  • 计算机网络之网络层
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • create-react-app项目添加less配置
  • Node + FFmpeg 实现Canvas动画导出视频
  • php中curl和soap方式请求服务超时问题
  • Python 反序列化安全问题(二)
  • Spring Cloud Feign的两种使用姿势
  • Vue2.x学习三:事件处理生命周期钩子
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 基于Android乐音识别(2)
  • 解决iview多表头动态更改列元素发生的错误
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​业务双活的数据切换思路设计(下)
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #QT(智能家居界面-界面切换)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (1)STL算法之遍历容器
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)Java 简介
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (done) 两个矩阵 “相似” 是什么意思?
  • (ros//EnvironmentVariables)ros环境变量
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分享)自己整理的一些简单awk实用语句
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (一) storm的集群安装与配置
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Mysql的优化设置
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(一):@echo off
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net多线程总结
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET性能优化(文摘)