您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C語言怎么處理學生打分、計算時間、最少硬幣問題”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C語言怎么處理學生打分、計算時間、最少硬幣問題”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
假設有三種面值的硬幣,分別為10、5、1。接收一個整數作為金額數,計算要達到該金額數,每個面值的硬幣最少需要多少枚。
輸出結果演示:
參考答案:
#include <stdio.h> typedef struct StructrueMoneyBox { int n10; int n5; int n1; } MoneyBox; int main(void) { MoneyBox change = {0, 0, 0}; int face_value[4] = {10, 5, 1}; int money = 0; int i = 0; printf("請輸入金額: "); scanf("%d", &money); do { if (money < face_value[i]) { i++; } switch (i) { case 0: change.n10 = money / face_value[i]; break; case 1: change.n5 = money / face_value[i]; break; case 2: change.n1 = money / face_value[i]; break; } money = money % face_value[i]; } while (money > 0); printf("10: %d\n", change.n10); printf("5: %d\n", change.n5); printf("1: %d\n", change.n1); return 0; }
運行結果:
編寫一個秒表程序來計算已經過去了多長時間。
利用下列結構體實現:
并要求使用下面兩個變量來解決問題:
當程序運行時,取當前時間并保存到 previtimePtr 變量中。
此后,程序將無限地接受命令,直到用戶輸入“quit” 程序才會停止。
如果用戶輸入“check”,則輸出存儲的上一個時間與當前時間的差。
(其他命令不采取任何操作)
提示:取現行時間的方法
#include <stdio.h> #include <time.h> int main(void) { time_t timer; struct tm *t; timer = time(NULL); t = localtime(&timer); return 0; }
輸出結果演示:
參考答案:
#include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> typedef struct{ int hours; int minutes; int seconds; }Time; int main(void){ Time* prevTimePtr; Time currTime; time_t timer; struct tm *t; int i = 1, a, b, c; char buf[80]; timer = time(NULL); t = localtime(&timer); prevTimePtr = (Time*)malloc(sizeof(Time)); prevTimePtr->hours = t->tm_hour; prevTimePtr->minutes = t->tm_min; prevTimePtr->seconds = t->tm_sec; while(1){ printf("system> "); fgets(buf, 80, stdin); if(!strcmp(buf, "quit\n")) break; if(!strcmp(buf, "check\n")){ timer = time(NULL); t = localtime(&timer); currTime.hours = t->tm_hour; currTime.minutes = t->tm_min; currTime.seconds = t->tm_sec; printf("\n\tCheck Point #%02d\n", i++); printf("\tCurrent Time = %02d : %02d : %02d\n", currTime.hours, currTime.minutes, currTime.seconds); printf("\tPrevious Time = %02d : %02d : %02d\n", prevTimePtr->hours, prevTimePtr->minutes, prevTimePtr->seconds); c = currTime.seconds - prevTimePtr->seconds; b = currTime.minutes - prevTimePtr->minutes; a = currTime.hours - prevTimePtr->hours; if(c < 0){ c+=60; b--; } if(b < 0){ b+=60; a--; } printf("\tElasped Time = %02d : %02d : %02d\n\n", a,b,c); *prevTimePtr = currTime; } } return 0; }
運行結果:
編寫一個管理學生成績,并帶有計算學生成績功能的小程序。
使用下面的結構來存儲學生信息:
例如,上述結構中一個學生的值如下:
Grades student1 = {2601053, "Natalie Lewis", {30.5, 65.9, 69.6}};
程序啟動時,在文本文件(“input.txt”)中讀取信息。(這里請手動創建該文件!)
文件內容如下:
26
2601053 / Natalie Lewis / 30.5 / 65.9 / 69.6
2026018 / Chloe Christian / 54.1 / 43.4 / 35.4
2016317 / Emolys Evans / 31.6 / 20.4 / 26.3
2961329 / Sophia Allen / 63.5 / 37.9 / 56.8
2016787 / Robert Melton / 44.1 / 54.2 / 32.7
2011661 / Siaomos Barton / 92.2 / 15.4 / 33.7
8166559 / Sebastian Henderson / 55.1 / 38.2 / 0.9
2061185 / Richard Cerney / 63.6 / 98.6 / 97.0
2017454 / Elizabeth Calvin / 7.4 / 0.0 / 26.4
2026196 / Madison Frost / 49.3 / 64.3 / 73.3
2015758 / Emily Stevgenson / 51.6 / 89.2 / 34.0
2016776 / Navy Taylor / 8.6 / 36.4 / 52.3
2062103 / Vincent Newton / 38.7 / 79.0 / 24.0
2501762 / Owen Ingram / 40.6 / 85.1 / 91.1
2042142 / Olyen Massey / 72.1 / 62.0 / 97.3
2027039 / Emma Thomas / 30.1 / 25.1 / 27.3
2051341 / Peter Pitts / 47.9 / 71.8 / 74.9
2071368 / Xygret Latimer / 67.2 / 9.7 / 79.1
2023762 / Michael Grahan / 6.4 / 29.0 / 17.5
2024545 / Mandon Austin / 98.8 / 28.5 / 48.9
2091176 / Violet Smith / 4.8 / 93.9 / 3.9
2802841 / Samuel Davis / 95.6 / 54.2 / 31.8
2027062 / Sam Mackey / 83.6 / 26.1 / 97.5
2061555 / Miguel Parr / 77.2 / 88.1 / 99.5
2028836 / Oscar Hamersley / 67.7 / 43.4 / 91.7
2026582 / MeanSon King / 97.2 / 88.3 / 100.0
文本的第一行顯示了學生人數 n
從第二行開始,按照“id/name/mid/final/proj”的順序給出了學生的信息。
通過根據所有學生的成績計算排名來確定學生的最終成績:
① 總分評判規則: total_point = mid * 0.3 + final * 0.3 + prog * 0
② 評分評判規則: 成績前 30% 為 A,前 70% 為 B,其余為 C
③ 總分小于 30(total_point < 30) 的學生,無視排名給 F。
輸入的成績范圍限制在 0~100分,學生姓名長度限制在40個字符以內。
僅對給定的文本文件內的學生進行評分,輸出文件的位置隨意。
輸出效果演示:
參考答案:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ float mid; float final; float proj; }Points; typedef struct{ int studentId; char name[40]; Points subject; char grade[3]; float total_point; }Grades; int main(void){ int cnt, i, j, A_temp, B_temp; float a_grade, b_grade; char name_temp[30]; Grades* grade; Grades gtemp; FILE *fp = fopen("input.txt", "r"); if(fp == NULL){ printf("未找到文件!\n"); return 1; } fscanf(fp, "%d", &cnt); A_temp = cnt * 0.3; B_temp = cnt * 0.7; grade = (Grades*)malloc(sizeof(Grades) * cnt); for(i = 0; i < cnt; i++){ fscanf(fp, "%d / %s %s / %f / %f / %f\n", &grade[i].studentId, grade[i].name, name_temp, &((grade[i].subject).mid), &(grade[i].subject).final, &(grade[i].subject).proj); strcat(grade[i].name, " "); strcat(grade[i].name, name_temp); grade[i].total_point = (grade[i].subject).mid * 0.3 + (grade[i].subject).final * 0.3 + (grade[i].subject).proj * 0.4; } for(i = 0; i < cnt - 1; i++){ for(j = 0; j < cnt - i - 1; j++){ if(grade[j].total_point < grade[j + 1].total_point){ gtemp = grade[j]; grade[j] = grade[j + 1]; grade[j + 1] = gtemp; } } } a_grade = grade[A_temp].total_point; b_grade = grade[B_temp].total_point; printf("Cut off for A grade: %f (rank %d)\n", a_grade, A_temp); printf("Cut off for B grade: %f (rank %d)\n", b_grade, B_temp); for(i = 0; i < cnt; i++){ if(grade[i].total_point < 30){ strcpy(grade[i].grade, "F"); } else if(a_grade <= grade[i].total_point){ strcpy(grade[i].grade, "A"); } else if(b_grade <= grade[i].total_point && grade[i].total_point < a_grade){ strcpy(grade[i].grade, "B"); } else if(grade[i].total_point < b_grade){ strcpy(grade[i].grade, "C"); } } printf("\n-- Student List --\n"); for(i = 0; i < cnt; i++){ printf(" Id : %d\n", grade[i].studentId); printf(" Name : %s\n", grade[i].name); printf(" Grade(mid) : %.02f\n", (grade[i].subject).mid); printf(" Grade(final) : %.02f\n", (grade[i].subject).final); printf(" Grade(project) : %.02f\n", (grade[i].subject).proj); printf(" Grade : %s (%.02f, rank %d)\n", grade[i].grade, grade[i].total_point, i + 1); printf("\n"); } return 0; }
讀到這里,這篇“C語言怎么處理學生打分、計算時間、最少硬幣問題”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。