自学C语言日记-第三天

指针

为了有效使用内存,就把内存划分为一个个小单元,每个内存单元的大小是一个字节.为了能够有效地访问到内存的每个单元,就给内存单元进行了编号,这些编号称为该内存单元的地址.
内存的使用类似于现实生活中对于空间的使用.

  • 内存是如何编号的
    • 32位:32位地址线
    • 64位:64位地址线
  • 一个内存单元的空间有多大
    • 以一个字节作为一个内存单元

一个地址的例子

int main()
{
    SetConsoleOutputCP(65001);
    int a = 10;
    printf("a的地址:%p\n",&a);
    int * pa = &a ;//* 说明 pa 是指针变量; int 说明 pa 指向的对象是int类型的
    printf("pa的值:%d\n",pa);
    printf("pa的地址%p\n",&pa);
    system("pause");
}

a的地址:000000000061fe1c
pa的值:6422044
pa的地址000000000061fe10
Press any key to continue . . .

用来存放地址的变量叫做指针变量
解引用操作符

int main()
{
    int a = 10;
    int* pa = &a;
    *pa = 20;//* :解引用操作符
    printf("%d\n",a);
    system("pause");
}

20
请按任意键继续. . .

指针需要多大空间取决于地址的存储需要多大空间.32bit机器上就是32bit做地址,64bit机器就需要64bit(8)字节作为地址

int main()
{
    printf("%d\n",sizeof(char*));
    system("pause");
}

8
请按任意键继续. . .

结构体

结构体是C语言中很重要的知识点
结构体使得C语言能够描述复杂类型
下为一个例子

struct stu
{
    char name[20];
    int age;
    double score;

};
struct book
{
    char name[20];
    float price;
    char id[30];
};
int main()
{
    SetConsoleOutputCP(65001);
    struct stu s = {"张三",20,85.5};//结构体创建和初始化
    printf("%s %d %f\n",s.name,s.age,s.score);
    system("pause");
}

张三 20 85.500000
Press any key to continue . . .

分支和结构语句

顺序结构

就是一般的程序,没什么可写的

选择结构

if

语法结构
> if(表达式)
> 		语句;
> if(表达式)
> 		语句1;
> else
> 		语句2;

> if(表达式1)
> 		语句1;
> else if(表达式2)
> 		语句2;
> else
> 		语句3;
int main()
{
    SetConsoleOutputCP(65001);
    int num1 = 0;
    scanf("%d", &num1);
    if(num1<0)
        printf("负数\n");
    else if(num1=0)
        printf("零\n");
    else
        printf("正数\n");
    system("pause");
}
1
正数
Press any key to continue . . .

判断一个数是否为奇数

int main()
{
    int num1 = 0;
    SetConsoleOutputCP(65001);
    printf("请输入一个数以供判断>");
    scanf("%d",&num1);
    if(num1%2==1)
        printf("%d是奇数\n",num1);
    else
        printf("%d是偶数\n",num1);
    system("pause");
}

输出1-100之间的奇数

int main()
{
    int i = 1;
    while( i <= 100)
    {
        if( i % 2 == 1 )
        {
            printf("%d\t",i);
        }    
        i++;
    }
        system("pause");
}
int main()
{
    int i = 0;
    for(i = 1 ; i <= 100 ; i++)
    {
        if(i%2==1)
            printf("%d\t",i);       
    }
    system("pause");
}

switch

switch(整形表达式)
{
		语句项;
}
int main()
{
    int day = 1 ;
    SetConsoleOutputCP(65001);
    while(day != 0)
    {
        printf("请输入第几天>");
        scanf("%d",&day);
        switch (day)
        {
            case 1:
                printf("今天星期一\n");break;
            case 2:
                printf("今天星期二\n");break;
            case 3:
                printf("今天星期三\n");break;
            case 4:
                printf("今天星期四\n");break;
            case 5:
                printf("今天星期五\n");break;
            case 6:
                printf("今天星期六\n");break;
            case 7:
                printf("今天星期日\n");break;
            default:
                printf("输入错误");
        }
    }
    system("pause");
}
请输入第几天>1
今天星期一
请输入第几天>2
今天星期二
请输入第几天>3
今天星期三
请输入第几天>4
今天星期四
请输入第几天>5
今天星期五
请输入第几天>6
今天星期六
请输入第几天>7
今天星期日
请输入第几天>8
输入错误请输入第几天>0
输入错误Press any key to continue . . .

循环结构

while

while(表达式)
		循环语句;

break
用于永久地终止循环
continue
跳过本次循环并从头开始

int main()
{
    SetConsoleOutputCP(65001);
    char password[20] = { 0 };
    printf("请输入密码:>");
    scanf("%s",password);
    printf("请确认密码(Y/N:>)");
    清理缓冲区
    int tmp = 0;
    while((tmp = getchar()) != '\n')
    {
        ;
    }
    int ch = getchar();
    if (ch == 'Y')
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    printf("密码为%s\n",password);
    system("pause");
}

for

for(表达式1;表达式2;表达式3)
		循环语句
//表达式1:初始化
//表达式2:判断
//表达式3:i调整
int main()
{
    int i = 0;
    for (i=1;i<10;i++)
    {
        printf("%d\t",i);
    }
    system("pause");
}
1       2       3       4       5       6       7       8       9       请按任意键继续. . .

for循环的初始化等式只执行一次
break和continue在for中
break会跳出循环体
continue不会跳出循环体,会回到if重新执行函数.
for循环中的一些建议

  • 不可以在代码中修改循环变量,以免for循环失去控制
  • 建议在for语句的循环控制变量的取值采用"前闭后开区间"的写法
错误代码示范
int main()
{
    int i = 0;
    for (i = 1; i <= 10 ; i++)
    {
        printf("%d",i);
        int j = 0;
        for (j = 0;j < 10 ; i++)
        {
            printf("in J\n");
        }
    }
    system("pause");
}

for循环部分条件缺失
for循环任意部分可以单独或一起省略.但是判断部分的省略会导致死循环,所以应该慎重省略

do while

do
	循环语句
while(表达式);
int main()
{
    int i = 1;
    do
    {
        printf("%d",i);
        i++;
    } while (i <= 10);
    system("pause");
}
12345678910请按任意键继续. . .

计算n的阶乘

int main()
{
    SetConsoleOutputCP(65001);
    int i = 5 ;
    int sum = 1;
    printf("请输入n的值:>");
    scanf("%d",&i);
    do
    {
        sum = (sum * i);
        i--;
    } while(i > 1);
    printf("n!=%d",sum);
    system("pause");
}

计算1!+2!+…+n!

int main()
{
    SetConsoleOutputCP(65001);
    int i = 2;
    int totsum = 1;
    int sum = 1;
    int n = 1;
    printf("请输入i的值:>");
    scanf("%d",&i);
    do{
        n=i;
        sum = 1;
        do{
            sum = (sum * n);
            n--;
        }while(n>1);
        i--;
        totsum = (totsum + sum);
    }while(i>1);
    printf("1!+2!+...+i!=%d\n",totsum);
    system("pause");
}
请输入i的值:>10
1!+2!+...+i!=4037913
Press any key to continue . . .

编辑代码演示只允许登录三次的程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值