2022专升本C语言学习笔记(持续更新中......)

一 、判断一个整数的位数:

#include<stdio.h>
int main()
{
	int x = 0;
	int count = 0;
	printf("请输入一个整数:");
	scanf("%d",&x);
	do{
		x /= 10;
		count ++;
	} while(x != 0);
	printf("这个数的位数为:%d",count);
	return 0;	
} 

运行截图:

二、 商品购物系统

#include <stdio.h>
int main()
{
//	printf("hello world!");
    float price = 0;
    float number = 0;
    int mask = 0;
    float change = 0;
    float amount = 0; 
    float money = 0;
    printf("---------商品购物系统----------\n");
    printf("============菜单=============\n");
    printf("1.哈密瓜 6.00(元)/500g\t2.西红柿 3.50(元)/500g\t3.西瓜 3.00(元)/500g\n");
    printf("4.土豆 2.5(元)/500g\t5.辣椒 1.5(元)/500g\t6.草莓 10(元)/500g\n");
    printf("请你输入商品的编号:");
    scanf("%d",&mask);
    if(mask == 1){
    	price = 6;
    	printf("商品为哈密瓜!\n");
	}else if(mask == 2){
		price = 3.5;
		printf("商品为西红柿!\n");
	}else if(mask == 3){
		price = 3;
		printf("商品为西瓜!\n");
	}else if(mask == 4){
		price = 2.5;
		printf("商品为土豆!\n");
	}else if(mask == 5){
		price = 1.5;
		printf("商品为辣椒!\n");
	}else if(mask == 6){
		price = 10;
		printf("商品为草莓!\n");
	}
	printf("商品的价格为:%.2f(元)/斤\n",price);
    printf("请你输入你要购买的数量/(斤):");
    scanf("%f",&number);
    printf("您需要支付的金额为:%.2f(元)\n",price*number);
    printf("请支付:");
    scanf("%f",&change);
    while(change < (price * number)){
		money = change;
		printf("您支付的金额不够!\n");
		printf("请你重新支付:");
		scanf("%f",&change);
		change = change + money;
		if(change >= (price * number)){
			break;
		}
	}
	amount = change - (price * number);
    printf("您支付:%.2f(元),找您%.2f(元)\n",change,amount);
    printf("欢迎下光临!");
	return 0;
} 

运行结果:

三、逆序输出

/*逆序输出*/
#include<stdio.h>
int main()
{
	int x = 0;
	int ret = 0;
	int digtal = 0;
	int t = 0;
	printf("请你输入一个整数:");
	scanf("%d",&x);
	t = x;
	do{
		digtal = x % 10; //取这个数的后面一位 从后面开始
		ret = ret * 10 + digtal; // 将这个数逆序输出  
		x = x / 10; //去掉末尾数 
	} while(x != 0);
	printf("%d的逆序为:%d",t,ret); 
	return 0;
}

运行结果:

四、素数

素数一般指质数。 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数

/*判断一个数是否为素数*/
/*要引入的库文件*/
#include<stdio.h>
#include<math.h>
int main()
{
	int x = 0; 
	int isPrime = 1; //默认是素数 
	printf("请你输入一个整数:");
	scanf("%d",&x); 
//	因为当x = 1 || x =0 时进不了 循环所以 要把 isPrime = 0 
	if(x == 1 || x == 0){
		isPrime = 0;
	}
	for(int i = 2;i <= sqrt(x);i++){
		if(x % i == 0){
			isPrime = 0;
			break;
		}
	}
	if(isPrime){
		printf("%d是素数!",x);
	} else{
		printf("%d不是素数!",x);
	}
	return 0;	
} 

运行结果:

五、算阶乘

方法一:

/*从键盘输入求阶乘*/ 
#include<stdio.h>
int main()
{
  	int x = 0;
  	int i = 2;
  	int sum = 1;
	printf("请你输入一个整数:");
	scanf("%d",&x);
	do{
		sum = sum * i;
		i++; 
	} while(i <= x);
	printf("%d! = %d",x,sum);
	return 0;
} 

方法二、

#include<stdio.h>
int main()
{
	int sum = 1;
	int x = 0;
	printf("请你输入一个整数:");
	scanf("%d",&x);
	for(int i = 2;i <= x;i++){
		sum = sum * i;
	}
	printf("%d! = %d",x,sum);
	return 0;
}

方法三、

#include<stdio.h>
int main()
{
	int x = 0;
	int sum = 1;
	printf("请你输入一个大于0的整数:");
	scanf("%d",&x);
	for(int i = x; i > 1;i--){
		sum = sum * i;
	}
	printf("%d! = %d",x,sum);
	return 0;
}

