明解C语言中级篇第二章练习

练习2-1

#include<stdio.h>
#include<time.h>

int sleep(unsigned long x)
{
	clock_t c1=clock();
	clock_t c2;
	do
	{
		if ((c2 = clock()) == (clock_t)-1)
			return 0;
	} while ( ( 1000.0 * ( c2-c1 ) / CLOCKS_PER_SEC ) <x);
	return 1;
}

int main()
{
	int i;
	clock_t c;
	for  ( i = 10;  i > 0;  i-- )
	{
		printf("\r%2d",i);
		sleep(1000);
	}
	printf("\r \a FIRE!!\n");
	c = clock();

	printf("程序运行了%d个时钟数\n",c);//注意clock()函数的返回值是时钟数
	printf("程序运行了%.1f秒\n",(double)c/CLOCKS_PER_SEC);//秒 单位需要  c/CLOCKS_PRE_SEC
}

练习2-2

/*****************************************/
//练习2-2
//从字符串开头逐一显示字符串
//函数 结构为  void gput(const char *s,int speed)
/*****************************************/
#include<stdio.h>
#include<time.h>
#include<string.h>

/*sleep函数  函数持续占用CPU,以达到延迟效果*/
int sleep(unsigned long x)
{
	clock_t c1 = clock();
	clock_t c2;
	do
	{
		if ((c2 = clock()) == (clock_t)-1)
			return 0;
	} while ((1000.0 * (c2 - c1) / CLOCKS_PER_SEC) < x);
	return 1;
}

/*gput函数 从字符串开头逐一显示字符*/
void gput(const char *s, int speed)
{
	for (int  i = 0; i < (int)strlen(s); i++)
	{
		putchar('\r');
		putchar(s[i]);
		sleep(speed);
	}
}
/******************主函数部分******************/
int main()
{
	gput("ABC", 1000);
}

练习2-3
//初次尝试写头文件,值得注意的一点是头文件的引用应该用" "双引号,因为其不在标准库函数中

#include<stdio.h>
#include<time.h>

int sleep(unsigned long x)
{
	clock_t c1 = clock();
	clock_t c2;
	do
	{
		if ((c2 = clock()) == (clock_t)-1)
			return 0;
	} while ((1000.0 * (c2 - c1) / CLOCKS_PER_SEC) < x);
	return 1;
}
/***********************************************/
//练习2-3
//闪烁显示字符串函数
//函数 结构为  void bput(const char *s, int d, int e,int n)
/***********************************************/

#include<stdio.h>
#include"sleep.h"
#include<string.h>
/*bput函数   闪烁显示字符串*/
void bput(const char *s, int d, int e, int n)
{
	for (int i = 0; i < n; i++)
	{
		putchar('\r'); //让光标移动到行前端
		printf("%s",s);
		sleep(d);
		putchar('\r');//再次让光标移动到前端
		for (int j = 0; j < (int)strlen(s); j++)//输处相应字符长度的空格 覆盖文字
		{
			putchar(' ');
		}
		sleep(e);
		putchar('\r');		//让光标移动到行前端
		printf("%s", s);	//最后一个输出是为了保证在程序结束后字符串显示
	}
}

/*主函数*/
int  main()
{
	char s[] = "ABCDEFG";
	int d = 1000;
	int e = 1000;
	int n = 3;
	bput(s,d,e,n);
}

//练习2-4

/***********************************************/
//练习2-4
//字幕显示字符串
//函数 结构为  void telop(const char *s, int direction, int speed,int n)
/***********************************************/

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

/*字幕显示字符串的函数*/
void telop(const char *s, int direction, int speed, int n)
{
	if (direction == 0)
	{
		int cnt = 0;
		for (int j = 0; j < n; j++)
		{
			putchar('\r');
			for (int i = 0; i < (int)strlen(s); i++)
			{
				if (cnt + i < (int)strlen(s))
					putchar(s[cnt + i]);
				else
					putchar(s[cnt + i - strlen(s)]);
			}
		
		sleep(speed);
		if (cnt < strlen(s) - 1)
			cnt++;
		else
			cnt = 0;
		}
	}
	else
	{
		int cnt = 0;
		for (int j = 0; j < n; j++)
		{
			putchar('\r');
			for (int i = 0; i < (int)strlen(s); i++)
			{
				if (cnt + i < (int)strlen(s))
					putchar(s[cnt + i]);
				else
					putchar(s[cnt + i - strlen(s)]);
			}
		
		sleep(speed);
		if (cnt > 0)
			cnt--;
		else
			cnt = (int)strlen(s) - 1;
		}
	}
}



int main()
{
	char s[] = "ABCDEFG ";
	int direction;
	int speed;
	int n;
	printf("请输入字幕滚动方向(0---从右向左、1---从左向右):"); scanf_s("%d",&direction);
	printf("请输入字幕的滚动的速度:"); scanf_s("%d",&speed);
	printf("请输入想要循环的次数:"); scanf_s("%d",&n);
	
	telop(s,direction,speed,n);
}

个人总结:整体编码的水平还是太差,逻辑不清晰。
结合最近上的软件工程的课程,要学会函数功能模块的划分。
多写代码,多做项目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN是一个知名的IT技术社区平台,提供了大量的编程技术文章和教程。《明解C语言中级篇》是在CSDN上发布的一篇关于C语言中级知识的解析文章。 在这篇文章中,作者通过详细解释C语言中级篇的知识点,帮助读者深入理解C语言的高级特性和用法。文章内容通常包括数据类型、数组、指针、结构体、动态内存分配等重要的知识点。 首先,作者会从数据类型开始介绍,包括整型、浮点型、字符型等基本数据类型的特点和使用方法。然后,会介绍数组的定义和使用,包括一维数组和多维数组的创建、访问及操作等。接着,作者会详细讲解指针的概念和用法,包括指针的定义、指针运算、指针与数组的关系等。同时,还会介绍结构体的定义和使用,以及结构体数组和指向结构体的指针等相关内容。 此外,文章还会涉及一些进阶的内容,如动态内存分配和内存管理等。作者会通过实例代码和详细的解释来说明这些概念和技术的使用方法和注意事项。 通过阅读《明解C语言中级篇》这篇文章,读者可以系统地学习和掌握C语言的中级知识,了解C语言的高级特性和用法,并能够运用这些知识解决实际问题。 总之,CSDN上的《明解C语言中级篇》是一篇详细解析C语言中级知识的文章,适合想要提升自己C语言编程水平的读者阅读和学习。通过这篇文章,读者可以加深对C语言的理解,提高编程技巧和解决问题的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值