(YM学习笔记)数据结构--01C语言综合应用

1.计算1到n的累加和,并输出计算结果,要求写出两种算法并比较算法时间复杂度。

(1)写出时间复杂度分析结果

①、使用高斯方法求解:只需要套公式 n*(n+1)/2,即可一步求解出答案,所以使用高斯方法求解的时间复杂度为:O(1)
②、使用累加的方法求解:该求解方法会使用for循环的语句,循环体为:sum+=i; 因为从1累加到n,所以循环体执行了n次,即使用累加方法求解的时间复杂度为:O(n)

(2)源代码:
#include <stdio.h>
#include <time.h>
void main()
{
	double sum = 0;
	double n = 100000000;
	double i;
	clock_t start1,finish1;
	clock_t start2,finish2;
	double duration1;
	double duration2;
	printf("*********高斯方法开始计算*********\n");
	start1 = clock();
	sum = (1+n)*n/2;
	finish1 = clock();
	duration1 = (double)(finish1-start1)/CLOCKS_PER_SEC;
	printf("使用高斯方法运行时间:%.3f seconds\n",duration1); //0.000s
	printf("sum = %.1lf\n",sum);
	printf("*********高斯方法计算结束*********\n\n");
	printf("*********累加和方法开始计算*********\n");
	start2 = clock();
	for(i=1,sum=0;i<=n;i++){
		sum+=i;
	}
	finish2 = clock();
	duration2 = (double)(finish2-start2)/CLOCKS_PER_SEC;
	printf("使用累加方法运行时间:%.3f seconds\n",duration2); //0.245s
	printf("sum = %.1lf\n",sum);
	printf("*********累加和方法计算结束*********\n");
}
(3)运行截图

在这里插入图片描述

2.练习C语言补充的语法

(1)逐一验证如下错误情况,并改正,请正确的测试程序粘贴到下方。
fun(int r)
{
double s;
s=3.14*r*r;
printf(“圆的面积是%lf”,s);
}
int fun(int r)
{
double s;
s=3.14*r*r;
return s;
}
void fun(int r)
{
double s;
s=3.14*r*r;
return s;
}
void fun(int r)
{
double s;
s=3.14*r*r;
printf(“圆的面积是%lf”,s);
return ;
Printf(“圆的周长是%lf”,2*3.4*r);
}
正确的测试程序粘贴位置
//①、修改后添加void;修改原因:原方法没有返回值,应写void fun(..)
void fun(int r)
{
double s;
s=3.14*r*r;
printf("圆的面积是%lf",s);
}
//②、int改为 double;修改原因:函数返回值类型为double类型
double fun(int r)
{
double s;
s=3.14*r*r;
return s;
}
//③、void 改为 double;修改原因:函数返回值类型为double类型
double fun(int r)
{
double s;
s=3.14*r*r;
return s;
}
//④、去掉return;原因:函数没有返回值。之前的情况会提前结束掉函数,return后面的语句不会执行。
void fun(int r)
{
double s;
s=3.14*r*r;
printf("圆的面积是%lf",s);
printf("圆的周长是%lf",2*3.4*r);
}
(2)练习指针的语法,请在此基础上添加代码修改x值为520,输出x的值,修改x值为1314,输出x的值,要求两次修改值和输出的方法不一样。

在这里插入图片描述

测试源程序与结果截图
#include <stdio.h>
void main(){
	int *p;
	int x = 203;
	p = &x;
	printf("*p=%d\n",x);
	printf("x=%d\n",x);
	*p = 99;
	printf("修改*p的值来间接操作x,x=%d\n",x);
	x = 520; //直接修改int类型变量的值
	printf("x = %d\n",x);
	*p = 1314; //p保存的是x的地址,*p = 1314; 寻址后改变*p的值=修改x的值
	printf("*p(x) = %d\n",*p);

}
结果截图:

在这里插入图片描述

(3)练习结构体的语法,请在此基础上添加代码声明学生stu变量b,并赋值自己的信息,然后输出b的信息。

在这里插入图片描述

测试源程序与结果截图
#include <stdio.h>
#include <string.h>
typedef struct node{
	int num;
	int score;
	char name[30];
}stu;
void main(){
	stu a;
	stu b;
	a.num = 101;
	a.score = 99;
	strcpy(a.name,"周周");
	printf("姓名:%s\n学号:%d\n成绩:%d\n\n",a.name,a.num,a.score);

	b.num = 128;
	b.score = 100;
	strcpy(b.name,"张一铭");
	printf("姓名:%s\n学号:%d\n成绩:%d\n\n",b.name,b.num,b.score);
}
结果截图:

在这里插入图片描述

(4)练习结构体指针的语法,请在此基础上添加代码声明学生stu指针变量c,并赋值自己的信息,然后输出c的信息。

在这里插入图片描述

测试源程序与结果截图
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node{
	int num;
	int score;
	char name[30];
}stu;
void main(){
	stu *p;
	stu *c;

	p = (stu *)malloc(sizeof(stu));
	p->num = 101;
	p->score = 99;
	strcpy(p->name,"周周");
	printf("姓名:%s\n学号:%d\n成绩:%d\n\n",p->name,p->num,p->score);

	c = (stu *)malloc(sizeof(stu));
	c->num = 128;
	c->score = 100;
	strcpy(c->name,"张一铭");
	printf("姓名:%s\n学号:%d\n成绩:%d\n\n",c->name,c->num,c->score);
}
结果截图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值