2021-07-14

在这里插入图片描述

5.

9.

求出它是几位数

分别输出每一位数字

按逆序输出个位数字

#include<stdio.h>
#include<math.h>
输入一个数,判断它是几位数
int Print(int n)
{
	int count = 0;
	while(n>0)
	{
		n /= 10;
		printf("%d\n",n);
		count++;
	}
	return count;
} 
//顺序分别输出每一位数字
int Print_Order(int n)
{
	int figure = Print(n);//位数 
	
	int order = pow(10.0,figure-1);
	while(n>0)
	{
		int tmp = n / order;//扔掉最低位
		printf("%d",tmp);//按顺序输出的位数 
		n = n%order;//只要最低位
		order = order/10; 
	}
	printf("\n");
}
//按逆序输出
void Print_Reverse(int n)
{
	while(n>0)
	{
		int tmp = n%10;
	    printf("%d",tmp);
	    n = n / 10;
	}
	printf("\n");
 } 
 
 int main()
 {
 	printf("%d\n",Print(12345));
 	Print_Order(12345);
 	Print_Reverse(12345);
 	return 0;
 }
#include <stdio.h>
#include <math.h>
#include <assert.h>

//assert( )   肯定成功的语句
int My_sqrt(double n)//模仿sqrt 实现自己的My_sqrt函数
{
	assert(n<1000 && n>0);//1
	if(n<0 || n>1000)//2
	{
		return -1;
	}

	int count = 1;
	while(count * count <= n)
	{
		count++;
	}

	return --count;
}


int Get_Figure(int n)
{
	int count = 0;
	while(n > 0)
	{
		n = n/10;  //n /= 10;
		count++;
	}
	return count;
}

void Print_Order(int n)
{
	//printf("%d\n", n);
	int figure = Get_Figure(n);//12345 --- 5

	//pow 
	int order = pow(10.0, figure-1);// 10000
	//int order = 1;  // 10000
	//for(int i=0; i<figure-1; i++)
	//{
	//	order = order * 10;//10000
	//}

	while(n > 0)
	{
		int tmp = n/order;
		printf("%d", tmp);
		n = n % order;
		order /= 10;
	}

	printf("\n");
}

void Print_Reverse(int n)
{
	while(n > 0)
	{
		int tmp = n%10;
		printf("%d", tmp);
		n = n/10;
	}
	printf("\n");
}

double Get_money(double n)
{
	double tmp = 0;
	if(n<=100000)
	{
		tmp = n * 0.1;
	}
	else if(n<=200000)
	{
		tmp = 100000*0.1 + (n-100000)*0.075;
	}
	else if(n <= 400000)
	{
		tmp = 10000 + 7500 + (n-200000)*0.05;
	}
	else if(n <= 600000)
	{
		tmp = 10000 + 7500 + 200000*0.05 + (n-400000)*0.03;
	}
	else if(n <= 1000000)
	{
		tmp = 10000 + 7500 + 200000*0.05 + 400000*0.03 + (n-600000)*0.015;
	}
	else
	{
		tmp = 10000 + 7500 + 200000*0.05 + 400000*0.03 + 400000*0.015 + (n-1000000)*0.01;
	}

	return tmp;
}


double Get_money_switch(double n)
{
	double tmp = 0;

	switch((int)n/100000)//只能传整形值
	{
	case 0:tmp = n * 0.1;break;
	case 1:tmp = 100000*0.1 + (n-100000)*0.075;break;
	case 2:
	case 3:tmp = 10000 + 7500 + (n-200000)*0.05;break;
	case 4:
	case 5:tmp = 10000 + 7500 + 200000*0.05 + (n-400000)*0.03;break;
	case 6:
		
		
	case 7:
	case 8:
	case 9:tmp = 10000 + 7500 + 200000*0.05 + 400000*0.03 + (n-600000)*0.015;break;
	default:
		tmp = 10000 + 7500 + 200000*0.05 + 400000*0.03 + 400000*0.015 + (n-1000000)*0.01;
		break;
	}

	return tmp;
}


