【笔记】C语言(上)

一、引入

1.系统软件:

操作系统、高级语言编译程序、数据库系统、网络管理系统

2. 算法描述方式:

自然语言|流程图|伪代码

3.常见转义字符:

换行\n
回车\r
格式控制(进制)%d、%o、%x
字符串%s
字符%c
单精度浮点数、右对齐%f
双精度浮点数%lf

4.数据类型:

        原子类型:整型(int)、实型(浮点型,double,float)字符型(char)

        结构类型:数组、结构体、枚举型、共用体

        空类型

        指针类型

补充:

FLT_MAX:表示单精度浮点型(float)的最大正数值,定义在 <float.h> 头文件中。

DBL_MAX:表示双精度浮点型(double)的最大正数值,定义在 <float.h> 头文件中。

CHAR_MAX:表示字符型(char)的最大值,通常是 127 或 255,定义在 <limits.h> 头文件中。

INT_MAX:表示整型(INT)的最大值,它定义在 <limits.h> 头文件中。

5.字节

一字母占一字节 一字节(B,btye)占8位(bit),如大写字母J(01001010)

二、处理和交互式输入

1.“=”赋值

variable = operand(字符、数字、表达式)

2.自增运算符

i++后置,++i前置

3.强制转换

(int)(a+b) a+b一起转换类型

(int)a+b a被转换,再加上b

4.<math.h>里的常用函数

sin(x):计算x的正弦值。

cos(x):计算x的余弦值。

tan(x):计算x的正切值。

exp(x):计算e的x次方。

log(x):计算x的自然对数。

log10(x):计算x的常用对数(以10为底)。

sqrt(x):计算x的平方根。结果小数点后六位

fabs(x):计算x的绝对值。

ceil(x):返回不小于x的最小整数值(向上取整)。

floor(x):返回不大于x的最大整数值(向下取整)。

pow(x, y):计算x的y次幂。结果小数点后六位

5.scanf函数

  scanf函数是C语言中用于从标准输入(通常是键盘)读取输入值的函数。它可以根据指定的格式字符串读取不同类型的输入,并将其存储到对应的变量中。例如,scanf("%d", &num);可以读取一个整数并将其存储到num变量中。

char letter;       scanf("%c", &letter);

int age;        scanf("%d", &age);

char url[30];   scanf("%s", url); //可以加&也可以不加&

float price;       scanf("%f", &price);

三、条件分支结构

1. 关系运算符的使用

关系运算符用于比较两个值之间的关系,返回一个布尔值(即逻辑值,后文会详细介绍)。常见的关系运算符包括:

==:等于

!=:不等于

>:大于

<:小于

>=:大于等于

<=:小于等于

这些运算符通常用于条件语句和循环控制中,以确定程序执行的路径。

2. 逻辑值与逻辑表达式

逻辑值指的是布尔值,即truefalse。逻辑表达式是由关系运算符、逻辑运算符和操作数组成的表达式,其结果是一个逻辑值。常见的逻辑运算符有:

&&:逻辑与(AND)

||:逻辑或(OR)

!:逻辑非(NOT)

逻辑表达式可以用于条件判断、循环控制以及逻辑运算等场景中。

3. 分支条件语句的使用方法

分支条件语句根据条件的真假选择不同的执行路径。常见的分支条件语句有:

3.1 if语句

if (condition) {
    // 当条件为真时执行这里的代码

} else {
    // 当条件为假时执行这里的代码
}

3.2 switch语句

switch (expression) { 
    case value1: /
    / 当表达式等于value1时执行这里的代码 
    break; 
    case value2: 
    // 当表达式等于value2时执行这里的代码 
    break; 
    default: 
    // 当表达式不等于任何case时执行这里的代码
     break; 
}

4. 三目运算符的使用

三目运算符是一种特殊的条件表达式,也称为条件运算符。它由三个操作数组成,格式如下:

condition ? expression1 : expression2

如果条件为真,则返回expression1的值;如果条件为假,则返回expression2的值。三目运算符常用于简洁地表达条件赋值或条件选择。

