C语言18个经典程序VS2019 源码与展示

C语言18个经典程序VS2019 源码与展示

1、输出9*9乘法口诀表

i控制行,j控制列。

#include<stdio.h>

int main(void)
{
	int i, j;
	for (i = 1; i <= 9; i++)
	{
		for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%-2d ", j,i, i * j);
		}
		printf("\n");
	}
	return 0;
}

运行展示

在这里插入图片描述

2、古典问题:不死神兔的繁衍生息-斐波那契数列

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

兔子的规律为数列1,1,2,3,5,8,13,21…

#include<stdio.h>

int main(void)
{ 
	long s1, s2,sum; 
	int month,i; 
	s1 = s2 = sum=1;
	printf("请输入月数:");
	scanf("%d", &month);
	for (i = 1; i <= month; i++)
	{
		if (i > 2)		//第三个月兔子数量开始增长		
		{		
			sum = s1 + s2;/*前两个月加起来赋值给第三个月*/
			s1 = s2 ; //重新获取前2个月数量
			s2 = sum;		//重新获取前1个月数量	
		}
		printf("%d月份兔子个数为:%ld\n", i, sum);
	}
	return 0;
}
	

在这里插入图片描述

3、判断101-300之间有多少个素数,并输出所有素数及素数的个数。

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

#include<stdio.h>
#include<math.h>
int main(viod)
{
	int i,x;
	int count =  0;
	int flag;
	for (x = 101; x <= 300; x++)
	{
		flag = 1;
		for (i = 2; i <= sqrt(x); i++)
		{
			if (x % i == 0)//如果能整除,就不是素数
			{		
				flag = 0;//标记赋值为0
				break;//跳出本次数字判断循环,进行下一个数的计算
			}
		}
		if (flag)	//	如果为1 则是素数
		{
			printf("%d ", x);
			count++;//统计有多少个素数
		}	
	}
	printf("\n101-300之间素数总共%d个", count);	
	return 0;
}

在这里插入图片描述

4、 找出10000以内的所有完数

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2+3.编程找出 10000 以内的所有完数。

#include<stdio.h>
int main(void)
{
	int i,x,sum;
	for (x =2; x < 10000; x++)//1不属于完全数,所以从2开始
	{
		sum= 1;
		for (i = 2; i <= x/2; i++)
		{
			if(x%i==0)//如果整除则是因数,
				sum += i;//因数相加求和
		}
		if (x == sum)//如果因数求和等于自身就是完全数
			printf("%d ", x);
	}
	return 0;
}

计算出的完全数为 6 28 496 8128
在这里插入图片描述

5、4×4 的数组进行逆时针旋转 90 度后输出,要求原始数组的 数据随机输入,新数组以 4 行 4 列的方式输出,

数组内数字为0-99的随机数

