1、从一个字符数组中读出相应的整数、实数
#include
int main()
{
float k;
int i = 0,temp1;
int m = 0,n = 0;
float temp2;
char s[1024];
int a[1024];
float b[1024];
printf("Enter a string : \n");
scanf("%s",s);
while(s[i] != '\0')
{
while((s[i] >= '0' && s[i] <= '9') || s[i] == '.') //只有当遇到第一个整数时,进入循环
{
temp1 = 0;
temp2 = 0.0;
while(s[i] >= '0' && s[i] <= '9') //当没有遇到小数点之前,把他当作整形来计算
{
temp1 = temp1 * 10 + s[i] - '0';
i++;
}
if(s[i] == '.') //一旦遇到小数点,就开始进行小数点之后的浮点数运算
{
k = 0.1;
temp2 = temp1;
i++;
while(s[i] >= '0' && s[i] <= '9') //在小数点后的数字中一直进行运算
{
temp2 = temp2 + (s[i] - '0') * k;
k = k * 0.1;
i++;
}
b[n++] = temp2;
}
else //下一位如果不是小数点,就直接输出
{
a[m++] = temp1;
}
i++;
}
i++;
}
printf("整形数有:\n"); //按照标准格式输出
for(i = 0;i < m;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("浮点形数有:\n");
for(i = 0;i < n;i++)
{
printf("%.3f ",b[i]);
}
printf("\n");
return 0;
}
2、将整数转换为相应的一个字符数组。
分析:从个位提取数字,组合字符
符号位的处理 12345=>“12345”
#include
int fun(int num)
{
int i = 0,n = 0; //定义循环变量i、计数变量n、中间变量temp和整形数组
int temp;
int s[1024];
while(num != 0) //利用条件进行循环,读出每一位的值
{
s[i] = num % 10;
num = num / 10;
n++;
i++;
}
for(i = 0;i < (n / 2); i++) //利用循环改变每一位在数组中的值
{
temp = s[i];
s[i] = s[n - 1 - i];
s[n - 1 - i] = temp;
}
for(i = 0;i < n; i++) //输出字符串
{
printf("%d",s[i]);
}
printf("\n");
}
int main()
{
int num; //定义变量并且提示用户输入变量值
printf("Enter your number :\n");
scanf("%d",&num);
fun(num); //调用fun()函数
return 0;
}
3、字符串数组的冒泡排序,从小到大
#include
int main()
{
int a[10];
int i,j,t;
printf("输入10个数字:\n");
for (i = 0;i<10;i++)
{
scanf("%d",&a[i]);
}
for (j = 0;j < 9 ;j++)
{
for(i = 0;i < 9;i++)
{
if(a[i]>a[i+1])
{
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
}
}
printf("排序为:");
for(i = 0;i < 10;i++)
{
printf("%d,",a[i]);
}
return 0;
}
4、查找介于n1与n2(0
(2)该数是素数。
#include
#include
int fun1(int i)
{
int j,flag = 1;
for(j = 2;j <= sqrt(i);j++)
{
if(i % j ==0)
{
flag = 0;
break;
}
}
return flag;
}
int fun2(int i)
{
int n = 0,flag1 = 0,flag2 = 0,flag;
int j,k;
int a[10],b[10] = {0};
while(i)
{
a[n++] = i % 10;
i = i / 10;
}
for(j = 0;j < n;j++)
{
for(k = j + 1;k < n;k++)
{
if(a[j] == a[k])
{
b[j] = b[j] + 1;
}
}
}
for(j = 0;j < n;j++)
{
if(b[j] == 1)
{
flag1 = 1;
}
if(b[j] > 1)
{
flag2 = 0;
}
}
if(flag2)
{
flag = 0;
return flag;
}
else
{
flag = 1;
return flag;
}
}
int main()
{
int i,j,n = 1;
int n1,n2;
printf("Enter 2 number (0 < n1 < n2 < 32768) :\n");
scanf("%d%d",&n1,&n2);
printf("The result is :\n");
for(i = n1;i <= n2;i++) //利用循环对取值范围内的数进行判断
{
if(fun1(i) && fun2(i)) //调用函数fun1和fun2,如果同时满足才输出当前值
{
n++;
printf("%6d",i);
if((n-1) % 5 == 0) //规则输出
{
printf("\n");
}
}
}
printf("\n");
return 0;
}
7、找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍
例如:将142857的首位数字1移动到末位之后得到的数是428571,而428571=3*142857,因此142857是Troitsky数
编程要求:
(1) 编写函数int Troitsky(long a[]),其功能是求出10000以内的所有Troitsky数,并将它们依次放入a指向的数组中,函数返回找到的Troitsky数的个数.
(2)编写main函数,调用Troitsky函数,将运行结果输出到屏幕。
#include
#define N 10000 //定义N以内的troitsky数,方便以后修改求值范围
int troitsky(long *p)
{
int i,j,k;
int temp,cag,high,loc = 0;
for(i = 1;i <= N;i++)
{
k = 0;
temp = i;
cag = i;
while(temp)
{
temp = temp / 10;
k++;
}
temp = i;
for(j = 0;j < k - 1;j++)
{
temp = temp / 10;
}
high = temp;
for(j = 0;j < k - 1;j++)
{
temp = temp * 10;
}
cag = i - temp;
cag = cag * 10;
cag = cag + high;
if(!(cag % i) && (cag >= i))
{
*(p+loc) = i;
loc++;
}
}
return loc;
}
int main()
{
int i;
long num;
long a[N];
num = troitsky(a);
printf("There are %d troitsky numbers.\n",num);
for(i = 0;i < num;i++)
{
printf("%6ld",a[i]);
if((i + 1) % 10 == 0)
{
printf("\n");
}
}
printf("\n");
return 0;
}