最近在利用空閑時間跟Coursera上北京大學的程序設計與算法專項課程,一共7門課程,這是第一門課計算導論與C語言基礎。
編程題#1:求字母的個數
來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內存限制: 65536kB描述在一個字符串中找出元音字母a,e,i,o,u出現的次數。輸入輸入一行字符串(字符串中可能有空格,請用cin.getline(s,counts)方法把一行字符串輸入到字符數組s中,其中counts是s的最大長度,這道題里面可以直接寫80。),字符串長度小于80個字符。輸出輸出一行,依次輸出a,e,i,o,u在輸入字符串中出現的次數,整數之間用空格分隔。
//第十周//編程題#1:求字母的個數#include <iostream>using namespace std;int main(){ char s[80] = { 0 }; int num_a, num_e, num_i, num_o, num_u; num_a=num_e= num_i= num_o= num_u=0; cin.getline(s, 80); for (int i = 0; i < 80; i++) { if (s[i] == 'a') num_a++; if (s[i] == 'e') num_e++; if (s[i] == 'i') num_i++; if (s[i] == 'o') num_o++; if (s[i] == 'u') num_u++; } cout << num_a << ' ' << num_e << ' '<<num_i << ' '<<num_o << ' '<<num_u << endl; return 0;}編程題#2:忽略大小寫比較字符串大小來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內存限制: 65536kB描述一般我們用strcmp可比較兩個字符串的大小,比較方法為對兩個字符串從前往后逐個字符相比較(按ASCII碼值大小比較),直到出現不同的字符或遇到'/0'為止。如果全部字符都相同,則認為相同;如果出現不相同的字符,則以第一個不相同的字符的比較結果為準。但在有些時候,我們比較字符串的大小時,希望忽略字母的大小,例如"Hello"和"hello"在忽略字母大小寫時是相等的。請寫一個程序,實現對兩個字符串進行忽略字母大小寫的大小比較。輸入輸入為兩行,每行一個字符串,共兩個字符串。(請用cin.getline(s,80)錄入每行字符串)(每個字符串長度都小于80)輸出如果第一個字符串比第二個字符串小,輸出一個字符"<"如果第一個字符串比第二個字符串大,輸出一個字符">"如果兩個字符串相等,輸出一個字符"="//編程題#2:忽略大小寫比較字符串大小//題意是忽略全部的大小寫,即同一化成小寫或統一化成大寫來比較#include <iostream>using namespace std;int main(){ char s1[80] = { 0 }; char s2[80] = { 0 }; cin.getline(s1,80); cin.getline(s2, 80); char result = 0; //用0表示等于,-1表示s1小于s2,1表示s1大于s2 for (int i = 0;i<80;i++) { //先同一將大寫化成小寫 if (s1[i] >= 'A' && s1[i] <= 'Z') s1[i] += ('a' - 'A'); if (s2[i] >= 'A' && s2[i] <= 'Z') s2[i] += ('a' - 'A'); if (s1[i] == s2[i]) { result = '='; continue; } else if (s1[i]>s2[i]) { result = '>'; break; } else { result = '<'; break; } } cout << result << endl; return 0;}編程題#3:最長單詞2來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內存限制: 65536kB描述一個以'.'結尾的簡單英文句子,單詞之間用空格分隔,沒有縮寫形式和其它特殊形式輸入一個以'.'結尾的簡單英文句子(長度不超過500),單詞之間用空格分隔,沒有縮寫形式和其它特殊形式輸出該句子中最長的單詞。如果多于一個,則輸出第一個這一題自己沒想出來,參考的網上答案才想出來,注意一下
//編程題#3:最長單詞2#include <iostream>using namespace std;int main(){ char s[500] = { 0 }; cin.getline(s, 500); int count = 0; //count用來記錄單詞的長度 int count_max = 0; //count_max用來記錄最長單詞的長度 int end = 0; int i = 0;//end用來記錄最長單詞的末尾位置 while (i<500) { if (s[i] != ' '&& s[i] != '.' && s[i] != '/0') { count++; if (count > count_max) { count_max = count; end = i; } i++; } if (s[i] == ' ') { count = 0; i++; } if (s[i] == '.' || s[i] == '/0') { break; } } for (int i = end-count_max+1; i < end+1; i++) { cout << s[i]; } cout << endl;}編程題#4:矩陣交換行來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最后成績。)注意: 總時間限制: 1000ms 內存限制: 65536kB描述在main函數中, 生成一個5*5的矩陣,輸入矩陣數據,并輸入n,m的值。判斷n,m是否在數組范圍內,如果不在,則輸出error;如果在范圍內,則將n行和m行交換,輸出交換n,m后的新矩陣。輸入5*5矩陣的數據,以及n和m的值。輸出如果不可交換,則輸出error如果可交換,則輸出新矩陣提示輸出error格式如下:cout<< "error" << endl;輸出矩陣格式如下:cout<< setw(4)<< num;輸出矩陣一行后要輸出cout<< endl;setw是iomanip庫里定義的格式控制操作符,需要#include <iomanip> 包含這個頭文件。
這題需要注意的是:1.二維數組作為函數形參的寫法;2.cout的格式化輸出。
1.一維數組作為函數形參:
void add(int arr[10]) {}
void add(int arr[]) {}
void add(int* arr) {}
二維數組作為函數形參:
void PRint(int (*matrix)[10]) {} //*matrix兩端的括號必不可少。指向含有10個整數的數組的指針
void print(int matrix[][10]) {} //等價定義
錯誤:
void print(int *matrix[10]) {} //10個指針構成的數組
//編程題#4:矩陣交換行#include <iostream>using namespace std;#include <iomanip>bool change(int a[5][5], int n, int m){ bool flag = true; if ((n >= 0 && n <= 4) && (m >= 0 && m <= 4)) { int line_change[5] = { 0 }; for (int i = 0; i < 5;i++) line_change[i] = a[n][i]; for (int i = 0; i < 5; i++) a[n][i] = a[m][i]; for (int i = 0; i < 5; i++) a[m][i] = line_change[i]; } else { flag= false; } return flag;}int main(){ int matrix[5][5] = { 0 }; int m, n; m = n = 0; for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) { cin >> matrix[i][j]; } cin >> n >> m; bool flag = change(matrix, n, m); if (flag) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { cout << setw(4) << matrix[i][j]; } cout << endl; } } else { cout << "error" << endl; } return 0;}
新聞熱點
疑難解答