您的位置:首页 > 其它

华科14年考研复试机试题

2014-03-21 20:52 281 查看
机试要求:只能用标准C语言,编译器不限,90分钟。

1.(30分)编程找出所有的4位超级素数,每行输出6个数,两个数中间用空格分隔。

超级素数:一个n位超级素数是指一个n位正整数,它的前1位,前2位....前n位均为素数,例如,2333是个4位超级素数,因为2,23,233,2333均为素数。

源代码:

/* 超级素数 */
//列出所有的4位超级素数 超级素数的前1~4位均为素数
//注意1既不是素数 也不是合数
#include<stdio.h>
#include<math.h>

int IsP(int x){//判断x是否为素数
int i;
for(i=2;i<=(int)sqrt(double(x));i++){
if(x%i==0){
return 0;
break;
}
}
return 1;
}

int main(){
int i,cnt=0;
for(i=2000;i<=9999;i++){
if(IsP(i/1000)&&IsP(i/100)&&IsP(i/10)&&IsP(i)){
if(cnt%6==5)
printf("%d\n",i);
else
printf("%d ",i);
cnt++;
}
}
printf("\n");
return 0;
}
2.(30分)以二进制方式输入两个正整数(即0和1组成的字符串),然后输入一个四则运算符(+、-、*、/),按short型计算这两个数的运算结果,并将结果按照二进制输出(高位0可不输出)。

例如,输入 101 100  *

          输出  10100(或0000000000010100)

          输入  101 100 +

          输出  1001

源代码:

/* 二进制四则运算 */
//对输入的二进制数进行运算 并以二进制输出

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

int BtoD(char a[]){//将字符串a中存储的二进制数转换成十进制数
int sum=0,len=strlen(a)-1,i;
for(i=0;len>=0;i++,len--){
if(a[i]=='1')
sum+=(int)pow(2,len);
}
return sum;
}

char * DtoB(int x,char str[]){//将十进制数x转换成二进制数
int i=0;
do{ //字符拆解
str=(char *)realloc(str,(i+1)*sizeof(char));
str[i++]=x%2+'0';
x=x/2;
}while(x>0);
str[i]='\0';
return str;
}

int main(){
char op1[20],op2[20],op3;
char *res=NULL;
short x,y;
int i;
scanf("%s%s",op1,op2);
do{
op3=getchar();
}while(op3==' ');

x=BtoD(op1); //将操作数转换成十进制
y=BtoD(op2);

switch(op3){
case '+':
x=x+y;
break;
case '-':
x=x-y;
break;
case '*':
x=x*y;
break;
case '/':
x=x/y;
break;
}

res=DtoB(x,res);//将结果用二进制表示
for(i=strlen(res)-1;i>=0;i--)//转换成二进制后 倒序输出
printf("%c",res[i]);
printf("\n");
return 0;
}3.(40分)编写一个程序,判断规定的字符创是否是合法的C整型常量,是,输出Yes,不是,输出No。

要求程序能循环接受用户的输入,每行输入一个字符串,给出判定结果,再输入一个字符串,给出判定结果。。。直到输入Ctrl+Z结束。

例如:

123

Yes

078

No

100h

No

^Z

源代码:

/* 判断给定的字符串是否是给定的C整型常量 */

#include<stdio.h>

int IsOct(char str[]){	//判断字符串中的数据是否为八进制数
int i,flag;
for(i=0;str[i]!=0;i++){
if(str[i]>='0'&&str[i]<='7')
flag=1;
else{
flag=0;
break;
}
}
return flag;
}
int IsDec(char str[]){	//判断字符串中的数据是否为十进制数
int i,flag;
for(i=0;str[i]!=0;i++){
if(str[i]>='0'&&str[i]<='9')
flag=1;
else{
flag=0;
break;
}
}
return flag;
}
int IsHex(char str[]){	//判断字符串中的数据是否为十六进制数
int i,flag;
for(i=0;str[i]!=0;i++){
if(str[i]>='0'&&str[i]<='7'||str[i]>='a'&&str[i]<='f'||str[i]>='A'&&str[i]<='F')
flag=1;
else{
flag=0;
break;
}
}
return flag;
}

int main(){
char str[20];
int flag;
while(scanf("%s",str)!=EOF){
switch(str[0]){
case '0':
if(str[1]=='x'||str[1]=='X'){	//0x前缀 判断是否为十六禁止
if(IsHex(str+2))
flag=1;
else
flag=0;
}
else{
if(IsOct(str+1))
flag=1;
else
flag=0;
}
break;
default :
if(IsDec(str))
flag=1;
else
flag=0;
}
if(flag)
printf("Yes\n");
else
printf("No\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: