算平均数
- 让用户输入一系列的正整数,最后输入-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;
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,就得到原来数的十位数了;
- 以此类推。
数的逆序
- 输入一个正整数,输出逆序的数
- 结尾的0的处理
#include<stdio.h>
int main()
{
int x;
// scanf("%d",&x);
x = 12345;
int digit;
int ret = 0;
while(x>0){
digit = x%10;
//printf("%d\n",digit);
ret = ret*10 + digit;
printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);
x /=10;
}
printf("%d",ret);
return 0;
}
for循环
for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行调整,比如加1或者减1
for(i=0;i<5;i=i+1){
printf(“%d”,i);
}
for = 对于
- for(count=10;count>0;count–)
- 就读成:“对于一开始的count=10,每count>0时,重复做循环体,每一轮循环在做完循环体内语句后,使得count–。”
阶乘
- n!= 1x2x3x4x…xn
- 写一个程序,让用户输入n,然后计算输出n!
- 变量:显然读用户的输入需要一个int的n,然后计算的结果需要用一个变量保存,可以是int的factor,在计算中需要有一个变量不断地从1递增到n,那可以是int的i
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int fact =1;
int i =1;
while(i <= n){
fact *= i;
i++;
}
printf("%d!=%d\n",n,fact);
return 0;
}
或
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int fact =1;
int i =1;
for(i=1;i<=n;i++){
fact *= i;
}
printf("%d!=%d\n",n,fact);
return 0;
}
for( i=1; i<=n; i++ )
i=1;是初始动作
i<=n;循环继续的条件
i++ 循环每轮要做的动作
循环的计算和选择
for(;条件;) == while(条件)
循环选择
- 如果有固定次数,用for
- 如果必须执行一次,用do-while
- 其他情况用while
循环控制
素数
- 只能被1和自己整除的数,不包括1
- 2,3,5,7,11,13,17,19…
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int i;
int isprime = 1; // x是素数
for( i=2; i<x; i++ ){
if( x % i == 0){
isprime = 0;
break;
}
}
if( isprime == 1){
printf("是素数\n");
}else{
printf("不是素数\n");
}
return 0;
}
break和continue
- break:跳出其所在的循环
- continue:跳过循环这一轮剩下的语句进入下一轮
嵌套的循环
- 循环里面还是循环
100以内的素数
#include<stdio.h>
int main()
{
int x;
//scanf("%d",&x);
x = 6;
for(x = 2; x<100; x++ ){
int i;
int isprime = 1; // x是素数
for( i=2; i<x; i++ ){
if( x % i == 0){
isprime = 0;
break;
}
}
if( isprime == 1){
printf("%d ",x);
}
}
printf("\n");
return 0;
}