《C语言程序设计作业》
一、作业目的
本次作业旨在巩固学生对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程序,实现以下功能:
输入一个字符串,判断该字符串是否为回文(正读和反读都一样的字符串)。
#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>
void sortArray(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[10];
int i;
// 输入10个整数
printf("Enter 10 integers:
");
for (i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 对数组进行排序
sortArray(arr, 10);
// 输出排序后的数组
printf("Sorted array:
");
for (i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
(2)编写一个C程序,实现以下功能:
输入一个字符串,然后统计该字符串中字母、数字、空格和其他字符的数量。
#include <stdio.h>
#include <ctype.h>
int main() {
char str[100];
int i, letters = 0, digits = 0, spaces = 0, others = 0;
// 输入一个字符串
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
// 统计字符数量
for (i = 0; str[i] != ' '; i++) {
if (isalpha(str[i])) {
letters++;
} else if (isdigit(str[i])) {
digits++;
} else if (isspace(str[i])) {
spaces++;
} else {
others++;
}
}
// 输出结果
printf("Letters: %d
", letters);
printf("Digits: %d
", digits);
printf("Spaces: %d
", spaces);
printf("Other characters: %d
", others);
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 swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int num1, num2;
// 输入两个整数
printf("Enter two integers: ");
scanf("%d %d", &num1, &num2);
// 交换两个整数的值
swap(&num1, &num2);
// 输出交换后的结果
printf("After swapping: %d %d
", num1, num2);
return 0;
}
结构体与文件操作部分
(1)编写一个C程序,实现以下功能:
定义一个结构体,表示学生的信息(包括姓名、学号、成绩)。
输入5个学生的信息,存储在结构体数组中。
对结构体数组按成绩进行排序(从高到低)。
输出排序后的学生信息。
#include <stdio.h>
#include <string.h>
typedef struct {
char name[50];
int id;
float score;
} Student;
void sortStudents(Student students[], int n) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 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];
int i;
// 输入5个学生的信息
for (i = 0; i < 5; i++) {
printf("Enter information for student %d:
", i + 1);
printf("Name: ");
scanf("%s", students[i].name);
printf("ID: ");
scanf("%d", &students[i].id);
printf("Score: ");
scanf("%f", &students[i].score);
}
// 对结构体数组进行排序
sortStudents(students, 5);
// 输出排序后的学生信息
printf("Sorted students by score:
");
for (i = 0; i < 5; i++) {
printf("Name: %s, ID: %d, Score: %.2f
", students[i].name, students[i].id, students[i].score);
}
return 0;
}
(2)编写一个C程序,实现以下功能:
打开一个文件,读取其中的文本内容,并输出到屏幕上。
在读取完文件后,关闭文件。
#include <stdio.h>
int main() {
FILE *file;
char filename[100];
char ch;
// 输入文件名
printf("Enter the filename: ");
scanf("%s", filename);
// 打开文件
file = fopen(filename, "r");
if (file == NULL) {
printf("Error opening file.
");
return 1;
}
// 读取并输出文件内容
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
// 关闭文件
fclose(file);
return 0;
}
三、作业要求
请在规定时间内完成作业,并按照要求编写代码。
作业代码需具备良好的可读性,包括适当的注释、合理的命名和规范的代码格式。
作业完成后,请将代码文件和报告文件压缩为一个压缩包,以“学号_姓名”命名,发送至指定邮箱。
如有疑问,请及时与老师沟通。
四、作业评分标准
代码正确性:40%
代码可读性:30%
作业报告:30%
祝同学们顺利完成作业!