=3" />

C语言竞赛题目大全--重点--多看看题目类型!!!

C语言竞赛题目大全--重点--多看看题目类型!!!
C语言竞赛题目大全--重点--多看看题目类型!!!

C语言竞赛题目大全

POWERED BY SYD1682010年5月7日

第1题寄存器操作

问题:

假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y 在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:

Sample Input

12345678,0,3

输出:

1234567c

解题思路:

很简单的位操作,但是需要注意的是Y那里是110,不能直接或上110,而是先两次SET,在CLR。

答案:

#include

#define CLR(r,x)r&=~(1UL<

int main()

{

int r,x,y;

scanf("%x,%d,%d",&r,&x,&y);

CLR(r,x);//清除x位

SET(r,y);//置位y位

SET(r,y-1);//置位y-1位

CLR(r,y-2);//置位y-2位

printf("%x",r);

return0;

}

第2题破译密码

问题:

据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。

密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M

原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。

输入:

最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成:

1.起始行:START

2.密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息.

3.结束行:END

在最后一个数据集之后,是另一行:ENDOFINPUT。

输出:

每个数据集对应一行,是凯撒的原始消息。

?Sample Input

START

NS BFW,JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX

END

START

N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ

END

START

IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ

END

ENDOFINPUT

?Sample Output

IN WAR,EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES

I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME

DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE

解题思路

凯撒编码,判断字符是否是字母,并循环-5即可,记得要循环哦,非常简单的题目哦答案:

#include

#include

#include

#define N202

char str[N]={0};

int main()

{

char*p;

gets(str);

while(strcmp(str,"ENDOFINPUT")!=0)//当没遇到消息集的结尾时

{

if((strcmp(str,"START")!=0)//当消息不是开始

&&(strcmp(str,"END")!=0))//消息不是结尾

{

for(p=str;*p!='\0';p++)//对输入的串进行解密

{

if(isupper(*p))//判断是否为大写字符

*p+=*p-5<'A'?26-5:-5;//进行转换,考虑边界问题!

}

puts(str);//输出字符

}

gets(str);//接受下一行

}

return0;

}

第3题小孩报数问题

有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S 个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。或者是求最后出圈人的编号等等类似问题。

