大一上C语言学习

这篇博客介绍了C语言的基础知识,包括头文件的使用、变量声明、函数原型、输入输出函数,以及循环、条件判断、字符串处理等核心概念。还提到了宏定义、内存管理和算法,如辗转相减法和辗转相除法求最大公约数。同时,讨论了指针和结构体的使用,以及编程中的常见技巧和注意事项。
摘要由CSDN通过智能技术生成

标准头文件结构:        

             

//作用:避免引入头文件重复定义引用

#ifndef _MAX_H_
#define _MAX_H_



~~~~~~
~~~~~~
~~~~~~



#endif





               

在头文件声明 extend int a;(让编译器知道在某个文件有这么一个全局变量a)

项目:将函数原型放在一个头文件里(.h),在需要调用这个函数的源代码文件(.c)文件中                       #include"XXX.h"这个头文件,就能让编译器在编译的时候知道函数的原型

Viod不需要return 0

const int是常量(加const是常量,不能被修改,必须赋初始值)

scanf输入记得加&,如scanf(“%d“,&inch)

%f输入有小数点

Folat单精度浮点数double双精度浮点数

scanf输入浮点型数,需要用%lfprintf输出用%f

  1. scanf("%[^\n]",str) ,遇到"\n"结束
    '^'含有非的意思
    “%[^\n]“即遇到\n结束。
    如果使用”%[^v]”,那我们输入 “I love you!” ,输出的就是 “I lo”

fflush stdin)清除输入缓冲区内容。

  inch是表示为int类型的变量。

二进制可以表示的数范围是2的n次方-1

Pow(10,x);就是十的x次方   sqrt()是二次根号

a 与 b 的值互换,不能用a=b,b=a

正确方法是:t=a

       a=b

       b=t

total +=5等于total=total+5

count++等于count+1    ++叫递增运算符,算子必须是变量

count --等于count-1     --叫递减运算符,算子必须是变量

若a=10,则a++=10      ++a=11

              a=11        a=11

无论是前缀形式还是后缀形式,a最后都等于11

但后缀形式的值是加1之前的值,后缀形式的值是+1之后的值

==  相等             >=大于或等于

!=   不相等           <小于

>    大于             <=小于或等于

while:循环

do{         }while(    ); :do while循环(先执行一次,再考虑条件是否符合人)

for循环:for(  ;  ;  ){        }。初始条件;循环继续的条件;循环每轮要做的事情

条件运算符: y=(A>B)?A:B;   非A即B

即 if(A>B)printf(“%d”,A)

   else   printf(“%d”,B)

swich(控制表达式)

   case 常量:

   语句

 break

 …

   case 常量:

   语句

break

   default

语句

#define宏定义 (define a 11 即把a定义为11,是定义为常量)

#include<stdlib.h>     每次召唤rand()就得到一个随机的数字

#include<time.h>

srand(time(0))

int a = rand()

if(a):如果a为非0数字或字符那么就为真,if条件成立,反之不成立。=if(a!=0)

if(!a):如果!a为真,也就是a为0时,if条件成立,反之不成立。=if(a=0)

if(a!=0):如果a不等于0,则使得if条件成立,反之不成立。等价于if(a)。

if(a==0): 如果a等于0,则使得if条件成立,反之不成立。等价于if(!a)。

goto  变量 ;            令语句直接跳到“:”后面

  ……

变量:

多组数据输入写法:

while(scanf(“%d“,&n) != EOF)

while(~scanf(“%d“,&n) )

while((ch=getchar()) != EOF)

ctrl+c输入结束,用ctrl+d结束程序

X,Y的最大公约数*最小公倍数=X*Y

最大公约数:辗转相减法:即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。----来源百度百科辗转相减法即通过对两数的不断减法运算。假设两数为 x, y。当 x > y 时,令 x = x - y;反之,则令 y = y - x;之后一直辗转相减,直至 x = y 时,终止。

  1. while (x!=y)
  2.   {
  3.    if (x>y)
  4.        x = x-y;
  5.    else
  6.        y = y-x;
  7.   }

.辗转相除法:又名欧几里德算法(Euclidean algorithm),它是已知最古老的算法, 其可追溯至公元前300年前。 辗转:望文生义,就是翻来覆去。相除就很好理解了,就是进行除法运算。辗转相除法的核心就是不断的让两个数做除法运算。其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。假设两数为 xy。先令 z = x % y ;之后 y x 即令  x = y ;再将 z 赋给 y 即令  y = z;辗转相减,其终止条件为:y 等于0时。

  1. while (y != 0)
  2.    {
  3.        z = x%y;
  4.        x = y;
  5.        y = z;
  6.    }

穷举法:穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。穷举法又称枚举法,通过对数值范围内的所有数字进行检验,得出其结果。

  1. for (i = x; i > 0; i--)
  2.    {
  3.        if (x%i == 0 && y%i == 0)
  4.           break;
  5.    }

strcpy()函数:字符串复制(拷贝)函数

strlen()函数:求字符串的长度

strcmp()函数:比较两个字符串

strchr()函数:字符查找函数

//该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL

strcat()函数:字符串连接(拼接)

strlwr():大写转小写

strupr():小写转大

atoi():将字符串转为整数

tolower():将字母转为小写

char *strstr(const char *haystack, const char *needle)strcasestr 同效果,忽略大小写)

  • haystack -- 要被检索的 C 字符串。
  • needle -- haystack 字符串内要搜索的小字符串。

字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'

char *strncpy(char *dest, const char *src, size_t n)

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。
  • n -- 要从源中复制的字符数。

 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

void *memset(void *str, int c, size_t n)

  • str -- 指向要填充的内存块。
  • c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
  • n -- 要被设置为该值的字符数。
  • 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

 char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置(strrchr 搜索最后一次出现的位置)

scanf("%s"  ) 会跳过换行符,gets()不会自动跳过,

sizeof() 计算字节数
          可以用sizeofa/sizeofa0】)计算数组大小。

当数组作为函数参数输入时候,往往必须再用另外一个参数来传入数组大小

   二分法搜索次数。

指针:

   int *p;  (定义一个指针变量)

   int j = 6

   *p = &j   (将j的地址赋给*p

指针作用:可以在函数中得到某实参的地址,使在函数中可以对该实参进行操作,直接作用于地址。

如何定义一个结构体类型:

struct 结构体名                     也可以这样              

{                               Struct 结构体名

成员列表                      {

}                                成员列表

int main()                      }变量名;
{

struct 结构体名 变量名

}

如果在sturct前面加一个typedef,那么}后面的内容将会定义为类型名 ,如:

typedef struct 结构体名  

{

成员列表

}std

int main()

{

std 变量名;

}

结构体指针(’.’是分量运算符,’->’是指向运算符)

typedef struct 结构体名  

{

int numb

int ID

}std

int main()

{

std student={1,666}

std *point=&student;

point->ID=777;(要用->来表示指向,这里是用指针修改)

}

void *calloc(size_t nitems, size_t size)   malloc,但calloc会对内存初始化为0

  • nitems -- 要被分配的元素个数。
  • size -- 元素的大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值