1.算算是第几天?(10分)
题目内容:
给定一个日期,数据格式为YYYY-MM-DD,输出这个日期是该年的第几天。
提示:一年十二个月每个月的天数可以作为一维数组的元素
输入格式:
输入代表这个日期的年月日信息,scanf语句中的格式控制串为: "%d-%d-%d"
输出格式:
输出是当年的第几天 printf中的格式控制串为 "%d\n"
输入样例:
2018-9-11
输出样例:
254
时间限制:500ms 内存限制:32000kb
#include <stdio.h>
int main() {
int year, month, day;
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 从输入中读取年月日信息
scanf("%d-%d-%d", &year, &month, &day);
// 判断闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days[2] = 29; // 闰年二月有29天
}
// 计算天数
int totalDays = 0;
for (int i = 1; i < month; i++) {
totalDays += days[i];
}
totalDays += day;
// 输出结果
printf("%d\n", totalDays);
return 0;
}
2.生成指定的数列(10分)
题目内容:
编写程序:编写函数fun,求出a到b之内能被7或者11整除,但不能同时被7和11整除的所有正数,并将他们放在数组中,函数返回这些数的个数。编写main函数,定义一个整型数组,可容纳1000个元素,定义整型变量a,b,输入a,b的值(输入时a小于等于b)并调用函数fun进行求解,最后在main函数中输出所有符合条件的元素。
提示: fun的函数原型为: int fun(int a,int b,int r[ ] ); 其中的r用于存放a,b之间满足条件的所有元素
输入格式:
输入表示范围的两个整数a和b(a<b)
scanf的格式控制串为 "%d%d"
输出格式:
输出满足条件的所有元素
输出每个元素时用格式串"%d", 不同元素间以一个空格分隔,但是最后一个元素之后没有空格,输出后直接换行
输入样例:
1 20
输出样例:
7 11 14
时间限制:500ms内存限制:32000kb
#include <stdio.h>
int fun(int a, int b, int r[]) {
int count = 0;
for (int i = a; i <= b; i++) {
if ((i % 7 == 0 || i % 11 == 0) && !(i % 7 == 0 && i % 11 == 0)) {
r[count] = i;
count++;
}
}
return count;
}
int main() {
int a, b;
int r[1000];
scanf("%d%d", &a, &b);
int count = fun(a, b, r);
for (int i = 0; i < count; i++) {
printf("%d", r[i]);
if (i != count - 1) {
printf(" ");
}
}
printf("\n");
return 0;
}
3.求数组元素的平均值(10分)
题目内容:
定义一个含10个整型元素的一维数组,从键盘上输入10个元素值,求去掉最大值和最小值之后的元素平均值.
输入格式:
用循环控制依次输入10个元素值,scanf语句中的格式控制串为: "%d"
输出格式:
输出平均值, printf中的格式控制串为 "%lf\n"
输入样例:
2 3 4 5 6 2 4 6 4 3
输出样例:
3.833333
时间限制:500ms内存限制:32000kb
#include <stdio.h>
int main() {
int arr[10];
// 输入10个元素值
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
int max = arr[0], min = arr[0], countmax = 1, countmin = 1;
double sum = arr[0];
// 计算最大值和最小值,并统计它们在数组中的出现次数
for (int i = 1; i < 10; i++) {
if (arr[i] > max) {
max = arr[i];
countmax = 1;
} else if (arr[i] == max) {
countmax++;
}
if (arr[i] < min) {
min = arr[i];
countmin = 1;
} else if (arr[i] == min) {
countmin++;
}
sum += arr[i];
}
// 计算去掉最大值和最小值后的元素和,以及剩余元素的数量
double avg = (sum - max * countmax - min * countmin) / (10 - countmax - countmin);
// 输出平均值
printf("%lf\n", avg);
return 0;
}