1、指出程序中的错误,说明原因并修正

1.1

int *p,*q;
p=malloc(sizeof(int)*20);
q=malloc(sizeof(int)*10);

q=p;

free(p);
free(q);

分析:

错误1,q原本储存一片int类型的内存区域的地址,在没有释放这片地址时就修改了q的内容,使这片区域无法收回,导致内存泄漏。

错误2,p与q指向同一片内存区域,在使用free(p)后该内存区域已经释放,不能再free一遍。改正:将free(q)放在q=p前面(改正有多种说法,这里选择其中一种)


1.2

//交换字符串
void swap(char *p, char *q)
{
char *temp; //p、q所指的值的交换
*temp=*p;
*p=*q;
*q=*temp;
}

分析:该代码首先创建了形参p和q接受两个char类型的地址,在代码内部交换的这两个形参的内容,没有对外界产生任何影响。

该代码的修改如下:

void swap(char *p, char *q)
{
char temp[100];
strcpy(temp,p); //strcpy函数:复制字符串
strcpy(p,q);
strcpy(q,temp);
}

2、简答题

2.1 arr为整型数组,N为数组长度,enumb为整型变量,下列函数负责找出arr数组中等于enumb的元素所在位置。指出程序的三种异常,并说明原因。

for(i=N-1;arr[i]!=enumb;--i)
  printf(“%d”,i);

分析:

首先for循环后面应该有分号,否则每次循环都有输出。

其次如果arr数组中没有enumb,i就会变为负号,数组溢出。

最后,若i一直减小,i会减小直到溢出。


2.2  if(B) s1 else s2;是什么结构?使用显示结构语言该如何表示?并标出条件跳转和强制跳转

分析:条件分支结构

if(b) goto L1;//条件跳转
goto L2;//强制跳转
L1: s1
L2: s2

2.3 C语言中,常量存储在哪里?静态局部变量和静态全局变量存储在哪里?

分析:常量存储在常量区,静态局部变量和静态全局变量存储在全局数据区。


3填空题

3.1 下面程序是对链表进行选择排序,填上空缺的部分

list selectsort(list head){
list p = (struct node*)malloc(sizeof(node));
p->next = head;
head = p;//新建一个头结点
p = head->next;
list k = head, q = head; while (p->next)
{
q = p->next;
k = q; //k记录最小值位置
          //找到最小元素位置
while (q) {
if (q->data < k->data) {
k = q;
}
q = q->next;
}
          //交换元素位置
if (p->next != k) {
int r = p->next->data;
p->next->data = k->data;
k->data = r;
}
p = p->next; //填空一
}
p = head;
head = head->next; //填空二
free(p); //释放头结点
return head; //填空三
} 

3.2 快速排序法求某个数组前n个元素第k大的数

int find_k(int *a, int n,int k) {
int i, j, t;
int low = 0,high = n - 1;
do {
i = low; j = high; t = a[low];
do {
while (a[j]>t) j--;
while (a[i]<t) i++;
if ()
swap(&a[j], &a[i]);
else
;
} while (i<j);
if (i == k)
return t;
if (i>k)
;
if (i<k)
;
} while (low<high);
;
}

分析:该题目使用快排划分的第一种写法,原理是利用每次快排划分之后总能确定一个元素的最终位置。该程序可能仍然存在问题,最大的数字是第0个。

int find_k(int *a, int n,int k) { //从大到小排序
int i, j, t;
int low = 0,high = n - 1;
do {
i = low; j = high; t = a[low];
do {
while (a[j]<t) j--;
while (a[i]>t) i++;
if (i<j)
swap(&a[j], &a[i]);
else
break; //填空1
} while (i<j);
if (i == k)
return t;
if (i>k)
high = i - 1; //填空2
if (i<k)
low = i + 1; //填空3
} while (low<high);
return a[low]; //填空4
}

3.3约瑟夫环问题 【见2015年】 

int a[N + 1];
int *p = a, i,j,k;
for(i = 0; i<N + 1; i++)
*(p+i) = i;
;
;
for( i = 0; k != 1; p++)
{
if()
p = a + 1;
if()
i++;
if()
{
k--;
i = 0;
*p = 0;
}
}
for(i = 0; i<N + 1; i++)
{
if()
printf("%d\n",a[i]);
}

分析:15年约瑟夫环区别

int a[N + 1];
int *p = a, i,j,k;
//赋值0~N
for(i = 0; i<N + 1; i++)
*(p+i) = i;
p = a + 1; //填空1
k = N; //填空2
for( i = 0; k > 1; p++) //k为剩下的人数
{
if(p>a + N)
p = a + 1;
if(*p != 0) //碰到元素为0说明已经杀死,不参与计数
i++; //i报数
if(i == 3)
{
k--;
i = 0;
*p = 0;
}
}
//打印输出
for(i = 0; i<N + 1; i++)
{
if(a[i] != 0)
printf("%d\n",a[i]);
}

