C语言实例分析

最新在菜鸟教程学习C语言,在里面的例程代码中做一些注释,供学习使用。

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错

1.输出 "Hello, World!

#include<stdio.h>
int main()
{
    
    
	printf("Hello, World!");
	return 0;
}

2.输出整数

#include <stdio.h>
int main()
{
    
    
	int number;
	printf("输入一个整数:");
	scanf("%d",&number); //&是取地址符, %d是格式转换符
	printf("你输入的整数是:%d", number);//%d是整型输出 int型
	return 0;
}

3.输出单个字符

#include <stdio.h>

int main() {
    
    
	char c; //定义性声明,定义变量c为char型,分配存储空间

	c = 'A'; //C语言中字符用单引号引用 ,如 'A'

	printf("c的值为 %c", c);

	return 0;
}

4.输出浮点数

#include <stdio.h>

int main() {
    
    
	float f;	//声明 浮点型变量f,占4个字节

	f = 12.001234;	//定义 变量f的值

	printf("f 的值为 %f", f);	// %f为浮点型 格式输出符

	return 0;		//函数返回值为0;
}

5.输出双精度(double)数

#include <stdio.h>
int main() {
    
    
	double d;	//声明双精度浮点型变量,占8个字节

	d = 12.001234;	//赋值

	printf("d 的值为 %le", d);	//输出格式为%le,用科学计数法作输出格式

	return 0;
}

6.两个整数相加

