C语言编程小白,求解答

以下是使用分治思维进行设计的C语言代码,实现了题目中要求的4个功能,并使用菜单界面进行功能布局:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
float score[10]; // 课程分数
float total; // 总分
float average; // 平均分
} Student;
// 全局变量
Student students[1000]; // 学生数组
int totalStudents = 0; // 学生总数
int totalClasses = 0; // 课程总数
char classNames[10][20]; // 课程名称数组
// ========== 帮助函数 ==========
// 显示菜单
void showMenu() {
printf("\n");
printf("==============================\n");
printf(" 1. 从文件中读取学生信息\n");
printf(" 2. 计算各学生成绩的总分和平均分\n");
printf(" 3. 统计各分数段的学生人数并输出\n");
printf(" 4. 将学生信息及各学科成绩输出到文件\n");
printf(" 0. 退出程序\n");
printf("==============================\n");
printf("请选择操作:\n");
}
// 读取一行
char *readLine(char *buffer, int size) {
int ch, pos = 0;
while ((ch = getchar()) != '\n' && ch != EOF) {
if (pos < size - 1) {
buffer[pos++] = ch;
}
}
buffer[pos] = '\0';
return buffer;
}
// ========== 主要功能函数 ==========
// 从文件中读取学生信息
void loadStudents() {
char filename[100];
printf("请输入数据文件名:\n");
readLine(filename, 100);
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件 %s\n", filename);
return;
}
int lineNum = 0;
char buffer[1024];
while (fgets(buffer, 1024, file)) {
lineNum++;
if (lineNum == 1) {
// 解析课程名称
char *token = strtok(buffer, ",");
while (token) {
strcpy(classNames[totalClasses++], token);
token = strtok(NULL, ",");
}
} else {
// 解析学生信息
char *token = strtok(buffer, ",");
strcpy(students[totalStudents].id, token);
token = strtok(NULL, ",");
strcpy(students[totalStudents].name, token);
for (int i = 0; i < totalClasses; i++) {
token = strtok(NULL, ",");
students[totalStudents].score[i] = atof(token);
students[totalStudents].total += students[totalStudents].score[i];
}
students[totalStudents].average = students[totalStudents].total / totalClasses;
totalStudents++;
}
}
fclose(file);
printf("成功读取 %d 名学生信息\n", totalStudents);
}
// 计算各学生成绩的总分和平均分
void calculateScore() {
float classTotal[10] = {0};
float classAverage[10] = {0};
float totalTotal = 0;
for (int i = 0; i < totalStudents; i++) {
for (int j = 0; j < totalClasses; j++) {
classTotal[j] += students[i].score[j];
}
totalTotal += students[i].total;
}
for (int i = 0; i < totalClasses; i++) {
classAverage[i] = classTotal[i] / totalStudents;
printf("课程 %s 总分为 %.2f,平均分为 %.2f\n", classNames[i], classTotal[i], classAverage[i]);
}
printf("总分为 %.2f,平均分为 %.2f\n", totalTotal, totalTotal / (totalStudents * totalClasses));
}
// 统计各分数段的学生人数并输出
void calculateDistribution() {
float distribution[21] = {0}; // 成绩分布,每个元素存储一个分数段的学生人数
for (int i = 0; i < totalStudents; i++) {
int score = (int) (students[i].total / totalClasses / 5); // 计算分数段
distribution[score]++;
}
printf("各分数段学生人数及百分比如下:\n");
for (int i = 0; i < 20; i++) {
printf("[%d-%d]:%.2f%%\n", i * 5, i * 5 + 4, distribution[i] / totalStudents * 100);
}
printf("100:%.2f%%\n", distribution[20] / totalStudents * 100);
}
// 将学生信息及各学科成绩输出到文件
void saveStudents() {
char filename[100];
printf("请输入要存储的文件名:\n");
readLine(filename, 100);
FILE *file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s\n", filename);
return;
}
// 输出表头
fprintf(file, "学号,姓名");
for (int i = 0; i < totalClasses; i++) {
fprintf(file, ",%s", classNames[i]);
}
fprintf(file, ",总分,平均分\n");
// 输出学生信息
for (int i = 0; i < totalStudents; i++) {
fprintf(file, "%s,%s", students[i].id, students[i].name);
for (int j = 0; j < totalClasses; j++) {
fprintf(file, ",%.2f", students[i].score[j]);
}
fprintf(file, ",%.2f,%.2f\n", students[i].total, students[i].average);
}
fclose(file);
printf("成功将学生信息保存到文件 %s\n", filename);
}
// ========== 程序入口 ==========
int main() {
while (1) {
showMenu();
char command[10];
readLine(command, 10);
if (strcmp(command, "0") == 0) {
break;
} else if (strcmp(command, "1") == 0) {
loadStudents();
} else if (strcmp(command, "2") == 0) {
calculateScore();
} else if (strcmp(command, "3") == 0) {
calculateDistribution();
} else if (strcmp(command, "4") == 0) {
saveStudents();
} else {
printf("无效命令!\n");
}
}
return 0;
}
通过运行上述代码,用户可以在菜单中选择需要执行的功能,并按照程序提示进行操作。其中,(1)从文件中读取学生的学号,姓名及成绩等信息,需要用户提供数据文件名;(4)将N个学生的学号、姓名及M门课程的成绩、总分、平均分写到文件存储,需要用户提供存放文件名。

  • C璇█缂栫▼灏忕櫧,姹傝В绛
    绛旓細浠ヤ笅鏄娇鐢ㄥ垎娌绘濈淮杩涜璁捐鐨C璇█浠g爜锛屽疄鐜颁簡棰樼洰涓姹傜殑4涓姛鑳斤紝骞朵娇鐢ㄨ彍鍗曠晫闈㈣繘琛屽姛鑳藉竷灞锛歩nclude <stdio.h> include <stdlib.h> include <string.h> // 瀹氫箟瀛︾敓缁撴瀯浣 typedef struct { char id[20]; // 瀛﹀彿 char name[20]; // 濮撳悕 float score[10]; // 璇剧▼鍒嗘暟 float total...
  • C璇█涓嶄細,姹澶х鎸囧,瑕佽缁嗙殑瑙g瓟杩囩▼,璋㈣阿浜
    绛旓細int main(){ int a=13,b=013,c=-1; //鐗瑰埆娉ㄦ剰锛岃繖閲岀粰b璧嬪013锛岃鏄庢槸鍏繘鍒舵暟13锛岀浉褰撲簬鍗佽繘鍒舵暟11 printf("%d\n",a=a+1,a+b,b+1); //鐢变簬printf鍙屽紩鍙蜂腑鍙湁涓涓牸寮忚鏄庣锛屽洜姝わ紝鍙緭鍑篴=a+1鐨勫14 printf("%d\n",(a=a+1,a+b,b+1));// 鐜板湪锛岃緭鍑虹殑鏁版嵁鏄竴...
  • c璇█缂栫▼,姹澶х瑙g瓟
    绛旓細1銆佹柊寤轰竴涓伐绋嬪拰.c鏂囦欢 锛岃緭鍏ュご鏂囦欢鍜屼富鍑芥暟銆2銆佺劧鍚庡紑濮嬪畾涔夊彉閲忕被鍨嬨3銆佽緭鍏鍜宐涓や釜鏁存暟銆4銆佸a鍜宐涓や釜涓嶅悓鐨勬暣鏁拌繘琛岃祴鍊笺5銆佺劧鍚庨氳繃if璇彞瀹炵幇鍊煎ぇ灏忕殑姣旇緝銆6銆佽緭鍑烘渶鍚庣殑缁撴灉銆7銆佺紪璇戙佽繍琛岋紝鍙互鐪嬭鎸夊厛灏忓悗澶х殑椤哄簭杈撳嚭a鍜宐銆
  • C璇█闂,姹澶х瑙e喅,璋㈣阿鍟,鎴戞槸灏忕櫧,鏈濂借兘澶熻В閲婁笅銆
    绛旓細棰樹腑锛宎=3 锛屼簩杩涘埗涓猴細0011锛沚=6锛屼簩杩涘埗鍊间负锛0110銆傛墍浠ワ紙a^b锛夋寜浣嶅紓鎴栧悗鐨勫间负0101涔熷氨鏄5锛屽乏绉讳袱浣嶅悗鍊硷紙浜岃繘鍒讹級涓猴細010100 涔熷氨鏄 锛20
  • c璇█灏忕櫧姹傛暀
    绛旓細2锛屼紶鍙*p锛屾槸灏嗘寚鍚憄鐨勫湴鍧鎸囬拡浼犲叆鍑芥暟锛屽鏋滃鎸囬拡杩涜鎿嶄綔锛屽嵆鏀瑰彉鎸囬拡鎵鎸囧悜鐨勫湴鍧涓殑鍊硷紝鍦ㄥ嚱鏁扮粨鏉熷悗p鐨勫间細鍙樸傜劧鍚庢垜浠洖鍒版湰棰樹腑锛屾湰棰樻槸鎯虫敼鍙樹竴涓瓧绗︿覆鏁扮粍鐨勫唴瀹癸紝鐢变簬C璇█鍑芥暟浼犲弬鏃犳硶浼犻掓暟缁勶紝鍥犳渚夸紶閫掓寚鍚戣鏁扮粍鐨勭涓涓厓绱犵殑鍦板潃鎸囬拡锛岄氳繃杩欎釜鎸囬拡渚垮彲浠ヨ闂暣涓暟缁勪腑鐨勬瘡涓...
  • C璇█闂,姹澶х瑙e喅,璋㈣阿鍟,鎴戞槸灏忕櫧,鏈濂借兘澶熻В閲婁笅鍘熷洜
    绛旓細++i锛宨 鍏堣嚜鍔狅紝鑷姞鐨勭粨鏋滃弬涓庤繍绠椼傜涓涓猧++锛宨 鐨勫煎弬涓庡埌寮忎腑鐨勮繍绠楋紱绗簩涓++i锛宨 = 2鐨勫煎弬涓庡埌寮忎腑鐨勮繍绠楋紱绗笁涓猧++锛宨 = 2鐨勫煎弬涓庡埌寮忎腑鐨勮繍绠椼傚浜庣涓涓猧++锛宨 鐨勫兼槸2锛屽緱鍒発鐨勫兼槸2+2+2 = 6锛沬 鍦ㄥ紡瀛愮粨鏉熷悗锛屽紑濮嬫湭瀹炵幇鐨勮嚜鍔犺繍绠楋紝鍦ㄥ紡涓畬鎴愯嚜鍔犱竴娆...
  • C璇█缂栫▼,姹傝В绛
    绛旓細绋嬪簭鎵ц鐨勮繃绋嬪涓嬶細鍒濆鍖栧彉閲廰鍜宐涓1銆傝繘鍏or寰幆锛屽綋a<=100鏃舵墽琛屽惊鐜綋銆傛鏌ュ彉閲廱鏄惁澶т簬绛変簬20锛屽鏋滄槸锛岃烦鍑篺or寰幆銆傚鏋滃彉閲廱闄や互3浣欐暟涓1锛屽垯灏哹鍔3锛屽苟鎵цcontinue璇彞锛岃繑鍥炵浜屾銆傚鏋滃彉閲廱闄や互3浣欐暟涓嶄负1锛屽垯灏哹璧嬪间负-5锛屽苟鎵ц绗簩姝ャ傚惊鐜粨鏉熷悗锛岃緭鍑哄彉閲廰鐨勫笺傛牴鎹▼搴...
  • C璇█鏂版墜璇锋暀C璇█闂,姹澶х瑙g瓟
    绛旓細浣犲簲褰撹緭鍏ュ瓧绗﹀瀷鍙橀噺锛屾墍浠:int letter;鏀逛负char letter;scanf("%d",&letter);鏀逛负scanf("%c",&letter);
  • C璇█瀛︿笉浼氭庝箞鍔?
    绛旓細🌻鎬荤殑鏉ヨ锛孋璇█璇炬槸涓闂ㄧ悊璁烘т互鍙婂疄璺垫ч兘鏋佸己鐨勮绋嬪唴瀹癸紝涓嶄絾蹇呴』鎺屾彙鐩稿叧姒傚康锛岃繕闇瑕佹妸鎻$▼搴缂栧啓骞跺湪鐢佃剳涓婅兘澶熸垚鍔熻皟璇曡繍琛岋紝骞朵笖鑳藉浠g爜杩涜浼樺寲銆🌻鐪熺湡姝f鑳藉瀛﹀ソC璇█锛涓嶆槸涓鏈濅竴澶曠殑浜嬨傝冮噺鐪熸瀛︿細杩欓棬璇█鐨勬爣鍑嗭紝搴斿綋鐪嬫垜浠兘涓嶈兘鍋氬嚭绋嬪簭椤圭洰锛岃岄潪鐪嬫垜浠槸涓嶆槸...
  • c璇█闂姹傝В绛
    绛旓細a[i]=num锛沬++锛 if锛坈h!=鈥#鈥欙級scanf锛堚%c鈥濓紝&ch锛夛紱 // 鑻ユ嫾鏁颁腑杈撳叆浜嗏#鈥欙紝鍒欎笉鍐嶈緭鍏 锝// 缁撴潫while锛坈h锛侊紳鈥#鈥欙級printf锛堚滃叡鏈%d涓暣鏁帮紝瀹冧滑鏄細鈥漣锛夛紱 for锛坖=0锛沯
  • 扩展阅读:c++语言入门自学 ... 零基础小白怎么学编程 ... c++必背入门代码 ... 小白怎么学习编程 ... c++入门程序代码 ... c++编程 ... 自学编程免费自学网站 ... 编程小白如何入门 ... c++在线编程平台 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网