作业智慧树

结满作业设计丰硕成果

c语言程序设计作业

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

  祝同学们顺利完成作业!

Copyright Your WebSite.Some Rights Reserved.