溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么處理學生打分、計算時間、最少硬幣問題

發(fā)布時間:2022-02-25 13:52:19 來源:億速云 閱讀:147 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“C語言怎么處理學生打分、計算時間、最少硬幣問題”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“C語言怎么處理學生打分、計算時間、最少硬幣問題”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

第一題: 最少硬幣問題(簡單版)

假設(shè)有三種面值的硬幣,分別為10、5、1。接收一個整數(shù)作為金額數(shù),計算要達到該金額數(shù),每個面值的硬幣最少需要多少枚。

輸出結(jié)果演示:

C語言怎么處理學生打分、計算時間、最少硬幣問題

參考答案:

#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;
}

運行結(jié)果:

C語言怎么處理學生打分、計算時間、最少硬幣問題

第二題:計算已經(jīng)過去了多久

編寫一個秒表程序來計算已經(jīng)過去了多長時間。

利用下列結(jié)構(gòu)體實現(xiàn):

C語言怎么處理學生打分、計算時間、最少硬幣問題

并要求使用下面兩個變量來解決問題:

C語言怎么處理學生打分、計算時間、最少硬幣問題

當程序運行時,取當前時間并保存到 previtimePtr 變量中。

此后,程序?qū)o限地接受命令,直到用戶輸入“quit” 程序才會停止。

如果用戶輸入“check”,則輸出存儲的上一個時間與當前時間的差。

(其他命令不采取任何操作)

提示:取現(xiàn)行時間的方法

#include <stdio.h>
#include <time.h>
 
int main(void) {
 
    time_t timer;
    struct tm *t;
 
    timer = time(NULL);
    t = localtime(&timer);
 
    return 0;
}

C語言怎么處理學生打分、計算時間、最少硬幣問題

輸出結(jié)果演示:

C語言怎么處理學生打分、計算時間、最少硬幣問題

參考答案:

#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;
}

運行結(jié)果:

C語言怎么處理學生打分、計算時間、最少硬幣問題

第三題:學生成績自動打分

編寫一個管理學生成績,并帶有計算學生成績功能的小程序。

使用下面的結(jié)構(gòu)來存儲學生信息:

C語言怎么處理學生打分、計算時間、最少硬幣問題

例如,上述結(jié)構(gòu)中一個學生的值如下:

Grades student1 = {2601053, "Natalie Lewis", {30.5, 65.9, 69.6}};

程序啟動時,在文本文件(“input.txt”)中讀取信息。(這里請手動創(chuàng)建該文件?。?/p>

文件內(nèi)容如下:

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

文本的第一行顯示了學生人數(shù) n

從第二行開始,按照“id/name/mid/final/proj”的順序給出了學生的信息。

通過根據(jù)所有學生的成績計算排名來確定學生的最終成績:

① 總分評判規(guī)則: total_point = mid * 0.3 + final * 0.3 + prog * 0

② 評分評判規(guī)則: 成績前 30% 為 A,前 70% 為 B,其余為 C

③ 總分小于 30(total_point < 30) 的學生,無視排名給 F。

輸入的成績范圍限制在 0~100分,學生姓名長度限制在40個字符以內(nèi)。

僅對給定的文本文件內(nèi)的學生進行評分,輸出文件的位置隨意。

輸出效果演示:

C語言怎么處理學生打分、計算時間、最少硬幣問題

參考答案:

#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語言怎么處理學生打分、計算時間、最少硬幣問題”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI