c语言程序设计第五版经典重点程序

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给他薯条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值