输入:第一行输入小孩的人数N(N<=64),接下来每行输入一个小孩的名字(人名不超过15个字符)最后一行输入W,S(W

输出:按人名输出小孩按顺序出列的顺序,每行输出一个人名

?Sample Input

5

Xiaoming

Xiaohua

Xiaowang

Zhangsan

Lisi

2,3

?Sample Output

Zhangsan

Xiaohua

Xiaoming

Xiaowang

Lisi

解题思路:(暂空)

第4题方阵填数

答案:

#include

using namespace std;

int a[10][10];

void Fun(int n)

{

int m=1,j,i;

for(i=0;i

{

for(j=0;j

{

if(a[i][j]==0)

a[i][j]=m++;

}

for(j=i+1;j

{

if(a[j][n-1-i]==0)

a[j][n-1-i]=m++;

}

for(j=n-i-1;j>i;j--)

{

if(a[n-i-1][j]==0)

a[n-i-1][j]=m++;

}

for(j=n-i-1;j>i;j--)

{

if(a[j][i]==0)

a[j][i]=m++;

}

}

if(n%2==1)

a[n/2][n/2]=m;

}

void main()

{

int n,i,j;

cin>>n;

for(int i=0;i

{

for(int j=0;j

a[i][j]=0;

}

Fun(n);

for(i=0;i

{

for(int j=0;j

{

cout<

}

cout<

}

}

第5题第五套

1.编写一个程序,让它有以下功能:从键盘上输入一个五位数,对此整数中的五个数值进

行从大到小排序,形成一个新的五位数,输出这个整数。

2.输入年、月、日,输出该日期是该年的第几天。

3.将学生的学号和成绩存储在数组中,利用循环计算出数组中存储学生的平均成绩,找出

高于平均分的学生信息并输出。

4.输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。

5.用指针实现:任意输入20个数,将它们按照从大到小的顺序输出。

6.编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现

编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找,通讯录保存到一个文件中。

第6题进制转换问题

1.问题描述

实现将N进制到M进制数的转换(1

进制1011162735

数值10091643J2U

2.要求:

(1).实现10进制数到M进制数的转换。

(2).程序具有较强的容错能力(例如对错误的输入数字串的处理)。

(3).N进制到M进制数(1

3.输入:

输入文件名为convert.in,文件内容格式为第一列为被转换数的进制数,第二列为被转换数,第三列为转换后的进制。这三列内容均为字符串形式。每列之间使用一个空格隔开。

4.输出:

输出文件名为convert.out,文件内容为转换后的数。对于一切错误,则输出“error”字符串。

5.输入输出文件样例:

样例1

convert.in convert.out

10100273J

样例2

convert.in convert.out

314027error

答案:

#include

#include

void ten_to_m(char out[],long int data,int M);

int judge(int N,long int data);

void convert(char out[],int N,long int data,int M);

int main()

{

int N;//N进制

int M;//M进制

long int data;//N进制数

char out[100];//存放M进制数

/*打开convert.in这个文件,从文件中读取用到的数据*/

FILE*fp=fopen("/home/student/convert.in","r");

if(fp!=NULL)

{

fscanf(fp,"%d%ld%d",&N,&data,&M);

fclose(fp);

fp=NULL;

}

/*判断数据data有没有错,如果没错则转换为M进制,如果错则把error 写入out中*/

if(judge(N,data)==1)

{

convert(out,N,data,M);

}

else

{

strcpy(out,"error");

}

printf("%s\n",out);

/*把得到的结果写入convert.out文件中去*/ FILE*fw=fopen("/home/student/convert.out","w");

if(fw!=NULL)

{

fprintf(fw,"%s\n",out);

fclose(fw);

fw=NULL;

}

return0;

}

/*判断data有没有错,先把data转换为字符串,然后再进行判断*/

int judge(int N,long int data)

{

char b[100];//data转换后放入b中

ten_to_m(b,data,10);//相当于itoa

char*s=b;

while(*s!='\0')

{

if((*s-'0')>=N)

{

return0;

}

s++;

}

return1;

}

/*N进制转为M进制,先把N进制转为十进制,再把十进制转为M进制*/ void convert(char out[],int N,long int data,int M)

{

int a=n_to_ten(N,data);

ten_to_m(out,a,M);

}

/*十进制转为M进制,当M=10时此函数相当于itoa*/ void ten_to_m(char out[],long int data,int M)

{

int i=0;

int tmp=data;

int len;

char t;

/*把data转为字符倒序的放入字符数组out中去*/ while(tmp!=0)

{

if(tmp%M>=10)

{

out[i]=tmp%M-10+'A';

}

else

{

out[i]=tmp%M+'0';

}

tmp=tmp/M;

i++;

}

len=i;

/*把字符数组out反序*/

for(i=0;i

{

t=out[i];

out[i]=out[len-i-1];

out[len-i-1]=t;

}

out[len]='\0';

}

/*N进制转为十进制*/ int n_to_ten(int N,long int data)

{

char a[100];

int i;

ten_to_m(a,data,10);//把data转为字符串

int len=strlen(a);

int out=0;

for(i=0;i

{

out=out*N+a[i]-'0';

}

return out;

}

第7题综合应用

1.矩阵应用

给定一个整数N,生成一个N*N的矩阵,矩阵中元素取值为1至N2,1在左上角,其余各数按顺时针方向旋转前进,依次递增放置。例如,当N=4时,矩阵中的内容如下:1234

1213145

1116156

10987

给定n(3£n£50000)个闭区间[ai,bi](1£i£n,ai,bi均为非负整数),将这些区间合并为不相交的闭区间。输入文件的第一行包含一个整数n,为区间的数目。以下有n行,每行各包括两个空格分隔的整数ai和bi,表示一个区间[ai,bi](0 £ai£bi£1000000)。计算结果写在标准输出上,各区间按照升序排列输出。每一行包含两个用空格分开的整数,分别描述一个区间的上下界。例如,对于下列输入数据:

5

56

14

1010

69

810

输出为:

14

510

2.字符串处理

从标准输入中读入N(1

3.汉诺塔问题

写出程序求解Hanoi双塔问题。从标准输入上读入正整数n(n<12),在标准输出上输出盘子的移动动作。盘子的尺寸由1到n,输出数据格式为:

move<盘子编号>from<原位置>to<新位置>

其中<盘子编号>为a或b,其中是一个小于等于n的正整数,在初始状态下尺寸相同的盘子中a盘在b盘之上,<原位置>和<新位置>均为字母ABC中的一个。例如,移动序列的第一个动作可能是move1a from A to C。

4.表达式问题

从标准输入上读入一个由数字和四则运算符组成的后缀表达式,将其转换为中缀表达式。后缀表达式中的运算符不超过15个,数字可以是整数,也可以是带有小数部分的浮点数,数字和运算符之间由空格分隔。转换后的中缀表达式中不应出现不必要的括号和空格,且转换前后各运算数的出现顺序不变。例如,对于后缀表达式:

47- 2.15+*7.19-/

输出

(4-7)*(2.1+5)/(7.1-9)

有大、中、小三个酒桶,分别能装A斤、B斤和C斤酒,其中A、B、C均为整数,

A=B+C,B>C>0,且A为偶数。现在大桶装满了酒,另外两个桶都空着。写程序求解用这三个桶将酒平分成为两份的操作序列。当无解时输出字符串“No”。

5.文件处理

读入一个不超过20000000个字符的正文文件,统计其中所有由字母组成的单词及其所在的行号。文件中各个单词之间以空白符或标点分隔,区分大小写。按单词的字典序在标准输出上输出统计结果,输出格式为:

,每个单词一行,其中是单词,是行号。行号之间由空格分隔,按升序排列,不得重复,即当一个单词在一行出现多次时,只输出该行号一次。

6.路径处理

写一个程序,列出环境变量PATH中包含的所有目录的路径名。注意,Unix/Linux上PATH 中各个路径名之间的分隔符与Windows上的不同。使用条件编译,使你的程序可以适用于这两种系统

第8题第八套

1.百度语言翻译机

百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套独特的缩略语。他们在平时的交谈、会议,甚至在各种技术文档中都会大量运用。

为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩略语和专有名词翻译成日常语言。

输入要求:

输入数据包含三部分:

1.第一行包含一个整数N(N<=10000),表示总共有多少个缩略语的词条;

2.紧接着有N行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩略语(仅包含大写英文字符,长度不超过10字节),第二个字符串为日常语言(不包含空格,长度不超过255字节);

3.从第N+2开始到输入结束为包含缩略语的相关文档(总长度不超过1000000个字节)。例:

6

PS门户搜索部

NLP自然语言处理

PM产品市场部

HR人力资源部

PMD产品推广部

MD市场发展部

百度的部门包括PS,PM,HR,PMD,MD等等,其中PS还包括NLP小组。

样例:in.txt

输出要求:

输出将缩略语转换成日常语言后的文档。(将缩略语转换成日常语言,其他字符保留原样)。例:

百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。

样例:out.txt

2.饭团的烦恼

“午餐饭团”是百度内部参与人数最多的民间组织。同一个部门的、同一所大学的、同一年出生的、使用同一种型号电脑的员工们总是以各种理由组织各种长期的、临时的饭团。参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们增进感情。但是,随着百度的员工越来越多,各个饭团的管理变得繁杂起来。特别是为了照顾员工们越来越挑剔的胃,饭团的点菜负责人的压力也越来越大。现在,这个任务就交给“百度之星”了,因为,你将要为所有的百度饭团设计一个自动点菜的算法。

饭团点菜的需求如下:

1.经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。因此,我们希望最后的人均费用越接近12元越好。

2.菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。

3.请谨记,百度饭团在各大餐馆享受8折优惠。

输入要求:

1.输入数据第一行包含三个整数N,M,K(0

2.紧接着N行,每行的格式如下:

菜名(长度不超过20个字符)价格(原价,整数)是否荤菜(1表示是,0表示否)是否辛辣(1表示是,0表示否);

3.第N+2行是a b c d四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。例:

322

水煮鱼3011

口水鸡1811

清炖豆腐1200

1111

样例:in.txt

输出要求:

对于每组测试数据,输出数据包含M+1行,前M行每行包含一个菜名(按菜名在原菜单的顺序排序)。第M+1行是人均消费,结果保留两位小数。例:

口水鸡

清炖豆腐

12.00

样例:out.txt

第9题比赛规则

为了促进各部门员工的交流,百度举办了一场全公司范围内的“拳皇”(百度内部最流行的格斗游戏)友谊赛,负责组织这场比赛的是百度的超级“拳皇”迷W.Z。W.Z不想用传统的淘汰赛或者循环赛的方式,而是自己制定了一个比赛规则。

由于一些员工(比如同部门或者相邻部门员工)平时接触的机会比较多,为了促进不同部门之间的交流,W.Z希望员工自由分组。不同组之间的每两个人都会进行一场友谊赛而同一组内的人之间不会打任何比赛。

比如4个人,编号为1~4,如果分为两个组并且1,2一个组,3,4一个组,那么一共需要打四场比赛:1vs3,1vs4,2vs3,2vs4。而如果是1,2,3一组,4单独一组,那么一共需要打三场比赛:1vs4,2vs4,3vs4。

很快W.Z意识到,这样的比赛规则可能会让比赛的场数非常多。W.Z想知道如果有N 个人,通过上面这种比赛规则,总比赛场数有可能为K场吗?比如3个人,如果只分到一组则不需要比赛,如果分到两组则需要2场比赛,如果分为三组则需要3场比赛。但是无论怎么分都不可能恰需要1场比赛。

相信作为编程高手的你一定知道该怎么回答这个问题了吧?那么现在请你帮助W.Z吧。输入要求:

每行为一组数据,包含两个数字N,K(0=0)。例:

20

21

31

32

样例:in.txt

输出要求:

对输入的N,K如果N个员工通过一定的分组方式可以使比赛场数恰好为K,则输出"YES",否则输出"NO"(请全部使用大写字母),每组数据占一行。例:

YES

YES

NO

YES

样例:out.txt

第10题蝈蝈计分

蝈蝈小朋友刚刚学会了0~9这十个数字,也跟爸爸妈妈来参加百度每周进行的羽毛球活动。但是他还没有球拍高,于是大人们叫他记录分数。聪明的蝈蝈发现只要记录连续得分的情况就可以了,比如用“324”可以表示一方在这一局中连得三分后,输了两分,接着又连得到四分。可是,后来大人们发现蝈蝈只会用0~9这十个数字,所以当比赛选手得分超过9的时候,他会用一个X来表示10完成记分。但问题是,当记录为“X35”的时候,蝈蝈自己也记不起来是一方连续得到十三分后,再输五分;还是先赢十分输三分再赢五分。

因为百度内部就要开始进行羽毛球联赛了,要先摸清大家的实力才好分组比赛呢~于是,大人们想知道以前每局的比分是怎样的,以及谁获得了胜利。要是遇到了根据比赛记录无法确认比赛过程的情况,也要输出相应的提示哦。

需要进一步说明的是,比赛是五局三胜的,每局先获得二十一分的为胜,但是胜方必须领先对手两分或以上,否则必须继续比赛直到一方超出对手两分为止,比分多的一方获胜。任何一方先获胜三局后就获得最终胜利,比赛也相应的结束。而且蝈蝈保证是完整的无多余信息的记录了比赛。

输入要求:

1.文件中第一行只有一个整数M,表示蝈蝈记录了多少场比赛的分数;

2.在接下来的2M行里,每场比赛用两行记录,第一行是一个整数N(N<=1000)表示当前这个记录中有多少个字符,第二行就是具体的N个字符表示记录的分数(相邻字符用空格隔开)。例:

3

23

973624783279X22121X1X11

25

9385483984X X X X2X X X X284924

43

77777345676542135797531309939321115151515 51

样例:in.txt

输出要求:

对应每一个分数记录,输出相应的每局分数,每局分数都使用两个整数表示,表示两个选手的得分,中间用":"分隔开;每组分数记录间使用一个空行分隔开。如果相应的比赛结果无法预测,以“UNKNOWN”一个单词独占一行表示(请全部使用大写字母)。例:21:17

24:22

21:3

UNKNOWN

21:14

20:22

21:23

21:16

21:9

样例:out.txt

第11题座位调整

百度办公区里到处摆放着各种各样的零食。百度人力资源部的调研发现,员工如果可以在自己喜欢的美食旁边工作,效率会大大提高。因此,百度决定进行一次员工座位的大调整。调整的方法如下:

1.首先将办公区按照各种零食的摆放分成N个不同的区域(例如:可乐区,饼干区,牛奶区等等);

2.每个员工对不同的零食区域有不同的喜好程度(喜好程度是1~100的整数,喜好程度越大表示该员工越希望被调整到相应的零食区域);

3.由于每个零食区域可以容纳的员工数量有限,人力资源部希望找到一个最优的调整方案使得总的喜好程度最大。

输入要求:

文件第一行包含两个整数N,M(N>=1,M<=300)。分别表示N个区域和M个员工;第二行是N个整数构成的数列a,其中a[i]表示第i个区域可以容纳的员工数

(1<=a[i]<=M,a[1]+a[2]+...+a[N]=M);

紧接着是一个M*N的矩阵P,P(i,j)表示第i个员工对第j个区域的喜好程度。例:33

111

1005025

1005025

1005025

样例:in.txt

输出要求:

对于每个测试数据,输出可以达到的最大的喜好程度。例:

175

样例:out.txt

数据解释:

此数据只存在一种安排方法,三个员工分别安置在三个区域。最终的喜好程度为

100+50+25=175

第12题剪刀石头布

N个小孩正在和你玩一种剪刀石头布游戏(剪刀赢布,布赢石头,石头赢剪刀)。N个小孩中有一个是裁判,其余小孩分成三组(不排除某些组没有任何成员的可能性),但是你不知道谁是裁判,也不知道小孩们的分组情况。然后,小孩们开始玩剪刀石头布游戏,一共玩M次,每次任意选择两个小孩进行一轮,你会被告知结果,即两个小孩的胜负情况,然而你不会得知小孩具体出的是剪刀、石头还是布。已知各组的小孩分别只会出一种手势(因而同一组的两个小孩总会是和局),而裁判则每次都会随便选择出一种手势,因此没有人会知道裁判到底会出什么。请你在M次剪刀石头布游戏结束后,猜猜谁是裁判。如果你能猜出谁是裁判,请说明最早在第几次游戏结束后你就能够确定谁是裁判。

输入要求:

输入文件包含多组测试数据,每组测试数据第一行为两个整数N和M(1<=N<=500,0”和“<”,分别表示和局、第一个小孩胜和第二个小孩胜三种情况。例:

33

0<1

1<2

2<0

35

0<1

0>1

1<2

1>2

0<2

44

0<1

0>1

2<3

2>3

10

样例:in.txt

输出要求:

1.每组测试数据输出一行,若能猜出谁是裁判,则输出裁判的编号,并输出在第几次游戏结束后就能够确定谁是裁判,小孩的编号和游戏次数以一个空格隔开;

2.如果无法确定谁是裁判,输出-2;如果发现剪刀石头布游戏的胜负情况不合理(即无论谁是裁判都会出现矛盾),则输出-1。例:

-2

14

-1

00

第13题数与表达式

<0>

一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:

15=1+2+3+4+5

15=4+5+6

15=7+8

请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。

输入数据:

一个正整数,以命令行参数的形式提供给程序。

输出数据:

在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序

列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE”。

例如,对于15,其输出结果是:

12345

456

78

对于16,其输出结果是:

NONE

<1>重叠区间大小(20分)

题目描述:

请编写程序,找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠区间的大小。

对一个正整数n,如果n在数据文件中某行的两个正整数(假设为A和B)之间,即A<=n<=B或A>=n>=B,则n属于该行;如果n同时属于行i和j,则i和j有重叠区间;重叠区间的大小是同时属于行i和j的整数个数。

例如,行(1020)和(1225)的重叠区间为[1220],其大小为9;行(2010)和(1218)的重叠区间为[1012],其大小为3;行(2010)和(2030)的重叠区间大小为1。

输入数据:

序读入已被命名为input.txt的输入数据文本文件,该文件的行数在1到1,000,000之间,每行有用一个空格分隔的2个正整数,这2个正整数的

大小次序随机,每个数都在1和2^32-1之间。(为便于调试,您可下载测试input.txt 文件,实际运行时我们会使用不同内容的输入文件。)

输出数据:

在标准输出上打印出输入数据文件中最大重叠区间的大小,如果所有行都没有重叠区间,则输出0。

评分标准:

程序输出结果必须正确,内存使用必须不超过256MB,程序的执行时间越快越好。

<2>题目描述:

请编写程序,根据指定的对应关系,把一个文本中的字符串替换成另外的字符串。

输入数据:

序读入已被命名为text.txt和dict.txt的两个输入数据文本文件,text.txt为一个包含大量字符串(含中文)的文本,以

whitespace为分隔符;dict.txt为表示字符串(s1)与字符串(s2)的对应关系的另一个文本(含中文),大约在1万行左右,每行两个字

符串(即s1和s2),用一个\t或空格分隔。dict.txt中各行的s1没有排序,并有可能有重复,这时以最后出现的那次s1所对应的s2为准。

text.txt和dict.txt中的每个字符串都可能包含除whitespace之外的任何字符。text.txt 中的字符串必须和dict.txt

中的某s1完全匹配才能被替换。(为便于调试,您可下载测试text.txt和dict.txt文件,实际运行时我们会使用不同内容的输入文件。)

输出数据:

在标准输出上打印text.txt被dict.txt替换后了的整个文本。

评分标准:

程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。

第14题低频词过滤

<1>:低频词过滤(40分)

题目描述:

请编写程序,从包含大量单词的文本中删除出现次数最少的单词。如果有多个单词都出现最少的次数,则将这些单词都删除。

输入数据:

程序读入已被命名为corpus.txt的一个大数据量的文本文件,该文件包含英文单词和中文单词,词与词之间以一个或多个whitespace分隔。(为便于调试,您可下载测试corpus.txt 文件,实际运行时我们会使用不同内容的输入文件。)

输出数据:

在标准输出上打印删除了corpus.txt中出现次数最少的单词之后的文本(词与词保持原来的顺序,仍以空格分隔)。

评分标准:

程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。

题目描述:

一个Internet站点集合,可以用如下的方式来描述站点和站点之间的链接引用关系:s1234

1/403

23/45

322/2

4614/

其中与s(site)同行和同列的数字都表示站点号,其他每个数字表示一个站点到另一个站

点的超文本链接数。如果站点A有到另一个站点B的直接链接或间接(指通过一个或多个直接链接)链接,则称站点A有到站点B的访问关系,或称站点B可以被站点A访问到。例

如,上面描述了一个有4个站点链接关系的站点集合,第一行/403表示站点1到站点1,2,3,4的超文本链接数。

请编写程序:

1)将一个有N个站点的集合划分成满足下面所有条件的站点子集(这些子集的union组成了该N个站点集合):

a)当任一子集中的站点数大于1时,该子集内至少存在一个站点有到该子集内所有

其他站点的访问关系;

b)当任一子集中的站点数大于1时,该子集内的任一站点至少可以被该子集内的某

一站点访问到;

c)两个不同子集中的任意两个站点之间不存在任何访问关系。

2)裁减这些子集内的站点之间现有的链接关系,使得被裁减后的各子集内的站点依然

可以满足上述所有条件,同时使得子集内的站点之间的链接总数相加之和为最小。

假如上面的站点集合是这N个站点集合中的一个子集,它满足了条件a):4可以访问到3,也可以访问到2和1;也满足了条件b):站点4可以被站点3访问到,等等。对该站点集合

进行裁减使其仍然满足条件a和b,并使得其链接总数之和为最小的结果为:s1234

1/000

20/00

320/2

4014/

这里,站点4可以访问到站点3和2,站点4也可以访问到站点1(通过站点3间接访问);此外,站点3可以访问到站点4;最小链接总数相加为2+2+1+4=9。

输入数据:

程序读入已被命名为sites.txt的完全如上所示的N*N矩阵的输入数据文本文件,N不大于

10万(N即为行数和列数),输入文件的每一行的列和列之间用一个\\t分隔,行和行之间用\\n分隔。

输出数据:

按行输出满足题目要求的每个子集内的站点数以及裁减后的最小链接总数之和,数和数

之间都以一个空格分隔。如上述子集和最小链接总数为:

12349

如果输入数据无满足题目要求的子集存在,则输出NONE。

<2>题目描述:

一个智能决策系统可以由规则库和事实库两部分组成,假定规则库的形式为:Ri C1&C2&…&Cn->A

表示在条件C1,C2,…和Cn都满足的前提下,结论A成立(即采取行动A);Ri表示这是

规则库中的第i条规则。事实库则由若干为真的条件(即命题)所组成。

对一个新的待验证的命题Q,可使用数据驱动或目标驱动两种推理方式之一,来确认它是否可由某规则库和事实库推出:

1)数据驱动的推理是指从事实库开始,每次试图发现规则库中某条能满足所有条件的

规则,并将其结论作为新的事实加入事实库,然后重复此过程,直至发现Q是一个事实或没有任何新的事实可被发现;

2)目标驱动的推理是指从目标假设Q出发,每次试图发现规则库中某条含该假设的规则,然后将该规则的前提作为子目标,确认这些子目标是否和事实库中的事实相匹配,

如果没有全部匹配,则重复此过程,直至发现新的子目标都为真或不能再验证子目标是

否为真。

例如,一个规则库为:

R1X&B&E->Y

R2Y&D->Z

R3A->X

事实库为:

A

B

C

D

E

如果想知道命题Z是否为真,数据驱动的推理是从A B C D E开始,依次匹配规则R3(得到新事实X),R1(得到新事实Y)和R2,得到Z为真的事实;目标驱动的推理是从假设目

标Z开始,依次匹配规则R2(得到新的子目标Y),R1(得到新的子目标X)和R3,得到假

设Z为真的结论。

请编写程序正确、高效的实现这两种推理方式。

输入数据:

程序需要两个命令行参数:

1)<推理方式>:data|goal,分别表示程序应采用数据驱动的推理或目标驱动的推理;2)<命题>:如Z。

此外,程序还需读入已被命名为rules.txt的规则库和已被命名为facts.txt的事实库。

规则库中的规则可能在千量级,按R1,R2,R3…依次按行排列的,每行一条规则,每条规则都以Ri C1&C2&…&Cn->A的形式表示,Ri和C1之间有1个或多个空格,Ci和&之

间,Cn和->之间,以及->和A之间可以有0或多个空格。事实库中的各事实之间用1个\\n

隔开,每行一个事实。

输出数据:

如果Z能被推理为真,则输出:

TRUE<推理方式:data或goal><用空格隔开的规则序列:以在所输入的推理方式下,推

出该命题为真的规则被激活的顺序排列>

例如:TRUE goal R2R1R3

如果Z不能被推理为真,输出:

UNCERTAIN

<3>题目描述:

八方块移动游戏要求从一个含8个数字(用1-8表示)的方块以及一个空格方块(用0表示)的3x3矩阵的起始状态开始,不断移动该空格方块以使其和相邻的方块互换,直至达到所定义的目标状态。空格方块在中间位置时有上、下、左、右4个方向可移动,在四个角落上有2个方向可移动,在其他位置上有3个方向可移动。例如,假设一个3x3矩阵的初始状态为:

803

214

765

目标状态为:

123

804

765

则一个合法的移动路径为:

803813813013103123

214=>204=>024=>824=>824=>804

765765765765765765

另外,在所有可能的从初始状态到目标状态的移动路径中,步数最少的路径被称为最短路径;在上面的例子中,最短路径为5。如果不存在从初试状态到目标状态的任何路径,则称该组状态无解。

请设计有效的(细节请见评分规则)算法找到从八方块的某初试状态到某目标状态的所有可能路径中的最短路径,并用C/C++实现。

输入数据:

程序需读入已被命名为start.txt的初始状态和已被命名为goal.txt的目标状态,这两个文件都由9个数字组成(0表示空格,1-8表示8个数字方块),每行3个数字,数字之间用空格隔开。

输出数据:

如果输入数据有解,输出一个表示最短路径的非负的整数;如果输入数据无解,输出-1。自测用例:

如果输入为:start.txt和goal.txt,则产生的输出应为:

5

又例,如果用

784

356

102

替换start.txt中的内容,则产生的输出应为:

21

第15题矩阵应用

(1).给定一个整数N,生成一个N*N的矩阵,矩阵中元素取值为1至N2,1在左上角,其余各数按顺时针方向旋转前进,依次递增放置。例如,当N=4时,矩阵中的内容如下:1234

1213145

1116156

10987

(2).给定n(3£n£50000)个闭区间[ai,bi](1£i£n,ai,bi均为非负整数),将这些区间合并为不相交的闭区间。输入文件的第一行包含一个整数n,为区间的数目。以下有n行,每行各包括两个空格分隔的整数ai和bi,表示一个区间[ai,bi](0 £ai£bi£1000000)。计算结果写在标准输出上,各区间按照升序排列输出。每一行包含两个用空格分开的整数,分别描述一个区间的上下界。例如,对于下列输入数据:

5

56

14

1010

69

810

输出为:

14

510

(3)从标准输入中读入N(1

(4).写出程序求解Hanoi双塔问题。从标准输入上读入正整数n(n<12),在标准输出上输出盘子的移动动作。盘子的尺寸由1到n,输出数据格式为:

move<盘子编号>from<原位置>to<新位置>

其中<盘子编号>为a或b,其中是一个小于等于n的正整数,在初始状态下尺寸相同的盘子中a盘在b盘之上,<原位置>和<新位置>均为字母ABC中的一个。例如,移动序列的第一个动作可能是move1a from A to C。

(5).从标准输入上读入一个由数字和四则运算符组成的后缀表达式,将其转换为中缀表达式。后缀表达式中的运算符不超过15个,数字可以是整数,也可以是带有小数部分的浮点数,数字和运算符之间由空格分隔。转换后的中缀表达式中不应出现不必要的括号和空格,且转换前后各运算数的出现顺序不变。例如,对于后缀表达式:

47- 2.15+*7.19-/

输出

(4-7)*(2.1+5)/(7.1-9)

(6).有大、中、小三个酒桶,分别能装A斤、B斤和C斤酒,其中A、B、C均为整数,A=B+C,B>C>0,且A为偶数。现在大桶装满了酒,另外两个桶都空着。写程序求解用这三个桶将酒平分成为两份的操作序列。当无解时输出字符串“No”。

(7)读入一个不超过20000000个字符的正文文件,统计其中所有由字母组成的单词及其所在的行号。文件中各个单词之间以空白符或标点分隔,区分大小写。按单词的字典序在标准输出上输出统计结果,输出格式为:

,每个单词一行,其中是单词,是行号。行号之间由空格分隔,按升序排列,不得重复,即当一个单词在一行出现多次时,只输出该行号一次。

(8)写一个程序,列出环境变量PATH中包含的所有目录的路径名。注意,Unix/Linux 上PATH中各个路径名之间的分隔符与Windows上的不同。使用条件编译,使你的程序可以适用于这两种系统。

第16题经典问题

1.将7万元投资到A,B,C三项目上,

其利润见下表:

投资额(万元)│1234567

──────┼────────────────────

项A利润│0.110.130.150.240.240.300.35

B利润│0.120.160.210.250.250.290.34

目C利润│0.080.120.200.260.260.300.35

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目 1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4)如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 .写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1)标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3)懂得在宏中小心地把参数用括号括起来 4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b); 3.预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,

c语言笔试题(答案)(精心整理)

笔试题 一、填空题(每个空4分,共28分) 1)struct tagABC { char name[10]; char sex; long sno; float score[4]; }*pAbc;(四字节对齐) pAbc=NULL; 那么,执行pAbc+=2;之后pAbc的值为(64 ) 2)如下代码,最终value的值是(8) int *p1,*p2; int value; p1=(int*)0×400; p2=(int*)0×408; value = p2-p1; 3)如下代码,printf的结果为(2) #include〈stdio.h〉 #include〈string.h〉 void main(void) { char acNew[20]= “\\0\0”; printf(“%d\n”,strlen(acNew)); } 4) 有如下程序段,运行该程序的输出结果是(33) main () { int y=3,x=3,z=1; printf(“%d%d\n”,(++x,y++),z+2); } 5)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后,n的值为(2)6)struct tagAAA { Unsigned char ucId:1; Unsigned char ucPara0:2; Unsigned char ucState:6; Unsigned char ucTail:4; Unsigned char ucAvail; Unsigned char unTail2:4; Unsigned long ulData; }AAA_S 问:AAA_S在字节对齐分别为1,4情况下,占用的空间大小分别是多少?( 9)(12 )