六、指定素数的个数

/*用到的库文件*/
#include<stdio.h>
#include<math.h>
int main()
{
	int isPrime = 1; // 默认是素数 
	int number = 0;  // 要输出素数的个数 
	int count = 0; // 统计素数的个数 
	printf("请你输入你要的素数个数:");
	scanf("%d",&number);
	for(int x = 2;count < number;x++){
		isPrime = 1; 
		for(int i = 2;i <= sqrt(x);i++){
			if(x % i == 0){
				isPrime = 0; //如果有被整除的数 则这个数不是素数 退出循环 
				break;
			}
		}
		if(isPrime){
			printf("%d是素数!\t",x);
			count++;
 			//每五个换行 
			if(count % 5 == 0){
				printf("\n");
			}
		}
	} 
	printf("\n\n");
	printf("素数的个数为:%d\n",count); 
	return 0;
}

运行结果:

七、凑钱

#include<stdio.h>
int main()
{   
    /*如何用1角、2角、5角的硬币凑出10以下的金额了*/
    int money = 0;
	printf("请你输入你要凑够的钱(/元):");
	scanf("%d",&money);
	int exit = 0; //我们定义一个退出循环的标志 
	for(int one = 1;one < money * 10;one++){
		for(int two = 1;two < money * 10 / 2;two++){ 
			for(int five = 1;five < money *10 / 5;five++){
				if(one + two * 2 + five * 5 == money *10){
					printf("%d(元) 可以由 %d张一角\t%d张二角\t%d张五角组成!\n",money,one,two,five);
					exit = 1;
					break;
//					goto out;
				} 
			}
			if(exit){
				break;
			}
		}
		if(exit){
			break;
		}
	} 
//out:;		
	return 0;	
} 

运行结果:

七、1 + 1/2 + 1/3 +....+1/100

#include<stdio.h>
int main()
{
	/*1+1/2+1/3+....+1/100*/
	double sum = 1;
	for(int i = 2;i<=100;i++){
		sum = sum + 1.0 / i; 
	}
	printf("%f",sum);
	return 0;	
} 

运行结果:

八、 1 - 1/2 + 1/3 - 1/4 + 1/5 +.... + 1/100

#include<stdio.h>
int main()
{
    /*1 - 1/2 + 1/3 - 1/4 + 1/5 +.... + 1/100*/
	double sign = 1;
	double sum = 1;
	for(int i = 2;i<=100;i++){
		sign = -sign;  // 1 --> -1
		sum = sum + sign/i;
	}
	printf("%f",sum);
	return 0;
}

运行结果:

九、正序分解整数

~ 输入一个非负整数,正序输出它的每一位数字

~输入:123425

~输出:1 3 4 2 5

/*
  12345
  -- 1 2 3 4 5
  -- 5 4 3 2 1
*/
#include<stdio.h>
int main()
{
	int x = 0;
	int mask = 1;
	int digtal = 0;
	int d = 0;
	int ret = 0; // 用来保存第一轮的逆序值 
	int t = 0; //定义一个t来存放中间变量 
	printf("请你输入一个正整数:");
	scanf("%d",&x);
	t = x;
    // 我们先要判断 这个数的位数 来确定 mask 的值 
	while(x > 9){
		x = x / 10;
		mask = mask * 10;
	}  //因为要少算一次  123 -> mask = 100 1200 -> mask = 1000 
//	printf("%d\n",mask);
    // 先正序
    x = t;
    // 解题思路 
    /*
     12345 / 10000 -> 1
     12345 % 10000 -> 2345
     10000 / 10 -> 1000
     
     2345 / 1000  ->  2
     2345 % 1000  -> 345
     1000 / 10    -> 100
     
     345 / 100  -> 3
     345 % 100  -> 45
     100 / 10   -> 10
     
     45 / 10 -> 4
	 45 % 10 -> 5
	 10 / 10 -> 1
	 
	 5 / 1 -> 0
	 5 % 1 -> 0
	 1 / 10 -> 0 
	*/
    do{
		d = x / mask;
		printf("%d",d);
		if(mask > 9){
			printf(" ");
		}
		x = x % mask;
		mask = mask / 10;
	} while(mask > 0);
	printf("\n");
  //	printf("%d\n",ret);
  //	do{
  //			/*d = x % 10;
  //    	ret = ret * 10 + d;
  //    	x = x / 10;
  //		*/
  //	} while(x > 0);
    //	printf("%d\n",ret);
	x = t;
    //后逆序 
	do{
		digtal = x % 10; // 获取个位数 
		printf("%d",digtal); //输出个位数
        //如果 x >= 10 我们就输出空格 因为最后一位是小于 10 所以没有空格 
		if(x > 9){
			printf(" "); 
		}
		x = x / 10;
	} while(x > 0);
	return 0;
} 

