华科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
源代码:
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; }
相关文章推荐
- 考研复试机试题(2010)
- 2011年华科计算机考研复试机试题真题
- 2014华中科技大学考研复试机试题之进制转换
- 2011年华科计算机考研复试机试题真题
- 考研复试机试题(2009)
- 2006年中科大计算机考研复试机试题
- 2006年中科大计算机考研复试机试题
- 考研复试机试题(2010)
- 南京师范大学2011年GIS考研试题
- 2008年 浙工大考研计算机专业课试题C++
- 中国科学院大学2017年数学分析考研试题
- 华东师范大学2017年数学分析考研试题
- [再寄小读者之数学篇](2014-06-22 最大值点处导数为零的应用 [中国科学技术大学2012 年高等数学B考研试题])
- 数学专业考研试题目录
- 上海交通大学2001年数学分析考研试题
- 北京大学2015年数学分析考研试题
- NYOJ 594 还是A+B (模拟,考研机试题)
- 清华大学06年复试机试题小解
- 武汉大学数学专业考研试题参考解答
- 两道考研试题