c语言笔试题目及答案

c语言笔试题目及答案 C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。下面是c语言笔试题目及答案,请参考。 c语言笔试题目及答案 一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选 项涂写在答题卡相应位置上,答在试卷上不得分。 (1)数据的存储结构是指________。 A)存储在外存中的数据 B)数据所占的存储空间量 C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示 答案:D 评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。 (2)下列关于栈的描述中错误的是________。 A)栈是先进后出的线性表

B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底指针 答案:B 评析:栈是一种特殊的线性表,又称先进后出表(FILO—First In Last Out)。 (3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ________。 A)冒泡排序为n2 B)冒泡排序为n C)快速排序为n D)快速排序为n(n一1)/2 答案:D 评析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2。快速排序法的最坏情况比较次数也是n(n-1)/2。 (4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。 A)log2n B)n/2 C)n D)n+l 答案:C 评析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。对长度为n的线性表进行顺序查找,在最坏情况下需要比较

C语言笔试题带答案

一、选择题(1)~(10)每小题2分,? (11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)在数据结构中,从逻辑上可以把数据结构分为_______。 A)动态结构和静态结构??? ??B)紧凑结构和非紧凑结构 C)线性结构和非线性结构??? D)内部结构和外部结构 答案:C 评析:逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。 (2)若进栈序列为l,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是_______。 A)1,4,3,2??? B)2,3,4,l C)3,1,4,2 ???D)3,4, 2,1 答案:C 评析:栈是一种后进先出表,选项c中,先出栈的是3,说明此时栈内必然有1,2,由于l先于2进栈,所以l不可能在2之前出栈,故选项C这种出栈序列是不可能的。 (3)排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为_______。 A)希尔排序??? B)冒泡排序??? C)插入排序??? D)选择排序 答案:A 评析:希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。 (4)在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比较次数为_______。 A)2??? ??B)3?????? C)4 ???????D)5 答案:C

