c专接本第二章

print输出

c格式符

printf("%c",xxx);
一个整数只要它的值在0-255范围里,也可以用字符形式输出,在输出前将整数转换成相应的ASCII字符;反之一个数据也可以用整数形式输出

s格式符——用来输出一个字符串

printf("%s",xxx);

  • %s:按原长度输出字符串 也可以将char数组转化为字符串输出
  • %ms: 输出的字符串占m列,如果字符串长度大于m突破限制,小于m左边补空格“ xxxx”
  • %-ms: 如果串长小于m,向右补空格 “xxxx ”
  • %m.ns:输出占m列,但只取字符串中左端n个字符。输出在列的右侧,左补空格。如果n>m则自动取值,保证字符正常输出
  • %-m.ns:m,n同上n在左侧输出,空格补在右面
    数组名是地址值常量,指针是地址值变量
//给数组赋值
int a[10];
for(i=0;i<10;i++) scanf('%d:,& a[i]);

f格式符——以小数形式输出

e格式——以指数形式输出

用作于scanf输入时候可以接收小数

g格式——用来输出实数

以数值大小自动选择f格式或者e格式,自动选择宽度较小的格式,不输出无意义零(若果f格式输出是保留六位小数,可能会有无意义0,而实数选择f格式后后面的无意义零会被变成空格

例:

  • f格式:“32.133000”
  • g格式:“32.133 ”

scanf输入

输入规范

scanf越简单越好scanf(%d%c%d),输入时就不能有空格,如:10c20,并且较为复杂计算机容易出错,故不推荐这种复杂的输入形式

注意:

  1. 不能加空格是因为中间是字符数据空格也算是一个变量,%d%d这用形式要以空格和回车分割
  2. %3d%3d这样格式就不需要空格分隔了,但也可以空格分隔

输入说明

  1. %后的“*”附加说明符,用来表示跳过它对应的数据
    • 例 scanf("%2d,%*3d,%2d",&a,&b);
    • 输入 12,456,67
    • 结果 a=12 b=67
  2. 输入数据不能规定精度
    • scanf("%7.2f",&a);
    • 结果 0.000000
  3. 字符数据中间不能空格划分,空格也算是一个字符

各种程序结构

顺序结构

概念:每条语句必须执行切只能执行一次,没有执行不到或执行多次的语句

#in inclued<maht.h>中含有sqrt(int a),将数值a开方

例题1:知道三角形三条边求面积

#include <math.h>
#include <stdio.h>
int main()
 {
 float a,b,c,s,area;
 scanf("%f%f%f",&a,&b,&c);//获取三条边
 s=(a+b+c)/2;
 area=sqrt(s*(s-a)*(s-b)*(s-c));//调用开方
 printf("%f",area);	
 }

例题2:求ax*x+bx+c=0的根,a,b,c由键盘输入,设b*b-4ac>0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKzGboBA-1617259390637)(en-resource://database/6269:1)]

公式如上:

#include <math.h>
#include <stdio.h>
int main()
{
 	float a,b,c,disc,x1,x2,p,q;
 	scanf("%f%f%f",&a,&b,&c);
 	disc=b*b-4*a*c;//判别式
 	p=-b/(2*a);//公式一部分
 	q=sqrt(disc)/(2*a); //公式一部分
 	x1=p+q;x2=p-q; //求解
 	printf("x1=%f,x2=%f",x1,x2);
}

选择结构程序设计

内容:

  1. 逻辑运算符与逻辑表达式
  2. if语句的使用
  3. 条件运算符与switch语句的运用
1. 关系运算符

运算符:> < = >= <= != ==
比较大小运算符优先级高于判断是否相等运算符
结合性:自右向左

2. 逻辑运算符

运算符:

  • ! 非
  • && 与
  • || 或

逻辑运算符要大于赋值运算符

规则:

  1. Expl&&exp2:先算expl,若值为零(0就是false)停止往后运算
  2. Expl||exp2:先算expl,若其值为1(1就是true),停止往后运算

用处:可以减少一次判断,提高运行效率

3. 常用要求表达式
  1. ch是小写英文字母
    • ch>=‘a’&&ch<=‘z’
  2. ch是大写英文字母
    • ch>=‘A’&&ch<=‘Z’
  3. ch是数字符
    • ch>=‘0’&&ch<=‘9’
  4. Year是闰年,闰年是能被4整除不能被100整除,或者能被400整除的数字考试不会解释闰年是什么,这个一定要记住!!!
4. if(表达式)语句

解释:表达式为真,那么执行语句2

if语句的变种

  • if (表达式) 语句1; else 语句2;
  • if( 表达式) 语句1 ;else if(表达式) 语句2.;。。。

注意:语句最好括上大括号

if语句的嵌套

if(条件一){
    if(条件二){
        y
    }
}}

else配对if原则一个else应与其之前距离最近的且没有与其他else配置
对的if配对

三目运算符:表达式1(关系运算符)表达式2 ? 成立时执行:不成立执行;
三目运算符可以简化if语句的开发
例子:

if(a>b){输出a};
else {输出b}
//上面等效于下面
a>b?输出a:输出b;

下面是if语句的练习
例题1 :比较三个数的大小

#include <math.h>
#include <stdio.h>
int max(int a,int b,int c);  //创建max函数
int main()
{
	int max1=max(1,6,9);
	printf("%d",max1);
} 

//设置max函数的方法
int max(int a,int b,int c){
	a=a>b?a:b;
	a=a>c?a:c;
	return a;
}

例题2 :把输入字符中的小写字符转化成大写并输出

#include <stdio.h>
int main()
{	
	char ch;
	scanf("%c",&ch);
	ch=(ch>'a'&&ch<'z')?ch-32:ch;
	printf("%c",ch);
}

5. switch语句

使用形式

switch(变量)
{
    case 常量表达式1:语句序列1;//判断变量是否满足表达式1,满足则继续执行
    case 常量表达式2:语句序列2 ;break;//判断变量是否满足表达式2,满足则跳出循环
    case 常量表达式3:语句序列3;break;//判断变量是否满足表达式3,满足则跳出循环
    case 常量表达式4:语句序列4;break;//判断变量是否满足表达式4,满足则跳出循环
    //可以写无限个
    default: 语句序列n+1//都不要满足执行default语句,这里执行完后switch语句结束,不需要break;
}

注意有无break的区别


例题阶段
例题1:小明要运送w吨货物,货物公司现有如下优惠,

  • 250<=w<=500 %2折扣
  • 500<=w<=1000 %5折扣
  • 1000<=w<=2000 %8折扣
  • 2000<=w<=3000 %10折扣
  • 3000<=w %15折扣
    问基本运维为p,距离为s,折扣为d,总运费为f=p*w*s*(1-d),运费为多少钱
#include <stdio.h>
int main()
{
	int w,s1;
	float p,s,d,f;
	scanf("%f%d%f",&p,&w,&s);
	s1=w/250;
	switch(s1)
	{
		case 1 : d=0.02;break;
		case 2 : d=0.05;break;
		case 3 : break;
		case 4 : d=0.08;break;
		case 5 : break;
		case 6 : break;
		case 7 : break;
		case 8 : break;
		case 9 : d=0.1;break;
		case 10 : break;
		case 11 : break;
		case 12 : d= 0.15;break;
		default : d=0.15;
	}
	f=p*w*s*(100-d*100)/100;
	printf("需要花费%f",f);
		 	
} 

问题例题:

  1. 若有定义:inta=18,b=5,c;,执行语句c=a/b+0.4;后,c的值为?
  • 解: a和b都是整型,所以a/b=3,会把0.6省略掉,3+0.4=3.4;

  1. 若变量a是int 类型,并执行了语句:a=‘B’ +1.6,那么a的值为多少,是什么类型
  • 解:int 类型占用4个字节,而float类型也是占用4个字节,不不会发生类型转换,结果是‘B’的ASCII值加上1

  1. 已知:int a=4;下列表达式的值,哪一个等于0?
  • a%6 (4)
  • a/4 (1)
  • a?a+5:a-5 (这里涉及到一个知识点,非零值为真)(9)
  • !a (非零量取反结果为0)

  1. 设 m,n,a,b,c,d均为2,(m=a==b)||(n=c==d),m,n的值为
  • a==b成立,故为真,m值为1
  • 左侧成立,右边不计算
  • n保持原样,值为2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值