CodeBlocks编程-C语言学习总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当用两个浮点型做除法时,因为浮点型无法精确表示,所以判断整数除以0时,用fabs(x)<=1e-6这种形式判断。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
遇见’输入\
遇见\0认为是’\0’因此字符串结束
在这里插入图片描述

关于break

break只能跳出它所在的那层循环。多层嵌套循环的话,跳不出外层循环!

1.关于double型变量输入输出

CodeBlocks中,double型输入用 lf ,输出用 f 。float型输入用 f ,输出用 f

double score[10]={0};
for(int i=0;i<N;i++){
    scanf("%lf",&score[i]);
    printf("%f\n",score[i]);
}

2.指针

(1)易混淆知识:

int a=0;
int *pa=&a;//pa存放a的地址,*pa是指pa指向的数据,
           //同时pa指向的数据是int类型的,a是pa的别名。
           //指针必须初始化。
           //想让指针变量指向哪个存储单元,就让其保存哪个单元的地址
           //指针可以保存一个变量的地址、数组的首地址、字符串的首地址、函数的入口地址。
*pa=1;//将1写入pa所指的内存单元,即令a=1;
printf("pa=%p\n",pa);//输出a的地址
printf("*p=%d\n",*pa);//输出1
int *pb=NULL;//pb指向NULL
int *pc,*pd;//同时定义两个指针变量,不能写成int *pc, pd;//表示pc是指针型,pd是int型。

(2)错误案例:在这里插入图片描述
(3)众所周知,函数只能有一个返回值,那么当想返回两个变量的值时,该怎么办呢?
比如一个例子,计算学生成绩最大值并返回学生最大成绩的数组下标。
解决方案:返回一个,用指针传一个。
代码如下:

#include <stdio.h>
#include <stdlib.h>
#define N 5

int GetMax(int a[],int n,int *maxPos);

int main(){
    int maxPos=0;
    int a[N]={1,2,3,4,5};
    printf("maxPos=%d,maxValue=%d\n",maxPos,GetMax(a,N,&maxPos));
    return 0;
}

//用此函数实现既返回maxValue又用指针传回maxPos
int GetMax(int a[],int n,int *maxPos){
    int maxValue=a[0];
    int i;
    for (i=0; i<n; i++)
    {
        if (a[i] > maxValue)
        {
            maxValue = a[i];
            *maxPos = i;
        }
    }
    return maxValue;
}
/*
5
1 2 3 4 5

*/

(4)函数指针的定义及用途
定义:

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

int Fun(int a,int b);

int main()
{
    int (*f)(int,int);//定义函数指针f
    f=Fun;//将Fun函数赋值给f
    int test=f(1,3);
    printf("test=%d",test);
    return 0;
}

int Fun(int a,int b){
    return a+b;
}

用途:编写通用性更强的函数。
在这里插入图片描述

在这里插入图片描述
(5)数组指针:先学3.字符串后再学它
一维数组:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
则下面两个均能表示a[i]

在这里插入图片描述
在这里插入图片描述
二维数组:
*(a+i)是第 i 行第0列的地址。
*(a+i)+j 是第 i 行第 j 列的地址。
在这里插入图片描述
定义及初始化:
在这里插入图片描述
定义二维数组指针后(p能表示的和a相同,将a替换为p即可)
在这里插入图片描述
二维数组指针定义及初始化有两种形式:

在这里插入图片描述

在这里插入图片描述
11.3讨论区习题:计算每个学生课程总分和平均分 没做。

3.字符串

C语言没有字符串类型。用字符数组存放字符串。

(1)字符数组初始化:
在这里插入图片描述
(2)字符串的输入,三种形式:

char str[N+1];//加的1是字符串结束标志'\0'
char str2[N+1];
char str3[N+1];
printf("请输入第一个字符串:");
scanf("%s",str);//不能输入带空格的字符串
printf("字符串一为:");
for(int i=0;str[i]!='\0';i++){
    putchar(str[i]);
}
printf("\n");


printf("请输入第二个字符串:");
scanf("%s",str2);//不能输入带空格的字符串,因为输入空格,scanf认为输入结束了
printf("字符串二为:");
printf("%s",str2);
printf("\n");
    
    
fflush(stdin);//必须加上,因为scanf读不走回车符,gets()能读走回车符。
              //前面输入字符结束的回车会被gets()读走,从而输出空白
printf("请输入第三个字符串:");
gets(str3);//可以输入带空格的字符串
printf("字符串三为:");
puts(str3);
    
    
char ch=getchar();//读一个字符。

(3)字符串处理函数
在这里插入图片描述
strlen(str1):输出str1的实际长度,不算’\0’。
strstrbcpy(str2,str1,n):复制str1的前n个字符到str2。
strcmpy(str1,str2):当str1=str2:返回0
当前<后:返回负数
当前>后:返回正数
strncmp(str1,str2,n):只比较str1和str2的前n个字符。

缓冲区溢出防范

用fgets(),不用get()和scanf()。
因为fgets()会限制输入长度,不会覆盖到其他数据上。
fgets()缺点是不会把回车符(也叫换行符)转为’\0’。而gets()会。
因此比较password时候需要把输入的字符串结尾的’\n’替换成’\0’。
在这里插入图片描述

结构体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直接赋值不行,用结构体可以。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

枚举enum类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

公用体Union

在这里插入图片描述
在这里插入图片描述
例如
union test{
int a[2];
int b;
int c;
}
则union长度为8,为a[2]的总长,处在0-7地址。b长度4,处在0-3。c长度4,处在0-3。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

模拟洗牌

在这里插入图片描述

动态内存分配

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值