10.16学习记录

本文介绍了C语言中结构体的创建和使用,强调了良好的代码风格,如使用大括号、将数字放在比较运算符左侧,并提醒注意大小写。还探讨了赋值表达式、switch语句的注意事项,以及static关键字的特性。此外,文章讲解了生成随机数的方法、二分查找算法、计算数组长度以及程序休眠和清屏函数的使用。最后,提到了strcmp函数在字符串比较中的应用。
摘要由CSDN通过智能技术生成

目录

一.学会创造结构体

1.创造

1.表达

3.Vs编译器自身BUG

二.好的代码风格

1:最好跟大括号,不然容易出错

2:判断相等 的时候最好数字放在左边

3.一定要注意大小写

三.赋值表达式

四.switch语句

1.case:

2.编程好习惯

3.做题的错误

static的特性

  1. static修饰变量

  2. static修饰函数

五.缓冲区的概念

方法1

方法2

六.C语言生成随机数的方法

第一种:输出0~RAND_MAX之间的随机数

第二种:输出num1~num2之间的随机数 num1、num2可以输入或者随机指定

第三种:通过输入关键字来决定输出num1~num2之间的随机数

第四种:通过时间来控制输出num1~num2之间的随机数

注意"生成范围随机数公式:

七.二分查找法

八.平均数算法

九.计算数组元素个数

1.数字数组计算方法

2..字符串数组计算方法

方法1

方法2

十.程序休眠函数

十一.清屏函数

十二.strcmp函数


一.学会创造结构体

1.创造

结构体的创造不需要内存

\

struct Stu
{
char name[10];//字符数组必须初始化
int age;
char sex[10];
double score;
};

1.表达

int main()//创造结构体STRUCT
{
struct Stu s1 = { "账上",18,"男",90.0};
printf("请输入你的信息");
scanf("%s %d %s %lf", s1.name,&(s1.age),s1.sex,&(s1.score) );//数组名就是地址所以不需要取地址符号
//printf("%s %d %s %lf", s1.name, s1.age, s1.sex, s1.score);//第一种表达方法.
//注意字符串表达是%s 字符的表达是%c
struct Stu* ps1 = &s1;//取地址道ps1中
printf("%s %d %s %lf", (*ps1).name,(*ps1).age,(*ps1).sex,(*ps1).score);//第二种表达方法.
printf("%s %d %s %lf", ps1->name, ps1->age, ps1->sex, ps1->score);
//第三种表达方法.与二种同理.但是更直观表示指针
//-> 结构成员访问操作符 结构体指针->结构体成员

//return 0;
}

3.Vs编译器自身BUG

int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
printf("error\n");
}
return 0;
}

二.好的代码风格

推荐书本《/高质量c/c++编程》

IF语句

1:最好跟大括号,不然容易出错

这样就会误认为else与第一个if对齐

2:判断相等 的时候最好数字放在左边

if

else if

else if

else

一定要这样写全了,像编译器一样,严谨一点-。-

#include<stdio.h>
int fun(int a)
{
    if (a < 0)
    {
        return 1;
    }
    else if(0 == a)
    {
        return 0 ;
    }
    else
    {
        return -1;
    }
    

}
int main()
{
    int x = 0;
    int y = 0;
    scanf("%d", &x);
    y = fun(x);
    printf("%d\n", y);
    return 0;
}

错误的

#include<stdio.h>
int fun(int a)
{
    if (a < 0)
    {
        return 1;
    }
    else if(0 == a)
    {
        return 0 ;
    }
    else if(a > 0)
    {
        return -1;
    }
    

}
int main()
{
    int x = 0;
    int y = 0;
    scanf("%d", &x);
    y = fun(x);
    printf("%d\n", y);
    return 0;
}

3.一定要注意大小写

题目

#include<stdio.h> int main() { int a = 0; scanf("%d",&a); if( (a >= 1) && (a <= 100000)) { if(a%5) { printf("NO\n"); } else { printf("YES\n"); } } else { printf("输入错误\n"); } return 0; }

error

三.赋值表达式

结果为0

四.switch语句

switch语句必须是整型表达式

1.case:

 switch是用来进行多分支选择的语句,一般结构是:

  switch(整型变量表达式)

  {

    case xx1:

     // ...

     break;

    case xx2

     // ...

     break;

    default:

      // ...

  }

  

  当变量表达式的内容与某个case后的常量相等后,就执行该case下的语句,break表示该case以后的内容不会执行,如果没有跟break,会继续执行当前case之后的case分支。

  当变量表达式的内容没有与那个case匹配,就会执行default下的内容。

  switch中常用的关键字:case 、break、 default,当然case中语句比较复杂时,可能会用if进行判断。

  continue是用来结束本次循环的,而switch不是循环,因此其中不能使用continue关键字

