这些天真的好忙啊,真的太讨厌早8的课了,特别是早8的外专课!(´-ι_-`)
练习2-1
//List 2-5 是一个用秒数来表示程序开始后经过的时间的程序。请改写程序,令其不仅能用秒数,还能用时钟数来表示时间。
#include <time.h>
#include <stdio.h>
/*--- 等待x毫秒 ---*/
int sleep(unsigned long x)
{
clock_t c1 = clock(), c2;
do {
if ((c2 = clock()) == (clock_t)-1) /* 错误 */
return 0;
} while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return 1;
}
int main(void)
{
int i;
clock_t c;
for (i = 10; i > 0; i--) { /* 倒数 */
printf("\r%2d", i);
fflush(stdout);
sleep(1000); /* 暂停1秒 */
}
printf("\r\aFIRE!!\n");
c = clock();
printf("程序开始运行后经过了%.1f秒。\n时钟数为%.1f。\n",
(double)c / CLOCKS_PER_SEC,(double)c);
return 0;
}
练习2-2
//编写一个函数,令其能从字符串开头逐一显示字符。 void gput (const char *s, int speed);
#include <time.h>
#include <stdio.h>
#include <string.h>
int sleep (unsigned long x)
{
clock_t c1 = clock(), c2;
do {
if ( (c2=clock())==(clock_t)-1 ) //(clock_t)-1 是 clock_t型的-1
return 0;
} while (1000.0*(c2-c1)/CLOCKS_PER_SEC < x); //注意是CLOCKS不是CLOCK!!!
return 1;
}
void gput (const char *s, int speed)
{
int len=strlen(s);
int i;
for (i=0; i<len; i++) {
putchar(s[i]);
fflush(stdout);
sleep(speed);
}
}
int main(void)
{
char a[]="Ice Bear Loves Isabel!";
int speed = 500;
gput(a,speed);
return 0;
}
练习2-3
//编写一个闪烁显示字符串的函数。 void bput (const char *s, int d, int e, int n);
#include <time.h>
#include <stdio.h>
#include <string.h>
int sleep (unsigned long x)
{
clock_t c1 = clock(), c2;
do {
if ( (c2=clock())==(clock_t)-1 )
return 0;
} while (1000.0*(c2-c1)/CLOCKS_PER_SEC < x);
return 1;
}
void bput (const char *s, int d, int e, int n)
{
int i,j;
int len = strlen(s);
for (i=0; i<n; i++) {
printf("\r%s",s); //一次性显示字符串,注意输出\r回到本行开头
fflush(stdout);
sleep(d);
putchar('\r'); //一次性显示相等长度的空格覆盖,注意输出\r回到本行开头
for (j=0; j<len; j++) {
printf(" ");
fflush(stdout);
}
sleep(e);
}
}
int main(void)
{
char a[]="Ice Bear Loves Isabel!";
int d = 100;
int e = 100;
int n = 100;
bput(a,d,e,n);
return 0;
}
练习2-4
//编写一个如字幕般显示字符串的函数。void telop (const char *s, int direction, int speed, int n);
#include <time.h>
#include <stdio.h>
#include <string.h>
int sleep (unsigned long x)
{
clock_t c1 = clock(), c2;
do {
if ( (c2=clock())==(clock_t)-1 )
return 0;
} while (1000.0*(c2-c1)/CLOCKS_PER_SEC < x);
return 1;
}
void telop (const char *s, int direction, int speed, int n)
{
int i,num=0,cnt=0;
int s_len = strlen(s);
while(1) {
putchar('\r');
for (i=0; i < s_len; i++) {
if (cnt+i < s_len)
putchar(s[cnt+i]);
else
putchar(s[cnt+i-s_len]);
}
fflush(stdout);
sleep(speed);
if (direction == 0) { //从右往左
if(cnt < s_len-1)
cnt ++;
else {
cnt = 0;
num ++;
}
}
else { //从左往右
if(cnt > 0)
cnt --;
else {
cnt = s_len-1;
num ++;
}
}
if (num > n) //num为计数变量,每次下标cnt归零是num++,num超过n时即跳出循环
break;
}
}
int main(void)
{
char s[]="Ice Bears Wants To Sleep "; //注意多加一个空格
int direction;
int speed = 500;
int n = 5;
zmfx:
printf("字幕滚动方向:0---从右往左 1---从左往右:");
scanf("%d",&direction);
if (direction != 0 && direction != 1) {
printf("error!\n");
goto zmfx;
}
telop(s,direction,speed,n);
return 0;
}
练习2-5
//List 2-3 的“心算训练”程序显示的是进行10次加法运算所需要的时间。改写程序,令其能显示每次运算所需要的时间和运算的平均时间。
#include <time.h>
#include <stdio.h>
int main(void)
{
int stage;
int a, b, c; /* 要进行加法运算的数值 */
int x; /* 已读取的值 */
int n; /* 空白的宽度 */
clock_t start, end; /* 开始时间·结束时间 */
float time1,time_sum=0;
srand(time(NULL)); /* 设定随机数的种子 */
printf("扩大视野心算训练开始!!\n");
for (stage = 0; stage < 10; stage++) {
a = 10 + rand() % 90; /* 生成10~99的随机数 */
b = 10 + rand() % 90; /* 〃 */
c = 10 + rand() % 90; /* 〃 */
n = rand() % 17; /* 生成0~16的随机数 */
start = clock();
printf("%d%*s+%*s%d%*s+%*s%d:", a, n, "", n, "", b, n, "", n, "", c);
do {
scanf("%d", &x);
if (x == a + b + c) {
end = clock();
break;
}
printf("\a回答错误。请重新输入:");
} while (1);
time1 = (double)(end - start) / CLOCKS_PER_SEC;
time_sum += time1;
printf("此次用时%.1f秒。\n\n",time1);
}
printf("恭喜通关,共用%.1f秒,平均每题%.1f秒。\n",time_sum, time_sum/10);
return 0;
}
练习2-6
//把上面的程序改写成能进行加法和减法运算的程序,每次随机决定进行哪种运算。也就是说,假设三个值是a、b、c,每次都通过随机数来从下列组合中选一个进行出题。
#include <time.h>
#include <stdio.h>
int main(void)
{
int stage;
int a, b, c;
int x;
int n, m, answer;
clock_t start, end;
float time1,time_sum=0;
srand(time(NULL));
printf("扩大视野心算训练开始!!\n");
for (stage = 0; stage < 10; stage++) {
a = 10 + rand() % 90;
b = 10 + rand() % 90;
c = 10 + rand() % 90;
n = rand() % 17;
m = rand() % 4; //生成0~3的随机数
printf("\n%d\n",m);
if (m == 0) {
printf("%d%*s+%*s%d%*s+%*s%d:", a, n, "", n, "", b, n, "", n, "", c);
answer = a+b+c;
}
else if (m == 1) {
printf("%d%*s+%*s%d%*s-%*s%d:", a, n, "", n, "", b, n, "", n, "", c);
answer = a+b-c;
}
else if (m == 2) {
printf("%d%*s-%*s%d%*s+%*s%d:", a, n, "", n, "", b, n, "", n, "", c);
answer = a-b+c;
}
else {
printf("%d%*s-%*s%d%*s-%*s%d:", a, n, "", n, "", b, n, "", n, "", c);
answer = a-b-c;
}
start = clock();
do {
scanf("%d", &x);
if (x == answer ) {
end = clock();
break;
}
printf("\a回答错误。请重新输入:");
} while (1);
time1 = (double)(end - start) / CLOCKS_PER_SEC;
time_sum += time1;
printf("此次用时%.1f秒。\n\n",time1);
}
printf("恭喜通关,共用%.1f秒,平均每题%.1f秒。\n",time_sum, time_sum/10);
return 0;
}