3.4 完美乘法,若a*b=c,且abc中0~9的数字各出现一次,填写程序空缺处。

int f[10],s[3];
int n=0;
for (int a = 12; a<999; a++)
{
int t = 0;
//清空数字计数
for (int x = 0; x<10; x++)
f[x] = 0;
for (int b = 345; b<9999; b++)
{
int c ;
; //填空一
s[0] = a;
s[1] = b;
s[2] = c;
//计算abc中出现数字的次数
for (int x = 0; x < 3; x++)
{
int y = s[x];
while ()
{
int t = y % 10;
f[t]++;
; //填空二
}
}
//检查是否每个数都个出现一次
for (int x = 0; x<10; x++)
{
if () ; //填空三
}
if ()
printf("%d*%d=%d\n",a,b,c);
            ;//填空四
}
}

分析:

int f[10],s[3];
int n=0;
for (int a = 12; a<999; a++)
{
int t = 0;
//清空数字计数
for (int x = 0; x<10; x++)
f[x] = 0;
for (int b = 345; b<9999; b++)
{
int c = a*b;
s[0] = a;
s[1] = b;
s[2] = c;
//计算abc中出现数字的次数
for (int x = 0; x < 3; x++)
{
int y = s[x];
while (y > 0)
{
int t = y % 10;
f[t]++;
y = y / 10;
}
}
//检查是否每个数都个出现一次
for (int x = 0; x<10; x++)
{
if (f[x] != 1) t++;
}
if (t == 0)
printf("%d*%d=%d\n",a,b,c);
n++; //统计循环次数
}
}

4编程题

4.1 将字符串逆转,函数原型void reverse(char *str);,要求空间复杂度为O(1)

#include <stdio.h>
#include <stdlib.h>
#include <string.h> void reverse(char *str)
{
int i = 0, len = strlen(str);
for (; i < len / 2; i++)
{
char a = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = a;
}
}
int main()
{
char ch[] = "helloworld";
reverse(ch);
printf("逆转后:%s",ch);
return 0;
}

 


4.2 比较两个身份证字符串的生日大小。函数原型int isbothsame(char str1[19], char str2[19]);

#include <stdio.h>
#include <stdlib.h> int isbothsame(char str1[19], char str2[19])
{
int low = 6, hight = 13;
while (low<hight &&str1[low] == str2[low])low++; //low记录不相同的位置
return str1[low] - str2[low]; //负数表示str1的年长
}
int main()
{
char a[] = "412824199605281234",b[] = "41282519960825789x";
if(isbothsame(a,b) < 0)
printf("a年长!");
else
printf("b年长!");
return 0;
}


4.3 计算1-x+x^2/2!-x^3/3!+…+x^n/n!  【见2015年】

void main()
{
int n, x, j, i = 1;
float sum = 1, k = -1;
printf("Input n and x:\n");
scanf("%d %d", &n, &x);
while (i <= n) {
k = -1;
for (j = 1; j <= i; j++) {
k = -1*k*x;
}
for (j = 1; j <= i; j++) {
k = k/ j;
}
sum += k;
i++;
}
printf("%f\n", sum);
}

动态规划改进:

void main()
{
int n,x,i=1;
float sum = 1,k = -1;
printf("Input n and x:\n");
scanf("%d %d", &n, &x);
while (i <= n) {
k = -1 * k*x / i;
sum += k;
i++;
}
printf("%f", sum);
}

4.4一个链表,找出其中数据项最大的结点,然后将其移动到链表尾部(结点node由整型data和节点指针next构成),不允许申请新的结点

#include <stdio.h>
#include <stdlib.h> typedef struct slist
{
int data;
struct slist *next;
};
void movemax(struct slist *L)
{
struct slist *p = L->next, *pre = L, *max = p;
//找到最大值的位置
while (p)
{
if (p->data>max->data)max = p;
pre = p;
p = p->next;
}
//此时p指向NULL,pre指向最后一个结点
//最大值和最后一个节点交换
int temp = pre->data;
pre->data = max->data;
max->data = temp;
}
int main()
{
//建立单链表【尾插法】
int a[] = {1,4,7,8,5,2,9,6,3};
struct slist *p,*head = (struct slist*)malloc(sizeof(struct slist));
head ->next = NULL;
int i;
p = head;
for(i = 0;i < 9;i++)
{
struct slist *node = (struct slist*)malloc(sizeof(struct slist));
node ->data = a[i];
node ->next = p ->next;
p ->next = node;
p = node;
}
printf("找到最大值后移:\n");
movemax(head);
//输出
p = head ->next;
while(p != NULL)
{
printf("%d\t",p ->data);
p = p->next;
}
return 0;
}

