1.最大公因数最小公倍数
#inlude<stdio.h>
int main()
{
int a=0, b=0, total=0, r=0;
scanf("%d%d",&a,&b);
total = a * b;
while (a != b)
{
r = (a > b) ? (a -= b) : (b -= a);
}
printf("最大公因数为:%d\n最小公倍数为:%d\n", r, total / r);
return 0;
}
2.统计一行字符中的英文、数字、空格、其他个数
#include <stdio.h>
int main()
{
int eng = 0, spa = 0, mat = 0, oth = 0;
char a;
while ((a = getchar()) != '\n')
{
if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z')
eng++;
else if (a == ' ')
spa++;
else if (a >= '0' && a <= '9')
mat++;
else
oth++;
}
printf("英文有:%d个,空格有%d个,数字有%d个,其他字符有%d个", eng, spa, mat, oth);
return 0;
}
3.判断从键盘输入的一串字符中有多少个单词
#include <stdio.h>
int main()
{
int i = 0, s = 0;
char a[999];
gets(a);
while (a[i] != '\0')
{
if (a[i] == ' ' || a[i + 1] == '\0')
s++;
i++;
}
printf("有%d个单词",s);
return 0;
}
4.选择排序(使用函数)
#include <stdio.h>
void Px(int* p, int sz)
{
int i = 0, j = 0, temp;
for(i=0;i<sz;i++)
{
for (j = i+1; j < sz ; j++)
{
if (p[i] < p[j])
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
int main()
{
int a[] = {12,18,16,15,14,20,35,67,82,51};
int sz = sizeof(a) / sizeof(a[1]);
Px(a, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%2d ", a[i]);
}
return 0;
}
5.冒泡排序
#include <stdio.h>
int main()
{
int a[] = {12,18,16,15,14,20,35,67,82,51};
int sz = sizeof(a) / sizeof(a[0]);
int i, j, t;
for (i = 0; i <sz; i++)
{
for (j = 0; j < sz-1- i; j++)
{
if (a[j] < a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for (i = 0; i < sz; i++)
{
printf("%2d ", a[i]);
}
return 0;
}
6.一维数组逆序输出(使用函数)
#include <stdio.h>
void Px(int* p, int sz)
{
int left = 0;
int right = sz-1;
int t;
while (left < right)
{
t = p[left];
p[left] = p[right];
p[right] = t;
left++;
right--;
}
}
int main()
{
int a[] = {12,18,16,15,14,20,35,67,82,51};
int sz = sizeof(a) / sizeof(a[1]);
Px(a, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%2d ", a[i]);
}
return 0;
}
7.往一个有序数组中插入一个元素并排序
//第一步找出需要插入的元素应该插再哪个位置;
//第二步把要插入元素之后的元素往后挪一位空出位置;
//第三步在空出来的位置插入元素。
//注意:如果插入的元素比原数组的元素都要大,则直接在end+1的位置插入,下面的代码巧妙解决了这个问题;
// 如果插入的元素比原数组的元素都要小,则要注意end会走到-1的位置,而数组的下标最小为0,这会造成
// 数组越界,因此在循环里要加上end>=0,防止数组越界。
#include <stdio.h>
int main()
{
int a[6] = { 1,2,3,5,6 };
int k = 4,i;//要插入的元素
int end = 4;//数组最后一个元素的下标
for (i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
while (k < a[end] && end>=0)
{
a[end + 1] = a[end];//把要插入元素之后的元素往后挪一位空出位置
end--;
}
a[end + 1] = k;//上面循环导致end位置指在了要插入元素之前的一个元素,所以+1指到end的位置再赋值。
for (i = 0; i < 6; i++)
{
printf("%d ", a[i]);
}
return 0;
}
8.水仙花数
#include <stdio.h>
int main()
{
int i = 0;
int g, s, b;
for (i = 100; i < 1000; i++)
{
b = i /100;
s = i % 100 / 10;
g = i % 100 % 10;
if ((b * b * b + s * s * s + g * g * g) == i)
{
printf("%d ", i);
}
}
return 0;
}
9.(0—100)的素数
#include<stdio.h>
int main()
{
int i,j;
for (i = 0; i < 100; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)//若能整除则不是素数,就跳出内存循环,去判断下一个数是否为素数。
break;
}
if (j == i)//当j经过一论整除都没有被整除则就是素数,给出这个判断条件
printf("%d ", i);
}
return 0;
}
10.杨辉三角形
#include <stdio.h>
int main()
{
int a[10][10] ;
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j <= i; j++)
{
if (i == j || j == 0)
{
a[i][j] = 1;
}
else
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
for (i = 0; i < 10; i++)
{
for (j = 0; j <= i; j++)
{
printf("%2d ", a[i][j]);
}
printf("\n");
}
return 0;
}
11.斐波拉契数
// 斐波拉契数通项公式: ----- n<=2 1 (n大于等于2时,斐波拉契数为1)
// |
// Fib(n) | 【n表示第几个斐波拉契数】
// |
// ----n > 2 Fib(n - 1) + Fib(n - 2) (n大于2时,斐波拉契数为前两数之和)
#include <stdio.h>
int Fib(int x)
{
int a = 1, b = 1, c = 1;
while (x > 2)
{
c = a + b;//前两个数相加等于第三个数
a = b;//把a向后移动一位,用于下一个斐波拉契数的加数
b = c;//把b向后移动一位,用于下一个斐波拉契数的加数
x--;
}
return c;
}
int main()
{
int n = 10;//求第十个斐波拉契数
int a=Fib(n);
printf("%d", a);
return 0;
}
12.结构体程序
//%s 打印字符串 %d 打印十进制整数 %lf打印双精度浮点型 %f打印单精度浮点型
//三个printf输出的结果一样。
#include <stdio.h>
//创建一个学生类型
struct Stu
{
char name[20];//名字
int age;//年龄
double score;//成绩
};
int main()
{
struct Stu s = { "张三",20,92.5 };//结构体的创建与初始化
printf("%s %d %lf\n",s.name,s.age,s.score);
struct Stu * p = &s;//创建学生类结构体指针指向学生类结构体
printf("%s %d %lf\n",(*p).name,(*p).age,(*p).score);//(*p)解引用指针,然后取出结构体成员
printf("%s %d %lf\n", p->name, p->age,p->score);//直接使用指针指向结构体成员
return 0;
}
13.枚举类型
#include <stdio.h>
enum color//定义一个枚举类型,名为color
{
red,//0
yellow,//1 //(定义三个枚举成员,用逗号隔开。实际上,enum常量是int类型的。
black,//2 所以这三个成员的值分别是0,1,2。但是可以在创建时指定值。
};// 如:red=5;则在主函数中输出时,red就为5。)
int main()
{
//red=15; //错误语句,枚举类型的值是常量,不能修改 。
printf("%d,%d,%d\n", red, yellow, black);//输出结果为0,1,2
int a=black;
printf("%d",a); //输出结果为2
return 0;
}
14.文件读写程序
#include<stdio.h>
//将a文件内容写到b文件中。
int main()
{
FILE* fp1;//定义文件流指针,用于打开读取的文件
FILE* fp2;//定义文件流指针,用于打开写操作的文件
char text[1024];//定义一个字符串数组,用于存储读取的字符
fp1 = fopen("d:\\a.txt", "r");//只读方式打开文件a.txt
fp2 = fopen("d:\\b.txt", "w");//写方式打开文件a.txt
while (fgets(text, 1024, fp1) != NULL)//逐行读取fp1所指向文件中的内容到text中
{
puts(text);//输出到屏幕
fputs(text, fp2);//将内容写到fp2所指向文件中
}
fclose(fp1);//关闭文件a.txt,有打开就要有关闭
fclose(fp2);//关闭文件b.txt
}