C Primer Plus CH6.C控制语句:循环

C语言有三种循环:while,for,do while
P138summing

//根据用户键入的整数求和
#include<stdio.h>
int main(void){
	long num;
	long sum=0L;
	int status;
	printf("please enter an integer to be summed\n");
	printf("q to quit\n");
	
	status=scanf("%ld",&num);
	while(status==1){
		sum+=num;
		printf("please enter another num\n");
		status=scanf("%ld",&num);
	}
	printf("the sum is %ld",sum);
	
	return 0;
} 

在这里插入图片描述
scanf()返回成功读取项的数量,如果用户输入的不是数字scanf()将会读取失败并返回0.
每次循环都被称为一次迭代
关系运算符:< = > == != <= >=
浮点数比较因为浮点数的舍入误差,会导致逻辑上相等的两数并不相等。使用fab()函数可以方便的比较浮点数,该函数可以返回一个浮点值的绝对值。

#include<math.h>
#include<stdio.h>
int main(void){
	const double ANSWER=3.14159;
	double response;
	printf("what is the value of pi\n");
	scanf("%lf",&response);
	while(fabs(response-ANSWER)>0.0001)
	{
		printf("try again\n");
		scanf("%lf",&response);
	}
	printf("close enough");
	
	return 0;
}

在这里插入图片描述
对于C语言而言表达式为真的值是1,表达式为假的值是0.并且一般而言所有的非零值都是true,只有0被视为假
P148 bool类型

#include<stdio.h>
int main(void){
	long num;
	long sum=0L;
	_Bool input;
	printf("please enter an integer");
	printf("enter q to quit:  ");
	
	input=scanf("%d",&num);
	while(input){
		sum+=num;
		printf("please enter another num,use q to quit:  ");
		input=scanf("%d",&num);
	}
	printf("result is %d",sum);
	
	return 0;
}

在这里插入图片描述
关系运算符的优先级比算术运算符低(包括+ -),但是比赋值运算符高并且关系运算符之间也有两种不同的优先级 高优先级组:<<= >>= 低优先级组:== != ,关系运算符的结合律也是从左往右的。

不确定性循环,指在测试表达式为假之前不知道要执行多少次循环,还有一类叫做计数循环

for循环,将计数器的初始化,测试和更新结合在一起。
P151打印一个立方表

#include<stdio.h>
int main(void){
	int num;
	printf("   n   ncubed\n");
	for(num=1;num<=6;num++){
		printf("%4d %4d\n",num,num*num*num);
	}
	return 0;
}

在这里插入图片描述
1.在for循环中可以省略表达式但不可以省略分号
2.省略第二个语句将会永远为真
3.第一个表达式不一定是给变量赋值,也可以使用printf
P154 for-show

#include<stdio.h>
int main(void){
	int num=0;
	for(printf("keep entering nums\n");num!=6;){    ///在执行其他部分前第一部分只执行一次
		scanf("%d",&num);
	}
	printf("that is the one i want");
	return 0;
}

在这里插入图片描述

其他赋值运算符:+= *= %=。。。

注:x*=3y+12与x=x(3*y+12)相同

//逗号运算符扩展了for循环的灵活性
P156 postage

#include<stdio.h>
int main(void){
	const int FIRST_OZ=46;  //2013邮费
	const int NEXT_OZ=20 ;   //2013邮费
	 
	int ounces,cost;
	printf("  ounces   cost\n");
	
	for(ounces=1,cost=FIRST_OZ;ounces<=16;ounces++,cost+=NEXT_OZ){
		printf("%5d %9.2f\n",ounces,cost/100.3);
	}
	return 0;
}

在这里插入图片描述
//逗号是一个序列点,即逗号左侧的所有副作用都在逗号右侧产生作用
例:int a=200,300; //a的值为200 相当于int a=200; 300;
int a=(200,300) //a的值为300

P158zeno悖论计算1+1/2+1/4+1/8.。。。。

#include<stdio.h>
int main(void){
	int t;   //项计数
	double time,power;
	int limit;
	
	printf("enter the number of terms you want: ");
	scanf("%d",&limit);
	for(time=0,power=1,t=1;t<=limit;t++,power=power*2){
		time+=1.0/power;
		printf("time = %f when terms= %d\n",time,t);
	} 
	
	return 0;
}

在这里插入图片描述
dowhile循环: while与for循环都是入口条件循环,即在每次迭代前都要检查条件是否成立,所以有可能不执行代码。 C语言还有出口条件循环,即在每次迭代后检查条件是否成立。
P159dowhile

#include<stdio.h>
int main(void){
	const int secret_code=13;
	int code_entered;
	do
	{
		printf("please enter the secret_code number\n");
		scanf("%d",&code_entered);
	}while(code_entered!=secret_code);
	printf("you are right");
	
	return 0;
} 

在这里插入图片描述
do while的通用格式
do
statement //statement可以是一条语句或复合语
while(expression);

**嵌套循环:**指在一个循环中包含另一个循环,常用于按行和列显示数据,一个循环用于处理行另一个循环用于处理列

#include<stdio.h>
#define ROWS 6
#define CHARS 10
int main(void){
	 int row;
	 char ch;
	 
	 for (row=0;row<ROWS;row++){
	 	for(ch='A';ch<('A'+CHARS);ch++){
	 		printf("%c",ch);
		 }
		 printf("\n");
	 }
	 return 0;
}
 

在这里插入图片描述

**P163rows2:**可以使用外部循环控制内层循环

#include<stdio.h>
int main(void){
	const int ROWS=6;
	const int CHARS=6;
	int row;
	char ch;
	
	for(row=0;row<ROWS;row++){
		for(ch=('A'+row);ch<('A'+ROWS);ch++){
			printf("%c",ch);
		}
		printf("\n");
	}
}

在这里插入图片描述

**数组(array)**是按顺序储存的一系列类型相同的值,通过下标访问数组中单独的项或元素,
声明:float debts【20】
这是一个内含20个元素的数组,每个元素都可以存储float内型的值 debts【0】 debts【1】直到debts【19】
注意数组元素的编号不是从1开始的
debts【2】=32.54
scanf(“%f“,&debts【2】); //c编译器不会检查数组的下标是否正确

注意字符数组与字符串的区别在普通字符数组的末位加上\0的空字符才是字符串也是字符数组

P165 score

#include<stdio.h>
#define SIZE 10
#define PAR 72
int main(void){
	int index,score[SIZE];
	int sum =0;
	float average;
	
	printf("enter %d golf scores:",SIZE);
	for(index=0;index<SIZE;index++){
		scanf("%d",&score[index]);
	}
	printf("the scores read are as follows:\n");
	for(index=0;index<SIZE;index++){
		printf("%d\n",score[index]); 
	} 
	return 0;
} 

p167 POWER

#include<stdio.h>
double power(double n,int p);
int main(void){
	double x,xpow;
	int exp;
	
	while(scanf("%lf %d",&x,&exp)==2){
		xpow=power(x,exp);  //函数调用
		printf("%.3f的%d次方是%.5f",x,exp,xpow);
		printf("输入另一组数,输入q退出"); 
	}
	return 0;
} 

double power(double n,int p)
{
	double pow=1;
	int i;
	
	for(i=1;i<=p;i++){
		pow*=n;
	}
	return pow;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值