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);
}