1. 程式人生 > >2010年杭電計算機研究生複試---筆試程式設計

2010年杭電計算機研究生複試---筆試程式設計

      今天下午進行了計算機複試的筆試部分,總體感覺比去年的難了一些。
      第一題是猜數字的遊戲,不太難的。題目:隨即產生一個3位的正整數,讓你進行猜數字,如果猜小了,輸出:“猜小了,請繼續”。如果猜大了,輸出:“猜大了,請繼續”。如果猜對了。輸出:“恭喜你,猜對了”。不過最多隻能猜10次,如果猜了10次還沒有猜對,就退出程式,輸出:“Bye Bye”。  還是比較簡單的,就是三位隨機數沒有處理好。
      第二題是字串求和。編寫函式 FindAndSum,輸入一個字串,把字串中的數字作為整數進行求和,並輸出結果。Sample : 輸入:There are some apple. 輸出:0 。輸入:124and 1524 輸出:1648 。這個題目是最簡單的,只要讀入的時候記得使用 gets 函式就可以了,scanf 函式遇到空格的時候輸入就結束了。
      第三題是檔案操作和結構體物件陣列的處理問題,處理一個檔案 student.txt,檔案當中包括一組學生的資訊,包括名字、學號、英語成績、語文成績、數學成績、科學成績,如下:
      姓名       學號      英語  
語文   數學   科學
      張三   20100601  78     89     62     75
      李四   20100602  78     54     98     86
      王五   20100603  78     69     85     75
      ……………………………………
     從這個檔案當中讀入學生的資訊,然後按照總成績從高到低進行排序並輸出學生資訊。由於長時間沒有做過有關檔案操作的題目,感覺很多都記不起來了,僅僅憑著一點記憶把程式碼寫出來了,後面的結構體陣列的排序處理就比較簡單了。
      總而言之,感覺還是有一定的難度的,哎,不管了,考過就結束了,還是好好準備明天的專業課複試吧。哈哈~~~
第一題:
轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/6667275
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/**
總結二:生成n位隨機數的方法
         rand() % N + A, A為起始位,N為數字的總數。
         例如: 生成 0~10的數字:rand() % 11 + 0,即rand() % 11;
                 生成 1~10的數字:rand() % 10 + 1,
                 生成 100~999的數字:rand() % 900 + 100
**/
int main(void)
{
	int num, count, guess;
	srand((unsigned)time(NULL));  //利用系統時間作為種子初始化隨機數生成器
	num = rand() % 900 + 100;     //生成一個3位數的隨機數
	count = 0;

	while(count < 10)
	{
		scanf("%d", &guess);
		if(guess == num)
		{
			printf("恭喜你,猜對了\n");
			break;
		}
		else if(guess < num)
		{
			printf("猜小了,請繼續\n");
		}
		else if(guess > num)
		{
			printf("猜大了,請繼續\n");
		}
		++count;
	}
	if(10 == count)
	{
		printf("Bye Bye\n");
	}
	return 0;
}

第二題:
轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/6667275
#include <stdio.h>
#include <string.h>

int FindAndSum(char *str)      // 求和函式
{
	int sum, len, i, curr;
	len = strlen(str);

	curr = sum = 0;
	for(i = 0; i < len; ++i)
	{
		if(str[i] >= '0' && str[i] <= '9')
		{
			curr = curr * 10 + str[i] - '0';  //求權相加,得到一個整數
		}
		else
		{
			//當遇到不是數字的字元時,則一個整數完成,將得到的整數加到結果中
			if(i - 1 >= 0 && str[i - 1] >= '0' && str[i - 1] <= '9')
			{
				sum += curr;
				curr = 0;
			}
		}
	}
	return sum;
}
int main(void)
{
	char str[10000];
	gets(str);
	printf("%d\n", FindAndSum(str));
	return 0;
}

第三題:
轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/6667275
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;

int num;
struct student
{
	char name[20];
	char id[20];
	int english;
	int chinese;
	int math;
	int science;
	int score;
}stu[65];

bool cmp(const student& a, const student& b)
{
	if(a.score != b.score)
		return a.score>b.score;
}

void load()         //將資料從磁碟讀到記憶體
{
	fstream in;
	num = 0;
	in.open("d:\\student.txt",ios::in);
	while(in>>stu[num].name>>stu[num].id>>stu[num].chinese>>stu[num].math>>stu[num].english>>stu[num].science)
	{
		++num;
	}
	return ;
}
void show()
{
	int j;
	for(j = 0; j < num; ++j)
		stu[j].score = stu[j].english + stu[j].chinese + stu[j].math + stu[j].science;
	sort(stu, stu + num, cmp);
	for(j = 0; j < num; ++j)
		printf("%-10s %-10s % 4d % 4d % 4d % 4d\n", stu[j].name, stu[j].id, stu[j].english, stu[j].chinese, stu[j].math, stu[j].science);
	//fstream out;
	//out.open("f:\\student.txt",ios::out);
	//for(j=0;j<num;j++)
	//out<<stu[j].name<<"   "<<stu[j].id<<"   "<<stu[j].chinese<<"   "<<stu[j].math<<"   "<<stu[j].english<<"   "<<stu[j].science<<endl;   
	return ;
}

int main(void)
{
	load();
	show();
	return 0;
}