You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Prolog实现AI课程学生指定成绩区间的统计程序?

Prolog成绩统计程序实现方案

需求说明

读取AI课程学生的成绩,直至输入stop时停止,统计以下两个区间的学生人数:

  • 93-100分
  • 83分及以上且低于92分

现有代码的不足

你提供的grade/1子句仅能判断单个成绩所属区间并输出固定文本,无法实现循环读取输入和累计统计人数的核心功能,需要补充相关逻辑。

完整实现代码

% 主程序入口:初始化计数器并开始读取成绩
start_grade_count :-
    write('请输入学生成绩(输入stop结束):'), nl,
    count_grades(0, 0).  % 初始时两个区间的人数均为0

% 处理输入为stop的情况:输出最终统计结果
count_grades(Count93_100, Count83_91) :-
    read(Input),
    Input = stop,
    nl,
    write('93-100分的学生人数:'), write(Count93_100), nl,
    write('83分及以上且低于92分的学生人数:'), write(Count83_91), nl.

% 处理输入为有效成绩的情况:判断区间并更新计数器
count_grades(Count93_100, Count83_91) :-
    read(Input),
    number(Input),
    Input >= 0, Input =< 100,  % 确保成绩是合法的0-100分
    update_counts(Input, Count93_100, Count83_91, NewCount93, NewCount83),
    count_grades(NewCount93, NewCount83).

% 处理无效输入(非数字且非stop)的情况:提示错误并继续读取
count_grades(Count93_100, Count83_91) :-
    read(Input),
    Input \= stop,
    \+ number(Input),
    write('输入无效,请输入数字成绩或stop:'), nl,
    count_grades(Count93_100, Count83_91).

% 根据成绩更新对应区间的计数器
update_counts(Marks, C93, C83, C93+1, C83) :-
    Marks >= 93, Marks =< 100, !.  % 匹配93-100区间,截断避免回溯
update_counts(Marks, C93, C83, C93, C83+1) :-
    Marks >= 83, Marks < 92, !.  % 匹配83≤分数<92区间,截断避免回溯
update_counts(_, C93, C83, C93, C83).  % 成绩不属于两个区间,计数器不变

代码说明

  1. start_grade_count/0:程序入口,初始化两个区间的计数器为0,提示用户输入后进入循环。
  2. count_grades/2:核心循环子句,分三种情况处理输入:
    • 输入stop:输出最终统计结果,结束程序。
    • 输入合法数字(0-100):调用update_counts/5更新对应区间的计数器,继续循环读取下一个成绩。
    • 输入无效内容:提示错误后继续循环。
  3. update_counts/5:根据成绩判断所属区间,更新计数器;若成绩不在目标区间,计数器保持不变。

使用方法

在Prolog解释器中加载代码后,调用start_grade_count.即可启动程序,按提示输入成绩,输入stop后查看统计结果。

内容的提问来源于stack exchange,提问作者Rola Zeyad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:15:34