BUAA(2021春)第一次上机选择+填空(含解析)
看前须知
要点介绍和简要声明.
第一次上机题汇总
扩展字符A——strchr的灵活使用.
表达式求值.
小数形式与科学计数法转换(简)——分类讨论一定要有逻辑.
超长正整数的减法(高精度减法)+其他三种高精度运算.
全排列数的生成——DFS(深度优先遍历)+回溯 秒杀本题.
填空题
下面程序段的运行结果是
char ch[ ] = “600”;
int a, s = 0;
for (a = 0; ch[a] >= ’0’ && ch[a] <= ’9’; a++)
s = 10 * s + ch[a] - ’0’;
printf("%d", s);【 正确答案: 600】 解析:以上程序实际上就是实现atoi的函数(把字符串转换为整数),理解之后很容易得到答案。
写出下述程序的输出结果
#include <stdio.h>
int func(int n)
{
if(n<=1)
return 1;
else
return (2+n*func(n-1));
}int main()
{
int x = 4;
printf("%d\n",func(x));return 0;
}【 正确答案: 58】 解析:简单递归,可以当成数学题来写,慢慢算,不难得到答案
给出下述程序的执行结果
#include <stdio.h>
long fib(int x)
{
switch(x)
{
case 0: return 0;
case 1:
case 2: return 1;
}
return (fib(x-1)+fib(x-2));
}
int main()
{
int x=6;
printf("%d\n",fib(x));return 0;
}【 正确答案: 8】 解析:简单递归,跟上题一样,可以当成数学题来写,慢慢算,不难得到答案
下面的函数invert的功能是将一个字符串的内容颠倒过来。请将函数补充完整。(所有答案填写在此空内,答案间以空格隔开)
void invert (char str [] )
{
int i,j,填空1______;
for(i=0,j=strlen(str)填空2_______;i<j;i++,j–)
{
k=str[i];
str[i]=str[j];
str[j]=k;
}
}【 正确答案: k -1】解析:以上程序实现的是一个反转字符串的函数,故首先要确定字符串的首和尾,所以j=strlen(str)-1。由于函数下面出现k,所以在函数开头要定义k。
下列程序是否正确,如果正确给出输出结果,如果不正确,答案处填写“不正确”。
#include <stdio.h>
void func(char *q)
{
char a[]=“hello”;
q=a;
}
main()
{
char *p;
func§;
printf("%s\n",p);
}【 正确答案: 不正确】解析:由于数组a是在函数内定义的,只可作用于函数内部,一旦回到主函数,数组a也随之无法访问。函数func的作用是让指针p指向a,使其可以访问a,但是由于这是浅层拷贝(浅层拷贝就是仅仅把指针向数组,深层拷贝则是用malloc给p申请空间,然后strcpy,或者memcpy拷贝所有内容),a无法访问后p也无效,故错误。
函数index(char s[],char t[])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。请将函数补充完整。
int index(char s[],char t[])
{
int i,j,k;
for(i=0;s[i]!=’\0’;i++)
{
for(j=i,k=0;填空1______&&s[j]= =t[k];j++,k++)
;
if(填空2_______)
return i;
}
return -1;
}【 正确答案: t[k]!='\0' t[k]= ='\0' 或 s[j]!='\0' t[k]= ='\0' 或 t[k]!=0 t[k]= =0 或 s[j]!=0 t[k]= =0 或 k<strlen(t) k= =strlen(t) 或 s[j]!='\0'&&t[k]!='\0' t[k]= ='\0' 或 t[k]!='\0' k= =strlen(t) 或 s[j]!='\0' k= =strlen(t) 或 s[j]!='\0'&&t[k]!='\0' k= =strlen(t) 或 t[k]!=0 k= =strlen(t) 或 s[j]!=0 k==strlen(t) 或 k<strlen(t) t[k]= ='\0' 或 k<strlen(t) t[k]= =0】(所有答案填写在此空内,答案间以空格隔开)解析:填空1中的for循环是在完成匹配的目的,所以匹配得以进行的两个条件分别是匹配串t没有到末尾,以及s和t的匹配位置相同。填空2则是判断是否匹配成功,如果匹配串t匹配到末尾,则表示匹配成功。
函数squeez(char s[],char c)的功能是删除字符串s中所出现的与变量c相同的字符。
void squeez(char s[],char c)
{
int i,j;
for(i=j=0;填空1______;i++)
if(s[i]!=c)
填空2______;
s[j]=’\0’;
}【 正确答案: s[i]!='\0' s[j++]=s[i] 或 i<strlen(s) s[j++]=s[i]】(所有答案填写在此空内,答案间以空格隔开)解析:这个函数实现的很妙,真的很妙。首先我们知道整个函数的操作都是在s上进行的,而且j<=i的(当没有相同字符的时候两者相等),所以是s[j]='\0'这部操作就是把s[j]作为s的结尾,由于要遍历整个s,所以填空1就是s[i]!='\0',由于当不与字符c相同时要实时更新s的结尾,所以s[j++]=s[i]。
下面的函数itoh(n,s)完成将无符号十进制整数转换成十六进制表示,并存入字符串数组s中。程序中用到的函数reverse(char s[])是一个将字符串置逆的函数。
void reverse(char s[])
{
int temp,i,j;
for(i=0,j=strlen(s)-1;i<j;i++,j–)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}void itoh(unsigned n,char s[])
{
int h,i=0;
do{
h=n%16;
s[i++]=(h<=9)?h+‘0’:h+‘A’_____;
}while((n/=16)!=0);
____;
reverse(s);
}【 正确答案: -10 s[i]='\0' 或 -10 s[i]=0】(所有答案填写在此空内,答案间以空格隔开)解析:填空1就是把十六进制转化为十进制的字符形式,不难得到答案。填空2就是让s有结尾,不然之后的反转会出现问题。
下面程序的功能是将字符串 s 中的内容按逆序输出,但不改变串中的内容,
请选择填空(答案请填写所选择的两个字母,中间用空格格开,如A A的形式):
#include <stdio.h>
void inverp(char *a)
{
if ( __________ )
return;
inverp(a+1);
printf("%c", ___________ );
}
int main()
{
char s[10] = “hello!”;
inverp(s);return 0;
}Selection 1 :
(A) *a != ‘\0’
(B) *a != NULL
© *a == ‘\0’
(D) ! a * == 0Selection 2 :
(A) * (a-1)
(B) *a
© * (a+1)
(D) * (–a)【 正确答案: c b】解析:填空1就是判断反转的字符串是否为空,注意是解引用,所欲必须是与'\0'有关的,所以选C。填空2注意是递归,由于是一个一个反转的,所以每进行一层递归,都要准备输出该位置的字母,最后递归回来,就可以完成反转的目的。
下面程序的功能是将已按升序排好的两个字符串a和b中的字符按升序并归到字符串c中。请选择填空将程序补充完整:
#include<stdio.h>
#include<string.h>
int main()
{
char a[]=“acegikm”;
char b[]=“bdfhjlnpq”;
char c[80],*p;
int i=0,j=0,k=0;
while(a[i]!=’\0’&&b[j]!=’\0’)
{
if(a[i]<b[j]){}
else{}
}
c[k]=’\0’;
if(_______)p=b+j;
else p=a+i;
strcat(c,p);
puts©;
return 0;
}
填空1:
(A)c[k++]=a[i++];
(B)c[k++]=a[j++];
©c[k++]=b[i++];
(D)c[k++]=b[j++];
填空2:
(A)c[k++]=a[i++];
(B)c[k++]=a[j++];
©c[k++]=b[i++];
(D)c[k++]=b[j++];
填空3:
(A)a[i]= =’\0’
(B)a[j]= =’\0’
©b[i]= =’\0’
(D)b[j]= =’\0’
【正确答案: A D A】(所有答案填写在此空内,答案间以空格隔开)解析:填空1和填空2就是在归并,注意a与i相关,b与j相关。填空3就是当a或b中有一个已经归并完了,把未归并完的追加就可以了。
选择题
下面程序段的运行结果是
char a[7]=“abcdef”,b[4]=“ABC”;
strcpy(a,b);
printf("%c",a[1]);
(A) a
(B) A
© b
(D) B【正确答案: d】解析:就是拷贝再输出。
以下给字符数组str定义和赋值正确的是
(A)char str[10]; str = “China”;
(B)char str[] = “China”;
©char str[10]; strcpy (str, “abcdefghijklmn”);
(D)char str[10] = “abcdefghigklmn”;【正确答案: B】解析:A.C语言不允许字符串直接用=进行拷贝B.没有问题C.数组开小了,会越界。D.C语言不允许这么操作。
下面程序段的运行结果是
char c[]="\t\v\\0will\n";
printf("%d",strlen©);
(A)14
(B)3
©9
(D)字符串有非法字符,输出值不确定【正确答案: B】解析:c中包含三个元素,\t \v \ 三个。
下述对C语言字符数组的描述中错误的是
(A) 字符数组可以存放字符串
(B) 字符数组的字符串可以整体输入,输出
© 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
(D) 不可以用关系运算符对字符数组中的字符串进行比较【正确答案: c】 解析:C语言不允许,可以用strcpy或memcpy
下面能正确进行字符串赋值,并且能确保字符串以’\0’结尾的操作是
(A) char s[5] = {“ABCDE”};
(B) char s[5] = {’A’, ’B’, ’C’, ’D’, ’E’};
© char *s; s = “ABCDE”;
(D) char *s; scanf("%s", s);【正确答案: c】 解析:A.如果数组s的容量大于5,那么A是对的,但是现在正好没有位置存放'\0'。B.没有'\0'。D.典型错误,没有给s申请空间,无法对s进行读入赋值。
有下面的程序段:
char a[3], b[] = “China”;
a = b;
printf("%s", a);
则(A) 运行后将输出China
(B) 运行后将输出Ch
© 运行后将输出Chi
(D) 编译出错【正确答案: d】 解析:数组越界。
阅读程序,选择程序的运行结果:
#include <stdio.h>
int try(int );
int main()
{
int x;
x = try(5);
printf("%d\n",x);
return 0;
}
int try(int n)
{
if(n>0)
return ( n*try(n-2));
else
return (1);
}
A.15
B.120
C.1
D.前面的答案均不正确【正确答案: A】解析:简单递归。
下面程序的功能是将字符串s中所有的字符’c’删除。请选择填空。
#include<stdio.h>
main()
{
char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!=’\0’;i++)
if(s[i]!=’c’)
s[j]=’\0’;
puts(s);
}(A)s[j++]=s[i];
(B)s[++j]=s[i];
©s[j]=s[i];j++
(D)s[j]=s[i]【正确答案: A】解析:填空题第七题一样。
若有说明: char *language[] = {“FORTRAN”, “BASIC”, “PASCAL”, “JAVA”, “C”};则以下不正确的叙述是
(A) *(language+2) 表示字符串"PASCAL"的首地址
(B) *language[2]的值是字母P
© language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串的指针
(D) language包含5个相同长度的数组【正确答案: d】解析:答案不难选出来,但是注意AB的区别,language[2]=*(language+2)
设n是描述问题规模的非负整数,下列程序片段的时间复杂度是
x=2;
while(x<n/2)
x=2*x;
A.0(1og2n)
B.0(n)
C.0(nlog2n)
D.0(n2)
【正确答案: A】 解析:解方程 2^x^ = n。
BUAA(2021春)第一次上机选择+填空(含解析)相关推荐
- BUAA(2021春)实验:树的构造与遍历——根据提示循序渐进(可惜提示有问题Ծ‸Ծ)
BUAA数据结构第五次编程题 --实验:树的构造与遍历 看前须知 第五次上机题汇总 实验目的与要求 实验内容 Huffman编码文件压缩 问题描述 实验准备 实验步骤 [步骤1] [步骤2] [步骤3 ...
- BUAA(2021春)小型图书管理系统
BUAA数据结构第二次编程题--小型图书管理系统 看前须知 第二次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 推荐题单 看前须知 ...
- BUAA(2021春)文件加密(环)——要求循环链表熟练的删除操作
BUAA数据结构第三次编程题--文件加密(环) 看前须知 第三次上机题汇总 题目内容 问题描述(建议用链表实现) 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前 ...
- BUAA(2021春)机试检测异常(简)(期末考试题)——简单排序
BUAA数据结构期末考试题--机试检测异常(简) 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思路详解 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. 题目内容 ...
- BUAA(2021春)大作业—— 文本摘要生成(数组字典树+快排=0.087s)
BUAA数据结构大作业-- 文本摘要生成 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 题目内容 问题描述 在自然语言文 ...
- BUAA(2021春)查家谱(士谔书院16级期末)——找最近公共祖先(已上传测试数据和代码)
BUAA数据结构期末模拟题--查家谱 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 测试数据 看前须知 要点介绍和简要声明. 考试回顾 格式控 ...
- BUAA(2021春)多项式相乘
BUAA数据结构第三次编程题--多项式相乘 看前须知 第三次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前须知 要点介绍和简要声 ...
- BUAA(2021春)空闲空间合并(期末考试模拟题)——结构体二级排序
BUAA数据结构期末模拟题--空闲空间合并 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 考试回顾 格式控制输 ...
- BUAA(2021春)空闲空间申请模拟(期中考试题)——注意读题,难度其实一般
BUAA数据结构期中考试题--空闲空间申请模拟 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 笔者的抱怨和思路详解 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. ...
最新文章
- 有多少可爱IT精英,他们的爱情屡屡“挨踢”
- 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题
- Python基础——数据分析考核(基础版本)
- Elasticsearch索引自动删除
- java白盒测试面试题_面试之JAVA基础Junit了解
- 挑战Textarea——把textarea中的HTML写入数据库
- 不懂物联网,就别怪时代抛弃你!
- 如何在Python中打印到stderr?
- c ++ 继承_了解C ++中的继承概念
- 再见,Python!你好,Go语言\n\n
- notebook打开外部文件_NOTEBOOK文件扩展名 - 什么是.notebook以及如何打开? - ReviverSoft...
- 苹果6显示连接id服务器出错,appleid:appleid连接失败该如何解决
- 做了三年前端开发后,我选择回家创业
- 74CMS 3.0 SQL注入漏洞前台
- python数据分析:词性标注
- 如何用ftp上传到服务器视频文件,ftp如何将文件上传到服务器上
- 磁共振神经根水成像_磁共振神经根水成像鉴别类肿瘤样椎间盘突出症与神经鞘瘤2例...
- ACM中的数学问题合集
- g suite_什么是G Suite?
- C语言中经典算法——斐波那契数列的几种算法