1、完整word版)经典C语言源代码
经典C语言源代码
1、(1)某年某月某日是星期几
#include
2、 int week = (c / 4) - 2 * c + (y + y / 4) + (13 * (month + 1) / 5) + day - 1; while (week<0) { week += 7; } week %= 7; switch (week) { case 1:printf("Monday\n"); break; case 2:printf("Tuesday\n"); break; case 3:printf("Wednesday\n"); break; case 4:printf("Thursday\n"); bre
3、ak; case 5:printf("Friday\n"); break; case 6:printf("Saturday\n"); break; case 0:printf("Sunday\n"); break; } } return 0; } 1、(2)某年某月某日是第几天(一维数组) #include "stdio.h" void main() { int i, flag, year, month, day, dayth; int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31
4、 }; printf("请输入年/月/日:\n"); scanf_s("%d/%d/%d", &year, &month, &day); 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]; printf("%d/%d/%d是第%d天\n", year, month, day, day
5、th); } 2、30个数中找最小的数及其位置 #include "stdio.h" # define SIZE 30 void main() { int i; float data[SIZE]; int min; printf("请输入%d个浮点数:\n",SIZE); for (i = 0; i < SIZE; i++) { //scanf_s("%f", &data[i]); data[i] = rand() % 30 + 1; printf("%f、", data[i]); } min = 0; for (i = 1;
6、 i < SIZE; i++) { if (data[i] < data[min]) min = i; } printf("最小值是%5.2f,位置是%5d\n", data[min], min); } 3、30个数从小到大排序 (1) #include "stdio.h" # define SIZE 30 void main() { int i,j; float data[SIZE],temp; int min; printf("请输入%d个整型数:\n",SIZE); for (i = 0; i < SIZE; i++) {
7、 scanf_s("%f", &data[i]); } for (i = 0; i < SIZE; i++) { min = i; for (j = i + 1; j < SIZE; j++) if (data[j] < data[min]) min = j; temp = data[min]; data[min] = data[i]; data[i] = temp; } printf("\n排序后的结果是:\n"); for (i = 0; i < SIZE; i++) printf("%5.2f", dat
8、a[i]); } (2)模块化程序(数组名作为函数参数) #include "stdio.h" # define SIZE 5 void accept_array(float a[], int size); void sort(float a[], int size); void show_array(float a[], int size); void main() { float score[SIZE]; accept_array(score, SIZE); printf("排序前:"); show_array(score, SIZE); sort(
9、score, SIZE); printf("排序后:"); show_array(score, SIZE); } void accept_array(float a[], int size) { int i; printf("请输入%d个分数:", size); for (i = 0; i < size; i++) scanf_s("%f", &a[i]); } void show_array(float a[], int size) { int i; for (i = 0; i < size; i++) printf(" %5.2f", a
10、[i]); printf("\n"); } void sort(float a[],int size) { int i, min, j; float temp; for (i = 0; i < SIZE; i++) { min = i; for (j = i + 1; j < SIZE; j++) if (a[j] < a[min]) min = j; temp = a[min]; a[min] = a[i]; a[i] = temp; } } 4、(1)指针加减: #include "stdio.h" #
11、define SIZE 10 void main() { int a[SIZE] = { 1,2,3,4,5,6,7,8,9,10 }; int *pa, i; pa = &a[0]; //pa=a; printf("\n"); for (i = 0; i < SIZE; i++) { printf(" %d", *pa); //printf(" %d", *(pa+1)); pa++; } } (2)指针比较: #include "stdio.h" #define SIZE 10 void
12、main() { int a[SIZE] = { 1,2,3,4,5,6,7,8,9,10 }; int *pa, i; int *qa; pa = qa = &a[0]; printf("请输入%d整型数:",SIZE); for (; pa < qa + SIZE; pa++) scanf_s("%d", pa); for (pa--; qa <= pa; pa--) printf(" %d", *pa); } 5、两字符串相连: #include "stdio.h" #include "string.h" void str_cat
13、char str1[], char str2[]); void main() { int i, j; char str1[160]; char str2[80]; printf("请输入第一个字符串:"); gets(str1); printf("请输入第二个字符串:"); gets(str2); str_cat(str1, str2); puts(str1); } void str_cat(char str1[], char str2[]) { int i, j; i = 0; while (str1[i] != '\0') i+
14、 j = 0; while (str2[j] != '\0') { str1[i] = str2[j]; i++; j++; } str1[i] = '\0'; } 6、二维数组(a,b转置) #include "stdio.h" void main() { int i, j, b[2][3]; int a[3][2] = { {1,2},{3,4},{5,6} }; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) b[i][j] = a[j][i]; } prin
15、tf("\na:\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 2; j++) printf("%5d", a[i][j]); printf("\n"); } printf("\nb:\n"); for(i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf("%5d", b[i][j]); printf("\n"); } } 7、输入一个二维数组并输出(指针) #include "stdio.h" void main() {
16、 int x[2][3]; int i, j; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) scanf_s("%d", *(x + i) + j); putchar('\n'); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf("%d ", *(*(x + i) + j)); putchar('\n'); } } 8、冒泡法排序一个数组 #include "stdio.h" #define size
17、10 void maopao(int a[]); void main() { int a[10]; int i; printf("请输入10个整数:\n"); for (i = 0; i < 10; i++) scanf_s("%d", &a[i]); maopao(a); } void maopao(int a[]) { int i, j, temp; for (i = 0; i < 9; i++) {//进行9轮排序 for (j = 0; j < 9 - i; j++)//每轮进行9-i次交换 { if (a[j] > a[j
18、 + 1]) { temp = a[j]; a[j] = a[j + 1];//大的沉底,小的上浮 a[j + 1] = temp; } } } printf("排序结果:\n"); for (i = 0; i < 10; i++) printf("%4d", a[i]); } 9、 两数组A,B,要求A void ReArranger(int* A, int*
19、B, int m, int n) //A和B是各有m个和n个整数的非降序数组,本算法将B数组元素逐个插入到A中,使A中各元素均不大于B中各元素,且两数组仍保持非降序排列。
{
int x, j, i;
while (A[m - 1]>B[0])
{
x = A[m - 1];
A[m - 1] = B[0]; //交换A[m-1]和B[0]
j = 1;
while (j 20、i = m - 2;
while (i >= 0 && A[i]>x)
A[i + 1] = A[i--]; //寻找B[0]的插入位置
A[i + 1] = x;
}
}
void main() //这里主要介绍算法思想,主函数就简单写了
{
int A[3], B[5], i;
printf("输入第一个数组:");
for (i = 0; i<3; i++) {
scanf_s("%d", &A[i]);
}
printf("\n输入第二个数组:");
for (i = 0; i<5; i++) {
sca 21、nf_s("%d", &B[i]);
}
ReArranger(A, B, 3, 5);
printf("\n输出第一个数组:");
for (i = 0; i<3; i++)
printf("%d ", A[i]);
printf("\n\n");
printf("输出第二个数组:");
for (i = 0; i<5; i++)
printf("%d ", B[i]);
printf("\n");
}
10、符合1+6+3=3+2+5=1+4+5有哪几组
A 1
B C 22、 6 4
D E F到 3 2 5
#include 23、 if ((d == a) || (d == b) || (d == c))
continue;
for (e = 1; e <= 6; e++) {
if ((e == a) || (e == b) || (e == c) || (e == d))
continue;
f = 21 - (a + b + c + d + e);
if ((a + b + d == d + e + f) && (a + b + d == a + c + f)) {
printf(" %d\n", a);
24、
printf("%d %d\n", b, c);
printf("%d %d %d\n", d, e, f);
}
}
}
}
}
}
11、输入一串字符,升序排序,折半查找其中一字符
#include 25、f (unsort[i] > unsort[j]) {
int temp = unsort[j];
unsort[j] = unsort[i];
unsort[i] = temp;
}
}
}
}
void main() {
char s1[50];
gets(s1);
char value;
scanf_s("%c", &value);
printf("s1:%s\n", s1);
printf("value:%c\n", value);
int length = strlen(s1);
printf("le 26、ngth:%d\n", length);
sortString(s1, length);
printf("s1:%s\n", s1);
int start = 0, end = length - 1;
int mid = (end + start) / 2;
while (start <= end&&s1[mid] != value) {
mid = (end + start) / 2;
if (value > s1[mid])
start = mid+1;
else
end = mid-1;
}
if (mid)
print 27、f("该字符在已知字符串中,即在第%d个\n",mid);
else
printf("该字符不在已知字符串中\n");
}
12、100-300和500-700直接素数,m不被2到根号m直接任一整除
#include 28、 100; i <= 300; i++)
if (isprime(i))
{
printf("%3d ", i);
k++;
if (k % 10 == 0) printf("\n");
}
for (i = 500; i <= 700; i++)
if (isprime(i))
{
printf("%3d ", i);
k++;
if (k % 10 == 0) printf("\n");
}
printf("\n");
}
13、判断一个数是否是素数
#include 29、h>
#include 30、bool.h>
bool is5Num(int num) {
int temp = num % 10;
while (temp != 5 && num > 10) {
num = num / 10;
temp = num % 10;
}
if (temp != 5)
return false;
else
return true;
}
void main() {
int num;
printf("输入一个数:\n");
scanf_s("%d", &num);
if (is5Num(num))
printf("含5\n"); 31、
else
printf("不含5\n");
}
15、一个排好序的数组,插入一个数
#include 32、[10] = num;
else {
for (int i = 0; i < 10;i++)
if (num < a[i]) {
for (int j = 9; j >= i; j--)
a[j + 1] = a[j];
a[i] = num;
break;
}
}
printf("插入后数组为:\n");
for (int i = 0; i <= 10; i++)
printf("%3d", a[i]);
printf("\n");
}
16、牛顿迭代法:
#include 33、h>
#include 34、turn;
}
x1 = x0 - func(x0) / func1(x0);//进行牛顿迭代计算
while (!(func1(x1 - x0) < precision || fabs(func(x1)) < precision)) {
x0 = x1;//准备下一次迭代
if (func1(x0) == 0.0)//若通过初值,函数返回值为0
printf("迭代过程中倒数为0!\n");
x1 = x0 - func(x0) / func1(x0);//进行牛顿迭代计算
}
}
void main() {
double x, precis 35、ion;
printf("输入初始迭代值x0:\n");
scanf_s("%lf", &x);
printf("迭代要求的精度:\n");
scanf_s("%lf", &precision);
Newton(x, precision);//若函数返回值为1
printf("该值附近的跟为:%lf\n", x);
getchar();
getchar();
}
17、起始时间到终止时间天数
#include "stdio.h"
void main() {
int start[3], end[3];
printf("请输入开始日期,如19 36、64.2.19:\n");
scanf_s("%d.%d.%d", &start[0], &start[1], &start[2]);
printf("请输入结束日期,如2001.10.20:\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 + 37、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 m 38、onth_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 "stdio.h 39、"
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 40、 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 41、o.h>
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 42、lude 43、
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、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四 44、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
#include 45、ntf("%d\n", j);
break;
}
}
}
24、验证哥德巴赫猜想,即任一个偶数都可以分解为两个素数之和。
#include 46、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 47、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++; 48、
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 49、 i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%-4d", a[i][j]);
printf("\n");
}
}
26、国际象棋棋盘
#include






