特殊函数
1.exit(1):退出整个程序,终止进程,返回1给操作系统(返回0表示正常退出,其余数表异常)
代码
猜随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
void MakeNum (int a[]);
int GuessNum (int b[]);
int RightPosition (int a[],int b[]);
int RightNum (int a[],int b[]);
int main()
{
int a[N],b[N],x,y,count = 1;
MakeNum(a); //计算机随机生成数
printf("Please input the number:\n");
do
{
printf("The %d time:\n",count);
if (GuessNum(b) != 0) //若输入合法,则开始判断
{
count++;
x = RightPosition(a,b);
y = RightNum(a,b)-x;
printf("%dx%dy\n",x,y);
}
}while (count <= 4 && x != 4); //若猜对或者次数用完,则退出
if (x == 4)
printf("Congratulations!\n");
else
printf("Sorry,you haven't got it,see you next time!\n");
printf("The right answer is %d%d%d%d.\n",a[0],a[1],a[2],a[3]);
return 0;
}
void MakeNum (int a[])
{
int i,j,t,k;
srand(time(NULL));
for (i = 0; i < N; i++) //存储0~9的数
a[i] = i;
for (j = 0; j < N; j++) //在0~9中随机选择数字,换入数组前4个元素
{
k = rand()%10;
t = a[j];
a[j] = a[k];
a [k] = t;
}
return;
}
/*用户输入数据猜数,若输入合法,返回1,否则返回0*/
int GuessNum (int b[])
{
int i,pol = 1;
for (i = 0; i < 4; i++) //依次输入每一位数
{
pol = scanf("%d",&b[i]);
if (pol != 1) //若输入非法
{
while(getchar() != '\n');
printf("Please input the right number!\n");
return 0;
}
}
if (b[0] == b[1] || b[0] == b[2] || b[0] == b[3] || b[1] == b[2] || b[1] == b[3] || b[2] == b[3])
{
printf("The number can't be the same!\n"); //若输入的两数字相同
return 0;
}
else
return 1;
}
/*判断位置数字均正确的数字个数*/
int RightPosition (int a[],int b[])
{
int i,x = 0;
for (i = 0; i < 4; i++)
if (a[i] == b[i])
x++;
return x;
}
/*判断正确的数字个数*/
int RightNum (int a[],int b[])
{
int i,j,y = 0;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
if (a[i] == b[j])
y++;
return y;
}
数组的插入
int Insert (int a[],int x,int num)
{
int i,j;
for (i = 0; i < num; i++)
if (x < a[i])
break; //查找x应该插入的位置,若找到,记录i,退出查找
for (j = num; j > i; j-- )
a[j] = a[j-1]; //将x后的元素依次后移一位
a[i] = x;//将x插入数组
return i+1; //返回x所在下标值
}
#include <stdio.h>
#define N 51
int BigFact (int a[],int n);
int main()
{
int i,j,n,index,a[N]={0};
printf("Enter a number to be calculated:");
scanf("%d",&n);
for (i = 1; i <= n; i++) //循环每一个数的阶乘
{
index = BigFact(a,i); //分别记录每一个数阶乘结果的位数,溢出则返回0
if (index != 0)
{
printf("%d! = ",i);
for (j = index; j > 0; j--)
printf ("%d",a[j]);
printf("\n");
}
else
{
printf("Overflow!\n");
exit(1); //异常退出整个程序,终止进程,返回1给操作系统
}
}
return 0;
}
/*计算阶乘,并返回位数or溢出*/
int BigFact (int a[],int n)
{
int i,j,k,index = 1;
for (i = 0; i < N; i++) //将结果数组初始化为0
a[i] = 0;
a[1] = 1; //将个位初始化为1
for (i = 1; i <= n; i++) //表示一个阶乘的每一次乘法运算
{
for (j = 1;j <= index; j++) //利用竖式乘法,将乘数与每一位数分别相乘,最高位数为index
a[j] = a[j]*i;
for (k = 1; k < index; k++) //除了最高位index,从个位开始,依次进位
{
if (a[k] >= 10)
{
a[k+1] = a[k+1]+a[k]/10;
a[k] = a[k]%10;
}
}
while (a[index] >= 10&&index <= N-1) //当最高为>=10,对最高位进位,此时位数index进一
{
a[index+1] = a[index]/10;
a[index] = a[index]%10;
index++;
}
}
if (index <= N-1) //位数是否溢出数组
return index;
else
return 0;
return 1;
}