《C语言程序设计个人作业答案》作业设计
一、作业目的
本次作业旨在巩固学生对C语言程序设计的基本概念、语法规则和编程技巧的理解,提高学生的编程实践能力,培养学生的逻辑思维和问题解决能力。
二、作业内容
基本概念与语法
(1)编写一个C程序,实现以下功能:
输入一个整数,判断其是否为奇数或偶数,并输出结果。
输入三个整数,按照从小到大的顺序输出。
输入一个字符串,统计其中字母、数字和空格的个数,并输出。
(2)编写一个C程序,实现以下功能:
输入一个整数,判断其是否为水仙花数(一个三位数,其各位数字的立方和等于该数本身)。
输入一个整数,判断其是否为回文数(一个整数,正序和倒序读都一样)。
数组与字符串
(1)编写一个C程序,实现以下功能:
输入一个整数n(n≥1),创建一个长度为n的数组,并输入数组元素。
输出数组中最大和最小元素的值及其索引。
将数组中的元素逆序输出。
(2)编写一个C程序,实现以下功能:
输入一个字符串,判断其是否为回文串。
输入一个字符串,将其中的小写字母转换为大写字母,大写字母转换为小写字母。
函数与指针
(1)编写一个C程序,实现以下功能:
定义一个函数,用于计算两个整数的最大公约数。
定义一个函数,用于计算两个整数的平均值。
在主函数中调用这两个函数,并输出结果。
(2)编写一个C程序,实现以下功能:
定义一个函数,用于交换两个整数的值。
使用指针作为函数参数,实现交换两个整数的值。
在主函数中调用这个函数,并输出交换后的结果。
结构体与文件操作
(1)编写一个C程序,实现以下功能:
定义一个结构体,用于表示学生的基本信息(包括学号、姓名、年龄、成绩)。
输入学生的信息,保存到文件中。
从文件中读取学生信息,并输出。
(2)编写一个C程序,实现以下功能:
定义一个结构体,用于表示一个日期(包括年、月、日)。
编写一个函数,用于计算两个日期之间的天数差。
在主函数中调用这个函数,并输出结果。
三、作业要求
作业必须独立完成,不得抄袭他人作品。
代码结构清晰,命名规范,注释详细。
每个程序必须有对应的测试用例,确保程序的正确性。
作业提交时,需将源代码文件和测试报告打包压缩,以学号命名。
四、作业评分标准
程序正确性:40%
代码结构:30%
测试用例:20%
注释与命名:10%
以下为具体作业内容:
基本概念与语法
(1)程序代码:
#include <stdio.h>
int main() {
int num, a, b, c;
char str[100];
int letter_count = 0, digit_count = 0, space_count = 0;
// 判断奇偶数
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d 是偶数
", num);
} else {
printf("%d 是奇数
", num);
}
// 输出三个整数
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
int temp = a;
a = b;
b = temp;
}
if (a > c) {
int temp = a;
a = c;
c = temp;
}
if (b > c) {
int temp = b;
b = c;
c = temp;
}
printf("从小到大排序:%d %d %d
", a, b, c);
// 统计字符
printf("请输入一个字符串:");
scanf("%s", str);
for (int i = 0; str[i] != ' '; i++) {
if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) {
letter_count++;
} else if (str[i] >= '0' && str[i] <= '9') {
digit_count++;
} else if (str[i] == ' ') {
space_count++;
}
}
printf("字母:%d,数字:%d,空格:%d
", letter_count, digit_count, space_count);
return 0;
}
(2)程序代码:
#include <stdio.h>
#include <math.h>
int main() {
int num;
// 判断水仙花数
printf("请输入一个整数:");
scanf("%d", &num);
if (num >= 100 && num <= 999) {
int sum = 0, temp = num;
while (temp != 0) {
int digit = temp % 10;
sum += pow(digit, 3);
temp /= 10;
}
if (sum == num) {
printf("%d 是水仙花数
", num);
} else {
printf("%d 不是水仙花数
", num);
}
} else {
printf("输入的数不是三位数
");
}
// 判断回文数
int reversed = 0, original = num;
while (num != 0) {
reversed = reversed * 10 + num % 10;
num /= 10;
}
if (original == reversed) {
printf("%d 是回文数
", original);
} else {
printf("%d 不是回文数
", original);
}
return 0;
}
数组与字符串
(1)程序代码:
#include <stdio.h>
int main() {
int n, i, max, min, max_index, min_index;
printf("请输入数组长度:");
scanf("%d", &n);
int arr[n];
// 输入数组元素
printf("请输入数组元素:
");
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 寻找最大和最小元素
max = arr[0];
min = arr[0];
max_index = 0;
min_index = 0;
for (i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
max_index = i;
}
if (arr[i] < min) {
min = arr[i];
min_index = i;
}
}
printf("最大元素:%d,索引:%d
", max, max_index);
printf("最小元素:%d,索引:%d
", min, min_index);
// 逆序输出数组
printf("逆序输出数组:
");
for (i = n - 1; i >= 0; i--) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
(2)程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char str[100];
// 判断回文串
printf("请输入一个字符串:");
scanf("%s", str);
int len = strlen(str);
int is_palindrome = 1;
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - 1 - i]) {
is_palindrome = 0;
break;
}
}
if (is_palindrome) {
printf("是回文串
");
} else {
printf("不是回文串
");
}
// 大小写转换
printf("大小写转换后的字符串:");
for (int i = 0; str[i] != ' '; i++) {
if (islower(str[i])) {
printf("%c", toupper(str[i]));
} else if (isupper(str[i])) {
printf("%c", tolower(str[i]));
} else {
printf("%c", str[i]);
}
}
printf("
");
return 0;
}
函数与指针
(1)程序代码:
#include <stdio.h>
// 计算最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 计算平均值
double average(int a, int b) {
return (a + b) / 2.0;
}
int main() {
int a, b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
// 调用函数
int result_gcd = gcd(a, b);
double result_average = average(a, b);
printf("最大公约数:%d
", result_gcd);
printf("平均值:%f
", result_average);
return 0;
}
(2)程序代码:
#include <stdio.h>
// 交换两个整数的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a, b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
// 调用函数
swap(&a, &b);
printf("交换后的结果:%d %d
", a, b);
return 0;
}
结构体与文件操作
(1)程序代码:
#include <stdio.h>
typedef struct {
int id;
char name[50];
int age;
float score;
} Student;
int main() {
Student stu;
FILE *fp;
// 输入学生信息
printf("请输入学生信息:
");
printf("学号:");
scanf("%d", &stu.id);
printf("姓名:");
scanf("%s", stu.name);
printf("年龄:");
scanf("%d", &stu.age);
printf("成绩:");
scanf("%f", &stu.score);
// 保存到文件
fp = fopen("student.txt", "w");
if (fp == NULL) {
printf("文件打开失败
");
return 1;
}
fprintf(fp, "学号:%d
姓名:%s
年龄:%d
成绩:%.2f
", stu.id, stu.name, stu.age, stu.score);
fclose(fp);
// 从文件中读取学生信息
fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("文件打开失败
");
return 1;
}
fscanf(fp, "学号:%d
姓名:%s
年龄:%d
成绩:%.2f
", &stu.id, stu.name, &stu.age, &stu.score);
printf("读取的学生信息:
");
printf("学号:%d
姓名:%s
年龄:%d
成绩:%.2f
", stu.id, stu.name, stu.age, stu.score);
fclose(fp);
return 0;
}
(2)程序代码:
#include <stdio.h>
typedef struct {
int year;
int month;
int day;
} Date;
// 计算天数差
int days_between_dates(Date date1, Date date2) {
// 这里只做简单处理,不考虑闰年和每个月的天数
return (date2.year - date1.year) * 365 + (date2.month - date1.month) * 30 + (date2.day - date1.day);
}
int main() {
Date date1, date2;
// 输入日期
printf("请输入第一个日期(年 月 日):");
scanf("%d %d %d", &date1.year, &date1.month, &date1.day);
printf("请输入第二个日期(年 月 日):");
scanf("%d %d %d", &date2.year, &date2.month, &date2.day);
// 计算天数差
int days_diff = days_between_dates(date1, date2);
printf("两个日期之间的天数差:%d
", days_diff);
return 0;
}