运行结果:

十、最大公约数

方法一:

#include<stdio.h>
int main()
{
	int a = 0,b = 0; //定义两个整型的变量 
	int min = 0;
	int ret = 0; //保存最大公约数 
	printf("请你输入两个正整数:");
	scanf("%d%d",&a,&b);
	if(a > b){
		min = b;
	}else{
		min = a;
	}
// 如果到min都没有最约数的话最大公约数就是1 
	for(int i = 1;i <= min;i++){
		if(a % i == 0){
			if(b % i == 0){ 
				ret = i; 
//				break; //如果有break的话就是最小公约数 但 i 就要从 2 开始 
//				因为所有的数都能被1整除 没有意义  
			}
		}
	}
	printf("%d和%d的最大公约数是:%d",a,b,ret); 
	return 0;
}

方法二:

/*辗转相除法*/
// 1.如果b等于0,计算结束,a就是最大公约数
//2.否则,计算a除以b的余数,让 a等于 b 而b等于 那个余数
//3.回到第一步 
#include<stdio.h>
int main()
{
	int a = 0,b = 0,temp = 0;
	printf("请你输入两个整数:");
	scanf("%d%d",&a,&b);
	int c = a,d = b;
    /*
     代码核心
	 a    b    temp
	 18   24    18
	 24   18    6
	 18    6    0
	 6     0
	*/
		while(b !=0 ){
			temp = a % b;
			a = b;
			b = temp;
		}
		printf("%d 和 %d 的最大公约数是:%d",c,d,a);
	return 0;
} 

十一、求给定符合条件的整数集

 方法一:

#include<stdio.h>
int main()
{
	int i,j,k;
	int count = 0;
	int number = 0;
	scanf("%d",&number);
	i = number;
	while(i <= number + 3){
			j = number;
		while(j <= number + 3){
				k = number;
			while(k <= number + 3){
				if(i != k && i != j && j != k){
					printf("%d%d%d",i,j,k);
					count++;
					if(count % 6 == 0){
						printf("\n");
					}else{
						printf(" ");
					}
				}
				k++;
			}
			j++;
		}
		i++;
	} 
	return 0;
} 

方法二:

#include<stdio.h>
int main()
{
	int number = 0;
	int count = 0;
	scanf("%d",&number);
	for(int i = number;i <= number + 3;i++){
		for(int j = number;j <= number + 3;j++){
			for(int k = number;k <= number + 3;k++){
				if(i != k && i != j && j != k){
					printf("%d",i*100+j*10+k);
					count++;
					if(count % 6 == 0){
						printf("\n");
					}else{
						printf(" ");
					}
				}
			}
		}
	}
	return 0; 
} 

运行结果:

十二、水仙花数

方法一:

// 水仙数是大于100的三位数 
// 153 = 1^3 + 5^3 + 3^3; 
#include<stdio.h>
int main()
{
	int x = 0; // 要的位数 
	int i = 1; // 循环的每个数 
	int t = 0; // 保存每一个i的值 
	int sum = 0; // 保存每个数每个每个位上的立方和 
	int d = 0; // 获取每个数的每一位 
	int p = 0;
	int j = 0;
	scanf("%d",&x);
	int test = 1;
	while(i < x){
		test *= 10;
		i++;
	}
	i = test;
	while(i < test * 10){
		t = i;
		sum = 0;
		do{
			d = t % 10;
			p = d;
			j = 1;
			while(j < x){
				p  = p * d;
				j++;
			}
			sum = sum + p;
			t /= 10; 
		} while(t > 0);
		if(sum == i){
			printf("%d\n",i);
		}
		i++;
	}
	return 0;
} 

方法二:

#include<stdio.h>
int main()
{
	int x = 0;
	int t = 0;
	scanf("%d",&x);
	int test = 1;
    for(int i =1;i< x;i++){
    	test = test * 10;
	}
	int d = 0;
	int p = 0;
	int sum = 0;
	for(int i = test;i <= test * 10;i++){
		sum = 0;
		for(int t = i;t > 0;t /=10){
			  d = t % 10;
			  p = d;
			  for(int j = 1;j < x; j++){
			  	p = p * d;
			  }
			  sum = sum + p;
		}
		if(sum == i){
			printf("%d\n",i);
		}
		
	}
	return 0;	
} 

