//接2.21
二、goto语句的使用:关机程序
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h> //system()的头文件
#include<string.h> /strcmp() 的头文件
int main()
{
char input[20] ={ 0 };
system("shutdown -s -t 180");
again:
printf("请输入逆水寒启动,否则在电脑会在3分钟内关闭!!!\n");
scanf("%s",input);
if(strcmp(input,"逆水寒启动") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
但是有一个问题,第一次运行在控制台可以输入中文,第二次就只能输入英文了??
三、利用函数比大小
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void Swap(int x,int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a,b = 0;
scanf("%d %d",&a,&b);
printf("%d %d\n",a,b);
Swap(a,b);
printf("%d %d\n",a,b);
return 0;
}
上述代码达不到预期的原因是:当实参传递给形参时,形参是实参的一份临时拷贝,对形参的修改不会影响实参!
更正:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void Swap(int *px,int *py)
{
int z = *px;
*px = *py;
*py = z;
}
int main()
{
int a,b = 0;
scanf("%d %d",&a,&b);
printf("%d %d\n",a,b);
Swap(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
如果只是想得到a,b的值就不用取地址。
四、打印100-200之间的素数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for(i=100;i<=200;i++)
{
int flag = 1;
int j = 0;
for(j = 2;j<=i-1;j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag==1)
{
count ++;
printf("%d ",i);
}
}
printf("\ncount = %d\n",count);
return 0;
}
优化:
加头文件<math.h>,将j的范围缩小为sqrt(i);数学库函数,作用是开平方
i+=2,数据少一半!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int count = 0;
for(i=101;i<=200;i+=2)
{
int flag = 1;
int j = 0;
for(j = 2;j<=sqrt(i);j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag==1)
{
count ++;
printf("%d ",i);
}
}
printf("\ncount = %d\n",count);
return 0;
}
函数版本:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
int j = 0;
for(j = 2;j<=sqrt(n);j++)
{
if(n % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for(i=101;i<=200;i+=2)
{
if(is_prime(i))
printf("%d ",i);
}
printf("\ncount = %d\n",count);
return 0;
}