经典C语言源代码
1、(1)某年某月某日是星期几
#include<>
int main()
{
int year, month, day;
while (scanf_s("%d%d%d", &year, &month, &day) != EOF)
{
if (month == 1 || month == 2)d.%d", &start[0], &start[1], &start[2]);
printf("请输入结束日期,如:\n");
scanf_s("%d.%d.%d", &end[0], &end[1], &end[2]);
int sum = 0;
for (int mid = start[0]; mid < end[0]; mid++) {
if ((mid % 400 == 0) || (mid % 4 == 0 && mid % 100 != 0)) { sum = sum + 366;
}
else
sum = sum + 365;
}
sum = sum - indexday(start[0],start[1],start[2]) +
indexday(end[0],end[1],end[2]);
printf("在%d.%d.%d-%d.%d.%d之间有%d天\n",
start[0],start[1],start[2],end[0],end[1],end[2], sum);
}
int indexday(int year, int month, int day) {
int i, flag, dayth;
int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
dayth = day;
flag = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
if (flag)
month_day[2] = 29;
for (i = 1; i < month; i++)
dayth = dayth + month_day[i];
return dayth;
}
18、递归求1*1+2*2+3*3+n*n
#include ""
long Element(int n) {
if (n == 1)
return 1 * 1;
else
return Element(n - 1) + n*n; }
void main() {
int n;
printf("请输入n的值:\n");
scanf_s("%d", &n);
printf("所求值为%d\n", Element(n));
}
19、最大公约数(辗转相除)
#include<>
void main() /* 辗转相除法求最大公约数*/
{
int m, n, a, b, t, c;
printf("Input two integer numbers:\n");
scanf_s("%d%d", &a, &b);
m = a; n = b;
while (b != 0) /* 余数不为0,继续相除,直到余数为0 */ {
c = a%b; a = b; b = c;
}
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n / a); }
20、杨辉三角
#include<>
void main()
{
int i, j, n, k;
printf("Enter n:"); scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
k = 1;
for (j = 1; j
{
printf("%3d", k);
k = k*(i - j) / j;
}//每次要打印的下一个数等于前一个数乘以其所在行数和列数的差再除以其列数
printf("%3d", k);
printf("\n");
}
}
21、约瑟夫
#include <>
void main()
{int n, m, i, s=0;
printf ("Enter n: m: ");
scanf("%d%d", &n, &m);
for (i=2; i<=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1); }
22、斐波拉契
#include<>
void main()
{
long f, f1, f2; int i, n;
printf("Enter n : ");
scanf_s("%d", &n);
f1 = 1;
f2 = 1;
printf("%10d%10d", f1, f2);
for (i = 1; i <= n; i++)
{
f = f1 + f2;
printf("%10d", f);
f1 = f2; f2 = f;
if (i % 10 == 0)
printf("\n");
}
}
23、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
#include<>
main()
{
int i, m, j, k, count;
for (i = 4; i<10000; i += 4)
{
count = 0;
m = i;
for (k = 0; k<5; k++)
{
j = i / 4 * 5 + 1;
i = j;
if (j % 4 == 0)
count++;
else break;
}
i = m;
if (count == 4) {
printf("%d\n", j);
break;
}
}
}
24、验证哥德巴赫猜想,即任一个偶数都可以分解为两个素数之
和。
#include <>
int isprime(int);
void even(int);
void main()
{
int a;
printf("请输入一个偶数:");
scanf_s("%d", &a);
if (a % 2 == 0)
even(a);
else
printf("%d 不是偶数!\n"); }
void even(int x)
{
int i;
for (i = 2; i <= x / 2; i++)
if (isprime(i) && isprime(x - i))
{
printf("%d=%d+%d\n", x, i, x - i); return;
}
}
int isprime(int a)
{
int i;
for (i = 2; i <= a / 2; i++)
if (a%i == 0)
return 0;
return 1;
}
25、魔方阵
#include <>
#define N 20
void main()
{
int a[N][N] = { 0 }, i, j, k, n;
do
{
printf("请输入魔幻方的阶数n(n<%d):", N);
scanf_s("%d", &n);
}
while (n <= 0 || n >= N || n % 2 == 0);
i = n + 1;
j = n / 2 + 1;
a[1][j] = 1; //将1放在第一行中间一列
for (k = 2; k <= n*n; k++)/*从2开始直到n*n各数依次按一下规则存放:每一个数存放的行比前一个数的行数减1,列数加1*/ {
i--; j++;
if (i<1 && j>n)
{
i += 2; j--;
}
else {
if (i < 1) i = n; //如果上一个数的行数为1,则下一个数的行数为n
if (j > n) j = 1;
}//当上一个数的列数为n时,下一个数的列数应为1,行数减去1
if (a[i][j] == 0)a[i][j] = k;/*如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。*/
else { i += 2; j--; a[i][j] = k; }
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%-4d", a[i][j]);
printf("\n");
}
}
26、国际象棋棋盘
#include <>
#include <>
void main() {
int i, j;
SetConsoleOutputCP(437); //显示大于127的asc码for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
if ((i + j) % 2 == 0)
printf("%c%c", 219, 219);
else
printf(" ");
}
printf("\n");
}
}