运行结果:

十三、九九乘法表

方法一:

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d",&n);
	int i = 0,j = 0; //变量初始话 
	i = 1; 
	while(i <= n){
		j = 1;
		while(j <= i){
			printf("%d*%d=%d",j,i,i*j);
			if(i * j < 10){
				printf("  ");
			}else{
				printf(" ");
			}
			j++;
		}
		printf("\n");
		i++;
	}
	return 0;
} 

方法二、

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d",&n);
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= i;j++){
			printf("%d*%d=%d\t",j,i,i*j);
		}
		printf("\n");
	}
	return 0;
}

运行结果:

十四、素数求和

#include<stdio.h>
#include<math.h>
int main()
{
	// 变量初始话 
	int m = 0,n = 0;
	int count = 0; //计数器 
	int sum = 0;
	int isPrime = 1; // 默认每一个数都是素数 
	scanf("%d%d",&m,&n);
	for(int x = m;x <= n;x++){
		isPrime = 1;
		if( x == 1){
			isPrime = 0;
		}  
		for(int i = 2; i <= sqrt(x);i++){
			if(x % i == 0){
				isPrime = 0;
				break;
			}
		}
		if(isPrime){
			count ++; 
			printf("%d\t",x);
			if(count % 5 == 0){
				printf("\n");
			}
			sum = sum + x;
		}
	} 
	printf("\n");
	printf("素数的个数为%d\n",count);
	printf("素数的和为:%d",sum);
	return 0;
}

运行结果:

十五、猜数字游戏

#include<stdio.h>
int main()
{
	int number,n;
	int inp;
	int finished = 0;
	int cnt = 0;
	scanf("%d%d",&number,&n);
	do{
		scanf("%d",&inp);
		cnt++;
		if(inp < 0){
			printf("Game Over\n");
			finished = 1;
		}else if(inp > number){
			printf("Too big\n");
		}else if(inp < number){
			printf("Too small\n");
		}else{
			if(cnt == 1){
				printf("Bingo!\n");
			}else if(cnt <= 3){
				printf("Lucky You!\n");
			}else{
				printf("Good Guess!\n");
			}
			finished = 1;
		}
		if(cnt == n){
			if(!finished){
			  printf("Game Over\n");	
			  finished = 1;
			}
		}
	}while(!finished);
	return 0;
}

运行结果:

#include<stdio.h>
int main()
{
//	double 表示的范围更大 所以要用double int 的范围没有 double 大
//  会出现奇奇怪怪的数字 
	int x = 0;
	double a = 2;
	double b = 1;
	double t = 0;
	double sum = 0.0;
	scanf("%d",&x);
	for(int i = 1;i <= x;i++){
		sum = sum + a / b;
		t = a;
		a = a + b;
		b = t;
	}
	printf("sum = %.2f",sum);
	return 0;	
} 

运行结果:

十七、最简约数

#include<stdio.h>
int main()
{
	int x1 = 0;
	int x2 = 0;
	int temp = 0; //中间变量 
	scanf("%d%d",&x1,&x2);
	int a = x1;
	int b = x2;
	// 实际上就是利用辗转相除法来求最大公约数 a 就是最后的最大公约数 
	while(b != 0){
		temp = a % b;
		a = b;
		b = temp; 
	}
	printf("最大公约数为:%d\n",a);
	printf("%d  %d\n",x1/a,x2/a);
	return  0;
} 

运行结果:

十八、输入任意个数比较大小

#include<stdio.h>
int main()
{
	int max = 0;
	int count = 1;
	int number = 0;
	int n =0;
	printf("请你输入你要输入几个数比较大小:");
	scanf("%d",&n);
	do{
		printf("请你输入第%d个数:",count);
		scanf("%d",&number);
		//如果 number < 0 
		if(number < 0){
			// 因为要赋初始值默认第一个为max 
			if(max == 0){
				max = number;
			}else {
				if(max < 0 && number < 0){
					if(-number < -max){
						max = number;
					}
				//这个可要可不要 
				}else if(max > 0 && number < 0){
				     max = max;
				} 
			}
		}else {
			if(number > max){
				max = number;
			}
		}
		count ++;
	} while(count <= n);
	printf("max = %d",max);
	return 0;
} 

运行结果:

一:全部为负数

 二都为正数

 任意整数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值