评析:二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。本题中,与 ll比较的关键码分别为15,8,10,12四个。 (5)对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为_______。 A)n-1??? B)n??? C)n+l ?????D)2n 答案:C 评析:在n个结点的单向链表(无表头结点)中,每个结点都有一个指针单元(即指针域),加上头指针,至少需要n+1个指针单元。 (6)在软件开发过程中,软件结构设计是描述_______。 A)数据存储结构?? ??B)软件体系结构??? C)软件结构测试??? D)软件控制过程 答案:B 评析:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。 (7)模块本身的内聚是模块独立性的重要性度量因素之一。在7类内聚中,具有最强内聚??? 的一类是_______。 A)顺序性内聚? ???B)过程性内聚? ????C)逻辑性内聚??? D)功能性内聚 答案:D 评析:内聚性是一个模块内部各元素间彼此结合的紧密程度的度量。内聚共有7类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。 (8)数据存储和数据流都是_______,仅仅是所处的状态不同。 A)分析结果??? B)事件??? C)动作??? D)数据 答案:D 评析:数据流图有4种成分:源点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。 (9)数据的完整性是指数据的正确性、有效性和_______。 A)可维护性??? B)独立性??? C)安全性??? D)相容性

c语言常见笔试题总结

c语言常见笔试题总结 此句出自北宋诗人林逋的七律《山园小梅》,原诗为“众芳摇落独暄妍,占尽风情向小园。疏影横斜水清浅,暗香浮动月黄昏。霜禽欲下先偷眼,粉蝶如知合断魂。幸有微吟可相狎,不须檀板共金尊。” 【1 使用宏】 1.1 #ifdef NDEBUG now i will introduce myself briefly. i am 21 years old. i was born in heilongjiang province, northeast of china. i am a senior student at beijing xx university. my major is packaging engineering. and i will receive my bachelor degree after my graduation in june. in the past 4 years, i spend most of my time on study. i have passed cet4/6 with an ease. and i have acquired basic knowledge of packaging and publishing both in theory and in practice. besides, i have attended several packaging exhibition held in beijing. this is our advantage study here. moreover, i have taken a tour to some big factory and company. through these i have a deeply understanding of domestic packaging industry. 勤思考研解析:此题考查了初中生出现反抗心理的原因,有三个:自我意识高涨;独立意识增强;中枢神经系统的兴奋性过强,因此答案是C。 #define TRACE(S) S #else #define TRACE(S) printf(“%s;\n”, #S); S #endif 问:以上TRACE()宏的作用是什么? 1.2 #error的作用? 1.3 定义一个宏,求出给定数组中的元素的个数 人员绩效考评的成对比较法中,管理者只有在对每个员工与其他所有员工进行成对比较之后,才能得出对其业绩的总的评价结果。如某部门有五名员工,用该方法所需的总的成对比较次数为

