作业智慧树

结满作业设计丰硕成果

c语言程序设计作业A

  《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%

  五、作业提交时间
  请于规定时间内将作业提交至指定邮箱,过期提交将扣除相应分数。
  六、作业反馈
  作业批改完成后,将及时反馈给每位同学,请关注邮箱通知。如有疑问,请及时与老师沟通。

Copyright Your WebSite.Some Rights Reserved.