C语言总结 算法与控制语句

本文介绍了C语言中算法的基本概念和特点,包括有穷性、确定性、可行性等,并探讨了算法的表示方法如流程图和计算机语言。文章详细讲解了C语言的三种基本控制结构:顺序结构、选择(分支)结构和循环结构,以及相关的输入输出操作,如printf和scanf函数的使用。此外,还讨论了条件语句(if,switch)和循环语句(while,for,do-while)的细节,包括break和continue的用法。
摘要由CSDN通过智能技术生成

一.需要掌握的知识点

  1. 算法的概念与特点:算法就是解决问题的方法和步骤,沃斯曾经提出:数据结构+算法=程序

算法的表示:流程图和计算机语言(平行四边形是输入输出,菱形为判断,)

算法的特点:1.有穷性2.确定性3.可行性4.有0或多个输入,5.有1或多个输出

  1. 三种基本结构

分类

a.顺序结构

b.选择(分支)结构

c.循环结构(当型(while for)和直到型(do while))

特点(不要求掌握,不是考点):1.只有一个入口和一个出口 2.每一个部分都可能被执行3.不存在死循环

  1. 标准输入输出

  • 格式化输入输出

printf(“%[<修饰符>]<格式字符>”,输出项列表)

常用的输出格式字符(已经将最常用的省略):

%x(或者%X),%o,%e(或者%E)(指数一般输出整数部分,‘.’,小数部分总共保留8位),

常有的修饰符

#在八进制和十六进制前显示:0,0x;

0(往往结合m(数据宽)一起使用),在不足的位置前补充0

+:显示+

-:左对齐

.n:精度,12.12如果输出的时候是“%.1f”那么输出就是12.1

关于输出宽度的说明:

一般浮点数输出时小数点后保留6位,m表示的是整数部分+小数部分+‘.’整体的位数,如果一个数它本身就比m 宽,那么还是输出这个数本身,m不起限制作用,关于小数:如果n与m起了冲突,那么还是以n为准,

普通字符:可打印字符和转义字符,转义字符注意\ddd和\xhh

scanf("%[<修饰符>]<格式字符>",地址列表)

需要注意:

  1. lf(在输出的时候double 和float 都可以用f 输出,但是输入的话double只能用lf,同时需要注意就是最好将浮点型的变量都定义为lf这样更为精确不容易出现问题

  1. 抑制字符*

  1. 如何处理使输入的空格不赋值给字符:在%c前加一个‘ ’(空格)这样就可以跳过字符前的所有空格

  1. 精度要求:不要在格式控制中指定小数位数

  1. 不确定输入次数如何解决:用scanf的返回值

while(scanf("%d",&c)==1)
  • 其他的输入输出

getchar :c=getchar() 说明:回车键表示结束,但只会读入输入的第一个字符

putchar:getchar(c)

gets:gets(s) 说明:可以读入回车字符

puts:puts (s) 说明:输出函数串后自带换行符

4.C语言的语句

  • 控制语句:

(if(分支),循环,continue(结束本次循环),break(终止循环或多分支),switch (多分支)return(返回))

  • 函数调用语句

  • 表达式语句(例如赋值)

  • 空语句

  • 复合语句(用{}括起来)

三种语句

1.条件语句

注意:(1).else 与离他最近的且为配对的if进行配对

(2.)先计算if后面的表达式,也就是说如果if后的括号中是一个赋值语句那么即使不进入if下面的语句也会执行赋值操作,同时自加自减(if(a++))依旧是先判断a 是否等于1,然后再++,

(3)if 后的语句只有0或者非0之分

(4)如果是if(a=0)那么意思就是将a的值赋值为0,同时括号中的表达式的值也是0,如果是if(a=1)那么赋值后括号中表达式的值就是1

(5)补充一个条件运算符?:例如

(x>0)y=1;(x=0)y=0;(x<0)y=-1用条件运算符表示出来就是y=x>0?1:x==0?0:-1

2.多分支语句switch case

注意:(1)。switch后面只能是整数型或者字符型,如果是字符型那么case '1'(需要有个单引号)

(2)如果是字符型,但是涉及到数字的加减,例如

char a='4',然后要对a代表的数值与2进行相减,那么就需要写成
switch(a-'2')

(3)case可以合并,例如写成

case 10:
case 9: printf("good”)

(4)注意就是switch后需要加{}将所有case包起来,但是如果case 后有很多语句是不需要加大括号的

(5)关于break,

Switch(a)
{
    case 1:a++;break;
    case 2:a++;break;
}//如果a=1,那么最后的结构就是a=2
Switch(a)
{
    case 1:a++;
    case 2:a++;
}//如果a=1,那么最后的结果就是a=3

(6)关于default,可有可无

(7)注意就是case default虽然在编程的时候有顺序之分,但是执行的时候是没有顺序之分的,例如

Switch(a)
{
 case 1:a++;break;
 default:break;
 case 2:a++;break;
}
和
Switch(a)
{
 case 1:a++;break;
 case 2:a++;break;
 default:break;
}的结果是一样的

3.循环语句

while(执行语句的条件);,do{……}while(执行语句的条件);,for(初始化;执行语句的条件;语句3改变值)

注意:(1).括号里在每次判断的时候都会执行一次,注意自加自减语句

(2)有时候while 改成do while 还需要将用来判断的变量在语句中改个位置,具体情况具体判断,并且do while 不一定比while 执行的次数多

(3)for语句中如果是continue,那么语句3的操作依旧会执行,但如果是break那么就不会执行

  1. 关于转移语句

break和continue

break只能跳出本层循环或者switch ,读程序题时一定注意分层

举一个小例子

while(a>3)
{
    switch(a)
    {
        case 1:……;break;//这里的break是跳出Switch语句,与循环无关
        case 2:……;continue;//这里的continue是结束本次循环
    }
}

二.常见的例题

  1. 关于日期(判断日期是否合法)

int judge(int y,int m,int d)
{
    int f=1;
    if(m<1||m>12){
    f=0;return f;}
    else 
    if(m<=7&&m%2==1||m>7&&m%2==0)
    {
        if(d>=1&&d<=31)f=1;
        else f=0;
    }
    else if(m!=2)
    {
        if(d>=1&&d<=30)f=1;
        else f=0;
    }
    else 
    {
        if(d>=1&&d<=28)
        f=1;
        else f=0;
    }
    if((y%4==0&&y%100!=0||y%400==0)&&m==2&&d==29)f=1;
    return f;
}

(判断某一天是今年的第几天)

(判断某一天是星期几)

2.倒序输出

3.解方程

4.抓小偷题(见清华大学出版社C语言程序设计(第三版)P90)

5.计算1000!的末尾有多少个0,判断1~1000中的每个数可以被多少个5整除,然后相加即可

补充:一元高次方程

易错的例题和补充:

编写判断精度的程序时注意:

1.数据的类型2.数据需要加绝对值3.循环的条件是>=精度4.书写语句注意*符号

读程序题需要注意:

注意分层

注意逻辑运算符的短路特性

注意while if等语句括号中的式子也会执行,同时注意是==还是=

不借助临时变量来实现两个变量的交换

a=a-b;(用a来记录a-b)

b=b+a;(b=b+a-b)

a = b-a;(a=a-a+b)

如果写成了

int x=017(第一个是数字0)
那么就是x=15 
如果是
int x=0x17
那么就是x=27

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值