C语言操作题常考编程题库完整

C语言编程题覆盖到的算法: 1、个人所得税计算; 2、求一组数的正、负数(或奇、偶数)的个数和平均值; 3、二维数组主、次对角线之和; 4、求素数(用函数实现); 5、级数有限项求和问题; 6、两个一维数组相加(用函数实现); 7、求最大、最小值; 8、判断闰年(用函数实现); 9、求水仙花数; 10、百钱百鸡; 11、求最大公约数、最小公倍数。 12、求回文数; 13、排序; 14、二维数组的转置; 15、递归函数求阶乘; 16、求斐波那契数列; 17、求和:a+aa+aaa+aaaa+....; 18、求符合条件的整数(如:是某个二位数的平方,个位、十位、百位数各不相同等);(包括素数,回文,完数,等等) 19、字符串加密; 20、统计字符串中字母和数字的个数;

/*1.个人所得税计算,以实验指导P24T5为标准*/ #include void main() { int i,n; double a,b,c; n=i/400; printf("please input income:\n"); scanf("%d",&i); a=(i-800)*0.05,b=20+(i-1200)*0.08,c=84+(i-2000)*0.2; switch(n) {

case 1:printf("不需缴税\n");break; case 2:printf("需交纳%lf元\n",a);break; case 3: case 4:printf("需交纳%lf元\n",b);break; default:printf("需交纳%lf元\n",c);break; } } /*2. 求一组数的奇数个数,偶数个数和平均值#include #define N 10 void main() { int a[N]; int i,m=0,n=0,sum=0; double average; printf("please input 10 numbers:\n"); for(i=0;i

常见C语言笔试题

五、编写strcpy函数(10分) 已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数strcpy char *strcpy(char *strDest, const char *strSrc); { assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 char *address = strDest; // 2分 while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分 NULL ; return address ; // 2分 } (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?答:为了实现链式表达式。// 2分 例如int length = strlen( strcpy( strDest, “hello world”) ); 六、编写类String的构造函数、析构函数和赋值函数(25分) 已知类String的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 private: char *m_data; // 用于保存字符串 }; 请编写String的上述4个函数。 标准答案: // String的析构函数 String::~String(void) // 3分 { delete [] m_data; // 由于m_data是内部数据类型,也可以写成delete m_data; } // String的普通构造函数 String::String(const char *str) // 6分 { if(str==NULL) { m_data = new char[1]; // 若能加NULL 判断则更好 *m_data = …\0?; } else { int length = strlen(str); m_data = new char[length+1]; // 若能加NULL 判断则更好

c语言常见面试题

C/C++程序员面试重点以及应对方法: 非技术方面: 1. 仪表 2. 礼仪 3. 个人素养 技术部分: 基础: 一.C语言基础语法 1.进程中的内存布局 2.指针相关(野指针、数组越界)、数组与指针、二位指针3.数组与二维数组 4.动态内存分配(内存泄漏) 5.预编译与有参宏 6.Static与const 7.结构体、共用体以及结构体空洞 8.位运算 9.Sizeof与strlen 二.C++基础语法 见C/C++求职就业手册 重点: 1.Inline函数

2.指针与引用 3.Const 、static、sizeof 4.Class与struct的区别 5.构造函数与析构函数 6.继承与多态 三.数据结构(计算机专业需要全部掌握) 1.单链表(非计算机专业必须掌握) 2.循环链表 3.双向链表 4.队列 5.栈 6.二叉树 四.各种排序 非计算专业需掌握冒泡与选择排序 计算机专业需要掌握5种常见的排序方法 五.常见Linux命令 六.Linux系统编程 1.不带缓冲的文件操作(堵塞与非堵塞) 2. 带缓冲的文件操作(行缓冲、全缓冲、不缓冲) 3. 进程的概念(fork、进程的五种状态与状态切换) 4. IPC 5. 线程(线程与进程的区别)

6. 线程间同步(互斥锁与信号量) 7.网络编程(TCP/IP四层、三次握手、TCP与UDP) 8.Shell脚本编程 七.数据库编程 数据库的基本概念与SQL语句 SQLite的用法 八.QT编程与GUI的概念 九.智力测验题(一般公司不会考,比较大的公司及校园招聘会往往会考到) 项目经验: 1. 做过的项目 2. 如何与别人交流沟通与协助 3. 思考问题的方法 附:常见C语言笔试题 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2.写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A)<= (B) ? (A) : (B)) 3.用变量a给出下面的定义 a) 一个整型数(An integer)

c语言经典笔试题(非常全)

1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : (B)) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 第三个方案是用goto Loop: ... goto Loop; 5. 用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有10个整型数的数组(An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer ) 答案是: a) int a; // An integer b) int *a; // A pointer to an integer c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers e) int *a[10]; // An array of 10 pointers to integers f) int (*a)[10]; // A pointer to an array of 10 integers g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer 6. 关键字static的作用是什么?

嵌入式C语言面试题汇总(超经典)

嵌入式C语言面试题汇总(超经典) 第一部分:基本概念及其它问答题1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static 有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<和> 、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用?答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者

常见的C语言面试编程题

常见的C语言面试编程题 (1) 求n的阶乘,这是一个比较简单的题目,有很多方法,但用递归方法是最简单的了: #include #include int main() { long factorial(long n); long n; scanf("%ld",&n); printf("%ld",factorial(n)); return 0; } long factorial(long d)//求阶乘 { long m; if(d<0) { printf("d的阶乘不存在!"); } else if(d==0||d==1) { m=1; }

else { m=d*factorial(d-1); } return m; } (2)从一个文件读取整数,对其进行排序,然后再将排序的结果输入到原来文件当中,这 是一个经常考的题目,即考你的文件操作,又考了排序,我在这里用的是选择排序 #include #include int readtoarray(int *a,FILE *fp)//从文件里将整数读到数组里 { int i=0; if(fp==NULL) { exit(0); } while(fgetc(fp)!=EOF) { fscanf(fp,"%d",&a[i]); printf("%d\n",a[i]); i++; } return i;

} void writetofile(int a[],FILE *fp,int i)//将数组写到文件里去{ int k = 0; if(fp==NULL) { exit(0); } while(k

C语言常见考试题型

C语言常见考试题型

常见考试题型 选择题(13年20题,每题1分,共20分) 填空题(13年20分,基本概念、写程序运行结果、完善程序) 判断题(13年10题、每题1分,共10分) 编程题(13年4题,共40分) 其他题型 练习题选讲 选择题 (1)一个C程序的执行是从。 A)本程序的main函数开始,本程序的main函数 结束 B)本程序的第一个函数开始,本程序的最后一个 函数结束 C)本程序的main函数开始,本程序的最后一个 函数结束 D)本程序的第一个函数开始,本程序的main函 数结束

(2)C语言源程序名的后缀是。 A).exe B).c C).obj D).cpp (3)以下不能用作C语言中的标识符的是。 A)_ab12cd B)ab12cd_ C)12abcd D)ab12_cd (4)下面关于字符常量的说法错误的是。 A)一个字符常量代表ASCII字符集中的一个字符 B)单引号中的大写字母和小写字母代表不同的字符常量 C)字符常量只能包含一个字符 D)字符常量可以用单引号或双引号括起来(5)以下程序运行后的输出结果是。 #include main() { int a=1,b=0; printf(“%d,”,b=a+b); printf(“%d\n”,a=2*b); } A)0,0 B)1,0 C)3,2

D)1,2 (6)以下关于C语言中初始化的说法中正确的是。 A)若整型变量在定义时没有初始化,则此时变量的值为0 B)若整型变量在定义时没有初始化,则变量的值是空值 C)若整型数组在定义时做了不完全初始化,则无法确定未指定值的数组元素的取值 D)变量定义时如果没有初始化,则无法确定该变量的值 (7)已知字符A的ASCII码值是65,以下程序。 #include void main( ) { char a='A'; int b=20; printf("%d,%o",(a=a+1),b ); } A)表达式非法,输出零或不确定值B)因输出项过多,无输出或输出不确定值 C)输出结果为20,142 D)输出结果为66,24 (8)下列说法中错误的是。

常见C语言笔试题

C语言题库 *1 A 一个C程序的执行是从_____。 A)本程序的main函数开始,到main函数结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 *2 C 以下叙述正确的是: A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 *3 D 以下叙述不正确的是。 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 *4 C C语言规定:在一个源程序中,main函数的位置。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 *5 B 一个C语言程序是由 A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成 *6 A 在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为

A)char

C语言笔试题

C语言笔试题 本文章共13818字,分4页,当前第1 4.static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8.描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10.什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11.堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12.什么函数不能声明为虚函数? constructor 13.冒泡排序算法的时间复杂度是什么? O(n^2) 14.写出float x 与“零值”比较的if语句。

if(x>0.000001&&x<-0.000001) 16.Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17.Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。

C语言面试习题大汇总,个人觉得还是比较全

4.??? static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7.??? 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 14.?? 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16.?? Internet采用哪种网络协议?该协议的主要层次结构?tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17.?? Internet物理地址和IP地址转换采用什么协议?

ARP (Address Resolution Protocol)(地址解析协议) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分 哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出 C程序。 3.不能做 switch 华为 1 体内 2 答: 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在 头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用ex tern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 4、语句for( ;1 ;)有什么问题?它是什么意思? 答:和while(1)相同。 5、do……while和while……do有什么区别? 答:前一个循环一遍再判断,后一个判断以后再循环 6 main() { a=10; b=a++; c=++a; printf("b return 0; } 答:10, 1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么 区别?static函数与普通函数有什么区别? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就 是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同 。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

C语言面试问答题

注意:该文档由本人从网络和面试经历中总结而得,不保证答案完全正确,如发现问题联系我:caijicheng2006@https://www.360docs.net/doc/199480433.html, 1.头文件中的ifndef/define/endif 干什么用?预处理 答:防止头文件被重复引用 2.#include 和#include “” 有什么区别? 答:对于#include <>编译器从标准库开始搜索;对于#include “”编译器从用户工作路径开始搜索,没有搜索到再到标准库搜索 3.头文件的作用是什么? 答:(1).通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。 (2). 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。 4.switch()中不允许的数据类型是? 答:实型 5.简述数组与指针的区别 答:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。 6.分别给出BOOL,int,float,指针变量与“零值”比较的if 语句(假设变量名为var)答: BOOL型变量:if(!var) int型变量:if(var==0) float型变量:const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 指针变量:if(var==NULL) 剖析: 考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。 一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。 浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则判为错,得0分。 7.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p++, b); 答: #define MIN(A,B) ((A) <= (B) ? (A) : (B)) MIN(*p++, b)会产生宏的副作用 剖析: 这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是

盘点常见C语言面试题(含答案)_华清远见

盘点常见C语言面试题(含答案) 在技术岗位面试的时候,C语言几乎是面试必考的题目,本篇文章为大家盘点汇总,常见的C语言面试题,大家可以先自己做做题,文章最后有答案。 1、某32位系统下, C++程序void *p = malloc( 100 ); sizeof (p) = 2、在一个10阶的B-树上,每个树根结点中所含的关键字数目最多允许为( )个,最少允许为( )个。 ,5 ,4 ,3 ,6 3、以下程序段执行后结果是() #include void main() { short *p,*q; short arr[15]={0}; p=q=arr; p++; printf("%d,",p-q); printf("%d,",(char*)p-(char*)q); printf("%d",sizeof(arr)/sizeof(*arr));

} ,0,15 ,2,1 ,1,15 ,2,15 4、(1)静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。 (2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加. (3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。 以上错误的是() A.(1),(2) B.(1) C.(1),(2),(3) D.(2) 5、已知两个一维模式类别的类概率密度函数为: 先验概率P(1)=,P(2)=,则样本{x1=,x2=,x3=,x4=}各属于哪一类别 ∈ w2 ∈ w1 ∈ w1

∈ w1 6、程序员小李通过管道统计函数中for语句通过的次数,需要使用的指令分别是 7、设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项错误的是: A.可以随意读和写 B.只能写不能读 C.可以在原有内容后追加写 D.写操作结束后可以从头开始读 参考答案:1~5:BBDB ABCD 6~7:BC ACD 以上盘点了7个C语言常见的面试题,答案已揭晓,你答对了几个呢更多精彩内容在华清远见官网可以获得,华清远见提供免费的学习资料供大家参考。

相关主题
相关文档
最新文档