一 、判断一个整数的位数:
#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;
}
运行结果:
一:全部为负数
二都为正数
任意整数