导语
一些小demo,适合新手学习。
测试平台:Visual Studio 2017
最大公约数与最小公倍数
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int gcd(int a, int b)//最大公约数
{
int x = 0, t = 0;
if (a < b)
{
x = b;
b = a;
a = x;
}
while (a % b != 0)
{
t = a % b;
a = b;
b = t;
}
return b;
}
int lcm(int a, int b)//最小公倍数
{
int c = 0;
c = a * b / gcd(a, b);
return c;
}
int main()
{
int a, b;
printf("输入两个数:");
scanf("%d%d", &a, &b);
printf("它们的最小公倍数数:%d\n", lcm(a, b));
printf("它们的最大公约数:%d", gcd(a, b));
getchar();
getchar();
return 0;
}
运行结果:
字符串连接
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
int main()
{
char s1[100], s2[100];
int i = 0, x, j = 0;
printf("字符串拼接\n");
printf("请输入第一个字符串:");
gets_s(s1);
printf("请输入第二个字符串:");
gets_s(s2);
while (1)
{
if (s1[i] == '\0')
{
x = i;
break;
}
i++;
}
i = 0;
while (s2[i] != '\0')
{
s1[x] = s2[i];
x++;
i++;
}
s1[x] = '\0';
puts(s1);
system("pause");
}
运行结果:
找素数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int a[1000], count = 0, num;
float b;
for (int i = 101; i < 1000; i++)
{
b = sqrt(i);
for (int j = 2; j < b; j++)
{
num = 0;
if (i %j == 0)//能被整除就执行
{
break;//是
}
else num = 1;//否
}//数组计数器
if (num) //否则
{
a[count] = i;
count++;
}
}
for (int f = 0; f < count; f++)
{
printf("%4d", a[f]);
if ((f + 1) % 5 == 0) printf("\n");
}
system("pause");
return 0;
}
运行结果(部分):
#简单约瑟夫环
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i = 0, j = 0, n = 0, a[100] = { 0 };//约瑟夫问题
printf("请输入玩游戏的人数:");
scanf("%d", &n);
while (i < n)
{
if (a[i] == 1)
{
i++;
if (i == n) i = 0;
continue;
}
else
{
j++;
if (j == 3)
{
printf("第%d个人被杀死!\n", i + 1);
a[i] = 1;
j = 0;
}
}
i++;
if (i == n) i = 0;
}
system("pause");
return 0;
}
运行结果:
判断一个数是否是水仙花数
#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int zs(int n)
{
int a, b, c, x;
a = n / 100;
b = n % 100 / 10;
c = n % 10;
x = a * a*a + b * b*b + c * c*c;
if (x == n) return 1;
else return 0;
}
int main()
{
int n, x = 1;
printf("请输入一个整数:");
scanf("%d", &n);
x = zs(n);
printf("%d\n", x);
system("pause");
return 0;
}
运行结果:
银行排队
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 10
struct cust
{
char id[N + 1];
struct cust *next;
};
int main()
{
int num = 0,i=0;
char c,b[3];
struct cust customer;
cust *p = NULL, *tmp = NULL, *head = NULL;
printf("请输入排队的人数:");
scanf("%d", &num);
while(i<num)
{
printf("请输入客户ID:");
tmp = (cust*)malloc(sizeof(struct cust));
tmp->next = NULL;
scanf("%s", tmp->id);
if (p == NULL)
{
p = tmp;
head = p;
}
else
{
p->next = tmp;
p = tmp;
}
i++;
}
p = head;
do
{
printf("%s\n", p->id);
p = p->next;
} while (p != NULL);
system("pause");
return 0;
}
运行结果:
斐波拉契数列
#include <stdio.h>
#include<stdlib.h>
int mm(int n)//斐波拉契数列
{
if (n == 1 || n == 2)
return 1;
return mm(n - 1) + mm(n - 2);
}
int main()
{
int n = 0;
printf("输入斐波拉契数的那一项:");
scanf("%d", &n);
printf("%d\n", mm(n));
system("pause");
return 0;
}
运行结果:
一个简单的菜单
#include <stdio.h>
#include <stdio.h>
#include <time.h>
#include <malloc.h>
int main()
{
char key;
printf("********************************\n");
printf("*A.查看9*9乘法表 *\n");
printf("*B.请输入10个数,我帮你找大小 *\n");
printf("*C.十进制转换为二进制 *\n");
printf("*D.请输入10个数,我帮你大小顺序*\n");
printf("*O.退出程序 *\n");
printf("********************************\n");
printf("请输入你的选择:");
while (1)
{
key = getchar();
switch (key)
{
case 'A'://查看9*9乘法表
{
int i = 0, a = 1, b, c = 2;//case 1
printf("\n");
for (i = 1; i < 10; i++)
{
for (b = 1; b < c; b++)
{
printf("%d*%d=%d", a, b, a*b);
if (a*b >= 10) printf(" ");
else printf(" ");
}
printf("\n");
a++;
c++;
}
printf("\n*******************************************************");
printf("\n\n请再次输入你的选择:");
break;//具体操作
}
case 'B'://请输入10个数,我帮你找大小
{
float eq;
int num[10];// = { 1,2,3,88,5,6,7,8,9,10 };
int max, min, total = 0, i;//case 2
printf("请输入10个数:");
for (i = 0; i < 10; i++)
scanf_s("%d", &num[i]);
max = min = num[0];
for (i = 1; i < 10; i++)
{
if (max < num[i]) max = num[i];
if (min > num[i]) min = num[i];
total += num[i];
}
eq = total / 10;
printf("最大:%d 最小:%d 平均:%.2f", max, min, eq);//具体功能
printf("\n*******************************************************");
printf("\n\n请再次输入你的选择:");
break;
}
case 'C'://十进制转换为二进制
{
int num = 0, tran[20], i = 0, mid;//case 3
printf("请输入一个十进制数:");
scanf_s("%d", &num);
while (i < 20)
{
tran[i] = num % 2;
mid = num / 2;
num = mid;
if (num == 0) break;
i++;
}
printf("它的二进制数是:");
while (i >= 0)
{
printf("%d", tran[i]);
i--;
}//具体功能
printf("\n*******************************************************");
printf("\n\n请再次输入你的选择:");
break;
}
case 'D'://冒泡排序
{
int i, j = 9, n = 0, mid = 0;
int num[10];
printf("请输入10个数:");
for (int k = 0; k < 10; k++)
scanf_s("%d", &num[k]);
for (j; j >= 0; j--)//第二轮 j=3
{
for (int i = 0; i < j; i++)
{
if (num[i] < num[i + 1])
{
mid = num[i + 1];
num[i + 1] = num[i];
num[i] = mid;
}
}
}
for (int k = 0; k < 10; k++)
printf("%4d", num[k]);
printf("\n*******************************************************");
printf("\n\n请再次输入你的选择:");
//具体功能
break;
}
case 'O'://结束
goto bj;
}
}
bj:return 0;
}
运行结果:
简单的结构体运用
#include <stdio.h>
#include<stdlib.h>
int main()
{
int n;
struct student
{
int num;
char name[10];
char sex[10];
int age;
char major[10];
}stu[20];
printf("请输入学生个数:");
scanf("%d", &n);
printf("请输入学生信息:\n");
printf("学号 名字 性别 年龄 专业 \n");
for (int i = 0; i < n; i++)
scanf("%d%s%s%d%s", &stu[i].num, &stu[i].name, &stu[i].sex, &stu[i].age, &stu[i].major);
printf("学号 名字 性别 年龄 专业 \n");
for (int i = 0; i < n; i++)
printf("%-8d%8s%8s%10d%14s\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].major);
system("pause");
return 0;
}
运行结果: