【C语言入门】笔记二 (运算符)(后面我觉得像练习记录本Σ( ° △ °|||)︴

C中的运算符

算术运算符

算数运算有加法(运算符:+)、减法(运算符:-)、乘法(运算符:*)、除法(运算符:/)、求余(运算符:%)、自增(运算符:++)以及自减(运算符:--)

注:

  1. 如果相除的两个数都是整数的话,则结果也为整数小数忽略!(如:8/3=2)
  2. 如果两数中有一个为小数结果则为小数!(如:9.0/2 = 4.500000
  3. 求余的两数只适合两都是整数(如:10%3=1)(10.0%3则是错误的)
  4. 运算后的符号取决于被模数(运算符前面的数)的符号  [如:(-10)%3 = -1而10%(-3) = 1] 

自增运算符为“++”,其功能是使变量的值自增1;自减运算符为“--”,其功能是使变量值自减1(如:a++和++a等同于a=a+1,同理b--和--b等同于b=b-1)

赋值运算符

赋值运算符就是在简单赋值符“=”之前加上其它运算符构成,如a+=1等同于a=a+1a*=1等同于a=a*1,其它运算符同理。

关系运算符

注:>=,<=,==,!=这种符号之间不能存在空格。

关系表达式的值是“真”和“假”,在C程序用整数1和0表示。

逻辑运算符

  • 运算符 "&&" :逻辑与
  • 运算符 "||" :逻辑或
  • 运算符 "!" :逻辑非

三目运算符

格式为:表达式1 ? 表达式2 : 表达式3; 

先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。

运算符优先级比较

前四个都是小学就学过的,后几个需要记一下


-- 下方将按照课本学习记录的笔记 --


Return 0

main函数结束运行返回一个整数0,按照惯例,返回0则为程序运行正确

练习2-3

输出倒三角形

#include <stdio.h>
int main(void){
	printf("* * * *\n");
	printf(" * * *\n");
	printf("  * *\n");
	printf("   *");
	return 0; 
} 

求100°F对应的摄氏温度

自己写的:

#include <stdio.h>
int main(void){
	int c,f; //c为摄氏度,f为华氏度
	f=100;
	c=5*(f-32)/9;
	printf("摄氏度:%d,华氏度:%d",c,f);
	return 0; 
} 

printf()输出结果,将双引号内第一个%d输出c的值,第二个%d输出f的值

练习2-4

求华氏度150°F对应的摄氏温度

#include <stdio.h>
int main(void){
	int c,f; //c为摄氏度,f为华氏度
	f=150;
	c=5*(f-32)/9;
	printf("摄氏度:%d,华氏度:%d",c,f);
	return 0; 
}

练习2-6

计算物体自由下落的距离:100米高空落下,前三秒内下落的距离,重力速度为10m/s²

#include <stdio.h>
int main(void){
	int time,height,g; //时间,下降的高度,重力加速度 
	time=3;
	g=10;
	height=g*time*time/2;
	printf("3秒下落的高度:%d米",height);
	return 0;
}

2.3

2.3.5常用的数学函数

常用的调用输入输出函数,要加#include <stdio.h>,调用数学函数,则要加#include <math.h>

练习2-8

计算摄氏温度,输入华氏温度,输出对应的摄氏温度

#include <stdio.h>
int main(void){
	int c,f;
	printf("输入华氏度:\n");
	scanf("%d",&f);
	c=5*(f-32)/9;
	printf("对应的摄氏度为:%d",c);
	return 0;
}

练习2-9

输入两个正整数,输出其和、差、积、商

#include <stdio.h>
int main(void){
	int int1,int2;
	printf("依次输入两个正整数\n");
	scanf("%d%d",&int1,&int2);
	printf("和为:%d\n",int1+int2); 
	printf("差为:%d\n",int1-int2); 
	printf("积为:%d\n",int1*int2); 
	printf("商为:%d",int1/int2); 
	return 0;
}

练习2-10

计算分段函数,并且保留一位小数

#include <stdio.h>
int main(void){
	double x,y;
	printf("请输入x的值\n");
	scanf("%lf",&x);
	if(x!=0){
		y=1/x;
	}else{
		y=0;
	}
	printf("f(%.1f)的结果为:%.1f",x,y);
	return 0;
}

注:%m.nf是限定宽度为m,保留n位小数。数据宽度小于m则向左边补空格,数据宽度大于m则实际输出;同理%md是限定宽度为m,数据宽度小于m则向左边补空格,数据宽度大于m则实际输出.....搞了我半天,翻了翻课本后面才知道  (°ー°〃)

练习2-11

#include <math.h>放入头部调用数学函数

分段函数,保留两位小数

#include <stdio.h>
#include <math.h>
int main(void){
	double x,y;
	printf("输入X:\n");
	scanf("%lf",&x);
	if(x<0){
		y=pow(x+1,2)+2*x+1/x; //pow(x,n)是x的n次方 
	}else{
		y=sqrt(x); //sqrt(x)是x开方 
	}
	printf("f(%.2f)的结果为:%.2f",x,y);
	return 0;
}

2.4

For语句

.....
for(表达式1;表达式2;表达式3){
循环体语句
}
.....

练习2-12

输出华氏-摄氏转换表,输入两个整数[lower,upper],每次增加2℉

#include <stdio.h>
int main(void){
	int lower,upper,i;
	double c;
	printf("输入区间最低华氏度:\n");
	scanf("%d",&lower);
	printf("输入区间最高华氏度:\n");
	scanf("%d",&upper);
	if(lower>=upper){
		printf("您输入的区间有误");
	} else {
		for(i=lower;i<=upper;i+=2){
			c=5*(i-32)/9; 
			printf("%4d%6.1f\n",i,c);
		}
	}
	return 0;
}

练习2-13

求给定序列前n项和(1+1/2+1/3+1/4+1/5...),输入一个整数n计算其前n项和

#include <stdio.h>
int main(void){
	int n,num;
	double y,i;
	printf("请输入整数n:\n");
	scanf("%d",&n);
	y=0;
	for(i=1;i<=n;i++){
		y=y+(1/i);
	}
	printf("结果为:%f",y);
	return 0;
}

注:这里i和y都要为浮点数,不然例如1/2的情况y则为0了

练习2-14

求给定序列前n项和(1+1/3+1/5+1/7+1/9...),输入一个整数n计算其前n项和

#include <stdio.h>
int main(void){
	int n,num;
	double y,i;
	printf("请输入整数n:\n");
	scanf("%d",&n);
	y=0;
	for(i=1;i<=n;i++){
		y=y+(1/(2*i-1));
	}
	printf("结果为:%f",y);
	return 0;
}

练习2-15

求给定序列前n项和(1-1/4+1/7-1/10+...),输入一个整数n计算其前n项和

#include <stdio.h>
int main(void){
	int n;
	double flag=-1,y=0,i;
	printf("请输入整数n:\n");
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		flag=-flag;
		y=y+flag*(1/(3*i-2));
	}
	printf("结果为:%f",y);
	return 0;
}

练习2-14和2-15主要是要找到通项公式,要不然不好以简单的方式完成

练习2-16

执行下面程序,sum的值是?

for(i=1;i<=10;i++){
	sum=0;
	sum=sum+i;
}

初看这个程序,是不是以为就是10的阶乘呢?其实不是,sum在循环语句里,所以每一次循环下来sum重新归零然后再相加,最后的结果是10!(坑

2.5

练习2-17

#include <stdio.h>
#include <math.h>
int main(void){
	int i,n;
	double power;
	printf("输入整数n:\n");
	scanf("%d",&n);
	for (i=1;i<=n;i++){
		power=pow(3,i);
		printf("pow(3,%d)=%.0f\n",i,power);
	}
	return 0;
}

这里我发现个问题,当变量power数据为整数(int)时,计算到3的20次方时会出问题,如图:

原来是3486784401超过了int的范围的最大值2147483647从而导致溢出回到了最小负整数-2147483648

而doule的范围最大值是2^52 = 4503599627370496,因为指数爆炸所以这里所计算到的数字可能很大,所以使用doule来定义变量,而输出则使用显示0位小数

练习2-18

输入两个整数m和n,计算组合数 C_{n}^{m}=\frac{n!}{m!(n-m)!},函数类型为double

#include <stdio.h>
double fact(int n);
int main(void){
	int m,n,i,c;
	printf("请输入以一个整数n\n"); 
	scanf("%d",&n);
	printf("请输入第二个整数m\n");
	scanf("%d",&m);
	c=fact(n)/(fact(m)*fact(n-m));
	printf("组合数为:%d",c);
	return 0;
}
double fact(int n){
	int i,c;
	c=1;
	for(i=1;i<=n;i++){
		c=c*i;
	}
	return c;
}

习题

从习题中获得的知识

  1. 运算符的顺序排列:算数运算符>关系运算符>赋值运算符
  2. C语言的3种基本控制结构是:顺序结构选择结构循环结构
  3. 当一个变量未被赋值时,它为0  (纠错,未必为0)

程序设计题1

输入4个整数,计算并输出这些整数和与平均值,平均值精确到小数点后面1位

#include <stdio.h>
int main(void){
	int num1,num2,num3,num4,result1;
	printf("请输入四个整数:\n");
	scanf("%d%d%d%d",&num1,&num2,&num3,&num4);
	result1=num1+num2+num3+num4;
	double result2=result1;
	result2=result2/4;
	printf("整数和为:%d\n",result1);
	printf("平均数为:%.1f",result2);
	return 0;
}

程序设计题2

月用电量>=50千瓦时,电费为0.53元一千瓦时,超过50千瓦时时,超过部分的用电量电费没千瓦时上调0.05元。输入用户使用的月用电量,输出用户应支付的电费,若电量小于0,则输出"Invalid Value!"

#include <stdio.h>
int main(void){
	double used;
	printf("请输入用电量:\n");
	scanf("%lf",&used);
	if(used<=50){
		if(used<0){
			printf("Invalid Value!");
		}else{
			printf("电费:%.2f",used*0.53);
		}
	} else {
		printf("电费:%.2f",26.50+(used-50)*0.58);
	}
	return 0;
} 

程序设计题3

序列求和,输入俩个正整数m和n,求,结果保留6位小数

#include <stdio.h>
#include <math.h>
int main(void){
	int m,n;
	double i,y=0;
	printf("请输入整数m:\n");
	scanf("%d",&m);
	printf("请输入整数n:\n");
	scanf("%d",&n);
	for(i=m;i<=n;i++){
		y=y+(pow(i,2)+1/i);
	}
	printf("结果为:%.6f",y);
	return 0;
}

程序设计题4

求交错序列前n项和,输入一个正整数n,计算交错序列1-2/3+3/5-4/7+5/9-6/11+...的前n项和

#include <stdio.h>
int main(void){
	int n;
	double y=0,num1=1,num2=1,flag=1,i;
	printf("请输入整数n:\n");
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		y=y+flag*(num1/num2);
		flag=-flag;
		num1=i+1;
		num2=(i+1)*2-1;
	}
	printf("结果为:%f",y);
	return 0;
} 

程序设计题5

输入正整数n,计算1+√2+√3+...+√n的值(保留两位小数)

#include <stdio.h>
#include <math.h>
int main(void){
	int n,i;
	double y=0;
	printf("请输入正整数n\n");
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		y=y+sqrt(i);
	}
	printf("结果为:%.2f",y);
	return 0;
} 

程序设计题6

给定序列前n项和(1!+2!+...),输入正整数n,求e=1!+2!+3!+...+n!的值。要求定义和调用函数fact(n)计算n!,函数类型时double

#include <stdio.h>
double fact(int n);
int main(void){
	int i,n;
	printf("请输入整数n\n");
	scanf("%d",&n); 
	double e=0;
	for(i=1;i<=n;i++){
		e=e+fact(i);
	}
	printf("结果为:%.0f",e);
	return 0;
}
double fact(int n){
	int i,y=1;
	for(i=1;i<=n;i++){
		y=y*i;
	}
	return y;
}

这周的任务结束!提前祝各位中秋快乐!

前部分整理自慕课网"C语言入门"课程,部分文字及图片来自原课程

后部分整理自书籍《C语言程序设计》

如有错误,欢迎纠正

如有侵权,请联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值