9.3
#include<stdio.h>
#include<stdbool.h>
int HasRemainderDays(int year, int month, int day);
bool IsLeapYear(int year);
int main() {
int year, month, day;
printf("请输入年 月 日:");
scanf_s("%d %d %d", &year, &month, &day);
int remainderDays = HasRemainderDays(year, month, day);
printf("%d 月份还有 %d 天!\n", month, remainderDays);
return 0;
}
int HasRemainderDays(int year, int month, int day) {
int remainder;
int arr_days[12] = { 31, 28, 31, 30 , 31, 30, 31, 31 ,30, 31, 30, 31 };
if (IsLeapYear(year)) {
arr_days[1] = 29;
}
for (int i = 1; i <= 12; i++)
{
if (month == i) {
remainder = arr_days[i - 1] - day;
}
}
return remainder;
}
bool IsLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return true;
}
return false;
}
9.4 && 9.5
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
long stringToDecimal(const char* str, int base);
void convertToBaseR(int num, int r);
int main() {
char hexStr[] = "1A3F";
char octStr[] = "123";
char binStr[] = "101010";
printf("十六进制转换成十进制为: %ld\n", stringToDecimal(hexStr, 16));
printf("八进制转换成十进制为: %ld\n", stringToDecimal(octStr, 8));
printf("二进制转换成十进制为: %ld\n", stringToDecimal(binStr, 2));
int num, r;
printf("请输入十进制的整数: ");
scanf_s("%d", &num);
printf("请输入要转化的进制数: ");
scanf_s("%d", &r);
convertToBaseR(num, r);
return 0;
}
long stringToDecimal(const char* str, int base) {
long result = 0;
int multiplier = 1;
int length = strlen(str);
for (int i = length - 1; i >= 0; i--)
{
char ch = tolower(str[i]);
int digit = -1;
if (ch >= '0' && ch <= '9')
{
digit = ch - '0';
}
else if(base == 16 && (ch >= 'a' && ch <= 'f'))
{
digit = ch - 'a' + 10;
}
else if(ch < '0' || (ch > '9' && base !=16) ||(base == 16) && ch > 'f')
{
return 0;
}
if (digit >= base) {
return 0;
}
result += digit * multiplier;
multiplier *= base;
}
}
void convertToBaseR(int num, int r) {
int index = 0;
char result[65];
if (num == 0) {
printf("0\n");
return;
}
while (num > 0)
{
int remainder = num % r;
if (remainder < 10) {
result[index++] = '0' + remainder;
}
else
{
result[index++] = 'A' + (remainder - 10);
}
num = num / r;
}
result[index] = '\0';
for (int i = index; i >= 0; i--)
{
printf("%c", result[i]);
}
printf("\n");
}
9.6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *str;
int length;
printf("请输入字符串的长度: ");
scanf_s("%d", &length);
getchar();
str = (char *)malloc((length + 1) * sizeof(char));
if (str == NULL) {
printf("内存分配失败!\n");
return 1;
}
printf("请输入一个长度为 %d 的字符串: ", length);
fgets(str, length + 1, stdin);
str[strcspn(str, "\n")] = 0;
printf("输入的字符串是: %s\n", str);
free(str);
str = NULL;
return 0;
}
9.7
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("numbers.txt", "r");
if (file == NULL) {
perror("打开文件失败");
return 1;
}
int *array = malloc(sizeof(int) * 10);
if (array == NULL) {
perror("分配内存失败");
fclose(file);
return 1;
}
int size = 10;
int count = 0;
int number;
while (fscanf(file, "%d", &number) == 1) {
if (count == size) {
size *= 2;
int *temp = realloc(array, sizeof(int) * size);
if (temp == NULL) {
perror("扩充内存失败");
free(array);
fclose(file);
return 1;
}
array = temp;
}
array[count++] = number;
}
fclose(file);
printf("读取 %d 个整数:\n", count);
for (int i = 0; i < count; i++) {
printf("%d ", array[i]);
}
printf("\n");
free(array);
return 0;
}