经典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)// 判断month 是否为1 或2
(
year--;
month += 12;
}
int c = year / 100;
int y = year - c * 100;
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"); break;
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 };
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, dayth); }
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; 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++) {
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", data[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(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[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++)
min = j;
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
4、(1)指针加减:
#include "stdio.h"
#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 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(char str1[], char str2[]); void main() (
int i, j;
char str1[160];
char str2[80];
printf(-请输入第一个字符串:");
gets(strl);
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++;
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];
}
printf("\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() (
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 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 + 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
A: 4, 7, 9
B: 1, 3, 5, 8, 9
变换后
A: 1, 3, 5
B: 4, 7, 8, 9, 9
#include
void ReArranger(int* A, int* 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 B[j - 1] = B[j++]; //寻找A[m-1 ]的插入位置B[j - 1] = x; x = A[m - 1]; 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++) ( scanf_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 6 4 D E F 到3 2 5 #include void main() ( int a, b, c, d, e, f; for (a = 1; a <= 6; a++) for (b = 1; b <= 6; b++) ( if (b == a) continue; for (c = 1; c <= 6; c++) ( if ((c == a) || (c == b)) continue; for (d = 1; d <= 6; d++) ( 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); printf("%d %d\n", b, c); printf("%d %d %d\n", d, e, f); } } } } 11、输入一串字符,升序排序,折半查找其中一字符#include void *sortString(char unsort[], int length) ( for (int i = 0; i < length; i++) ( for (int j = i + 1; j < length; j++) ( if (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("length:%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) printf("该字符在已知字符串中,即在第%d个\n",mid); else printf("该字符不在已知字符串中\n"); 12、100-300和500-700直接索数,m不被2到根号m直接任整除 #include int isprime(int n) { if (n<2) return 0; for (int i = 2; i if (n%i == 0) return 0; return 1; } void main() { int i, k = 0; for (i = 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 #include void main() ( int m, i, k; printf("请输入一个整数:"); scanf_s("%d", &m); k = (int)sqrt(m); for (i = 2; i <= k; i++) if (m%i == 0) break; if (i>k)