int main()
{
	int a = My_sqrt(100);
	printf("%d\n", a);
	printf("%d\n", Get_Figure(12345));
	Print_Order(12345);
	Print_Reverse(12345);

	double b = Get_money(123456);
	printf("%f\n", b);

	double c = Get_money_switch(123456);
	printf("%f\n", c);


	double n = 3.8;

	double ans = n - int(n);
	printf("ans = %.20lf\n", ans);
	ans *= 10;
	printf("ans = %.20lf\n", ans);
	int ans1 = int(ans);
	printf("ans1 = %d\n", ans1);


	return 0;
}
区分除法和取模运算的区别?

n/10-----扔掉最低位

n%10-----只要最低位

12345/10-----1234

12345%10-----5

C语言常见错误及解决

  1. error: invalid use of void expression,是因为有void型的变量或者函数返回值被使用了。

    例如:

     void sum(int a, int b)
      {
        int s = a+b;
       }
    printf("%d\n", sum(1,2));
    

    改为:

    void sum(int a, int b)
    {
    	int s = a + b;
    }
    int main()
    {
    	int a = 0;
    	int b = 0;
    	int s = 0;
    	sum(a,b);
    	printf("%d\n",s);
    	return 0;
    }
    

    这里printf的第二个参数就是void,无法打印就会出现这样的错误。

  2. error C2001: newline in constant直译:在常量中出现了换行。错误分析: 1.①字符串常量、字符常量中是否有换行。2.②在这句语句中,某个字符串常量的尾部是否漏掉了双引号。3.③在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“"”。4.④在这句语句中,某个字符常量的尾部是否漏掉了单引号。5.⑤是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。

  3. error C2015: too many characters in constant

编号:C2015直译:字符常量中的字符太多了。错误分析:单引号表示字符型常量。一般的,单引号中必须有且只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if (x == 'x || x == ‘y’) { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。

  1. error C2137: empty character constant

编号:C2137直译:空的字符定义。错误分析:原因是连用了两个单引号,而中间没有任何字符,这是不允许的。

  1. error C2018: unknown character ‘0x##’

编号:C2018直译:未知字符‘0x##’。错误分析:0x##是字符ASC码的16进制表示法。这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。

  1. error C2041: illegal digit ‘#’ for base ‘8’

编号:C2141直译:在八进制中出现了非法的数字‘#’(这个数字#通常是8或者9)。错误分析:如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是一个8进制数字。例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。

  1. error C2065: ‘xxxx’ : undeclared identifier

编号:C2065直译:标识符“xxxx”未定义。错误分析:首先,解释一下什么是标识符。标志符是程序中出现的除关键字之外的词,通常由字母、数字和下划线组成,不能以数字开头,不能与关键字重复,并且区分大小写。变量名、函数名、类名、常量名等等,都是标志符。所有的标志符都必须先定义,后使用。标志符有很多种用途,所以错误也有很多种原因。

1.如果“xxxx”是一个变量名,那么通常是程序员忘记了定义这个变量,或者拼写错误、大小写错误所引起的,所以,首先检查变量名是否正确。(关联:变量,变量定义)2.如果“xxxx”是一个函数名,那就怀疑函数名是否没有定义。可能是拼写错误或大小写错误,当然,也有可能是你所调用的函数根本不存在。还有一种可能,你写的函数在你调用所在的函数之后,而你有没有在调用之前对函数原形进行申明。(关联:函数申明与定义,函数原型)3.如果“xxxx”是一个库函数的函数名,比如“sqrt”、“fabs”,那么看看你在cpp文件已开始是否包含了这些库函数所在的头文件(.h文件)。例如,使用“sqrt”函数需要头文件math.h。如果“xxxx”就是“cin”或“cout”,那么一般是没有包含“iostream.h”。(关联:#include,cin,cout)4.如果“xxxx”是一个类名,那么表示这个类没有定义,可能性依然是:根本没有定义这个类,或者拼写错误,或者大小写错误,或者缺少头文件,或者类的使用在申明之前。(关联:类,类定义)5.标志符遵循先申明后使用原则。所以,无论是变量、函数名、类名,都必须先定义,后使用。如使用在前,申明在后,就会引发这个错误。6.C++的作用域也会成为引发这个错误的陷阱。在花括号之内变量,是不能在这个花括号之外使用的。类、函数、if、do(while)、for所引起的花括号都遵循这个规则。(关联:作用域)7.前

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值