XJTU_ 西安交通大學2020大學計算機作業-第十二週
XJTU_ 西安交通大學2020大學計算機作業-第十二週
XJTU_ 西安交通大學2020大學計算機作業-第十二週
注:所有題所有用例均已通過。
俺又更新了,還是求點星星?
文章沒上傳到github,反正沒人點星星:https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7,如果這篇文章帶給你了幫助或者靈感,歡迎給我點個星星,謝謝!!!
有老師把答案發在了github上,終於不用看我們這辣雞的程式碼了https://github.com/AndrewChui/CHomeWork
第一題
編寫一個程式,讀入n個使用者姓名和電話號碼,按姓名的字典順序排列後,輸出使用者的姓名和電話號碼,n從鍵盤輸入。
樣例輸入:
3
zhang 12345678
wang 23456789
liu 34567890
樣例輸出:
liu 34567890
wang 23456789
zhang 12345678
#include<stdio.h>
#include<string.h>
int main() {
char list[26][30];
int n;
scanf("%d\n", &n);//千萬記得有換行符
for (int i = 0; i < n; i++) gets(list[i]);
for (int i=0;i<n;i++)
for (int j = 0; j < n-1-i; j++) {
if (strcmp(list[j], list[j + 1])>0) {
strcpy(list[25], list[j]);
strcpy(list[j], list[j+1]);
strcpy(list[j+1], list[25]);
}
}
for (int i = 0; i < n; i++)
(i == n - 1) ? printf("%s", list[i]) : printf("%s\n", list[i]);
return 0;
}
第二題
有n名學生,每個學生的資料包括學號、姓名、三門課的成績。可以從鍵盤輸入n個學生的資料,按總成績從小到大排序,列印包含學號、姓名、三門課成績和總成績的成績單。(測試時,資料從鍵盤輸入。)
輸入:第1行為整數n,後面n行表示n個人的資訊,包括學號、姓名、和三門課的成績,每行的資料間用空格隔開。
輸出:n行,表示n個人的資訊,包括學號、姓名、三門課的成績和總成績,資料間一個空格,末尾無空格。
樣例輸入:
2
2004002 lisi 60 80 70
2004003 wangwu 85 92 87
樣例輸出:
2004002 lisi 60 80 70 210
2004003 wangwu 85 92 87 264
int main() {
struct Student
{
char id[10];
char name[20];
int a[3];
int sum;
} stu[101];
int n;
scanf("%d\n", &n);//記得有換行符
for (int i = 0; i < n; i++) {
if(i==n-1)//最後一行沒有空格!
scanf("%s %s %d %d %d", stu[i].id, stu[i].name, &stu[i].a[0], &stu[i].a[1], &stu[i].a[2]);
else
scanf("%s %s %d %d %d\n", stu[i].id, stu[i].name, &stu[i].a[0], &stu[i].a[1], &stu[i].a[2]);
stu[i].sum = stu[i].a[0] + stu[i].a[1] + stu[i].a[2];
}
for (int i=0;i<n;i++)
for (int j = 0; j < n - i - 1; j++) {
if (stu[j].sum > stu[j + 1].sum) {
stu[100] = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = stu[100];
}
}
for (int i = 0; i < n; i++) {
if(i==n-1)
printf("%s %s %d %d %d %d", stu[i].id, stu[i].name, stu[i].a[0], stu[i].a[1], stu[i].a[2], stu[i].sum);
else
printf("%s %s %d %d %d %d\n", stu[i].id, stu[i].name, stu[i].a[0], stu[i].a[1], stu[i].a[2], stu[i].sum);
}
return 0;
}
第三題
"輸入一個字串(其長度不超過81),分別統計其中26個英文字母出現的次數(不區分大、小寫字母),並按字母出現次數從高到低排序,若次數相同,按字母順序排列。字母輸出格式舉例,例如:A-3,表示字母A出現3次,C-0表示字母C沒有出現。
輸入:
第一行為輸入,佔一行
輸出:
第二行為輸出,佔一行。按照字母輸出格式從高到低輸出,各字母輸出之間用一個空格字元分隔。
樣例:
123abcAABXxwvUu+
A-3 B-2 U-2 X-2 C-1 V-1 W-1 D-0 E-0 F-0 G-0 H-0
樣例輸入:
ABCDEFGHIJKLMNOPQTSTUVWXYZ
樣例輸出:
T-2 A-1 B-1 C-1 D-1 E-1 F-1 G-1 H-1 I-1 J-1 K-1 L-1 M-1 N-1 O-1 P-1 Q-1 S-1 U-1 V-1 W-1 X-1 Y-1 Z-1 R-0
int main() {
char a[200];
int max=0, dir[26][2] = {
{'A',0}, {'B',0}, {'C',0}, {'D',0}, {'E',0}, {'F',0},
{'G',0}, {'H',0}, {'I',0}, {'J',0}, {'K',0}, {'L',0},
{'M',0}, {'N',0}, {'O',0}, {'P',0}, {'Q',0}, {'R',0},
{'S',0}, {'T',0}, {'U',0}, {'V',0}, {'W',0}, {'X',0},
{'Y',0}, {'Z',0} };
gets(a);
for (int i = 0; a[i] != '\0'; i++) (a[i] >= 'a'&&a[i] <= 'z') ? a[i] = a[i] % 'a' + 'A' : 0;
for (int i = 0; a[i] != 0; i++)
for (int j = 0; j < 26; j++)
if (a[i] == dir[j][0]) {
dir[j][1]++;
max = (dir[j][1] > max) ? dir[j][1] : max;
}
for (int i = 0, b = 0; max >= 0; i++, max--)//排序太麻煩了,不排了
for (int j = 0; j < 26; j++)
(dir[j][1] == max) ? ((b == 0) ? printf("%c-%d", dir[j][0], dir[j][1]),b++ :printf(" %c-%d", dir[j][0], dir[j][1])) : 0;
return 0;
}
第四題
"輸入只含小寫字母的字串,要求按字典序以從小到大的順序輸出,且輸出的每個字元之間空1格。(字串長度不超過20)
樣例:
abazc
a a b c z
樣例輸入:
hello
樣例輸出:
e h l l o
int main() {
char a[25];
gets(a);
for (int i = 'a', b = 0; i <= 'z'; i++)
for (int j = 0; a[j] != '\0'; j++)
if (a[j] == i)(b == 0) ? printf("%c", a[j]), b++ : printf(" %c", a[j]);
return 0;
}
第五題
"有一個包含奇數個項的整數序列,請程式設計按照以下規則排序:
最大值排在中間,最小值排在最左,中值排在最右,其它值清為0。
輸入2行,第一行n表示要輸入的數的個數,n是奇數。第二行輸入的n個數。
輸出,排序後的陣列,資料空格分隔,最後一個資料後面沒有空格。
樣例1:
輸入
5
12 20 9 88 32
輸出
9 0 88 0 20
樣例2:
輸入
3
66 10 30
輸出
10 66 30
樣例輸入:
9
99 1 2 3 4 5 6 7 8
樣例輸出:
1 0 0 0 99 0 0 0 5
int main() {
int a[101], n;
scanf("%d\n", &n);
for (int i = 0; i < n; i++) (i == 0) ? scanf("%d", &a[i]) : scanf(" %d",&a[i]);
for(int i=0;i<n;i++)
for(int j=0;j<n-i-1;j++)
if (a[j] > a[j + 1]) {
a[100] = a[j];
a[j] = a[j + 1];
a[j + 1] = a[100];
}
printf("%d", a[0]);
for (int i = 1; i < n - 1; i++)(i == n / 2) ? printf(" %d", a[n-1]) : printf(" 0");
printf(" %d", a[n/2]);
return 0;
}
第六題
編寫函式,函式原型如下:
void fun(int n,char res[]);
該函式的功能是將整數n的各位數字逆序排列,存放到res字元陣列中。例如整數1035,逆序後為5301。
輸入輸出格式:
輸入:一個整數(整數數位不超過15位)。
輸出:逆序後的值。
樣例輸入:
123456
樣例輸出:
654321
#include<string.h>
void fun(int n, char res[]) {
for (int i = n - 1; i >= -1; i--)printf("%c", res[i]);
}
int main() {
int n;
char a[20];
gets(a);
fun(strlen(a), a);
return 0;
}
第七題
輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。
輸入輸出格式:
輸入:一行數字(數字之間沒有空格),這行數字的長度不大於1000。輸入資料保證:分割得到的非負整數不會大於100000000;輸入資料不可能全由‘5’組成。
輸出:分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出佔一行。
樣例輸入:
0051231232050775
樣例輸出:
0 77 12312320
#include<math.h>
#include<string.h>
//yysy我覺得這道題寫的不錯
int main() {//這點兒排序題,每道題都要寫一大堆,搞人心態
char a[1000];
gets(a);
int b[501] = { 0 }, l = strlen(a), n = 1;//n計有效數字的個數
for (int i = l-1,j=0,k=0; i>=0; i--) {//字元轉數字
if (a[i] == '5' && i!=l-1 && a[i+1]!='5') j = 0, k++, n++;
//防止數個5連在一起,i=l-1的話不會判斷a[l-1]
else if(a[i]!='5')b[k] = b[k] + (a[i] - '0')*pow(10, j),j++;
}
n = (a[0] == '5') ? n - 1 : n;
//n = (a[l - 1] == '5') ? n - 1 : n;//防止開頭結尾是5
//結尾不用判斷,上個if語句n不會加一
for (int i = 0; i < n; i++)
for (int j = 0; j<n-i-1;j++)
if (b[j] > b[j + 1]) {
b[500] = b[j];
b[j] = b[j + 1];
b[j + 1] = b[500];
}
for (int i = 0; i < n; i++)(i == 0) ? printf("%d", b[i]) : printf(" %d", b[i]);
}
第八題
定義包含5個英文單詞的字元陣列(即二維字元陣列),鍵盤輸入5個單詞,按字典順序尋找最大和最小單詞並輸出。
輸入:5個單詞
輸出:最大和最小單詞(按字典序)
樣例輸入:
this is a book end
樣例輸出:
max:this min:a
#include<string.h>
int main() {
char a[6][20];
for (int i = 0; i < 5; i++)(i == 0) ? scanf("%s", a[i]) : scanf(" %s", a[i]);
for (int i=0;i<5;i++)
for(int j=0;j<5-1-i;j++)
if (strcmp(a[j], a[j + 1])>0) {
strcpy(a[5], a[j]);
strcpy(a[j], a[j+1]);
strcpy(a[j+1], a[5]);
}
printf("max:%s min:%s", a[4], a[0]);
return 0;
}
第九題
定義一個含20個元素的整型陣列並初始化為a[20]={1,2,3,4,5,6,7,8,9,10}。另外定義一個大小為10的整型陣列b。
要求:輸入整數n(1<=n<=10),然後輸入n個整數存入b中,再輸入一個整數k(1<= k <=10),將陣列b中的n個元素依次插入到陣列a中從第k位開始的地方,插入完成後,輸出陣列a(元素間用空格隔開)。
輸入:整數n,n個整數,整數k。
輸出:陣列a
樣例輸入:
3 13 14 15 4
樣例輸出:
1 2 3 4 13 14 15 5 6 7 8 9 10
int main() {
int a[20] = { 1,2,3,4,5,6,7,8,9,10 }, b[10], k, n;
scanf("%d", &n);
for (int i = 0; i < n; i++)scanf(" %d", &b[i]);
scanf(" %d", &k);
for (int i = 0; i < 10; i++) {
if(i==k)//偷了個懶沒對a操作
for(int j=0;j<n;j++) (k==0&&j==0)? printf("%d", b[j]) : printf(" %d", b[j]);
(i == 0 && k!=0) ? printf("%d", i + 1) : printf(" %d", i + 1);
}
return 0;
}
第十題
編寫氣泡排序函式,函式原型:void BubbleSort(int a[],int n);對n個整數升序排序。
編寫選擇排序函式,函式原型:void SelectionSort(int a[],int n);對n個整數降序排序。
編寫main函式,輸入10個整數,利用函式將其按升序和降序分別輸出排序結果。(輸入輸出資料間用一個空格分隔)
樣例輸入:
5 2 8 9 10 1 3 4 7 6
樣例輸出:
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1
void BubbleSort(int a[], int n) {
for (int i=0;i<n;i++)
for(int j=0, temp;j<n-i-1;j++)
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
for (int i = 0; i < n; i++)(i == 0) ? printf("%d", a[i]) : printf(" %d", a[i]);
}
void SelectionSort(int a[], int n) {
for (int i = 0; i < n; i++) {
int max = i, temp;
for (int j = i + 1; j < n; j++)
if (a[j] > a[max]) max = j;
temp = a[i];
a[i] = a[max];
a[max] = temp;
}
for (int i = 0; i < n; i++)
printf(" %d", a[i]);
}
int main() {
int a[10];
for (int i = 0; i < 10; i++)(i == 0) ? scanf("%d", &a[i]) : scanf(" %d", &a[i]);
BubbleSort(a, 10);
SelectionSort(a, 10);
return 0;
}
第十一題
輸入一個英文字串(長度<81)可能包含空格,刪除其中所有非小寫字母字元,並輸出刪除後的字串(小寫字母的相對位置保持不變)。
樣例輸入:
AaBbCc &d*e%
樣例輸出:
abcde
int main() {
char a[100];
gets(a);
for (int i = 0; a[i] != '\0'; i++)(a[i] >= 'a'&&a[i] <= 'z') ? printf("%c", a[i]) : 0;
return 0;
}
第十二題
查詢一個字元在字串中的第一個位置並輸出這個位置。位置從0開始
輸入輸出格式:
輸入:待查詢的字串和需要查詢的字元,可能含有空格。(輸入時,待查詢的字串與所需查詢的字元用*號隔開)
“待查詢字串*需要查詢的字元”
輸出:字元的位置(如有多個相同的字元,只查詢第一個,如果沒有輸出-1。)
樣例輸入:
fbhby Wml*W
樣例輸出:
6
#include<string.h>
int main() {
char a[100];
gets(a);
int l = strlen(a), b=-1;
for (int i = 0; a[i] != '*'; i++)
if (a[i] == a[l - 1]) {
b = i;
break;
}
printf("%d", b);
return 0;
}
第十三題
輸入字母、數字和空格組成的字串,提取字串中的整數並輸出,字串中的非數字字元視為分割符。輸出資料間以英文逗號分隔,末尾沒有逗號。並換行輸出其和值。若字串中沒有資料時,輸出“NO”。輸入的字串長度不超過80。
輸入格式:佔一行,輸入字串。
輸出格式:佔兩行。第一行:各資料間用一個英文逗號分隔,第二行:它們的和值。
樣例輸入:
1 2 3
樣例輸出:
1,2,3
6
#include<math.h>
#include<string.h>
int main() {
char a[100];
gets(a);
int b[51] = {0}, l = strlen(a), n = 0, sum = 0;
for (int i = l - 1, j = 0; i >= 0; i--) {
if (a[i] >= '0'&&a[i] <= '9') b[n] = b[n] + (a[i] - '0')*pow(10, j), j++;
else if (i != l-1 && a[i+1] >= '0' && a[i+1] <= '9')j = 0, n++;
}
n = (a[0] >= '0'&&a[0] <= '9') ? n + 1 : n;//防止開頭不是0-9
if (n == 0) {
printf("NO");
return 0;
}
for (int i = n - 1; i >= 0; i--) {
if (n == 1) printf("%d\n", b[i]);//n=1專屬
else (i != 0) ? printf("%d,", b[i]) : printf("%d\n", b[i]);
sum = sum + b[i];
}
printf("%d", sum);
return 0;
}
第十四題
輸入兩個字串s,t,按ASCII順序輸出在s或t中出現過(不區分大小寫)的字元(全部轉為大寫輸出),重複的字元只出現一次。如s=“meeting” 和t=" sayING", 則u=" AEGIMNSTY"。s,t長度不超過100。
輸入:兩個字串中間用空格隔開
輸出:結果字串,按ASCII排序。
樣例輸入:
discussed security
樣例輸出:
CDEIRSTUY
int main() {
char s[101], t[101];
scanf("%s %s", s, t);
for (int i = 'A'; i <= 'Z'; i++)
for (int j = 0; s[j] != -52 || t[j] != -52; j++)
if (s[j] == i || s[j] == i + 32 || t[j] == i || t[j] == i + 32) {
printf("%c", i);
break;
}
return 0;
}
第十五題
定義字串陣列str,其陣列長度為81,鍵盤讀入一個字串(少於81個字元)。將該字串中出現的所有小寫字母按字母序升序輸出(字母序為:abcdefg…xyz)。
輸入輸出格式要求:
輸入輸出各佔一行,第一行是輸入,第二行是輸出。
樣例輸入:
Bcaf48c
樣例輸出:
accf
int main() {
char a[81];
gets(a);
for (int i = 'a'; i <= 'z'; i++)
for (int j = 0; a[j] != '\0'; j++)
if (a[j] == i)printf("%c", a[j]);
return 0;
}
第十六題
輸入整數n和2n個整數,將序號為奇數的數從小到大排序,將序號為偶數的數從大到小排序。n不超過12。
輸入:整數n和2n個整數。
輸出:按要求的排序結果,數間以空格隔開。
樣例輸入:
2 4 3 8 2
樣例輸出:
4 3 8 2
int main() {
int a[100], b[100], n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf(" %d", &a[i]);
scanf(" %d", &b[i]);
}
for (int i = 0, temp; i < n; i++) {
for (int j = 0, temp; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
if (b[j] < b[j + 1]) {
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
for (int i = 0; i < n; i++)(i == 0) ? printf("%d %d", a[i], b[i]) : printf(" %d %d", a[i], b[i]);
return 0;
}
第十七題
輸入n及n個正整數,對偶數從小到大排序,對奇數從大到小排序,輸出從小到大的偶數,再輸出從大到小的奇數,在一行中,用一個空格隔開。
輸入:n及n個正整數,用空格隔開。
輸出:輸出從小到大的偶數,再輸出從大到小的奇數,用一個空格隔開
樣例輸入:
7 78 47 49 54 58 9 52
樣例輸出:
52 54 58 78 49 47 9
int main() {
int a[100], b[100], n, n1 = 0, n2 = 0;
scanf("%d", &n);
for (int i = 0, temp; i < n; i++) {
scanf("%d", &temp);
if (temp % 2 == 0)a[n1] = temp, n1++;
else b[n2] = temp, n2++;
}
for (int i = 0; i < n1; i++) {
for (int j = 0, temp; j < n1 - i - 1; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (int i = 0; i < n2; i++) {
for (int j = 0, temp; j < n2 - i - 1; j++) {
if (b[j] < b[j + 1]) {
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
for (int i = 0; i < n1; i++)(i == 0) ? printf("%d", a[i]) : printf(" %d", a[i]);
for (int i = 0; i < n2; i++)(n1 == 0&&i==0) ? printf("%d", b[i]) : printf(" %d", b[i]);
return 0;
}
第十八題
輸入字串(長度不超過200,不包含空格,至少有1個字元),除首尾字元外,將其餘的字元按ascii碼降序排列。
樣例輸入:
announced
樣例輸出:
auonnnecd
#include<string.h>
int main() {
char a[201];
gets(a);
int l = strlen(a);
for (int i=1;i<l-1;i++)
for(int j=1, temp;j<l-i-1;j++)
if (a[j] < a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
puts(a);
return 0;
}
第十九題
使用者輸入一個字串,將字串中的奇數位置上的字元按字母表中的順序排序,仍按順序儲存在奇位置上。例如teacher,t,a,h,r排序後結果為a,h,r,t,則結果字串為:aehcret。
輸入格式:長度小於100的字串,
輸出:奇數位置的字元排序後的字串
樣例輸入:
import
樣例輸出:
import
#include<string.h>
int main() {
char a[101];
gets(a);
int l = strlen(a);
for (int i = 0; i < l - 1; i = i + 2)
for (int j = 0, temp; j < l - i - 2; j = j + 2)
if (a[j] > a[j + 2]) {
temp = a[j];
a[j] = a[j + 2];
a[j + 2] = temp;
}
puts(a);
return 0;
}
都看到這兒了,點個星星唄https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7
相關文章
- 大學計算機基礎計算機
- 2018 全球大學排名:清華大學計算機專業第一計算機
- 大學應設定怎樣的計算機專業?計算機
- 2024年西安交通大學程式設計校賽程式設計
- 大學計算機必修課新講--編譯原理+作業系統+圖形學計算機編譯原理作業系統
- 大學學計算機應該選哪個專業呢?計算機
- 計算機課程第三週作業計算機
- 最全最強!世界大學計算機專業排名總結!計算機
- 計算機畢業大學生如何解決難就業問題?計算機就業
- 清華大學計算機系統課程筆記-第十一講和第十二講計算機筆記
- 該填志願了,國內大學計算機專業哪家強?計算機
- **伯克利大學** 的計算機入門教程計算機
- 大學生不是計算機專業的也能學IT技術嗎?計算機
- 大學想報計算機專業,暑假想要自學,有哪些建議?計算機
- 大學的計算機各個專業的就業方向你都瞭解嗎計算機就業
- 視訊分享:做“有料”的計算機大學生計算機
- 河北工業大學計算機/軟體考研專業課鉅變,一門變三門!計算機
- 計算機作業系統計算機作業系統
- 第二週-雲端計算運維作業運維
- 第五週-雲端計算運維作業運維
- 第十週-雲端計算運維作業運維
- 大學四年我是怎麼寫作業系統和計算機網路的?掏心掏肺的分享!作業系統計算機網路
- 中國人民大學&智聯招聘:2020大學生就業力報告就業
- 紐約時報:大學學什麼才能不被計算機淘汰?計算機
- 2024XJTUPC西安交通大學校賽VP題解
- Linux作業系統應用與開發教程 邱鐵編著 聊城大學計算機學院考試科目Linux作業系統計算機
- 計算機的作業系統計算機作業系統
- 中國人民大學&智聯招聘:2020年大學生就業力報告就業
- 第十一週-雲端計算運維作業運維
- AI學習者必備 | 聖母大學公開統計計算課程講義(視訊+PPT+作業)AI
- 大學生適合學雲端計算嗎?
- 廣州 各大學計算機老師 DBA 課程 講課完畢..計算機
- 南京大學計算機基礎(四)踩坑筆記計算機筆記
- 計算機作業系統|作業系統引論計算機作業系統
- 網際網路從業3年,這些話送給在念大學計算機專業的你計算機
- 計算機作業系統掃盲計算機作業系統
- 計算機重灌Windows作業系統計算機Windows作業系統
- 計算機導論作業系統計算機作業系統