2010年杭電計算機研究生複試---筆試程式設計
阿新 • • 發佈:2019-01-30
今天下午進行了計算機複試的筆試部分,總體感覺比去年的難了一些。
第一題是猜數字的遊戲,不太難的。題目:隨即產生一個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
……………………………………
從這個檔案當中讀入學生的資訊,然後按照總成績從高到低進行排序並輸出學生資訊。由於長時間沒有做過有關檔案操作的題目,感覺很多都記不起來了,僅僅憑著一點記憶把程式碼寫出來了,後面的結構體陣列的排序處理就比較簡單了。
總而言之,感覺還是有一定的難度的,哎,不管了,考過就結束了,還是好好準備明天的專業課複試吧。哈哈~~~
第一題:
第二題:
第三題:
第一題是猜數字的遊戲,不太難的。題目:隨即產生一個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;
}