二级C语言2023-3易错题
1
下列叙述中正确的是
A. 循环队列是队列的链式存储结构
B. 能采用顺序存储的必定是线性结构
C. 所有的线性结构都可以采用顺序存储结构
D. 具有两个以上指针的链表必定是非线性结构
正确答案:C
- C的陈述是正确的。线性结构是一种基本的数据结构,它包括数组、链表、栈、队列等。所有这些线性结构都可以用顺序存储结构(数组)来存储,这是因为顺序存储结构的主要特点是逻辑上相邻的数据元素在物理位置上也是相邻的。
至于其他选项:
A.循环队列不一定是队列的链式存储结构,它可以是顺序存储结构。
B.能采用顺序存储的不一定是线性结构,也可以是非线性结构,例如树和图。
D.具有两个以上指针的链表并不一定是非线性结构。例如,双向链表就是线性结构,但它有两个指针,一个指向前一个节点,一个指向后一个节点。
2
对软件系统总体结构图,下面描述中错误的是
A. 深度等于控制的层数
B. 扇入是一个模块直接调用的其他模块数
C. 扇出是一个模块直接调用的其他模块数
D. V一定是结构图中位于叶子结点的模块
正确答案:B
A. 深度等于控制的层数 - 这个描述是正确的。深度是指从根节点到最远叶子节点的最长路径上的边数,它代表了控制的层数。
B. 扇入是一个模块直接调用的其他模块数 - 这个描述是错误的。扇入(Fan In)是指有多少个模块调用了一个特定的模块,即一个模块被其他模块调用的次数。
C. 扇出是一个模块直接调用的其他模块数 - 这个描述是正确的。扇出(Fan Out)是指一个模块直接调用了多少个其他模块。
D.这个选项我没搞懂,懂的同学可以到评论区留言哦!
3
若变量已正确定义并赋值,则以下符合C语言语法的表达式是( )。
A. a=a+7;
B. a=7+b+c,a++
C. int(12.3%4)
D. a=a+7=c+b
正确答案:B
A. a=a+7;
这是一个语句
,而不是表达式
在C中,语句用结束处的一个分号标示。例如:c=3这只是一个表达式(它可能是一个较大语句的一个部分),而c=3;则是一个语句
B. a=7+b+c,a++
这个表达式也是正确的。它是一个逗号表达式
,其中包含两个子表达式:a=7+b+c 和 a++。逗号表达式的结果是最后一个子表达式的结果,所以这里的结果是a++。整个表达式首先计算a=7+b+c,然后将a的值加1。C. int(12.3%4)
这个表达式是不正确的。首先,12.3%4中的12.3是一个浮点数,而取模运算符%通常用于整数之间。其次,即使我们忽略类型不匹配的问题,int()函数并不是C语言标准库的一部分,因此这种用法是错误的。D. a=a+7=c+b
C语言的赋值运算符 = 是一个二元运算符,它将右边的值赋给左边的变量。赋值表达式的结果是所赋的值本身。这意味着你可以这样写:
a = (b = c); // 这是合法的链式赋值,将c的值赋给b,然后将b的新值赋给a
但是,你不能将赋值表达式的结果(即,赋值后得到的值)用作另一个赋值的左操作数。也就是说,你不能在赋值表达式的左边使用赋值运算符。
每个赋值操作必须有一个独立的左操作数,这个操作数必须是一个可修改的存储位置,比如一个变量
在表达式 a = a + 7 = c + b; 中,你尝试做的事情实际上是:
首先计算 a + 7。
然后计算 c + b。
尝试将 c + b 的结果赋给 a + 7,这是不合法的,因为 a + 7 是一个表达式,而不是一个变量。
综上所述,只有选项B是正确的C语言表达式。
4
给定程序MODI1.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。
例如,字符串中的数据为:AABBCCDDEEFF
,则输出应当是ABBCDDEFF
。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s, char t[])
{int i, j=0;
for(i=0; i<(int)strlen(s); i++)
/***********found**********/
if(__1__)
t[j++]=s[i];
/***********found**********/
__2__;
}
main()
{char s[N], t[N];
printf("\nPlease enter string s : "); gets(s);
fun(s, t);
printf("\nThe result is : %s\n",t);
}
i%2 || s[i]%2==0 或 i%2!=0 || s[i]%2==0
t[j]='\0' 或 t[j]=0
字符串不要忘了最后的终止符!
5
请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
例如,二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应该是:
33 44 55 33 44 55 33 44 55 33 44 55。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
void fun(int s[][10], int b[], int *n, int mm, int nn)
{
__1__;
for(j=0;j<nn;j++)
for(__2__)
{
b[*n]=__3__;
__4__;
}
}
main()
{int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55, 55,55}},i,j;
int a[100]={0}, n=0;void NONO ();
printf("The matrix:\n");
for(i=0; i<3; i++)
{for(j=0;j<4; j++)printf("%3d",w[i][j]);
printf("\n");
}
fun(w,a,&n,3,4);
printf("The A array:\n");
for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");
NONO();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; int i, j, k ;
int w[10][10], a[100], n = 0, mm, nn ;
rf = fopen("in.dat","r");
wf = fopen("out.dat","w");
for(k = 0 ; k < 5 ; k++) {
fscanf(rf, "%d %d", &mm, &nn);
for(i = 0 ; i < mm ; i++)
for(j = 0 ; j < nn ; j++) fscanf(rf, "%d", &w[i][j]);
fun(w, a, &n, mm, nn);
for(i = 0 ; i < n ; i++) fprintf(wf, "%3d", a[i]); fprintf(wf, "\n");
}
fclose(rf); fclose(wf);
}
int i,j
i=0;i<mm;i++
*(*(s+i)+j)
或者s[i][j]
*n=*n+1
或者(*n)++