经典C语言源代码

经典C语言源代码
经典C语言源代码

经典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++)

if (a[j] < a[min])

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(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++;

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()

{

相关主题
相关文档
最新文档