C语言回顾学习

一、数据类型

1.常量

2.float浮点表示

3.字符型

4.char(大小写) 

#include <stdio.h>
//根据数字输出字符--int值可以直接输出为char
int main() {
    int value;
    while (1){
        scanf("%d",&value);
        if(value<65||value>122){
            printf("The value you entered is invalid!\n");
            continue;
        }
        printf("%c\n",value);
        break;
    }
    return 0;
}

5.字符串常量的结束标志占字节大小

 二、混合运算 printf

%0.2f  --0表示不限制字符数 仅保留俩位小数

 

四、进制转化 

如今在计算机中都是以16进制数进行存储 高位在后 低位在前所以123 表现为7b 000....

debug进行取  &ten

 

五、 scanf函数

scanf原理 :标准缓冲区

 

 

 

 混合接收

 

 总之: scanf  接收是标准缓冲区

      且接收

 浮点型变量 整型变量 字符串  因为他会忽略\n(回车) 空格等字符 所以 不管缓冲区有没有\n 都不影响f的赋值

而在接收%c 字符型变量时

   要考虑 标准缓冲区中是否有 \n 空格等字符 因为它不会忽略

六、算术运算符与算术表达式 

关系运算符的优先级小于算术运算符

关系运算符不连用  搭配逻辑运算符使用 

3<a<10  错误   ---因为 这个a  表示就是比3大  比10小  或的关系  所以表示全集R

正确写法:a>3 && a<10   这个才表示比3大并且比10小

#include <stdio.h>

int main() {
    int a;
    while(scanf("%d",&a)){
        if(3<a<10){
            printf("1111");
        } else{
            printf("2222");
        }
    }
    printf("Hello, World!\n");
    return 0;
}

 

七、逻辑运算符

闰年: 能被4整除但是不能被100整除  或者  可以被400整除  

短路运算:

#include <stdio.h>
//短路运算-逻辑与  逻辑或
int main() {
    int a=0;
    //逻辑与
    a&&printf("you can not see me!\n");
    int b=1;
    //逻辑或
    b|| printf("you can not see me!\n");
    return 0;
}

八、赋值运算符 

左值:变量        

右值:表达式

九、求字节运算符

sizeof()--求常量 与变量 所占字节大小

十、OJ判题系统-循环运行时异常、char接收异常:

#include <stdio.h>

//判断某个年份是不是闰年--这个死循环必须  有停止条件不然OJ会报运行时异常
int main() {
    int year;
    while (1) {
        scanf("%d", &year);
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            printf("yes\n");
            break;
        } else {
            printf("no\n");
            break;
        }
    }

    return 0;
}

用char来接收这个输入的数字 -这样是不可以的

因为   char是1个字节的 而int是4个字节的

#include <stdio.h>

//输入数字 输出对应的字符--用int来接收输入的数字才是可以的
int main() {
    int year;
    scanf("%d",year);
    printf("%c\n",year);
    return 0;
}

 OJ题读取策略:

第一种情况:读取一行,写一个scanf即可;

第二种情况:读取多行,例如3行 for循环读取3次即可;

十一、逆序数、反置数、对称数--用简单的34换为43

 获取反置数:

while (i){
    number=number*10+i%10;
    i=i/10;
}
#include <stdio.h>
//输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;
//例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no
int main() {
    int i,number,old;
    scanf("%d",&i);
    //12321
    old=i;
   //核心
    while (1){
        number=number*10+i%10;
        i=i/10;
        if(i==0){
            break;
        }
    }
//核心
    printf("%d\n",number);
    if(number==old){
        printf("yes\n");
    } else{
        printf("no\n");
    }
    return 0;
}

十二、换钱 

#include <stdio.h>

