C语言复习--基础IO、流程控制

本文详细介绍了C语言的基础框架,包括预处理指令、main函数,以及变量的构成要素、数据类型、输入输出操作(printf和scanf)的使用方法。还涵盖了流程控制(if-else,switch-case,循环)和C99标准中的新特性。通过实例展示了如何处理字符转换、数学运算和计算1~100的和,以及几种求解最大公约数的方法。
摘要由CSDN通过智能技术生成

C程序基本框架:


#include<stdio.h>  //预处理指令

int main()   //程序入口和主函数main
{         
//编写的代码 
return 0; // 程序退出前 返回给调用者(操作系统)的值
}

变量四要素:

变量类型
变量名
变量值
存储单元


------
变量名 -- 标识符   -- 由字母、数字、下划线组成
//注意: 标识符  不能 以数字开头  , 可以是 字母 和下划线_ 

//要用驼峰命名法:-- bubbleSortt()

------
数据类型;
主要:
整形: int -- 4 字节

字符型: char -- 1字节 -- 8 bit

浮点型: float -- 4 字节
 

输入/ 输出  I/O

输出:
printf: 
一般格式: printf(格式控制,  输出列表);

1. 格式控制:


   1) 原样输出
    2)占位符,格式字符   :
       d--十进制整数   x--十六进制  c --单个字符  s--字符串(多个字符) f --小数  p--打印内存地址
 
a %m.nf   指定数据宽度--m  和小数位数 --n

 -- 前面不够的空格补充

b  输出的数据向左对齐 %-m.nf --与%m.f作用基本想相同
但是 当数据长度不超过m时候 ,向左靠,右边补充空格

2.输出列表 : 数据类型  表达式

输入: scanf(格式控制,地址列表)
//注意: scanf 的格式控制里面
如果有其他字符,要吧之前的的字符输入进去才能写入
比如
sacnf("data=%d",&n); --  他对应额输入应该是 data= 100(一个数字)

注:
0.scanf 的格式中有什么字符,输入的时候也要输入
1.输入多个变量的时候尽量分开写  
2.尽量不要在scanf   里面添加 空格 逗号  或者其他字符
3.输入的3个字符时候,不要用空格隔开,因为会空格也算字符
4.在输入数据时,如输入空格、回车、Tab键  或者遇到非法字符(不属于对应数值的字符),则认为改数据结束
5.当多次输入的时候,要注意回车符, 一般用getchar() 来吸收

//其他输入输出:
getchar  -- 输入一个字符
putchar  -- 输出一个字符
puts   -- 输出字符串
gets --  输入字符串

char *gets(char *str);

gets(str); -- 优势:可以接收空格 ,直接能接收一行字符串
scanf("%s", string); -- 不能接收空格,一次只接受一个字符串

puts  和 printf 区别: 
1.会自动换行
2.printf 支持格式化,多样化的输出,puts 值针对输出字符串

case1: 键入一个大写字符输出他的小写字母  --小写字母的ASCLL码值比他的大写字母大32,+32即可

case2: 输入两个数获得其 +-*/的值


    float a,b;
    printf("请输入两个数字,我们计算他的和差积商");
    scanf("%f%f",&a,&b);
    
    printf("和 %f",a+b);
    printf("差 %f",a-b);
    printf("积 %f",a*b);
    printf("商 %f",a/b);


case3: 给“China”加密,规则 -- 用原来的字符后面的四个字母代替 C --G


     putchar('C'+4);  --- printf("%c",'C'+4);
         
          putchar('h'+4);
         putchar('i'+4);
          putchar('n'+4);
          putchar('a'+4);
         

---------------------------------------------------------

流程控制:

选择:

if -- else  -- 两个分支常用


if - else if  - else  -- 多个分支


// 判断的时候注意 == 才是判断  = 是赋值
case: 输入2个数字,从小到大输出 if 判断即可
if(a>=b) printf  --   b ,a
else    a,b

判断:


逻辑与 &&
逻辑或 ||
非 !

switch  case  -- 多个分支常用


case  break
default

//注意: case 后面支持整形 也支持字符 1 2 3 , a b c


test1: 成绩分类 >85 -- A    70~84  -- B  60~69 -- C

报错积累  

-- "/243" --一有中文标点
 -- expect ";"  --缺少 ;

-- expected 'int *' but argument is of type 'int'  -->参数类型错误

----undeclared  -- 未定义 -- 函数名写错  or  没写

//注意switch 里面的;数据选择 -- 最大公因数 -- 作为除数 将范围分类

test1:
写函数:
y= x(x<1)   
2 x-1(1<=x<10)
 3x-11(x>=10)


#include<stdio.h>

int main()
{
    float x,y;
    puts("请输入x,我们将为你计算出他对应的函数值:");
    scanf("%f",&x);
    if(x<1)y=x;
    else if(1<=x&&x<10)y=2*x-1;
    else y=3*x-11;
    printf("函数值y:%.2f",y);
    
    return 0;
}


循环:


while
for

-------------------------


while:


-- 只要条件为真就好一直执行
避免死循环 ,除了51单片机代码


爱你一万次:


#include<stdio.h>

int main()
{
    
    int k=0;
    while(k!=10000)
    {
        puts("我爱你");
        k++;
    }
    
    
    return 0;
}


//全局变量不用初始化,默认0
//在函数里面的变量最好初始化,一般为0


 

test:  计算1~100 的和


do ... while .....

-------------------------------------
while循环3个表达式:


1.条件初始值: k=0;
2.条件临界值: while(date<=100》)
3.条件变化   k++;

格式:

表达式1
while(表达式2)
{

表达式3
}

for:

格式

for(表达式1;2;3)

死循环 while(1);
-------------------------------------
死循环 for(;;)
 


C99标准 允许 for 里面初始化---int i=0;


-----------------------------------
关键字:
break -- 提前跳出 整个 循环
continue  -- 跳出当前循环

test : 
-对1000 个人进行筹款 -- 捐到10000就停止  -- break 跳出循环
--输出 100~200 直接3的倍数   -- continue 退出  -- 不执行后面的输出 printf

百分号 % -- 取余(模)
--------------------------------
循环嵌套的时候 -- 他的 时间复杂度 是 iMAX * jMAX

test1: 输入m,n,求他们的最小公倍数 和 最大公约数


(1)九章算术—更相减损法

判断a和b那个大,然后大数就减去小数的,再将减去得到的值赋予大数的位置,继续判断,直至两数相等,这时,a=b=最大公约数

适用于两数相差不大也不小
int dix=m*n;

while(m!=n)
{
    if(n>=m)
    n=n-m;
    else 
    m=m-n;        
    
}

printf("%d   %d",m,dix/m);
时间复杂度 = O (log (max (a, b)))

(2)单相取余法 -- 枚举法

先判断a,b那个大,再用a和b的对小的取余,如果结果不为0,则让小的数-1,直至结果为0.
t=m>n?n:m;    
while(m%t || n%t)t--;    
    printf("%d\n",t);

(3)欧几里得——辗转相除法

让两个数中的大数对小数取余,再将小数赋予大数,结果赋予小数,
重复以上动作直至两数其中一个数为零,那么另一个就是最大公约数

while(m && n)
{
    
    if(m>n)m=m%n;
    else n=n%m;
    
}
printf("%d",m>n?m:n);

(4)函数递归法

通过函数调用自身达到求最大公约数的目的,运行速度快,但是不稳定

适用于两数相差较小时求最大公约数.
int lcd(int a,int b)
{
    if(a==b)return a;
    return a>b?lcd(a-b,b):lcd(b-a,a);
    
}

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值