构造一维动态数组,实现输入某班学生的某门课成绩,计算并输出其平均分。学生人数
由键盘输入。
#include <stdio.h>
#include <stdlib.h>
int main() {
int numStudents;
printf("输入学生人数: ");
scanf("%d", &numStudents);
int* scores = malloc(numStudents * sizeof(int));
int sum = 0;
for (int i = 0; i < numStudents; ++i) {
printf("输入学生的分数 %d: ", i+1);
scanf("%d", &scores[i]);
sum += scores[i];
}
double avgScore = (double) sum / numStudents;
printf("平均分是: %f\n", avgScore);
free(scores);
return 0;
}
构造二维动态数组,实现输入m个班级(每班n个学生)某门课成绩,计算并输出平均分。班级数和学生人数由键盘输入。
#include <stdio.h>
#include <stdlib.h>
int main() {
int numClasses, numStudents;
printf("输入班级数量: ");
scanf("%d", &numClasses);
printf("输入每个班级的人数: ");
scanf("%d", &numStudents);
// 为二维数组分配内存
int** scores = (int**) malloc(numClasses * sizeof(int*));
for (int i = 0; i < numClasses; ++i) {
scores[i] = (int*) malloc(numStudents * sizeof(int));
}
// 输入每个班级中每个学生的分数
for (int i = 0; i < numClasses; ++i) {
printf("班级输入分数 %d:\n", i+1);
for (int j = 0; j < numStudents; ++j) {
printf("学生成绩 %d: ", j+1);
scanf("%d", &scores[i][j]);
}
}
// 计算每个班级的平均分数
for (int i = 0; i < numClasses; ++i) {
int sum = 0;
for (int j = 0; j < numStudents; ++j) {
sum += scores[i][j];
}
double avgScore = (double) sum / numStudents;
printf("班平均分是 %d is: %f\n", i+1, avgScore);
}
// Free allocated memory
for (int i = 0; i < numClasses; i++) {
free(scores[i]);
}
free(scores);
return 0;
}
用动态数组编程实现输入任意m 个班级学生(每班n个学生》的某门课成绩,计算最高分,并指出具有最高分成绩的学生是第几个班的第几个学生。其中,m和n的值由用户从键盘任意输入(不限定m和n的上限值)。
#include <stdio.h>
#include <stdlib.h>
int main() {
int m, n;
printf("请输入班级数 m: ");
scanf("%d", &m);
printf("请输入每个班级的学生人数 n: ");
scanf("%d", &n);
// 动态分配二维数组
int** scores = (int**) malloc(m * sizeof(int*));
for (int i = 0; i < m; ++i) {
scores[i] = (int*) malloc(n * sizeof(int));
}
// 输入成绩并寻找最高分
int maxScore = 0;
int maxScoreClass = 0;
int maxScoreStudent = 0;
for (int i = 0; i < m; ++i) {
printf("请输入第 %d 个班级的成绩:\n", i+1);
for (int j = 0; j < n; ++j) {
printf("请输入第 %d 个学生的成绩:", j+1);
scanf("%d", &scores[i][j]);
// 更新最高分信息
if (scores[i][j] > maxScore) {
maxScore = scores[i][j];
maxScoreClass = i + 1;
maxScoreStudent = j + 1;
}
}
}
printf("最高分为 %d,此分数是第 %d 个班级的第 %d 个学生的成绩。\n", maxScore, maxScoreClass, maxScoreStudent);
// 释放动态分配的数组内存
for (int i = 0; i < m; ++i) {
free(scores[i]);
}
free(scores);
return 0;
}
从键盘任意输入一个整型表示的月份值,用指针数组变成输出该月份的英文表示,若输入的月份值不在1-12之间,则输出“Illegal month"。
提示:定义一个指针数组存放月份的英文表示,然后输出相应月份。
#include <stdio.h>
#include <stdlib.h>
int main() {
char* months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
int month;
printf("请输入一个月份值(1-12):");
scanf("%d", &month);
// 检查月份值是否合法
if (month < 1 || month > 12) {
printf("Illegal month\n");
return 0;
}
// 输出月份的英文表示
printf("%s\n", months[month-1]);
return 0;
}
计算最长的字符串长度∶输入n (n<10)个字符串,输出其中最长字符串的有效长度。
要求自定义函数int max len ( char *s[ ],int n),用于计算有n个元素的指针数组s中最长的字符串的长度。试编写相应程序。
#include <stdio.h>
#include <string.h>
// 自定义函数用于计算有n个元素的指针数组中最长的字符串的长度
int max_len(char *s[], int n) {
int max_len = 0;
for (int i = 0; i < n; ++i) {
int len = strlen(s[i]);
if (len > max_len) {
max_len = len;
}
}
return max_len;
}
int main() {
char* strs[10]; // 存储n个字符串的指针数组
int n;
printf("请输入字符串的个数n(n<10):");
scanf("%d", &n);
// 输入n个字符串并将其存入指针数组中
for (int i = 0; i < n; ++i) {
char* str = (char*) malloc(100 * sizeof(char)); // 为每个字符串分配100个字符的内存
printf("请输入第%d个字符串:", i+1);
scanf("%s", str);
strs[i] = str;
}
int max_len_str = max_len(strs, n);
printf("最长字符串的有效长度为:%d\n", max_len_str);
// 释放动态分配的字符串内存
for (int i = 0; i < n; ++i) {
free(strs[i]);
}
return 0;
}