C语言考研试题.docx
《C语言考研试题.docx》由会员分享,可在线阅读,更多相关《C语言考研试题.docx(12页珍藏版)》请在冰豆网上搜索。
C语言考研试题
2006年北京师范大学452C语言考研试题
1设圆的半径r=1.5,圆锥高h=3,求圆的周长和椎体体积。
用scanf输入数据,输出计算结果。
输出时要求有文字说明,取小数点后两位数字。
2输入两个整数,求它们相除的余数。
用带参的宏来实现。
3求100~200之间的全部素数之和。
4计算圆周率的近似值,直到最后一项的绝对值小于10的-6为止,圆周率=4*(1-1/3+1/5-1/7+1/9-……)
5写一个函数,判断一字符串是否回文。
回文是指顺序和倒读都一样的字符串。
#include
#include
inthw(charf[25]){
inta,b;
a=0;//初始化a指向f的首地址
b=strlen(f)-1;//指向f的最后一个
while(a<=b){
if(f[a++]!
=f[b--]){
printf("No!
\n");
return0;//程序结束
}
}
printf("Yes!
\n");
return1;//a>=b是正确的
}
intmain(){
charf[25];
intHW;//a,b=0;不需要
scanf("%s",f);
HW=hw(f);
return0;
}
6有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母,数字以及其它字符的个数。
7将一个磁盘中的二进制文件复制到另一个磁盘中,两个文件名随命令行一起输入。
#include
voidmain()
{
FILE*from,*to;
charin[100],out[100];
printf("请输入源文件名:
\n");
scanf("%s",in);
printf("请输入目标文件名:
\n");
scanf("%s",out);
if((from=fopen(in,"r"))==NULL)
{
printf("文件不存在!
\n");
exit(0);
}
if((to=fopen(out,"w"))==NULL)
{
printf("创建目标文件失败!
\n");
exit(0);
}
printf(".............");
while(!
feof(from))
{
fputc(fgetc(from),to);
}
fclose(from);
fclose(to);
}
北京航空航天大学2010年硕士研究生入学考试试题
七.程序设计题(20分)
请编写程序,该程序首先通过键盘输入获得整型数据a与n,然后计算sum=a+aa+aaa+……+(共n项),最后输出计算结果。
例如:
当a=5,n=4时,计算sum=5+55+555+5555.
八.程序设计题(15分)
在Unix操作系统中有一条命令,命令的功能是打印文本文件的最后n行。
命令格式为:
tail[-n]filename
其中,tail为命令名;参数filename为文本文件名;参数[-n]表示要打印的行数,该参数是可选的,缺省值为10,既无此参数时,表示打印文件的最后10行,例如,命令
tail-20example.txt
表示打印文本文件example.txt的最后20行。
如果被打印的文本文件中行数少于n行或者少于10行,该命令将打印文件中的所有行。
请用带参数的main函数实现该程序。
该程序应该具有一定的错误处理能力。
例如,能够处理非法命令参数和非法文件名。
程序中可以使用以下C库函数:
intatoi(char*s)——将数字串转换为相应的整数
fgets(char*s,intn,FILE*fg)——从文件中读入一行;
void*malloc(unsignedsize).free——申请和释放内存;
strlen——计算字符串的长度;
strcpy——讲一个字符串拷贝到另一个字符串中;
除此之外,不允许使用其他库函数。
提示:
1可以再命令行参数正确性分析过程中获取被打印的文本文件名称以及需要打印的行数等信息。
2如果命令行分析正确,可以建立一个不带头结点的单向循环链表存放从文件中独到的内容
2012计算机考研复试题回忆
一、编写函数Eval,求解一元二次方程ax^2+bx+c=0的解,写出每个参数的含义。
#include//包含iostream的头文件
#include
#include//字符串处理函数
usingnamespacestd;
classFindRoot//定义类FindRoot
{
private:
floata,b,c;
doubler,q,x1,x2;//定义数据成员类型
intjud;
public:
voidInput();//输入函数
voidDisplay();//显示函数
voidFind();//求根函数
};
//以上是类的声明部分,以下是类的实现部分
voidFindRoot:
:
Input()
{
cout<<"这是一个求解ax2+bx+c=0的根的程序:
"<for(;;)
{
cout<<"输入方程系数a:
";
cin>>a;
if(a==0)
cout<<"错误:
a不能为0!
!
!
:
"<elsebreak;
}//输入a,并对a的可能情况进行判断
cout<<"输入方程系数b:
";
cin>>b;//输入b
cout<<"输入方程系数c:
";
cin>>c;//输入c
}
voidFindRoot:
:
Find()//定义求根的函数
{
floatdelta=b*b-4*a*c;//定义求根公式的数据类型
if(delta<0)
{jud=0;
r=-b/(2*a);
q=sqrt(-delta)/(2*a);//有两个共轭复数根的情况
}
elseif(delta==0)
{
x1=-b/(2*a);
jud=1;//有两个相同的根的情况
}
else
{
x1=(-b+sqrt
(delta))/(2*a);
x2=(-b-sqrt
(delta))/(2*a);
jud=2;//有两个不同的根的情况
}
}
voidFindRoot:
:
Display()//定义显示函数
{
switch(jud)
{
case0:
{cout<<"x1="<cout<<"x2="<case1:
cout<<"x1=x2="<case2:
cout<<"x1="<}
}
voidmain()//主函数
{
while
(1)
{
FindRootf;//定义类型
f.Input();
f.Find();
f.Display();//以上各函数按顺序执行
cout<<"是否退出?
(Y退出,其它任意键继续)"<charm[2];charY[]="Y";chary[]="y";//定义字符串
cin>>m;
if(strcmp(m,Y)==0||strcmp(m,y)==0)
break;//如果退出则终止运行
else
cout<<"请继续……"<}
}
二、输入若干行文本,包括圆括号,方括号,字母,数字,以空符结束文本的输入,找出括号不匹配(包括圆括号、方括号)的文本行并输出。
画出程序的流程图或者写出程序伪码,写出每个循环控制语句的用途
编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。
(2)编写main函数从键盘读入表达式,并调用你编写的函数。
#include
#include
typedefstruct{
char*base;
char*top;
intsize;
}snode;
boolmatch(char*p){
snodes;
inti;
i=0;
s.base=(char*)malloc(20*sizeof(char));//初始化一个栈
if(!
s.base){
printf("内存空间不足\n");
returnfalse;
}
s.top=s.base;
s.size=20;
while(p[i]!
='\0'){//开始循环“\0”是字符串的结束标志
if((p[i]=='{')||(p[i]=='[')||(p[i]=='(')){//筛选‘(’、‘{’、‘[’进栈
if(s.top-s.base>=s.size){//入栈判栈满
printf("栈满\n");
returnfalse;
}
*(s.top)=p[i];
s.top++;
i++;
}else{
switch(p[i]){
case')':
if(s.base==s.top){//遇到‘)’‘}’‘]’则开始匹配,要是栈顶元素能匹配成功,则继续,否则直接return,里面的一些条件可以自己想想
returnfalse;
}elseif(*(--s.top)=='('){
i++;
continue;
}else{
returnfalse;
}
case'}':
if(s.base==s.top){
returnfalse;
}elseif(*(--s.top)=='{'){
i++;
continue;
}else{
returnfalse;
}
case']':
if(s.base==s.top){
returnfalse;
}elseif(*(--s.top)=='['){
i++;
continue;
}else{
returnfalse;
}
default:
i++;//剔除其他符号
continue;
}
}
}
if(s.top==s.base)//匹配成功则最后栈空
returntrue;
else
returnfalse;
}
intmain(){
charstr[50];
inti=0;
char*p;
p=str;
printf("请输入字符串:
");
gets(str);
if(match(p))
printf("匹配成功!
\n");
else
printf("匹配失败……\n");
return0;
}
中国矿业大学2007年硕士研究生入学试题
三.请将一下语法改写成为switch语句。
if((s>0)&&(s<=10))
if((s>=3)&&(s<=6))x=2;
elseif((s>1)||(s>8))x=3;
elsex=1;
elsex=0;
四.试编程序,找出1至99之间的全部同构数。
同构数是这样一组数:
它出现在平方数的右边。
例如5是25右边的数,25是625右边的数,5和25都是同构数.(25分)
voidmain()
{
inti,j,s;
intcount=0;
for(i=1;i<100;i++)
{
if(i<10)
s=1;
elses=2;
j=i*i;
if(i==j%(int)pow(10,s))