#include <stdio.h>
int main()
{
    
    
	int firstNumber, secondNumber, sumOfTwoNumbers;

	printf("输入两个数(以空格分隔):	");
	scanf("%d %d", &firstNumber, &secondNumber);//通过scanf函数输入这两个数的值

	sumOfTwoNumbers = firstNumber + secondNumber;

	printf("%d + %d = %d", firstNumber, secondNumber, sumOfTwoNumbers);
	//%d 为整型输出
	return 0;

7.两个浮点数相乘

#include <stdio.h>
int main()
{
    
    
	double firstNumber, secondNumber, product;
	printf("输入两个浮点数: ");

	scanf("%lf %lf", &firstNumber, &secondNumber);
	//%lf代表双精度浮点型数据,double型

	product = firstNumber * secondNumber;

	printf("结果 = %.15lf", product);
	// %.2lf  小数点后保留两位有效数字,double型最多15位.
	return 0;
}

8.字符转 ASCII 码

方法1

#include <stdio.h>
int main()
{
    
    
	char c;
	printf("输入一个字符: ");

	scanf("%c", &c);

	// %d 为有符号10进制整数
	// %c 为输出单个字符
	printf("%c 的 ASCII 为 %d", c, c);
	return 0;
}

方法2

#include <stdio.h>
int main()
{
    
    
	char n;
	printf("输入单个字符\n");
	scanf("%c", &n);
	printf("输出的字符是:%c", n);
	return 0;
}

9.两数相除

#include <stdio.h>

int main(){
    
    

	int dividend, divisor, quotient, remainder;

	printf("输入被除数:");
	scanf("%d", &dividend);

	printf("输入除数: ");
	scanf("%d", &divisor);

	// 计算商
	quotient = dividend / divisor;

	// 计算余数
	remainder = dividend % divisor;

	printf("商 = %d\n", quotient);
	printf("余数 = %d", remainder);

	return 0;
}

10.数值比较

比较两个数(1)

#include <stdio.h>

int main() {
    
    
	int a, b;

	a = 11;
	b = 99;

	if (a > b)
		printf("a 大于 b");
	else
		printf("a 小于等于 b");

		return 0;
}

比较两个数(2)

#include <stdio.h>

int main() {
    
    
	int a, b;

	printf("输入第一个值");
	scanf("%d", &a);//&是取地址符
	printf("输入第二个值");
	scanf("%d", &b);//由 键盘 给变量b所在的内存地址赋值

	if (a > b)
		printf("a>b\n");
	else if (a == b)
		printf("a=b\n");
	else
		printf("a<b\n");

	return 0;
}

比较三个数

#include <stdio.h>
int main() {
    
    
	int a, b, c;

	a = 11;
	b = 22;
	c = 33;

	if (a > b&& a > c)
		printf("%d 最大", a);
	else if (b > a&& b > c)
		printf("%d 最大", b);
	else if (c > a&& c > b)
		printf("%d 最大", c);
	else 
		printf("有两个或三个数值相等");

	return 0;

}

11.计算 int, float, double 和 char 字节大小

#include <stdio.h>

int main() {
    
    
	int integerType;
	float floatType;
	double doubleType;
	char charType;

	//sizeof() 用于计算变量的字节大小
	printf("Size of int : %ld bytes\n", sizeof(integerType));
	printf("Size of float: %ld bytes\n", sizeof(floatType));
	printf("Size of double: %ld bytes\n", sizeof(doubleType));
	printf("Size of char: %ld byte\n", sizeof(charType));

	return 0;
}

计算 long long, long double 字节大小

#include <stdio.h>
int main() {
    
    
	int a;
	long b;
	long long c;
	
	double e;
	long double f;

	printf("Size of int = %ld bytes \n", sizeof(a));
	printf("Size of long = %ld bytes\n", sizeof(b));
	printf("Size of long long = %ld bytes\n", sizeof(c));

	printf("Size of double = %ld bytes\n", sizeof(e));
	printf("Size of long double = %ld bytes\n", sizeof(f));

	return 0;
}

12.交换两个数的值

使用临时变量

#include <stdio.h>
int main() {
    
    
	double firstNumber, secondNumber, temporarVariable;

	printf("输入第一个数字:");
	scanf("%lf", &firstNumber);

	printf("输入第二个数字:");
	scanf("%lf", &secondNumber);
	
	temporarVariable = firstNumber;
	firstNumber = secondNumber ;
	secondNumber = temporarVariable;
	printf("\n交换后,firstNumber = %.21f\n", firstNumber);
	printf("\n交换后,secondNumber = %.21f\n", secondNumber);
	return 0;
}

不使用临时变量

#include <stdio.h>
int main() {
    
    
	int a, b;
	
	a = 11;
	b = 99;

	printf("交换之前 - \n a = %d, b = %d \n\n", a, b);
	
	a = a + b;
	b = a - b;
	a = a - b;

	printf("交换后 - \n a = %d, b = %d \n", a, b);

}

13.判断奇数/偶数

方法一

#include <stdio.h>

int main() {
    
    
	int number;

	printf("请输入一个整数:");
	scanf("%d", &number);
	if (number % 2 == 0)
		printf("%d是偶数.", number);
	else
		printf("%d是奇数.", number);

	return 0;
}

方法二

奇偶数判断其实有个更简单高效的办法,
我们的整数,在计算机中存储的都是二进制,
奇数的最后一位必是1,所以我们可以这样写:

#include <stdio.h>

int main() {
    
    
	int number;

	printf("请输入一个整数:");
	scanf("%d", &number);

	if (number & 1)	//  &是  按位与 操作符
		printf("%d是奇数", number);
	else
		printf("%d是偶数", number);
	return 0;
}

14.循环区间范围内的奇数/偶数

方法一

//输出10以内的自然数数的奇偶性
#include <stdio.h>
int main() {
    
    
	int i=0;
	while(i<=10){
    
    
	i++;

	if (i % 2 == 0)
		printf("%d是偶数\n", i);
	else
		printf("%d是奇数\n", i);
	}
	return 0;
}

方法二

//通过循环输出指定区间范围的偶数
#include <stdio.h>

int main() {
    
    
	int i;

	for (i = 1; i <= 10; i++) {
    
    
		if (i % 2 == 0)
			printf(" %2d\n", i);	
//% 2d是将数字按宽度为2,采用右对齐方式输出,如果数据位数不到2位,则左边补空格。
	}
	return 0;
}

方法三

//通过循环输出指定区间范围的奇数
#include <stdio.h>

int main() {
    
    
	int i;

	for (i = 1; i <= 10; i++) {
    
    
		if ( i%2  != 0)	//    !=  是"不等于"的意思
			printf("%2d\n", i);
	}
	return 0;
}

15.判断元音/辅音

#include <stdio.h>

int main()
{
    
    
	char c;
	int isLowercaseVowel, isUppercaseVowel;

	printf("输入一个字母:");
	scanf("%c", &c);

	isLowercaseVowel = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');

	isUppercaseVowel = (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');

	if (isLowercaseVowel || isUppercaseVowel)
		printf("%c 是元音", c);
	else
		printf("%c 是辅音", c);
	return 0;
}

16.判断三个数中的最大数

#include <stdio.h>

int main()
{
    
    
	double n1, n2, n3;

	printf("请输入三个数,以空格分隔: ");
	scanf("%lf %lf %lf", &n1, &n2, &n3);

	if (n1 >= n2 && n1 >= n3)
		printf("%.2f 是最大数。", n1);	//%.2f 意思是小数点后保留两位数字

	if (n2 >= n1 && n2 >= n3)
		printf("%.2f 是最大数。", n2);

	if (n3 >= n1 && n3 >= n2)
		printf("%.2f 是最大数。", n3);

	return 0;
}
//判断三个整数中的最大数                      MIKU
#include <stdio.h>

int main() {
    
    
	int a, b, c;
	
	printf("请输入要比较的三个整数,以空格键分割:\n");
	scanf("%d %d %d", &a, &b, &c);

	if (a >= b && a >= c)
		printf("三个数中最大的是%d", a);
	else if (b >= a && b >= c)
		printf("三个数中最大的是%d", b);
	else (c >= a && c >= b)
		printf("三个数中最大的是%d", c);
	return 0;
}

17.一元二次方程

C语言中输出函数printf的格式控制符中,可以加一些附加格式字符
假设w,h都是整数
那么格式控制符可以这现这种形式:
%w.h f
表示输出的总宽度是w小数点后保留h位
如果实际长度大于他想控制输出的长度w,则还是按实际长度输出
比如:

#include "stdio.h"
void main()
{
float a=12.123;
printf("%0.2f",a);
}

输出就是12.12
对应上面的表述,w0,h2
大概就是这样了。

//求一元二次方程:ax2+bx+c=0 的根
//输入三个实数a, b, c的值,且a不等于0
#include <stdio.h>
#include <math.h>

int main() {
    
    
	
	float a, b, c, x1, x2, d;
	printf("输入方程的三个系数:");
	scanf("%f %f %f", &a, &b, &c);
	if (a != 0)
	{
    
    
		d = sqrt(b * b - 4 * a * c);
		x1 = (-b + d) / (2 * a);
		x2 = (-b - d) / (2 * a);
		if (x1 < x2)
			printf("%0.2f %0.2f\n", x2, x1);
		else
			printf("%0.2f %0.2f\n", x1, x2);

	}
	return 0;
}

18.判断闰年

//用户输入年份,判断该年是否位闰年
//(四年一闰,百年不闰) || 四百年在闰年
#include <stdio.h>
int main() {
    
    
	int year;

	printf("输入年份:");
	scanf("%d", &year);

	if (year % 4 == 0)
	{
    
    
		if (year % 100 == 0)
		{
    
    
			if (year % 400 == 0)
				printf("%d是闰年", year);
			else
				printf("%d不是闰年", year);

		}
		else
			printf("%d是闰年", year);
	}
	else
		printf("%d不是闰年", year);
	return 0;
}

19.判断正数/负数

#include <stdio.h>
int main()
{
    
    
	double number;

	printf("输入一个数字:");
	scanf("%lf", &number);

	if (number <= 0.0)
	{
    
    
		if (number == 0.0)
			printf("你输入的是 0");
		else
			printf("你输入的是负数");
	}
	else
		printf("你输入的是正数");
	return 0;
}

20.判断字母

用户输入一个字符,判断该字符是否为一个字母。
#include <stdio.h>

int main() {
    
    
	char c;
	
	printf("输入一个字符:");
	scanf("%c", &c);

	if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
		printf("%c是字母", c);
	else
		printf("%c不是字母", c);

	return 0;
}

21.计算自然数的和

使用for

//使用for
#include <stdio.h>
int main()
{
    
    
	int n, i, sum = 0;

	printf("输入一个正整数:");
	scanf("%d", &n);

	for (i = 1; i < n; i++)
	{
    
    
		sum += i;
	}
	printf("Sum = %d", sum);
	
	return 0;
}

使用while

//使用while
#include <stdio.h>
int main()
{
    
    
	int n, i=1, sum = 0;

	printf("输入一个正整数:");
	scanf("%d", &n);

	while(i<=n)
	{
    
    
		sum += i;
		++i;//https://www.zhihu.com/question/19811087,
		//++i可以作为左值,i++则不可以
	}
	printf("Sum = %d", sum);

	return 0;
}

使用递归

#include <stdio.h>
int main() {
    
    
	int num;
	printf("输入一个整数: ");
	scanf("%d", &num);
	printf("Sum = %d", addNumbers(num));
	return 0;
}
int addNumbers(int n) {
    
    
	if (n != 0)
		return n + addNumbers(n - 1);
	else
		return n;
}

22.输出九九乘法口诀表

#include<stdio.h>

int main() {
    
    
	int i = 0;//外层循环变量,控制行
	int j = 0;//内层循环变量,控制列
	for (i = 1; i <= 9; i++) {
    
    
		for (j = 1; j <= i; j++) {
    
    
			printf("%dx%d=%d\t", j, i, i * j);
		}

		printf("\n");//每执行完一列后换行
	}
}

23.斐波那契数列

//输出指定数量的斐波那契数列
#include <stdio.h>
int main() {
    
    
	int i, n, t1 = 0, t2 = 1, nextTerm;

	printf("输出几项:");
	scanf("%d", &n);

	printf("斐波那契数列:");

	for (i = 1; i <= n; ++i) {
    
    
		printf("%d,", t1);
		nextTerm = t1 + t2;
		t1 = t2;
		t2 = nextTerm;
	}
	return 0;
}

//输出指定数字前的斐波那契数列---------MIKU
#include <stdio.h>
int main() {
    
    
	int i, n, t1 = 0, t2 = 1, nextTerm;

	printf("输入一个正数:");
	scanf("%d", &n);

	printf("斐波那契数列:");

	for (i = 1; t1 <= n; ++i) {
    
    
		printf("%d,", t1);
		nextTerm = t1 + t2;
		t1 = t2;
		t2 = nextTerm;
	}
	return 0;
}

//输出指定数字前的斐波那契数列
#include <stdio.h>

int main()
{
    
    
	int t1 = 0, t2 = 1, nextTerm = 0, n;

	printf("输入一个正数: ");
	scanf("%d", &n);

	// 显示前两项
	printf("斐波那契数列: %d, %d, ", t1, t2);

	nextTerm = t1 + t2;

	while(nextTerm <= n)
	{
    
    
		printf("%d, ",nextTerm);
		t1 = t2;
		t2 = nextTerm;
		nextTerm = t1 + t2;
	}

	return 0;
}

24.求两数的最大公约数 不正确

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include <stdio.h>
int main()//求两数的最大公约数
{
    
    
    int n1, n2;

    printf("输入两个数,以空格分隔: ");
    scanf("%d %d", &n1, &n2);

    while (n1 != n2)    //当两数不相等时,执行while循环
    {
    
    
        if (n1 > n2)    //若n1更大
            n1 -= n2;   //则两数差值赋给n1
        else
            n2 -= n1;   //否则将差值赋值给n2,
                        //执行下一轮循环,直到两数值相等
    }
    printf("GCD = %d", n1);//greatest common divisor,最大公约数
    //此外,还有一种欧几里得算法也可以求最大公约数,也叫辗转相除法,有百度下来

    return 0;
}
#include <stdio.h>//MIKU版本,错误
int main() {
    
    

	int a, b, c = 1, m = 1;
	
	printf("请输入两个数,用空格间隔:");
	scanf("%d %d", &a, &b);
	//求最大公约数,这个数
	while(c!=a && c!=b){
    
    
	if (a / c == 0 || b / c == 0)
		m = c;
	else
		c++;
	break;
	}

	printf("最大公约数是:%d", m);

	return 0;

25.求两数的最小公倍数

运用公式法

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
//求两数的最小公倍数------by 银河 MIKU
#include <stdio.h>
int main() {
    
    
	
	int num1, num2, num3;

	printf("Please enter two positive integers: ");
	scanf("%d %d", &num1, &num2);	//输入两个数给变量赋值
	
	if (num1 > num2)
		num3 = num1 % num2;
	else
		num3 = num2 % num1;

	while (1) {
    
    	//若两数不相等,执行循环
		if (num1 > num2)	//若num1大于num2
			if (!num3) 	//若 余数num3为零,则值为真
				break;
			else if (!(num1 % num3 && num2 % num3)) {
    
    	//若num1和num2都可整除他们的余数num3,则为真		
				num1 = num2 * (num1 / num3);	//这是有公约数时求最小公倍数的公式
				break;
			}
			else {
    
    
				num1 = num1 * num2;//这是无公约数时求最小公倍数的公式
				break;
			}
		else
			if (!num3) {
    
     	//若 余数num3为零,则值为真
				num1 = num2;
				break;
			}
			else if (!(num1 % num3 && num2 % num3)) {
    
    	//若num1和num2都可整除他们的余数num3,则为真		
				num1 = num1 * (num2 / num3);
				break;
			}
			else {
    
    
				num1 = num1 * num2;
				break;
			}

	}

	printf("最小公倍数是:%d", num1);

	return 0;

}

利用公约数求公倍数

#include <stdio.h>
 
int main()
{
    
    
    int n1, n2, i, gcd, lcm;
 
    printf("输入两个正整数: ");
    scanf("%d %d",&n1,&n2);
 
    for(i=1; i <= n1 && i <= n2; ++i)
    {
    
    
        // 判断最大公约数
        if(n1%i==0 && n2%i==0)
            gcd = i;
    }
 
    lcm = (n1*n2)/gcd;
    printf("%d 和 %d 的最小公倍数为 %d", n1, n2, lcm);
 
    return 0;
}

遍历法

//by 菜鸟教程网站(www.runoob.com)
#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include <stdio.h>

int main()
{
    
    
    int n1, n2, minMultiple;
    printf("输入两个正整数: ");
    scanf("%d %d", &n1, &n2);

    // 判断两数较大的值,并赋值给 minMultiple
    minMultiple = (n1 > n2) ? n1 : n2;

    // 条件为 true
    while (1)
    {
    
    
        if (minMultiple % n1 == 0 && minMultiple % n2 == 0)
        {
    
    
            printf("%d 和 %d 的最小公倍数为 %d", n1, n2, minMultiple);
            break;
        }
        ++minMultiple;
    }
    return 0;
}

26.求阶乘

方法1,算是递归???

//by  银河MIKU
#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
//一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!
#include <stdio.h>

int main() {
    
    
	int i, s = 1;			//此处  i,s  为全局变量

	printf("请输入一个正整数:");
	scanf("%d", &i);
	
	if (i < 0)
		printf("wrong\n");
	else {
    
    
		for (int n = 1; n <= i; n++) {
    
    		//这里所定义的n是局部变量
			s *= n;
		}      //阶乘运算
	}
	printf("%d的阶乘是%d", i, s);		//这里的i,s  也为全局变量

	return 0;
}
//小结 : for循环的语法,
//for(0;1;3){2}    0为初始化赋值,只执行一次,
//1是条件判断,为真则执行循环主体;2为循环主体;3为更新循环变量

for语句求阶乘

//by www.runoob.com
#include <stdio.h>
 
int main()
{
    
    
    int n, i;
    unsigned long long factorial = 1;		//unsigned long long factorial,max:1844674407370955161
 
    printf("输入一个整数: ");
    scanf("%d",&n);	//&是取地址符,给n所在地址  赋值 格式 为 %d整型,
 
    // 如果输入是负数,显示错误
    if (n < 0)
        printf("Error! 负数没有阶乘");
 
    else
    {
    
    
        for(i=1; i<=n; ++i)
        {
    
    
            factorial *= i;              // factorial = factorial*i; 阶乘factorial
        }
        printf("%d! = %llu", n, factorial);	//  %llu,占8字节(byte),即2^8=64位 无符号长整型数???
    }
 
    return 0;
}

用递归求阶乘

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include <stdio.h>//使用递归求阶乘   by菜鸟教程
long int multiplyNumbers(int n);

int main()
{
    
    
    int n;
    printf("输入一个整数: ");
    scanf("%d", &n);
    printf("%d! = %ld", n, multiplyNumbers(n));
    return 0;
}
long int multiplyNumbers(int n) //递归
{
    
    
    if (n >= 1)
        return n * multiplyNumbers(n - 1);  //相当于返回了n! = n*(n-1)*(n-1-1)*...*1
    else
        return 1;
}

27.循环输出26个字母

//循环输出26个字母           by 银河MIKU
#include<stdio.h>

int main() {
    
    
	//
	int i = 65;		//字母 a 的 ASCII码为65

	while (i < 91) {
    
    	//字母 z 的 ASCII码为90
		printf("%c", i);
		i++;	//先判断,再自增
	}
	return 0;
}

28.判断数字为几位数

除法判断1

#pragma warning(disable:4996)//为了防止scanf()函数因为没有返回值而报错
#include<stdio.h>		//by 银河MIKU

//用除余法:判断数字为几位数HCS08A-FAMILY-AC-32\AC-60>P&E
int main() {
    
    

	long long n;
	int a,i=1;

	printf("请输入一个数字:\n");
	scanf("%d", &n);

	a = n / 10;

	for(i = 1; a > 1; i++){
    
    
		a = a / 10;
	}

	printf("n是%d位数", i);

	return 0;
	//只输出一位
}

除法判断2

#include <stdio.h>	//by 菜鸟教程
int main()
{
    
    
    long long n;
    int count = 0;
 
    printf("输入一个整数: ");
    scanf("%lld", &n);
 
    while(n != 0)
    {
    
    
        // n = n/10
        n /= 10;
        ++count;
    }
 
    printf("数字是 %d 位数。", count);
}

29.计算一个数的 n 次方

for循环

#pragma warning(disable:4996)
//计算一个数的n次方 
#include<stdio.h>

int main() {
    
    	//by 银河MIKU

	int num, num_n=1, n, i;

	printf("请输入基数:\n");
	scanf("%d", &num);
	printf("请输入指数:\n");
	scanf("%d", &n);

	for(i=0;i<n;i++){
    
    
		num_n *= num;
	}

	printf("%d的%d次幂是%d", num, n, num_n);

	return 0;
}

while循环

#pragma warning(disable:4996)
#include <stdio.h>  //by  www.runoob.com

int main()
{
    
    
    int base, exponent;

    long long result = 1;   //变量为长整型时  应该用%lld 格式输出符 输出

    printf("基数: ");
    scanf("%d", &base);

    printf("指数: ");
    scanf("%d", &exponent);

    while (exponent != 0)   //若指数exponent 不为零,则进行循环
    {
    
    
        result *= base;     //计算结果:result = 1*base*base*...*base
        --exponent;         //指数标志自减,来控制结果乘的次数
    }
    printf("结果:%lld", result);

    return 0;
}

pow() 函数

#pragma warning(disable:4996)
#include <stdio.h>
#include <math.h>

int main()  //by 菜鸟教程
{
    
    
    double base, exponent, result;  //double代表双精度浮点型数据,保证15位(16位)最大有效数字  用%lf代替
                                    //float代表单精度,保证6位(7位)最大有效数字,用 %f代替
    printf("基数: ");
    scanf("%lf", &base);    //%lf输出double型变量,可以解释为  long float(实际上并没有,这么比较好理解)

    printf("指数: ");
    scanf("%lf", &exponent);

    // 计算结果
    result = pow(base, exponent);   //pow()函数会直接计算出?指数幂?的结果

    printf("%.1lf^%.1lf = %.2lf", base, exponent, result);  //小数点后分别保留 1位,1位,2位数字
                                        
    return 0;
}

使用递归

就是多了个函数封装吗?

#pragma warning(disable:4996)
#include <stdio.h>

int power(int n1, int n2);

int main()  //by 菜鸟教程
{
    
    
    int base, powerRaised, result;

    printf("基数: ");
    scanf("%d", &base);

    printf("指数(正整数): ");
    scanf("%d", &powerRaised);

    result = power(base, powerRaised);

    printf("%d^%d = %d", base, powerRaised, result);
    return 0;
}

int power(int base, int powerRaised)//一个函数只有一个返回值,这两个是形参
{
    
    
    if (powerRaised != 0)
        return (base * power(base, powerRaised - 1));
    else
        return 1;   //指数为0时的返回值
}

30.判断回文数

未完成

#pragma warning(disable:4996)
#include<stdio.h>	

int main() {
    
    	//by 银河MIKU

	int num, i, count;
	int getter1();
	int DigitNum();

	printf("请输入要判断的数字:");
	scanf("%d", &num);
	i = DigitNum(num);

	count = getter1(num);
	printf("%d\n", count);
	//1.判断位数
	//2.定义一个数组,分别存储欲判断数组的各个位上的数
	//3.进行比较




	//*0.1就是去除了倒数第一个数,再乘以10就中间变量,用原数减去中间变量就得到了倒数第一个数
	//
	//*0.01就是正数第二书
	//int number[] = count;
	//for (i = 1;;) {}
	//但个数=num/总位数
	return 0;
}

/*分割数字算法1*/
int getter1(int num) {
    
    
	int a, b, c, d, e, f;
	a = num * 0.1;//这里a为整型,只保留整数部分,去掉了最后一位
	printf("拿掉最后一位剩的值%d\n", a);

	b = num - a * 10;	//这里得到了num的最后一位数字
	printf("最后一位的值%d\n", b);

	c = num * 0.01;//这里a为整型,只保留整数部分,去掉了后2位
	printf("拿掉最后2位剩的值%d\n", c);
	d = num - c * 100;	//这里得到了num的后2位数字
	printf("最后2位的值%d\n", d);


	e = d - b;
	e *= 0.1;
	printf("倒数第2位的值:%d\n", e);
	e = e ^ 3;
	printf("测试值:%d\n", e);
	return e;
}


/*分割数字算法2*/

int getter2(int num) {
    
    

	int a, b;

	a = num % 10;
	printf("最后1位的值%d\n", a);

	b = num % 100;
	printf("最后2位的值%d\n", b);

	//a = (c-a)*0.1;//这里a为整型,只保留整数部分,去掉了后2位
	//printf("倒数第2位的值%d\n", c);
	//d = (d-b)*0.1;
	//printf("倒数第2位的值%d\n", d);


	b = b - a;
	b *= 0.1;
	printf("倒数第2位的值:%d\n", b);

	return a;
}



/*判断数字的位数*/
int DigitNum(int num) {
    
    
	int i;
	for (i = 0; num >= 0; i++) {
    
    
		num *= 0.1;
	}
	printf("%d", i);
	return i;
}
/*分割数字算法3*/
int getter3(int num) {
    
    

	int a, b;

	a = num % 10;
	printf("最后1位的值%d\n", a);

	b = num % 100;
	printf("最后2位的值%d\n", b);

	//a = (c-a)*0.1;//这里a为整型,只保留整数部分,去掉了后2位
	//printf("倒数第2位的值%d\n", c);
	//d = (d-b)*0.1;
	//printf("倒数第2位的值%d\n", d);


	b = b - a;
	b *= 0.1;
	printf("倒数第2位的值:%d\n", b);

	return a;
}
/**将一个数反转过来后,判断是否和原数字相等,相等的话就是回文数**/

```c
#include <stdio.h>

int main(){
    
                    //by  www.runoob.com
    int n, reversedInteger = 0, remainder, originalInteger;
    
    printf("Enter an integer: ");
    scanf("%d", &n);

    originalInteger = n;

    /********************Flip the whole number*********************/
    while( n != 0){
    
    
        remainder = n%10;   //Divide n by 10 to get the remainder to get the last digit
        reversedInteger = reversedInteger*10 +remainder;    //The remainder starts to move forward
        n /= 10;    //Remove the remainder generated just now to get a new number
    }

    /**************Determine whether two numbers are equal***************/
    if (originalInteger == reversedInteger)
        printf("%d is a palindrome.", originalInteger);
    else
        printf("%d isn't a palindrome.", originalInteger);

    return 0;
}

/*
敲代码的时候,**scanf()** 函数忘记加 **取地址符&**,然后编译器没有报错,
导致控制台小黑框一直没有输出,一度以为是CodeBlocks的问题,
一顿百度,最后又又又检查了一遍代码,才发现是我的错!啊啊啊!
*/

31.判断素数

#include <stdio.h>
//by  银河MIKU
/*****Judging prime numbers******/
int main(){
    
    
    int i=1,num,rem=1;  // num:number;  rem: remainder;

    printf("Please enter a number:");
    scanf("%d", &num);

    while (1){
    
    
        if (num == 2){
    
    
            printf("2 is a prime number");
            break;
        }
        else{
    
    
            for(i = 2; i < num; i++ ){
    
    
                rem = num % i;  //取余数
                if (rem == 0){
    
    
                    printf("%d isn't a prime number", num);
                    i=0;
                    break;  //这里的break只能跳出for循环
                }
            }
        if (i == 0){
    
    
            break;
        }
        else{
    
    
            printf("%d is a prime number", num);
            break;
        }

        }
    }
    return 0;
}

32.判断Armstrong数(阿姆斯壮数)

#include <stdio.h>
#include <math.h>
int main(){
    
    		//by  银河MIKU
    int num, sum=0, nums=1, i, j;

    printf("Please enter a number:");
    scanf("%d", &num);

    int num0 = num;
    i = 0.1*num;

    /*************判断是几位数***************/
    for(i = 0; num != 0; i++){
    
    
        num *= 0.1;
    }
    /*************判断是几位数***************/

    num = num0;

    while(1){
    
    
        for(j = 1;num != 0;j++){
    
    
            nums = num %10;     //取最后一个数
            sum = sum + pow(nums,i);    //乘方后求和
            num *= 0.1;     //去掉最后一位
        }

        if (sum == num0 ){
    
    
            printf("It's a Armstrong number");
        }
        else{
    
    
            printf("It's not a Armstrong number");
        }

        break;  //跳出循环
    }

    return 0;
}

NN.查找2到100中的所有质数 不正确

#include <stdio.h>

int main() {
    
    
	//查找2到100中的所有质数

	//局部变量定义
	int i, j, counts=0;

	//i 从2到100自增
	for (i = 2; i <= 100; i++) {
    
    
		
		//j 从2到i自增
		for (j = 2; j <=i; j++) {
    
    

			//判断i是否可以被i整除
			if (i % j == 0 && i != 2) {
    
    //
				counts = 0;	//可以整除,则计数为0
				break;	//退出本层循环
			}
			else if (i == 2){
    
    
				counts = 1;
				break;
			}
			else
				counts = 1; //不可整除,计数为1,继续循环
			//continue;
		}
		if (counts == 1)	//若 记数为1,则说明是质数
		printf("%d 是质数\n", i);
		//continue;
	}
	return 0;
}
//不正确
#include <stdio.h>

int main()
{
    
    
//局部变量定义 
	int i, j;

	for (i = 2; i < 100; i++) {
    
    
		for (j = 2; j < i; j++)
			if (!(i % j))
				break; // 如果找到,则不是质数
		if (j==i) 
			printf("%d 是质数\n", i);
	}

	return 0;
}

69.五人分鱼

① 遍历法+for循环

/*A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。

日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。

B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。

C、D、E依次醒来,也按同样的方法拿鱼。

问他们台伙至少捕了多少条鱼 ? 以及每个人醒来时见到了多少鱼?

*/
#include<stdio.h>//by 菜鸟教程

int main() {
    
    
    int n, x, j, k, l, m;
    
    for (n = 5;; n++) {
    
         //n为最小捕鱼数,也时第一个人看到的鱼数量
        j = 4 * (n - 1) / 5;    //上一个人A扔掉1条鱼( n-1 )后,分成5份( /5 ),剩下4份,j为第二个人醒来看到的鱼
        k = 4 * (j - 1) / 5;    //上一个人B扔掉1条鱼( n-1 )后,分成5份( /5 ),剩下4份,k为第三个人醒来看到的鱼
        l = 4 * (k - 1) / 5;    //上一个人C扔掉1条鱼( n-1 )后,分成5份( /5 ),剩下4份,l为第四个人醒来看到的鱼
        m = 4 * (l - 1) / 5;    //上一个人D扔掉1条鱼( n-1 )后,分成5份( /5 ),剩下4份,m为第五个人醒来看到的鱼
        
        //若所有人醒来看到的鱼数量  除以5后均余1,则为真,否则n++,继续循环
        if (n % 5 == 1 && j % 5 == 1 && k % 5 == 1 && l % 5 == 1 && m % 5 == 1) {
    
     //   &&  为 逻辑与 运算
            printf("至少合伙捕鱼:%d条\n", n);
            printf("分别见到鱼的条数:%d %d %d %d\n", j, k, l, m);
            break;  //条件若为真,跳出for循环,结束程序
        }
    }
    return 0;



}

猜你喜欢

转载自blog.csdn.net/weixin_42417585/article/details/104915541