//某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?这是我写的代码 请问哪里不对
int main() {
    int count=100,sum=0;
    for (int i = 1; i <=40 ; i++) {
        for (int j = 1; j <=40 ; ++j) {
            for (int k = 1; k <= 40; ++k) {
                for (int l = 1; l <=40 ; ++l) {
//注意判断的限制条件有俩个
                    if(i*10+5*j+2*k+l==count&&i+j+k+l==40){
                        sum++;
                        printf("10=%d 5=%d 2=%d 1=%d\n",i,j,k,l);
                    }
                }
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}

十三、一维数组 

 注意: 

        数组不能传递长度  

        因为它传递给函数的是起始地址  

        数组越界--(覆盖其他变量)

         字符数组初始化:

                 char c[6]=“hello”;  因为最后有个结束符\n  用%c来输出

 

字符串的接收:

char c[100];

scanf("%s",c);//会自动往字符串中放入结束符 因为c本身就含有起始地址所以可以省略&

如果 c[100]="123";  那么  接收的时候  会把012三个位置进行覆盖了

%s 会忽略空格

Win下 使用VS集成开发环境不能使用gets:

char c[100];

gets等价于fgets(c,sizeof(c),stdin);

 

str: 

# include <string.h>

char c[100], d[50];

strlen(c);//获取长度

strcat(c,d);//拼接d到c

strcpy(c,d);//把d复制到c

strcmp(c,d);//比较字符串大小  c>d  正值  c=d 0 c<d 负值

十四、数组OJ 

#include <stdio.h>
//输入N个数(N小于等于100),输出数字2的出现次数;

int main() {
    int a[100];
    int count=0,len;
    scanf("%d",&len);
    for (int i = 0; i < len; ++i) {
        scanf("%d",&a[i]);
        if(a[i]==2){
            count++;
        }
    }
    printf("%d\n",count);
    return 0;
}

十五、指针 

注意:

        32位中 指针占4个字节  其他占8个字节

        指针的初始化 (某个相同类型的变量取地址)  int i; int *p=&i;   *-取值

1.指针传递 

值传递:形参的改变不会影响实参

change(int j)  change(i)    

值传递中的地址传递:

change(int *j) change(&i)

 2.指针偏移(指针的加减)

*(p+1) --本质上偏移的是 同类型的sizeof(int)  即四个字节---指针遍历数组

因此 --接收数组的值其实就是地址

char c[100];  change(char *d);--  *d 不管什么 因为传过来是指针那么sizeof(d) 一定是8个字节

                                                        因为是指针

3.动态内存申请 

#include <stdio.h>
#include <stdlib.h> //malloc所需头文件
#include <string.h> //string所需头文件
//内存空间申请
int main() {
    int size=10;
    char *p,*q;//要申请的是一片存储char的内存空间
    //void* 无类型指针--- malloc返回
    //无类型指针不可进行偏移  因此申请下这片堆内存中的空间后 我们需要把他强转为我们需要的指针来存储这片空间起始地址
    p=(char*)malloc(size);//申请10
    strcpy(p,"hello");
    puts(p);
    //还给操作系统申请的空间
    free(p);//这里p不可进行偏移 如果要进行偏移我们可以定义一个 *q指针来代替   不可以free(p+1);
    return 0;
}

4.堆和栈的差异 

#include <stdio.h>
#include <stdlib.h>


//函数栈 在函数结束后 的内存空间被收回了
//因此返回的a的内存空间 主函数是接收不到的
char* return_stack(){
    char a[100]="hello stack";
    puts(a);
    return a;
}

//函数栈 向内存堆申请空间
// 在函数结束后 只是函数栈被收回了
// 但是 堆申请的空间还在因此主函数可以接收到申请的内存空间地址 并且可以得到空间中的值
//堆空间  一直可以存活到 释放或 进程结束为止
char* return_heap(){
    char *p= malloc(20);
    p="hello heap";
    puts(p);
    return p;
}

//堆栈差异
int main() {

    char *b;
    b=return_stack();
    puts(b);

    char *c;
    c=return_heap();
    puts(c);
    free(c);
    return 0;
}

十六、OJ指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//输入一个整型数,然后申请对应大小空间内存,然后读取一个字符串(测试用例的字符串中含有空格),
// 字符串的输入长度小于最初输入的整型数大小,最后输出输入的字符串即可(无需考虑输入的字符串过长,超过了内存大小);
int main() {
    int i;
    char *p,*q,c;
    scanf("%d",&i);
    p=(char*)malloc(i);//然后申请对应大小空间内存
    q=p;
    scanf("%c",&c);//去重回车\n
    fgets(q,i,stdin);//这里注意字符数量  因为还要存储结束符\0 那么它肯定存储的数量为i-1
    // 所以字符串的输入长度小于最初输入的整型数大小  存储i个字节的字符大小  空间大小为i
    puts(p);
    free(p);
    return 0;
}

十七、函数 


1.递归 

关键:找公式  f(n)  f(n-1)  f(n-2)  ....

          退出条件

#include <stdio.h>
//假如有n个台阶,一次只能上1个台阶或2个台阶,
// 请问走到第n个台阶有几种走法?为便于读者理解题意,这里举例说明如下:假如有3个台阶,那么总计就有3种走法:第一种为每次上1个台阶,
// 上3次;第二种为先上2个台阶,再上1个台阶;第三种为先上1个台阶,再上2个台阶。输入为n,输出为走到第n个台阶有几种走法

int step(int n){
    if(n==1||n==2){
        return n;
    }
    return step(n-1)+ step(n-2);
}


int main() {
    int n;
    scanf("%d",&n);
    printf("%d\n", step(n));
    return 0;
}

2.全局变量与局部变量

全局变量与局部变量重名---就近原则

局部变量仅在离自己距离最近的大括号中进行使用

十八、结构体 

注意:

        结构体声明最后大括号必须加分号 ;

        使用  struct student s={...};  s.sum....

        结构体的大小必须是最大成员(存储字节大小)的整数倍--如果不是 那就要对齐

        为了方便CPU进行读取

如果其他的成员变量存储字节之和要比最大成员变量的存储字节要小那么就会存储在一起

1.指针与结构体 

struct student s={...};

*p=&s;

p->sum  p->name  p->sex;指针访问结构体成员变量

struct student arr[3]={...};//结构体数组

*p=&arr;   

赋值string

strcpy(p->name,"Bob");

2.typedef 别名

typedef struct student{} stu, *pstu; 

stu:等价于 struct student 

pstu:等价于 struct student*;

typedef int  INTEGER;  //也可以给int起别名  方便 替换 使用INTEGER的类型    

3.C++的引用 

void change(int &b){}

int a=10;

change(a)

void changePointer(int * &p,*q){

        p=q;

}

int i=10;

q=&i;

changePointer(p,q);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/430363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python的http模块requests

模块简介&#xff1a; requests 库是一个 python中比较有名的 http请求的库&#xff0c;能处理 get,post,put,delete 等 restful请求&#xff0c;能设置 header&#xff0c;cookie,session 等操作&#xff0c;也是作为爬虫的基础库&#xff0c;它目前还不能异步请求,如果要支持…

C语言 BMP图片的旋转与缩放

目录 一、bmp文件头、文件信息头、位图实际数据的数据结构定义 二、源BMP文件信息的读取 三、实际位图数据的旋转、缩放操作 四、生成转换过后的新位图文件 #include <stdlib.h> #ifndef PHOTODEAL_H #define PHOTODEAL_H #pragma pack(1) typedef struct tagBm…

力扣经典题目解析--删除链表的倒数第 N 个结点

原题地址:. - 力扣&#xff08;LeetCode&#xff09; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;h…

【韩顺平零基础学java】第12章课后题

练习题1 如果用户输入的不是一个整数&#xff0c;就提示他反复输入&#xff0c;直到输入的是一个整数为止 import java.util.Scanner;/*如果用户输入的不是一个整数&#xff0c;就反复输入&#xff0c;直到输入的是一个整数为止*/ public class TryCatchExercise04 {public s…

代码随想录算法训练营Day37 | LeetCode738.单调递增的数字、LeetCode968.监控二叉树、贪心算法总结

LeetCode738.单调递增的数字 思路&#xff1a;与分糖果的题目同理&#xff0c;因为需要与前一位数比较&#xff0c;并且修改这两个数&#xff0c;因此需要从后往前遍历&#xff0c;当前一位数比当前数大时&#xff0c;则前一个数-1&#xff0c;后一个数变为9。 代码细节&…

金三银四,程序员如何备战面试季

金三银四&#xff0c;程序员如何备战面试季 一个人简介二前言三面试技巧分享3.1 自我介绍 四技术问题回答4.1 团队协作经验展示 五职业规划建议5.1 短期目标5.2 中长期目标 六后记 一个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️…

【数据存储】大端存储||小端存储(超详细解析,小白一看就懂!!!)

目录 一、前言 二、什么是低地址、高地址 &#xff1f; 三、什么是数据的高位和低位 &#xff1f; 四、什么是大小端存储&#xff1f; &#x1f349; 小端存储详解 &#x1f352; 大端存储详解 五、为什么会有大小端存储&#xff1f; &#x1f34d;大端存储的优点 &#…

跨境电商趋势解析:社交电商携手私域流量运营,精准触达与转化

随着全球化的深入发展&#xff0c;跨境电商逐渐成为全球贸易的重要组成部分。在这一背景下&#xff0c;社交电商作为一种新兴的商业模式&#xff0c;正逐渐在跨境电商领域崭露头角&#xff0c;并对私域流量的运营产生了深远的影响。本文Nox聚星将和大家分析社交电商在跨境电商中…

数据结构(一)综述

一、常见的数据结构 数据结构优点缺点数组查找快增删慢链表增删快查找慢哈希表增删、查找都快数据散列&#xff0c;对存储空间有浪费栈顶部元素插入和取出快除顶部元素外&#xff0c;存取其他元素都很慢队列顶部元素取出和尾部元素插入快存取其他元素都很慢二叉树增删、查找都快…

交叉编译qt5.14.2

qt源码下载地址&#xff1a;qt-everywhere-src-5.14.2.tar.xz 1.修改qt-everywhere-src-5.14.2/qtbase/mkspecs/linux-arm-gnueabi-g/qmake.conf文件&#xff1a; # # qmake configuration for building with arm-linux-gnueabi-g #MAKEFILE_GENERATOR UNIX CONFIG …

Guitar Pro 8.1中文版永久许可证激活2024最新24位注册激活码生成器

Guitar Pro是一款非常受欢迎的音乐制作软件&#xff0c;它可以帮助用户创建和编辑各种音乐曲谱。从其诞生以来就送专门为了编写吉他谱而研发迭代的。 尽管这款产品可能已经成为全球最受欢迎的吉他打谱软件&#xff0c;在编写吉他六线谱和乐队总谱中始终处于行业领先地位&#…

返回静态数据

在Java项目中&#xff0c;往往不会一直返回某某数据&#xff0c;而是会返回一个静态页面&#xff0c;那么&#xff0c;如何正确返回一个静态页面呢&#xff1f;&#xff1f; 要想成功的返回一个静态页面前提是必须要有一个静态页面&#xff1a; <!DOCTYPE html> <ht…

GEE 数据集 ——利用leafmap python软件包实现NASA数据的接入(colab示例)

我们如何获取我们想要的数据,这里我们通过 leafmap python软件包实现NASA数据种全球超过9000+的数据集产品的接入和使用。这里我们使用在线的colab来实现处理,因为这里我们可以很好的应用已经在线配置好的colab环境来实现,省去了安装过程的繁琐。 要下载和访问数据,您需要…

rust学习(tokio协程分析一)

代码&#xff1a; async fn doAsyncPrint(v:u32) {println!("start doAsyncPrint,v is {},tid is {:?}",v,system::myTid());//thread::sleep(Duration::from_secs(1));time::sleep(Duration::from_secs(10)).await;println!("end,v is {},tid is {:?}"…

MacOS开发环境搭建

MacOS开发环境搭建 一、MacOS二、Python三、MacOS搭建Python开发环境1.Python下载地址1.1 Python官网地址1.2 Python下载地址 2.安装Python3.安装Python4.安装PyCharm5.创建一个Python项目6.配置PyCharm7.安装Python包8.运行Python代码9.总结 一、MacOS macOS是一套由苹果开发的…

云原生数据库 GaiaDB 支持新的管理工具啦

GaiaDB 是百度智能云自研的新一代企业级关系型数据库&#xff0c;最大容量可扩展 500TB 以上&#xff0c;吞吐达到 150 万以上 QPS。 作为一款 100% 兼容 MySQL 的云原生数据库产品&#xff0c;用户可以通过多种客户端工具连接 GaiaDB 实例&#xff0c;例如 MySQL Workbench、N…

【产品经理方法论——产品的基本概念】

1. 产品学三元素 产品学有三个元素&#xff1a;用户、需求、产品 产品学的内容&#xff1a;根据用户的需求设计产品&#xff0c;使用产品服务用户 仅仅通过三个元素无法说明每个元素的概念&#xff0c;因为三个元素互为说明关系。 通过引入人/群体来说明三个元素的关系。 需…

全局渐变滚动条样式

效果如下&#xff1a; APP.vue<style> /* 整个滚动条 */ ::-webkit-scrollbar {width: 5px;height: 10px; } /* 滚动条上的滚动滑块 */ ::-webkit-scrollbar-thumb {background-color: #49b1f5;/* 关键代码 */background-image: -webkit-linear-gradient(45deg,rgba(255,…

Svg Flow Editor 原生svg流程图编辑器(一)

效果展示 项目概述 svg flow editor 是一款流程图编辑器&#xff0c;提供了一系列流程图交互、编辑所必需的功能&#xff0c;支持前端研发自定义开发各种逻辑编排场景&#xff0c;如流程图、ER 图、BPMN 流程等。 目前也有比较好的流程图设计框架&#xff0c;但是还是难满足项目…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:隐私遮罩)

用于对组件内容进行隐私遮罩处理。 说明&#xff1a; 从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 obscured obscured(reasons: Array<ObscuredReasons>) 设置组件内容的遮罩类型。 系统能力&#xff1a; Sys…