《C语言程序设计作业A》
一、作业目的
本次作业旨在巩固和加深学生对C语言程序设计的基本概念、语法规则和编程技巧的理解,提高学生的编程能力,培养学生的逻辑思维和问题解决能力。
二、作业内容
基础知识部分
(1)编写一个C程序,实现以下功能:
输入一个整数,判断该整数是否为水仙花数(一个n位数,其各位数字的n次方之和等于该数本身。例如:153是一个3位数,1^3 + 5^3 + 3^3 = 153)。
#include <stdio.h>
#include <math.h>
int main() {
int num, originalNum, remainder, n = 0;
float result = 0.0;
// 输入一个整数
printf("Enter an integer: ");
scanf("%d", &num);
originalNum = num;
// 计算位数
while (originalNum != 0) {
originalNum /= 10;
++n;
}
originalNum = num;
// 计算各位数字的n次方之和
while (originalNum != 0) {
remainder = originalNum % 10;
result += pow(remainder, n);
originalNum /= 10;
}
// 判断是否为水仙花数
if ((int)result == num)
printf("%d is an Armstrong number.", num);
else
printf("%d is not an Armstrong number.", num);
return 0;
}
(2)编写一个C程序,实现以下功能:
输入一个字符串,判断该字符串是否为回文(正读和反读都相同的字符串)。例如:madam。
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(char str[]) {
int length = strlen(str);
int start = 0;
int end = length - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
int main() {
char str[100];
// 输入一个字符串
printf("Enter a string: ");
scanf("%s", str);
// 判断是否为回文
if (isPalindrome(str))
printf("%s is a palindrome.", str);
else
printf("%s is not a palindrome.", str);
return 0;
}
数组与字符串部分
(1)编写一个C程序,实现以下功能:
输入10个整数,存储在数组中,然后计算并输出这些整数的平均值、最大值和最小值。
#include <stdio.h>
int main() {
int numbers[10];
int sum = 0;
int max, min;
float average;
// 输入10个整数
printf("Enter 10 integers:
");
for (int i = 0; i < 10; i++) {
scanf("%d", &numbers[i]);
}
// 初始化最大值和最小值
max = numbers[0];
min = numbers[0];
// 计算平均值、最大值和最小值
for (int i = 0; i < 10; i++) {
sum += numbers[i];
if (numbers[i] > max) {
max = numbers[i];
}
if (numbers[i] < min) {
min = numbers[i];
}
}
average = (float)sum / 10;
// 输出结果
printf("Average: %.2f
", average);
printf("Max: %d
", max);
printf("Min: %d
", min);
return 0;
}
(2)编写一个C程序,实现以下功能:
输入一个字符串,将其中的小写字母转换为大写字母,大写字母转换为小写字母。
#include <stdio.h>
int main() {
char str[100];
// 输入一个字符串
printf("Enter a string: ");
scanf("%s", str);
// 转换大小写
for (int i = 0; str[i] != ' '; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 'a' + 'A';
} else if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = str[i] - 'A' + 'a';
}
}
// 输出结果
printf("Converted string: %s
", str);
return 0;
}
函数与指针部分
(1)编写一个C程序,实现以下功能:
定义一个函数,用于计算两个整数的最大公约数(GCD)。
在主函数中调用该函数,并输出结果。
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main() {
int num1, num2, result;
// 输入两个整数
printf("Enter two integers: ");
scanf("%d %d", &num1, &num2);
// 计算最大公约数
result = gcd(num1, num2);
// 输出结果
printf("GCD of %d and %d is %d
", num1, num2, result);
return 0;
}
(2)编写一个C程序,实现以下功能:
定义一个函数,用于计算一个整数数组中的最大值和最小值。
在主函数中调用该函数,并输出结果。
#include <stdio.h>
void findMinMax(int arr[], int size, int *min, int *max) {
*min = arr[0];
*max = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > *max) {
*max = arr[i];
}
if (arr[i] < *min) {
*min = arr[i];
}
}
}
int main() {
int numbers[10];
int min, max;
// 输入10个整数
printf("Enter 10 integers:
");
for (int i = 0; i < 10; i++) {
scanf("%d", &numbers[i]);
}
// 计算最大值和最小值
findMinMax(numbers, 10, &min, &max);
// 输出结果
printf("Max: %d
", max);
);
printf("Min: %d
", min);
return 0;
}
结构体与文件操作部分
(1)编写一个C程序,实现以下功能:
定义一个结构体,用于存储学生的姓名、年龄和成绩。
输入5个学生的信息,存储在结构体数组中。
对结构体数组按成绩从高到低进行排序。
输出排序后的学生信息。
#include <stdio.h>
#include <string.h>
typedef struct {
char name[50];
int age;
float score;
} Student;
void sortStudents(Student students[], int size) {
Student temp;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (students[j].score < students[j + 1].score) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
Student students[5];
// 输入5个学生的信息
for (int i = 0; i < 5; i++) {
printf("Enter information for student %d:
", i + 1);
printf("Name: ");
scanf("%s", students[i].name);
printf("Age: ");
scanf("%d", &students[i].age);
printf("Score: ");
scanf("%f", &students[i].score);
}
// 排序
sortStudents(students, 5);
// 输出排序后的学生信息
printf("
Sorted student information:
");
for (int i = 0; i < 5; i++) {
printf("Name: %s, Age: %d, Score: %.2f
", students[i].name, students[i].age, students[i].score);
}
return 0;
}
(2)编写一个C程序,实现以下功能:
从文件中读取10个整数,存储在数组中。
计算这些整数的平均值,并将结果写入另一个文件。
#include <stdio.h>
int main() {
FILE *inputFile, *outputFile;
int numbers[10];
int sum = 0;
float average;
// 打开文件
inputFile = fopen("input.txt", "r");
outputFile = fopen("output.txt", "w");
// 读取10个整数
for (int i = 0; i < 10; i++) {
fscanf(inputFile, "%d", &numbers[i]);
}
// 计算平均值
for (int i = 0; i < 10; i++) {
sum += numbers[i];
}
average = (float)sum / 10;
// 写入文件
fprintf(outputFile, "Average: %.2f
", average);
// 关闭文件
fclose(inputFile);
fclose(outputFile);
return 0;
}
三、作业要求
作业必须独立完成,不得抄袭他人作业。
代码必须符合C语言规范,具有良好的可读性。
每个程序前需添加适当的注释,说明程序的功能和实现方法。
作业提交时,需将所有代码文件打包压缩,并附上实验报告。
四、作业评分标准
程序正确性:50%
代码可读性:20%
实验报告:30%
五、作业提交时间
请于规定时间内将作业提交至指定邮箱,过期提交将扣除相应分数。
六、作业反馈
作业批改完成后,将及时反馈给每位同学,请关注邮箱通知。如有疑问,请及时与老师沟通。