C语言学习笔记
循环
数数几位数
# include<stdio.h>
int main()
{
int x;
int n = 0;
printf("请输入您的数");
scanf("%d",&x);
n++;
x/=10;
while(x>0){
n++;
x/=10;
}
printf("%d\n",n);
return 0;
}
do-while循环
在进入循环的时候不做检查,而是在执行 完一轮循环体的代码之后,再来检查循环 的条件是否满足,如果满足则继续下一轮 循环,不满足则结束循环
# include<stdio.h>
int main()
{
int x;
int n = 0;
printf("请输入您的数");
scanf("%d",&x);
do {
n++;
x/=10;
}while(x>0);
printf("%d\n",n);
return 0;
}
do-while循环后面括号后要有“;”
do-while循环和while循环很像,区别是在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一 遍,然后再来判断条件。与while循环相同 的是,条件满足时执行循环,条件不满足时结束循环。
循环计算
算log_2^x
#include <stdio.h>
int main()
{
int x;
int ret=0;
scanf("%d",&x);
int t=x;//储存变量x
while(x>1){
x/=2;
ret++;
}
printf("log2 of %d is %d",t,ret);
return 0;
}
猜数游戏
- 让计算机来想一个数,然后让用户来猜,用户没输入一个数,就告诉他是大了还是小了,直到用户猜中为止,最后还要告诉用户他猜了多少次。
思路:
- 计算机随机想一个数,记在变量number里;
- 一个负责计次数的变量count初始化为0;
- 让用户输入一个数字a;
- count递增(加—);
- 判断a和number的大小关系,如果a大,就输出 “大”;如果a小就输出“小”;
- 如果a和number是不相等的(无论大还是小),程 序转回到第3步;
- 否则,程序输出“猜中”和次数,然后结束。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(0));
int number = rand()%100+1;
int count = 0;//猜了多少次
int a = 0;
printf("我已经想好了一个1到100之间的数.");
do{
printf("请猜猜这个1到100之间的数:");
scanf("%d",&a);
count++;
if(a>number){
printf("你猜的数大了。");
} else if(a<number){
printf("你猜的数小了。");
}
} while(a!=number);
printf("太好了,你用了%d次就猜到了答案。\n",count);
return 0;
随机数 :每次召唤rand()就得到一个随机的整数
%100 :“×% n ”的结果是[0,n-1]的一个整数
算平均数
- 让用户输入一系列的正整数,最后输入-1 表示输入结束,然后程序计算出这些数字 的平均数,输出输入的数字的个数和平均数。
- 算法
- 初始化变量sum和count为0;
- 读入number;
- 如果number不是-1,则将number 加入sum,并将count加1,回到 2;
- 如果number是-1,则计算和打印 出sum / count (注意换成浮点来 计算)。
#include <stdio.h>
int main()
{ int number;
int sum = 0;
int count = 0;
do{
scanf("%d",&number);
if (number !=-1){
sum += number;
count++;
}
} while(number !=-1);
printf("%f\n",1.0*sum/count);
return 0;
}
改
#include <stdio.h>
int main()
{ int number;
int sum = 0;
int count = 0;
scanf("%d",&number);
while (number !=-1){
sum += number;
count++;
scanf("%d",&number);
}
printf("%f\n",1.0*sum/count);
return 0;
}
数的逆序
整数的分解
- 一个整数是由1至多位数字组成的,如何分解出整数 的各个位上的数字,然后加以计算
- 对一个整数做%10的操作,就得到它的个位数;
- 对一个整数做/10的操作,就去掉了它的个位数;
- 然后再对2的结果做%10,就得到原来数的十位数了,依此类推。
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int digit;//表示数的每一位
int ret = 0; //结果
while(x>0) {
digit = x%10;//取出输入数的最后一位
x /= 10;//把数的最后一位丢掉
ret = ret*10 + digit; //结果*10+输入数的最后一位
}
printf("%d",ret);
return 0;
}
改进700→007结尾0的处理
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int digit;//表示数的每一位
int ret = 0; //结果
while(x>0) {
digit = x%10;//取出输入数的最后一位
printf("%d",digit) ;
x /= 10;//把数的最后一位丢掉
ret = ret*10 + digit; //结果*10+输入数的最后一位
}
// printf("%d",ret);
return 0;
}