您的位置:首页 > 编程语言 > C语言/C++

网易云课堂程序设计入门—C语言第三周 循环学习笔记

2016-11-23 10:07 309 查看

第三周 循环

标签(空格分隔): 程序设计入门—C语言

3.1 循环

3.1.1 循环

//数数几位数----------------------------------------------------------------
#include<stdio.h>
int main() {
int num ;
int n=0;
n++;
scanf("%d",&num);

//根据范围判断
if(num>999)
{
n=4;
} else if(num>99)
{
n=3;
}else if (num>9)
{
n=2;
}
printf ("%d\n",n);
//题目明确四位及以下的整数,简化了判断,反过来不行
//用">"来判断的时候,从高处往下走,因为从高处往下判断,不需要判断上限

//while循环
num/=10;
while (num>0){
n++;
num/=10;
}
printf ("%d\n",n);

//do while循环
do
{
n++;
num/=10;
}while(num>0);
printf ("%d\n",n);

return 0;
}


复合赋值

5个算术运算符,+-*/%,可以和赋值运算符”=”结合起来,形成复合赋值运算符:
+=、-=、*=、/=、%=


total +=(sum+100)/2; --> total = total + (sum+100)/2;


total *= sun+12; --> total = total*(sum + 12);


递增递减运算符

”++”和”–”是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量,这两个运算符分别叫做递增和递减运算符,它们的作用是给这个变量+1或-1

count++; count += 1; count = count + 1;


前缀后缀

++和–可以放在变量前面,叫做前缀形式,也可以放在变量后面,叫做后缀形式

a++的值是a+1以前的值,++a的值是a+1以后的值,无论哪个

3.1.2 while循环

while (条件){
语句;
}
//------------------------
do{
<循环体>
}while(循环条件);
//两种循环的区别是在什么时候做判断,判断的条件是什么


while循环

循环体内要有改变条件的机会

如果我们把while翻译成当,那么一个while循环的意思就是:当条件满足时,不断的重复循环体内的语句

循环之前判断是否继续循环,所以有可能循环一次也没有被执行

条件成立是循环继续的条件

看程序运行结果

人脑模拟计算机的运行,在纸上列出所有的变量,随着程序的进展不断重新计算变量的值。当程序运行结束时,留在表格最下面的就是程序的最终结果。

验证

测试程序常使用边界数据,如有效范围两端的数据、特殊的倍数等

个位数,10,0,负数

在程序适当的地方插入printf输出变量内容,来调适程序

在程序中输出hr1 hr2看程序运行到哪

3.1.4 do-while循环

do-while循环

在进入循环的时候不做检查,而是在执行完循环体的一段代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环

两种循环

do-while循环和while循环很像,区别是在循环体结束的时候才来判断条件。也就是说,无论如何,循环体都会至少执行一遍,然后再来判断条件。

与while循环相同的是,条件满足时执行循环,条件不满足时结束循环

3.2 循环计算

小套路

计算之前先保存原始的值,后面可能有用

//求平均数----------------------------------------------------------------
#include<stdio.h>
int main(){
int num;
int sum=0;
int n=0;

scanf("%d",&num);   /*这个要先读一遍,否则将scanf写在循环体第一行,输入-1会在sum中-1*/
while (num != -1){
sum+=num;
n++;
scanf("%d",&num);
}
double average=1.0*sum/n;
printf("%f\n",average);

return 0;
}

//猜数游戏--------------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
srand(time(0));
int num=rand()%100+1;  //生成一个随机数,%100即得到一个0-99的数字
int count=0;
int b;

printf("告诉我你猜的1-100之间的数字");
do{
scanf("%d",&b);
count++;
if (b>num){
printf("猜的数字大了!告诉我你猜的:");
}else if(b<num){
printf("猜的数字小了!告诉我你猜的:");
}

}while(num!=b);

printf("\n***恭喜你,猜对了!***\n***  一共猜了%d次  ***",count);

//逆序的整数----------------------------------------------------------------
#include<stdio.h>
int main(){
int num ;
scanf("%d",&num);
int a;//取每一位   700-->007
int ret=0;//结果  700-->7

do{
a=num%10;
num=num/10;
printf("%d",a);
ret=ret*10+a;
}while(num>0);

printf("\n%d",ret);
return 0;
}


第三周编程题

1奇偶个数(5分)

题目内容:你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。

输入格式:一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。

输出格式:两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。

输入样例: 9 3 4 2 5 7 -1

输出样例: 4 2

#include <stdio.h>
int main()
{
int i;
int ji = 0, ou = 0;
scanf("%d", &i);

while( i != -1){
if( i%2 == 0){
ou = ou + 1;
}else{
ji = ji + 1;
}
scanf("%d", &i);
}

printf("%d %d", ji, ou);
}


2数字特征值(5分)

题目内容:对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

这里的计算可以用下面的表格来表示:

数字342315
数位654321
数字奇偶
数位奇偶
奇偶一致001101
二进制位值32168421
按照二进制位值将1的位的位值加起来就得到了结果13。

你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

输入格式:一个非负整数,整数的范围是[0,100000]。

输出格式:一个整数,表示计算结果。

输入样例: 342315

输出样例: 13

#include <stdio.h>
int main()
{
int num, sum;//计数和输出
int i, j=1;  //记录数字和数位
int n=1;     //二进制位值
scanf("%d", &num);

while (num > 0){
i = num % 10;
if( i%2 == j%2 ){
sum = sum + n;
}
n = n * 2;
j = j + 1;
num = num/10;
}
printf("%d",sum);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 网易