C语言练习题 编程练习1(2019.1.1)

1、从一个字符数组中读出相应的整数、实数

#include <stdio.h>

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 <stdio.h>
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 <stdio.h>

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<n1<n2<32768)之间所有满足下列条件的整数:
(1)该数的十进制表示中有且仅有两个相同的数字位;
(2)该数是素数。

#include <stdio.h>
#include <math.h>


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 <stdio.h>

#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;
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值