c语言 pow优化_C语言自学教程 60天学习

2320ebd75561f978d0c35ec2a2e7b857.png

立fang

学习内容:C语音

学习时间:6.11 - 8.10 (共60天)

学习资料:C Primer Plus 第6版

备注:初学,欢迎共同喜欢C语言一起共同学习,相互交流。后面开始逐渐更新代码,及对代码的理解。


7.21

知识体系大致搭建完成,历时41天。

接下来20天对于C语言中如下几个未掌握好的知识点做进一步的巩固:

数组、指针、对文件操作、二进制 和 链表。

继续加油。

7.18

学C以来写过的最长的程序。

程序目的是每次递增一秒,依次增加分,时,日,月,年。另外对于不同月份不同天数,及平年和闰年在二月的不同天数,用if函数作了判断。但是目前还不知道如何让每次循环间隔一秒?

#include <stdio.h>
#define RunTime 110000

struct dateAndtime* next_minutes(struct dateAndtime* dt);

struct date
{
	int year;
	int month;
	int day;
};

struct time
{
	int hour;
	int minutes;
};

struct dateAndtime
{
	struct date d1;
	struct time t1;
};

int main(int argc, char const *argv[])
{
	struct dateAndtime dt1 = {{2019, 10, 18},{10, 59}};
	struct dateAndtime* p2;
	struct dateAndtime* p = &dt1;

	printf("It's %d年%d月%d日 %d : %d nown",
		dt1.d1.year, dt1.d1.month, dt1.d1.day, dt1.t1.hour, dt1.t1.minutes);

	printf("It's %d年%d月%d日 %d : %d nown",
		p->d1.year, (*p).d1.month, p->d1.day, p->t1.hour, (*p).t1.minutes);

	for (int i = 0; i < RunTime; ++i)
	{
		p2 = next_minutes(p);
		printf("It's %d年%d月%d日 %d : %d nown",
		p2->d1.year, (*p2).d1.month, p2->d1.day, p2->t1.hour, (*p2).t1.minutes);
	}

	return 0;
	
}
struct dateAndtime* next_minutes(struct dateAndtime* dt)
{
	(*dt).t1.minutes += 1;

	int monthday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 , 31};

	if(((((*dt).d1.year % 4 == 0) && ((*dt).d1.year % 100 != 0)) || ((*dt).d1.year % 400 == 0) ))
		monthday[1] = 29;
	else
		monthday[1] = 28;

	if (((*dt).t1.minutes)  == 60 )
	{
		(*dt).t1.hour += 1;
		(*dt).t1.minutes = 0;
	}

	if (((*dt).t1.hour)  == 24)
	{
		(*dt).d1.day += 1;
		(*dt).t1.hour = 0;
	}
	if (((*dt).d1.day) > monthday[(*dt).d1.month - 1])
	{
		(*dt).d1.month += 1;
		(*dt).d1.day = 1;
	}
	if (((*dt).d1.month)  == 13)
	{
		(*dt).d1.year += 1;
		(*dt).d1.month = 1;
	}


	return dt;	
}

7.17

已经学了一大部分了,最近更新得比较少一些,沉迷学习无法自拔哈哈。刚学到结构里面的指针,似乎比数组里面的指针更容易理解一些。(独立写出30行代码了哈哈)

#include <stdio.h>
struct time changetime(struct time t);
struct time* changetimep(struct time* p);

struct time
{
	int hour;
	int mins;
} t1, t2;

int main(void)
{
	struct time* p = &t1;

	(*p).mins = 59;
	p->hour = 9;

	printf("t1 : %d : %dn", t1.hour, t1.mins);

	printf("t3 : %d : %dn",changetime(t1).hour, changetime(t1).mins);

	printf("t1 : %d : %dn", t1.hour, t1.mins);

	printf("*p : %d : %dn", changetimep(p)->hour, changetimep(p)->mins);

	return 0;
}
struct time changetime(struct time t)
{
	struct time t3;
	t3.hour = 8;
	t3.mins = 58;

	return t3;
}
struct time* changetimep(struct time* p)
{
	p->hour = 7;
	p->mins = 57;

	return p;
}

7.2

写了个判断最大值的函数,通过运算符 ?: 来进行的判定,感觉比用条件来判断简洁很多。似乎越来越有意思了呢

int imax(int a, int b, int c)
{
	return (a > b) ? ((a > c) ? a : ((b > c) ? b : c)) : (b > c ? b : (a > c ? a : c));
}

P288 ( 共730页 )

6.25

今天学完了第七章,刚开始学的时候在思考一个问题,如何输入一个字符串,计算并返回其中的单词数量、行数,在动手做的时候遇到了几个问题:

  1. 字符串一直输入没有结束
  2. 不知道怎么来判断行

后面解析看得也比较迷,还要乃至bool值来判断是否在单词中。

