杭电2010复试上机真题

ps:题是别的地方copy过来的,代码是自己的

第一题:

猜数字的游戏。题目:随即产生一个3位的正整数,让你进行猜数字,如果猜小了,输出:“猜小了,请继续”。如果猜大了,输出:“猜大了,请继续”。如果猜对了。输出:“恭喜你,猜对了”。不过最多只能猜10次,如果猜了10次还没有猜对,就退出程序,输出:“Bye Bye”。

//考查rand函数使用,需要<stdlib.h>
//rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)
#include<stdio.h>
#include<stdlib.h>

int main(){
	int key = rand()%900 + 100;///需要100~999三位数,考虑余数0~899,除余900才能得到0~899的范围,再加100即可 
	int guess = 0;
	int cur;
		
	while(1){
		printf("请猜数字:");
		scanf("%d",&cur);
		printf("\n");
		if(cur == key){
			printf("猜对了!\n");
			break;
		}
		else if(cur < key){
			printf("猜小了,请继续\n");
			guess++; 
		}
		else if(cur > key){
			printf("猜大了,请继续\n");
			guess++; 
		}
		
		if(guess == 10){
			printf("Bye Bye\n");
			break;
		}
	} 
	return 1;
}

第二题

字符串求和。编写函数 FindAndSum,输入一个字符串,把字符串中的数字作为整数进行求和,并输出结果。Sample : 输入:There are some apple. 输出:0 。输入:124and 1524 输出:1648 。

//考查gets函数
#include<stdio.h>

int main(){
	char a[100];//存放输入字符串	
	while(gets(a)){
		int sum = 0;//输出的结果
		char num[100];//存放字符串中提取出来的,即将转换的数字
		char* p = a; 
		int cur = 0;//计算num数组的长度
		while(*p != '\0'){
			if(*p >= '0' && *p <= '9'){
				num[cur++] = *p;
				p++;
			}
			else if(cur != 0){
				int result = 0;
				int c = 1;
				while(--cur >= 0){
					result += (num[cur] - '0') * c;
					c *= 10; 
				}
				cur = 0;
				sum += result;
				p++;
			}
			else{
				p++;
			}			
		}
		if(cur != 0){//注意p指针跳出后,可能num中还有剩余数字没求和
			int result = 0;
			int c = 1;
			while(--cur >= 0){
				result += (num[cur] - '0') * c;
				c *= 10; 
			}
			sum += result;
		}		
		printf("%d\n",sum);
	}
	return 1;
}
//使用atoi,该函数将字符串转换为整形数,需要stdlib.h,字符串为123.45则输出123
//累加那段代码改为
if(cur != 0){	
	sum += atoi(num);
	cur = 0;
	p++; 
} 

第三题

文件操作和结构体对象数组的处理问题,处理一个文件 student.txt,文件当中包括一组学生的信息,包括名字、学号、英语成绩、语文成绩、数学成绩、科学成绩,如下: 

姓名 学号 英语 语文 数学 科学 

张三 20100601 78 89 62 75 

李四 20100602 78 54 98 86 

王五 20100603 78 69 85 75 

从这个文件当中读入学生的信息,然后按照总成绩从高到低进行排序并输出学生信息。

#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;

struct student{
    char name[20];
    char ID[20];
    int english;
    int chinese;
    int math;
    int science;
};

bool compare(student a,student b){
    int suma = a.chinese + a.english + a.math + a.science;
    int sumb = b.chinese + b.english + b.math + b.science;
    return suma > sumb;
} 

int main(){
	FILE* fp;
	fp = fopen("C:\\Users\\jh\\Desktop\\student.txt","r+");
    struct student s[100]; 
    int i = 0;
	while(!feof(fp)){ 
    	fscanf(fp,"%s %s %d %d %d %d\n",&s[i].name,&s[i].ID,&s[i].english,&s[i].chinese,&s[i].math,&s[i].science);
		i++;
	}
	
	sort(s,s + i,compare);//用sort最方便 
	
	for(int j = 0;j < i;j++){				
		printf("%s %s %d %d %d %d\n",s[j].name,s[j].ID,s[j].english,s[j].chinese,s[j].math,s[j].science);
	}
	
	fclose(fp);
	return 1;
}

猜你喜欢

转载自blog.csdn.net/jh8w8m/article/details/87402169