杭电2010复试上机真题
程序员文章站
2022-05-16 21:58:53
...
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;
}
上一篇: 王道第一题:排序
下一篇: 杭电2013复试上机真题