#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main(void)
{
	int a[4][4],b[4][4];//定义2个4*4的数组
	int i, j;//行列变量
	srand((unsigned)time(NULL));//随机数种子
	printf("原始a数组:\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			a[i][j] = rand()%100;//随机生成0-99的数字填充数组
			printf("%2d ", a[i][j]);
		}
		printf("\n");
	}

	printf("变换后b数组:\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			b[i][j] = a[j][3-i];//进行逆时针旋转
			printf("%2d ", b[i][j]);
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

6、 打印杨辉三角形

#include<stdio.h>
int main(void)
{
	int i, j,x;
	int a[6][6] = {0};//初始化6*6的数组
	for (i = 0; i < 6;i++)//生成杨辉三角
	{		
		a[i][0] = 1;
		a[i][i] = 1;
		for (j = 1; j <= i;j++)
		{
			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
		}
	}

	for (i = 0; i < 6; i++)//打印杨辉三角
	{
		for (x = 0; x < (6-i-1); x++)
		{
			printf("  ");//空格补齐位置
		}
		for (j = 0; j <= i; j++)
		{
			printf("%3d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

7、通过键盘输入 3 名学生 4 门课程的成绩, 分别求每个学生的平均成绩和每门课程的平均成绩。

要求所有成绩均放入一个 4 行 5 列的数组中,输入时同一人数据间用空格,不同人用回车 其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均

#include<stdio.h>
int main(void)
{
	int n,i;
	float sum;
	float a[4][5];
	printf("请输入学生姓名和成绩:\n");
	for (n = 0; n < 3; n++)
	{
		sum = 0;
		for(i=0;i<4;i++)
		scanf("%f", &a[n][i]);//输入成绩
		for (i = 0; i < 4; i++)
			sum += a[n][i];
		a[n][4] = sum / 4;//每行最后一列为该学生成绩平均值	
	}
	for (i = 0; i < 5; i++)//最后一行为该科目成绩平均值
	{
		a[3][i]= (a[0][i] + a[1][i] + a[2][i] ) / 3;
	}
	printf("学生成绩单为:\n");
	for (n = 0; n < 4; n++)//打印成绩单
	{
		for (i = 0; i < 5; i++)
		{
			printf("%.2f ", a[n][i]);
		}
		printf("\n");
	}		
	return 0;
}

在这里插入图片描述

8、实现将输入的字符串反序输出

如输入 windows 输出 swodniw

#include<stdio.h>
#include<string.h>
int main(void)
{
	char str[10];
	int len,i;
	printf("请输入字符串:");
	scanf("%s", str);
	len = strlen(str);
	for (i = 0; i < len; i++)
	{
		printf("%c", str[len - i-1]);//倒序打印
	}

	return 0;
}

在这里插入图片描述

9、从字符数组s中删除存放在c中的字符。

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	char s[100], c;
	int i,k;
	printf("请输入一个字符串:");
	scanf("%s", s);
	getchar();
	//gets(s);
	printf("请输入一个字符:");
	c = getchar();
	for (i =k= 0; s[i] != '\0'; i++)
	{
		if (s[i] != c)
			s[k++] = s[i];		//如果不等于c里的字符 就进行赋值
	}
	s[k] = '\0';//末尾补上\0
	printf("处理后字符串为%s\n", s);

	system("pause");
	return 0;
}

在这里插入图片描述

10、 数组排序程序

编写一个 void sort(int *x,int n)实现将 x 数组中的 n 个数据从大到小 排序。 n 及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件 p9_1.out 中

#include<stdio.h>
#include<stdlib.h>

void BubbleSort(int* x, int n)//我这里用的冒泡排序
{
	int i,j,tmp;
	for (j = 0; j < n; j++)
	{
		for (i = 0; i < n-j; i++)
		{
			if (x[i] < x[i + 1])
			{	//交换数据
				tmp = x[i];
				x[i] = x[i + 1];
				x[i + 1] = tmp;
			}
		}
	}	
}

int main(void)
{
	int i, a[10];
	printf("请输入10个数字:");
	for (i = 0; i < 10; i++)
		scanf("%d", &a[i]);	
	BubbleSort(a, 10);

	FILE* fp;
	fp = fopen("p9_1.out", "w");
	for (i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
		fprintf(fp, "%d ", a[i]);
	}
	fclose(fp);
	return 0;
}

在这里插入图片描述

11、有序数组插入程序

已知数组 a 中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数 组 a 中,插入后,数组 a 中的元素仍然由小到大顺序排列

#include<stdio.h>

int main()
{
	int a[10] = { 1,3,4,5,25,29,40 }; /*a[0]为工作单元,从 a[1]开始存放数据*/
	int x, i;
	int len = 6;//数组长度0-6
	printf("请输入一个整数:");
	scanf("%d", &x);
	for (i = len; i >= 0; i--)
	{
		if (x <= a[i])
			a[i + 1] = a[i];
		else
		{
			a[i + 1] = x;
			break;
		}		
	}
	for (i = 0; i <= 7; i++)
		printf("%d ", a[i]);

	return 0;
}

输入26后,排序后输出新的数组
在这里插入图片描述

12、编写函数 replace(char *s,char c1,char c2)实现将 s 所指向的字符串中所有字符 c1 用 c2 替换

字符串、字符 c1 和 c2 均在主函数中输入,将原始字符串和替换后的字符串显
示在屏幕上,

#include<stdio.h>
#include<assert.h>
replace(char* s, char c1, char c2)//替换函数
{
	assert(s);
	int i;
	for (i = 0; s[i] != '\0'; i++)//这个用\0是字符,所有用单引号,不能用双引号
	{
		if (s[i] == c1)//如果等于C1则替换为C2
			s[i] = c2;
	}
}

int main()
{
	char c1, c2;
	char s[100] ;
	printf("请输入字符串");
	scanf("%s", &s);
	getchar();
	printf("请输入被替换的字符");
	scanf("%c", &c1);
	getchar();
	printf("请输入替换的字符");
	scanf("%c", &c2);
	replace(s, c1, c2);
	printf("%s", s);
	return 0;
}

在这里插入图片描述

13、在一个字串 s1 中查找一子串 s2

在一个字串 s1 中查找一子串 s2,若存在则返回子串在主串中的起始位置
,不存在则返回-1。

#include<stdio.h>
#include<string.h>
int strSearch(const char* str1, const char* str2)
{
	int sp1, sp2, sp, s1len, s2len;
	s2len = strlen(str2);	
	for (sp1 = 0; str1[sp1] != '\0'; sp1++)//我用的是for循环,也可以用while
	{
		sp = sp1;
		for (sp2 = 0; str2[sp2] != '\0'; )//如果不是'\0'就继续循环
		{
			if (str1[sp] == str2[sp2])//如果两个相等就比较下一个
			{
				sp++;
				sp2++;
			}
			else
				break;//如果出现不相等就跳出本层循环。
		}
		if (sp2 == s2len)//如果比较的长度等于str2的长度,就说明全部比较完了,符合包含的条件,返回此时str1的位置
			return sp1;
	}
	return -1;
}


int main()
{
	char s1[100] ;
	char s2[100];	
	printf("输入第一个字符串:");
	scanf("%s", &s1);
	printf("输入第2个字符串:");
	scanf("%s", &s2);
	printf("%d", strSearch(s1, s2));
	return 0;
}

在这里插入图片描述

14、用指针变量输出结构体数组元素

#include<stdio.h>
#include<stdlib.h>

struct student
{
	int num;
	char* name;
	char sex;
	int age;
};
struct student stu[5] = { {1001,"lihua",'F',18},
	{1002,"liuxing",'M',19},
	{1003,"huangke",'F',19},
	{1004,"fengshou",'F',19},
	{1005,"Wangming",'M',18}};

int main(void)
{
	//int i;
	struct student* ps;
	printf("Num \tName\t\t\tSex\tAge\t\n");
	/*用指针变量输出结构体数组元素。 */
	for (ps = stu; ps < stu + 5; ps++)
		printf("%d\t%-10s\t\t%c\t%d\t\n",ps->num,ps->name,ps->sex,ps->age);
	/*用数组下标法输出结构体数组元素学号和年龄。 */
	/*for (i = 0; i < 5; i++)
		printf("%d\t%d\t\n",stu[i].num,stu[i].age);*/
	system("pause");
}

在这里插入图片描述

15、建立一个有三个结点的简单链表

#include<stdio.h>
#include<stdlib.h>

struct student
{
	int num;
	char* name;
	int age;
	struct student* next;
};

void main(void)
{
	struct student a, b, c, * head, * p;
	a.num = 1001; a.name = "lihua"; a.age = 18; /* 对结点成员进行赋值 */
	b.num = 1002; b.name = "liuxing"; b.age = 19;
	c.num = 1003; c.name = "huangke"; c.age = 18;
	head = &a; /* 建立链表, a 为头结点 */
	a.next = &b;
	b.next = &c;
	c.next = NULL;//c为结尾,next为NULL

	p = head; /* 输出链表 */
	do 
	{
		printf("%5d,%s,%3d\n", p->num, p->name, p->age);
		p = p->next;
	} while (p != NULL);
	system("pause");
}

在这里插入图片描述

16、输入一个字符串,判断其是否为回文

回文字符串是指从左到右读和从右到左读
完全相同的字符串。

#include<stdio.h>
#include<string.h>

int main(void)
{
	char str[100];
	int i, j,n;
	printf("请输入一个字符串");
	scanf("%s", &str);
	n = strlen(str);
	for (i = 0, j = n - 1; i < j; i++, j--)
	{
		if (str[i] != str[j])
			break;	
	}
	if (i >= j)
		printf("是回文字符串");
	else
		printf("不是回文字符串");
	return 0;
}

在这里插入图片描述

17、冒泡排序算法

从小到大,排序后结果输出到屏幕及文件 myf2.txt

//冒泡算法
#include<stdio.h>
void bubbleSort(int a[], int n)
{
	int i, j, t;
	for (i = 0; i <= n - 1; i++)
	{
		for (j = 0; j < i; j++)
		{
			if (a[j] > a[j + 1])
			{
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}		
	}		
}

int main(void)
{
	int a[10] = { 1,5,7,8,96,4,10,48,2,46 }, n = 10, i;
	bubbleSort(a, 10);
	FILE* f;
	if ((f = fopen(" myf2.txt", "w")) == NULL)
		printf("open file  myf2.txt failed!\n");
	
	for (i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
		fprintf(f, "%d ", a[i]);
	}
	fclose(f);
	//system("pause");
}

在这里插入图片描述

18、计算pi的大小

在这里插入图片描述

#include<stdio.h>
double countpi(double eps) /*eps 为允许误差*/
{
	int m = 1;
	double temp = 1.0, s = 0;
	while (temp >= eps)//当每一项大于误差时则继续计算
	{
		s += temp;
		temp = temp * m / (2 * m + 1);
		m++;
	}

	return(2 * s);
}

main()
{
	FILE* fp;
	double eps = 1e-5, pi;
	if ((fp = fopen("p7_3.out", "w")) == NULL)
	{
		printf("cannot open the file\n");
		//exit(0);
	}
	pi = countpi(eps);
	printf("pi=%lf\n", pi);
	fprintf(fp, "pi=%lf\n", pi);
	fclose(fp);
	//system("pause");
}

在这里插入图片描述

  • 63
    点赞
  • 502
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值