欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c专接本第二章

程序员文章站 2024-02-02 18:31:52
...

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
相关标签: c专接本 c++