C 2014年笔试题的更多相关文章

  1. 阿里2014校招笔试题(南大)——利用thread和sleep生成字符串的伪随机序列

    引言:题目具体描述记不大清了,大概是:Linux平台,利用线程调度的随机性和sleep的不准确性,生成一个各位均不相同的字符数组的伪随机序列.不得使用任何库函数.(这句记得清楚,当时在想线程库算不算, ...

  2. 考研计算机复试(广东工业大学C语言复试2014~2017笔试题)(精华题选)

    1.C语言中,全局变量的存储类别是() A.extern B.void C.int   D.static 2.静态变量: (1)static 外部变量===>在函数外定义,只能在本文件中使用 ( ...

  3. 微软2014校招笔试题-String reorder

    Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description For this question, your pro ...

  4. 2014 WAP校园招聘笔试题

    2014 WAP校园招聘笔试题 Problem's Link:   http://www.doc88.com/p-6751117015483.html WAP公司笔试题 We are planning ...

  5. 2014阿里巴巴WEB前端实习生在线笔试题

    2014年3月31日晚,我怀着稍微忐忑的心情(第一次在线笔试^_^!!)进行了笔试.阿里巴巴的笔试题共同拥有10道,差点儿包括了Web前端开发的各个方面,有程序题.有叙述题.时间很紧张,仅仅完毕了大概 ...

  6. 【Python】:用python做下百度2014笔试题

    国庆节最后一天,明天就要上班了,闲来无事做做百度2014笔试题,好久没用过C++了,索性就用python简单的写一下,体验下题目难度.题目是从[大卫David]那里copy过来的. 1.给定任意一个正 ...

  7. 诺基亚(Microsoft Devices Group)2014暑期实习生笔试题知识点

    总结一下Microsoft Devices Group的软件类笔试题,全部笔试题分两份试卷,逻辑题一份和软件測试题一份,仅仅总结技术题喽~题目全英文,仅仅包括选择题和填空题.选择题居多.分单选和多选. ...

  8. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  9. 我设计的ASP.NET笔试题,你会多少呢

    本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...

随机推荐

  1. Redis 原理

    线程IO模型 Redis 是个单线程程序!(对外网络请求服务) 对于那些时间复杂度为 O(n) 级别的指令,一定要谨慎使用,一不小心就可能会导致 Redis 卡顿. 使用缓冲区,事件轮询 API(Li ...

  2. 1078 Hashing (25 分)

    1078 Hashing (25 分) The task of this problem is simple: insert a sequence of distinct positive integ ...

  3. JavaScript 语言精粹笔记3

    方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...

  4. python通用读取vcf文件的类(可以直接复制粘贴使用)

    前言   处理vcf文件的时候,需要多种切割,正则匹配,如果要自己写其实会比较麻烦,并且每次还得根据vcf文件格式或者需要读取的值不同要修改相应的代码.因此很多人会选择一些python的vcf的库,但 ...

  5. Hackintosh Of Lenovo R720 15IKBN

    Hackintosh Of Qftm 一个黑苹果爱好者的项目 定制:macOS Catalina 10.15.1 电脑配置 一键查看电脑配置(鲁大师.360驱动管理.Lenovo管家等) 规格 详细信 ...

  6. python爬虫之浅析验证码

    一.什么是验证码? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”( ...

  7. k3s原理分析丨如何搞定k3s node注册失败问题

    前 言 面向边缘的轻量级K8S发行版k3s于去年2月底发布后,备受关注,在发布后的10个月时间里,Github Star达11,000颗.于去年11月中旬已经GA.但正如你所知,没有一个产品是十全十美 ...

  8. 《数字信号处理》课程实验2 – FIR数字滤波器设计

    一.FIR数字滤波器设计原理  本实验采用窗函数法设计FIR数字低通滤波器.我们希望设计的滤波器系统函数如下: \(H_{d}\left( e^{jw} \right) = \left\{ \begi ...

  9. All In One

    set1 https://github.com/tianhang-f... set2 https://github.com/tianhang/F... set3https://github.com/t ...

  10. C++读入输出优化

    读入输出优化虽然对于小数据没有半点作用,但是对于大数据来说,可以优化几十ms. 有时就是那么几十ms,可以被卡掉大数据的点 读入优化 int read() { int x=0,sig=1; char ...