四、循环结构

1.概念解释

1、单行文本的长度不应超过80个字符

一个字符=8个字节=一个letter

两个字符=一个汉字

英文标点占一个字节,中文标点占两个字节。

2.前测试循环和后测试循环

1、前测试循环(pre-test loop):在进入循环体之前,先判断条件是否成立,如果条件为真,则执行循环体内的代码;如果条件为假,则跳过循环,直接执行循环后的代码。

while 和 for 循环就属于前测试循环,因为它们在执行循环体之前就对条件进行判断。

2、后测试循环(post-test loop):先执行循环体内的代码,然后再判断条件是否成立,如果条件为真,则继续执行下一次循环;如果条件为假,则跳出循环,执行循环后的代码。

 do-while 循环属于后测试循环,因为它先执行循环体内的代码,然后再对条件进行判断。

ps:循环体内一定要有改变的循环语句,不然会陷入死循环

3.循环控制

1、计数控制循环:重复设定的次数

2、条件控制循环:重复到某件事,或是条件发生

4.一些关键词

continue:用于跳过当前循环中剩余的代码,直接进入下一次循环的迭代。通常与条件语句一起使用,用于在满足特定条件时跳过本次循环的剩余部分。在 switch 语句中,用于跳过当前 case 条件后面的语句执行。

break:当满足某个条件时,可以使用 break 来结束循环,即使循环条件没有达到结束条件。

NaN:用于表示不是一个有效数字的特殊值,通常在浮点运算中出现错误时返回。IEEE 浮点数标准中定义,用于表示不确定的或未定义的数学运算结果。

0.0/0.0   求负数的平方根   对负数求对数   Inf/Inf

Inf:用于表示不是一个有效数字的特殊值,通常在浮点运算中出现错误时返回。在 IEEE 浮点数标准中定义,用于表示不确定的或未定义的数学运算结果。

1.0/0.0     -1.0/0.0     0.0+Inf      log(0)

5.数据验证

单个数据

#define TRUE 1

int qualify(int month){

    while(TRUE){

        if(month>=11||month<=12){break;}

        else scanf("%d",&month);//

    }

}

多个数据

for(int i=0;i<n;i++){
    scanf("%d",&a[i]);
       if(不符合要求)
    {i--;}//相当于重新输入
}

6.经典程序

1.在进行嵌套循环时,内循环结束后,考虑某些数据要不要“清零”

//找出数组中重复数次最高的数

for(int i=0;i<n i++){

    count=0;//第一个数字遍历后,清零,下一个

    for(int j=0;j<n;j++){

        if(a[i]==a[j]{count++;}

        if(max<count){//max为一个介质

            max=count;

            num=a[i];//记录

        }
    }
}

2.水仙花数

#include<stdio.h>
#include<math.h>
int count(int);
int judge(int , int);

int main(){
    int m,n;
    scanf("%d %d",&m,&n);
    judge(m,n);
    return 0;
}
int count(int m){
    int i;
    for(i=0;m!=0;i++)
    m = 10;
    return i;
}
int judge(int m, int n){
    int a,b,sum;
    for(;m<=n;m++){
        a=m;
    sum=0;
        while(a!=0){
        b=a%10;
        a/=10;\sum+=pow(b,count(m));
        }
         if(m==sum)
        printf("%d",m);
    }
}

3.百马百担

#include <stdio.h>

int main() {
    int horses[100]; // 用数组表示100匹马
    int i, j, temp;

    // 初始化马的速度
    for (i = 0; i < 100; i++) {
        horses[i] = i + 1;
    }

    // 冒泡排序,将最快的马放在数组的最前面
    for (i = 0; i < 100; i++) {
        for (j = 0; j < 99 - i; j++) {
            if (horses[j] < horses[j + 1]) {
                temp = horses[j];
                horses[j] = horses[j + 1];
                horses[j + 1] = temp;
            }
        }
    }

    // 输出最快的前三匹马的编号
    printf("最快的前三匹马的编号是:%d, %d, %d\n", horses[0], horses[1], horses[2]);

    return 0;
}

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值