以下是第七章编程习题第1题,只用判断空格及换行字符即可,相对比较简单。

/*返回一个字符串中空格、换行字符和其他字符的数量*/
#include <stdio.h>
#include <ctype.h>
#define SPACE ' '
#define LINE 'n'
int main(void)
{
	int sc = 0; //计算空格的数量
	int nc = 0; //计算换行符的数量
	int oc = 0; //计算其它字符的数量
	char ch;

	while ((ch = getchar()) != '|')
	{
		if (ch == SPACE)
			sc++;
		else if (ch == LINE)
			nc++;
		else
			oc++;
	}
	printf("字符串中空格的数量为: %dn"
		"换行符的数量为: %dn 
其它字符的数量为:%dn", sc, nc, oc); /*使用了两种分隔输出内容的方法,活学活用*/

	return 0;
}

明天做完第七章习题,一鼓作气进入第八章的学习。

优化了一下代码,能够在没有偶数或奇数时返回0,如下:(?: 真好用哈哈)

#include <stdio.h>
int main()
{
	int num;
	int oc = 0; //偶数的个数
	int jc = 0; //奇数的个数
	int osum = 0; //偶数的和
	int jsum = 0; //奇数的和

	scanf("%d", &num);
	while (num != 0)
	{
		if (num % 2 == 0)
		{
			oc++;
			osum += num;
		}
		else
		{
			jc++;
			jsum += num;
		}
		scanf("%d", &num);
		
	}
	printf("偶数的个数:%dn偶数的平均值:%.2fn   /*使用了两种分隔输出内容的方法,活学活用*/
奇数的个数:%dn奇数的平均值:%.2fn", 
oc, osum == 0 ? 0 : (float)osum / oc, jc, jsum == 0 ? 0 : (float)jsum / jc);

	return 0;
}

P214 ( 共730页 )

Day6

今天学完了第五章,并完成了第五章的全部练习。

练习题有9个,前面8个顺利完成,最后一个尝试了很多种,程序没有报错,但运行越来之后报错。

在第9题中定义了double类型的数,感觉对于浮点数的输入和输出还存在一些问题。

P137 ( 共730页 )

Day5

感觉对于字符格式化的输入输出还没理解清楚,有太多格式要求,并且在格式化输出时,如果使用错误的转换说明,程序也会按照一定的规律报错。

现在在学习运算符相关知识,后期需要使用到格式化输出时再回头重新学习一遍。

运算符常见的有五种:= + - * /

在C语言中没有指数运算符,需要中pow()函数来实现。

P112 ( 共730页 )

Day3

今天学习了如何定义符号常量

#define NAME value

以及头文件中包含的明示常量

今天学习的内容相对较少,工作比较多,但还是坚持学习了一点,明天一定补上来。

Day2

今天发现昨天下载的VS在C语言上兼容得不太好,正常使用输出函数scanf,运行的时候会报错,并且在一个文件夹下面不能够同时建立多个.c文件,所以每新建一个,就要把上一个文件移除,操作比较麻烦,当然,最主要原因是它会一直报错。

查找了资料,VS上面要使用安全性更高的scanf_s函数输出,但是这样当把源代码移至其它编译器上面有时候也会出现错误,另外其它的编译器上面可以直接用scanf函数输出,所以今天花了将近两个小时更换了编译器。首先安装了MinGW,接着安装了CodeBlocks,都是免费开源的软件,前面一个需要下载完整的安装包,如果在官网下载安装器,网络始终出现错误(需要VPN),后面一个正常下载安装,现在可以正常敲代码了。

今天主要对昨天没有学习完成的数据类型作了学习,并完成了关于数据类型的习题,现在涉及到的内容都是数据之间加减乘除的运算,还算比较简单。

觉得有点复杂的地方是关于浮点数,还没理清。

明天学习字符串相关内容!

Day1

今天学习了C语言的一些概念性东西,以及对于一个标准的C语言程序作了细致的分析;同时还学习了部分关于数据类型方面的知识。

因为C语言的严谨性,所以今天几乎写出来的每个C语言程序在执行时都会出现错误;刚开始学习,头文件stdio.h中包含输出函数 printf(),能做出很多东西出来,但是做不到和用户的交互,每次输出的内容都是固定的,如需修改要重新修改程序的源代码。

C语音在数据类型方面主面包括整数类型和浮点类型,具体在定义变量及输出变量时需要记忆的东西比较多。

明天继续加油!

PS: 今天学习使用的软件如下图,没有专门针对C语言的,但是可以通过新建C++的空项目来新建.c文件,学习前花了一点时间摸索了一下,大概知道了如何写代码,运行代码,感兴趣的朋友可以一起交流哟。

038789262ea25127d9168a487f7036a1.png
Microsoft Visual Studio 2019
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值