且需要break不然会执行后面的分支

switch(条件表达式)

{

case:

{

break

}

default:

{

break

}

}

2.编程好习惯

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break

3.做题的错误

关键字具有特殊含义,不能作为变量名

static的特性

  1. static修饰变量

   a. 函数中局部变量:

      声明周期延长:该变量不随函数结束而结束

      初始化:只在第一次调用该函数时进行初始化

      记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值

      存储位置:不会存储在栈上,放在数据段

   b. 全局变量

     改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用

   c. 修饰变量时,没有被初始化时会被自动初始化为0

  2. static修饰函数

   改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用

五.缓冲区的概念

scanf和getchar从缓冲区找数据,

键盘输入密码后按回车获得\n.scanf读取道\n之前的数据,

所以getchar直接在缓冲区找打了\n,

所以直接来到if语句中的else语句,所以输出"输入错误"

.所以需要一个函数读取\n.

方法1

学会用GETCHAR 只能用一个字符

方法2

输入字符,只打印数字字符

int main()//读取字符,只打印数字字符
{
    int ch = '0';
    while ((ch = getchar()) != EOF)
        if ((ch < '0') || (ch > '9'))
        {
        continue;
         }
        else
        {
            putchar(ch);
        }
    return;
}

六.C语言生成随机数的方法

前提:头文件包含stdlib.h

第一种:输出0~RAND_MAX之间的随机数

magic = rand();

第二种:输出num1~num2之间的随机数 num1、num2可以输入或者随机指定

int num1=100,num2=0; magic = rand()%num1+num2;

第三种:通过输入关键字来决定输出num1~num2之间的随机数

int seed=...; srand(seed); magic = rand()%num1+num2;

第四种:通过时间来控制输出num1~num2之间的随机数

srand(time(NULL)); magic rand()%num1~num2;

————————————————

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));
int ret = rand();
printf("%d\n", ret);
return 0;
}

注意"生成范围随机数公式:

很多时候我们需要生成一个带范围的随机值:例如1~100。

其实这个很简单:

srand((unsigned int)time(NULL));

int ret1 = rand() % 10 + 1;//生成1~10的随机数

int ret2 = rand() % 100 + 1;//生成1~100的随机数

int ret3 = rand() % 34 + 66;//生成66~99的随机数

int ret4 = rand() % (n - m + 1) + m;//生成m~n的随机数

七.二分查找法

int main()//在一个有序数组查找某个数
{
    int arr[] = { 1,2,3,4,5,6,7,8,9 };
    int k = 7;
    int left = 0;
    int right = sizeof(arr)/sizeof(arr[0])-1;
    while (left <= right)
    {
        int mid = left+(right-left) / 2;//直接用left+right容易越界
        if (arr[mid] < k)
        {
            left = mid + 1;
            continue;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
            continue;
        }
        else 
        {
            printf("找到了下标是%d\n", mid);
            break;
        }
       
    }
    if (left > right)
    {
        printf("没找到\n");
    }
    return 0;
}

八.平均数算法

一般来说不用

int avg =(a+b)/2

因为算出来的值容易越界

尽量使用

int avg=a+(a-b)/2

九.计算数组元素个数

1.数字数组计算方法

int main()
{
    int arr[] = { 1,2,3 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    printf("%d\n", sz);
}

2..字符串数组计算方法

方法1

因为字符串结尾以'/0',所以要多一个,顾要减1个,跟数组要区分

方法2

使用strlen函数,注意要引用头文件string.h

int main()
{
    char arr[] = { "abcd" };
    int sz = sizeof(arr) / sizeof(arr[0])-1;
     printf("%d\n", sz);

}

注意,数字数组用不了这个函数

十.程序休眠函数

Sleep(100),程序休眠100ms运行//注意大写

需要引用头文件Windows.h\

十一.清屏函数

system("cls")

需要引用头文件stdlib.h

十二.strcmp函数

两个字符串的比较是不能直接使用==//应该使用strcmp

两个字符比较是可以的

strcmp(" " , " " )如果相等则返回0

今日心得

太累了太累了,,,算是复习了之前学的,之后学到没学过的,估计要爆炸,,不过还是慢慢来,给自己定的目标就是小代码5-10分钟.增加思考能力,不过学了好多东西,感觉今天很充实.冲冲冲!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值