看前须知

要点介绍和简要声明.

第一次上机题汇总

扩展字符A——strchr的灵活使用.

表达式求值.

小数形式与科学计数法转换(简)——分类讨论一定要有逻辑.

超长正整数的减法(高精度减法)+其他三种高精度运算.

全排列数的生成——DFS(深度优先遍历)+回溯 秒杀本题.

填空题

  1. 下面程序段的运行结果是
    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的函数(把字符串转换为整数),理解之后很容易得到答案。
    
  2. 写出下述程序的输出结果

    #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】 解析:简单递归,可以当成数学题来写,慢慢算,不难得到答案
    
  3. 给出下述程序的执行结果
    #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】 解析:简单递归,跟上题一样,可以当成数学题来写,慢慢算,不难得到答案
    
  4. 下面的函数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。
    
  5. 下列程序是否正确,如果正确给出输出结果,如果不正确,答案处填写“不正确”。
    #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也无效,故错误。
    
  6. 函数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匹配到末尾,则表示匹配成功。
    
  7. 函数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]。
    
  8. 下面的函数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有结尾,不然之后的反转会出现问题。
    
  9. 下面程序的功能是将字符串 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 * == 0

    Selection 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中有一个已经归并完了,把未归并完的追加就可以了。

选择题

  1. 下面程序段的运行结果是
    char a[7]=“abcdef”,b[4]=“ABC”;
    strcpy(a,b);
    printf("%c",a[1]);
    (A) a
    (B) A
    © b
    (D) B

     【正确答案: d】解析:就是拷贝再输出。
    
  2. 以下给字符数组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语言不允许这么操作。
    
  3. 下面程序段的运行结果是
    char c[]="\t\v\\0will\n";
    printf("%d",strlen©);
    (A)14
    (B)3
    ©9
    (D)字符串有非法字符,输出值不确定

     【正确答案: B】解析:c中包含三个元素,\t   \v   \   三个。
    
  4. 下述对C语言字符数组的描述中错误的是
    (A) 字符数组可以存放字符串
    (B) 字符数组的字符串可以整体输入,输出
    © 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
    (D) 不可以用关系运算符对字符数组中的字符串进行比较

     【正确答案: c】    解析:C语言不允许,可以用strcpy或memcpy
    
  5. 下面能正确进行字符串赋值,并且能确保字符串以’\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进行读入赋值。
    
  6. 有下面的程序段:
    char a[3], b[] = “China”;
    a = b;
    printf("%s", a);

    (A) 运行后将输出China
    (B) 运行后将输出Ch
    © 运行后将输出Chi
    (D) 编译出错

     【正确答案: d】 解析:数组越界。
    
  7. 阅读程序,选择程序的运行结果:
    #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】解析:简单递归。
    
  8. 下面程序的功能是将字符串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】解析:填空题第七题一样。
    
  9. 若有说明: 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)
    
  10. 设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春)第一次上机选择+填空(含解析)相关推荐

  1. BUAA(2021春)实验:树的构造与遍历——根据提示循序渐进(可惜提示有问题Ծ‸Ծ)

    BUAA数据结构第五次编程题 --实验:树的构造与遍历 看前须知 第五次上机题汇总 实验目的与要求 实验内容 Huffman编码文件压缩 问题描述 实验准备 实验步骤 [步骤1] [步骤2] [步骤3 ...

  2. BUAA(2021春)小型图书管理系统

    BUAA数据结构第二次编程题--小型图书管理系统 看前须知 第二次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 推荐题单 看前须知 ...

  3. BUAA(2021春)文件加密(环)——要求循环链表熟练的删除操作

    BUAA数据结构第三次编程题--文件加密(环) 看前须知 第三次上机题汇总 题目内容 问题描述(建议用链表实现) 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前 ...

  4. BUAA(2021春)机试检测异常(简)(期末考试题)——简单排序

    BUAA数据结构期末考试题--机试检测异常(简) 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思路详解 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. 题目内容 ...

  5. BUAA(2021春)大作业—— 文本摘要生成(数组字典树+快排=0.087s)

    BUAA数据结构大作业-- 文本摘要生成 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 题目内容 问题描述 在自然语言文 ...

  6. BUAA(2021春)查家谱(士谔书院16级期末)——找最近公共祖先(已上传测试数据和代码)

    BUAA数据结构期末模拟题--查家谱 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 测试数据 看前须知 要点介绍和简要声明. 考试回顾 格式控 ...

  7. BUAA(2021春)多项式相乘

    BUAA数据结构第三次编程题--多项式相乘 看前须知 第三次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前须知 要点介绍和简要声 ...

  8. BUAA(2021春)空闲空间合并(期末考试模拟题)——结构体二级排序

    BUAA数据结构期末模拟题--空闲空间合并 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 考试回顾 格式控制输 ...

  9. BUAA(2021春)空闲空间申请模拟(期中考试题)——注意读题,难度其实一般

    BUAA数据结构期中考试题--空闲空间申请模拟 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 笔者的抱怨和思路详解 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. ...

最新文章

  1. 有多少可爱IT精英,他们的爱情屡屡“挨踢”
  2. 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题
  3. Python基础——数据分析考核(基础版本)
  4. Elasticsearch索引自动删除
  5. java白盒测试面试题_面试之JAVA基础Junit了解
  6. 挑战Textarea——把textarea中的HTML写入数据库
  7. 不懂物联网,就别怪时代抛弃你!
  8. 如何在Python中打印到stderr?
  9. c ++ 继承_了解C ++中的继承概念
  10. 再见,Python!你好,Go语言\n\n
  11. notebook打开外部文件_NOTEBOOK文件扩展名 - 什么是.notebook以及如何打开? - ReviverSoft...
  12. 苹果6显示连接id服务器出错,appleid:appleid连接失败该如何解决
  13. 做了三年前端开发后,我选择回家创业
  14. 74CMS 3.0 SQL注入漏洞前台
  15. python数据分析:词性标注
  16. 如何用ftp上传到服务器视频文件,ftp如何将文件上传到服务器上
  17. 磁共振神经根水成像_磁共振神经根水成像鉴别类肿瘤样椎间盘突出症与神经鞘瘤2例...
  18. ACM中的数学问题合集
  19. g suite_什么是G Suite?
  20. C语言中经典算法——斐波那契数列的几种算法

热门文章

  1. c语言 读取TXT 去空格,C语言读取TXT文件,忽略文件空格,把内容写入数组中应该如何实现...
  2. excel组合汇总_Excel汇总20140224
  3. 荣联再次中标中国移动云资源池项目
  4. 2021-01-12 DataGrip2020.3 离线安装驱动
  5. 入侵检测与防御技术基础
  6. 入侵检测技术综述(比较全)
  7. keyevent常用键列表
  8. 什么是数字证书、公钥私钥
  9. 优思学院|六西格玛的真理
  10. 流媒体之Jitterbuffer笔记