C语言 第一周

C语言 第一周

printf的用法

#include <studio.h>

int main()
{
   printf("hello micu") ;
    
    return 0;
}

此结果输出的结果是“hello micu”

printf的总结:用法是()+“”里面输入任何你想要的字母,数字,以及字符等等。

换行\n和用法

#include <stdio.h>

int main()
{
    printf("hello micu\nhello 123_456");
    return 0;
}

假设我们在\n前面又加了一个\ 会发生什么现象

#include <stdio.h>

int main()
{
    printf("hello micu\\nhello 123_456");
    return 0;
}

看结果可知\n失去了原本的意义

不加/n结果就会在一行显示

\n总结:我们无法手动进行换行,机器只认\n,相当于你告诉机器说我要换行,只有用\n机器才能理解你的意思。

变量和赋值

#include <stdio.h>


int a ;//这是声明一个整数a
float b;//这是声明一个小数b

int a=0;//这是定义一个a=0;
int b=3.14;//这是定义一个b=3.14;
int main()
{
    a = 0;//这是给a赋值,令a=0
    b = 3.14;//这是给b赋值,令b=3.14
   
    return 0;
}

总结:声明写在int main之前,#include之后

C语言解决实际问题

#include <stdio.h>
int length;
int width;
int height;
int volume;
int main()
{
   length=6;
    width=3;
    height=5;
    volume=length*width*height;
   printf("体积=%d",volume);
    return 0;
}

我们已经完成了C语言的简单应用,心细的朋友们已经发现这个%d 了,那接下来我们了解以下这个%d。

%d, %f占位符

占位符先占据一个位置不显示,在后面的时候会把要显示的变量值塞过去。%d是整数类型的占位符,%f是小数类型的占位符。

读入用户输入内容赋值给变量scanf

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int length;
int width;
int height;
int volume;
int main()
{
    scanf("%d", &length);
    scanf("%d", &width);
    scanf("%d", &height);
    volume = length * width * height;
    printf("体积=%d", volume);
    return 0;
}

这里我用的是VS2022进行演示,引入了#define _CRT_SECURE_NO_WARNINGS这段话scanf才能正常运行,否则会报错,需要注意的一点是,C语言按顺序读取,如果把volume = length * width * height;写在赋值的前面会显示不出来你要的结果。这里还引入了&取地址符。

随堂练习

1.我给改成求面积了,但大差不差,主要看代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int r;
float mianji;
int main()
{
    printf("请输入圆的半径:");
    scanf("%d", &r);
    mianji = 3.14 * r * r;
    printf("%f",mianji);
    return 0;
}

2.分别让用户输入两个半径,求两个半径的面积

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int r;
int r1;
float mianji;
float mianji1;

int main()
{
    printf("请输入圆的半径:");
    scanf("%d", &r);
    printf("请输入圆的半径:");
    scanf("%d", &r1);
     mianji= 3.14 * r * r;
    mianji1=3.14 * r1 * r1;
    printf("%f\n%f",mianji,mianji1);
    
 
    return 0;
}

3.只需要定义一个PI宏定义,然后把3.14改成PI

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define PI 3.14159
int r;
int r1;
float mianji;
float mianji1;

int main()
{
    printf("请输入圆的半径:");
    scanf("%d", &r);
    printf("请输入圆的半径:");
    scanf("%d", &r1);
    mianji = PI * r * r;
    mianji1 = PI * r1 * r1;
    printf("%f\n%f", mianji, mianji1);


    return 0;
}

------------------------------------------------------------------------第一节结束---------------------------------------------------------------------

表达式和选择语句

#include <stdio.h>
int a = 2;
int b = 3;
int c = 4;

int main()
{
    a = b++;
    printf("a=%d\nb=%d",a,b);


    return 0;
}

这个要记住,是a=b,b++。所以a=3,b=4。

#include <stdio.h>
int a = 2;
int b = 3;
int c = 4;

int main()
{
    a = ++b;
    printf("a=%d\nb=%d",a,b);


    return 0;
}

这个结果完全不同于上面,这个是a++,a=b;

总结以下就是看等号后面是谁,如果是++,那就是先++,然后是=,不是则反之。

判断

#include <stdio.h>
int a = 2;
int b = 3;
int c = 4;

int main()
{
    a = b==c;
    printf("a=%d",a);


    return 0;
}

这个是判断a是否=b==c,有题目知b不等于c,所以为假,a=0,反之则为1。

#include <stdio.h>
int a = 2;
int b = 3;
int c = 4;

int main()
{
    a = b!=c;
    printf("a=%d",a);


    return 0;
}

此结果为1,为真。

条件语句

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int num;
int main()
{
    printf("请输入一个数:");
    scanf("%d", &num);
    if (num % 2 ==0)
        printf("偶数");
    else
        printf("奇数");


    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int num;
int main()
{
    printf("请输入一个数:");
    scanf("%d", &num);
    if (num % 2 == 0)
    {
        num = num * 5;
        printf("偶数%d",num);
    }
    else
    {
        num = num * 3;
        printf("奇数%d",num);
    }

    return 0;
}

如果if语句后面是多句,需要加{}。

运行结果如下

级联式输入语句

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int num;
int main()
{
    printf("请输入一个1-10的数:");
    scanf("%d", &num);
    if (num == 10)
        printf("满分");

    else if (num == 9)
        printf("优秀");
    else if (num == 8)
        printf("优秀");
    else if (num == 7)
        printf("num==6");
    else if (num == 6)
        printf("良好");
    else if (num == 5)
        printf("良好");
    else if (num == 4)
        printf("良好");
    else if (num == 3)
        printf("不合格");
    else if (num == 2)
        printf("不合格");
    else if (num == 1)
        printf("不合格");
    else
        printf("不合格");
    return 0;
}

if

else if

else

条件表达式

#include <stdio.h>

int a;
int b = 2;
int c = 3;
int main()
{
    a = b > c ? 5 : 6;
    printf("%d", a);
    return 0;
}

如果b>c,则输出a=6,如果为真则输出为5。

switch case语句

基于上面的代码进行优化

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int num;
int main()
{
    printf("请输入一个1-10的数:");
    scanf("%d", &num);
    switch (num)
    {
    case 0:
        printf("不合格");
    case 1:
        printf("不合格");
    case 2:
        printf("不合格");
    case 3:
        printf("不合格");
    case 4:
        printf("不合格");
    case 5:
        printf("良好");
    case 6:
        printf("良好");
    case 7:
        printf("优秀");
    case 8:
        printf("优秀");
    case 9:
        printf("优秀");
    case 10:
        printf("满分");
   }
    return 0;
}

switch case 语句是按照你输入的数按顺序往后执行。

如果想让他们单独显示,需要在每个语句后面加break。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int num;
int main()
{
    printf("请输入一个1-10的数:");
    scanf("%d", &num);
    switch (num)
    {
    case 0:
        printf("不合格");
        break;
    case 1:
        printf("不合格");
        break;
    case 2:
        printf("不合格");
        break;
    case 3:
        printf("不合格");
        break;
    case 4:
        printf("不合格");
        break;
    case 5:
        printf("良好");
        break;
    case 6:
        printf("良好");
        break;
    case 7:
        printf("优秀");
        break;
    case 8:
        printf("优秀");
        break;
    case 9:
        printf("优秀");
        break;
    case 10:
        printf("满分");
        break;
   }
    return 0;
}

这样我们就成功显示了。

----------------------------------------------------------------第二节结束------------------------------------------------------------------------

循环语句

while语句

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int i=5;

int main()
{
    while (i)
    {
       printf("%d", i);
       i = i - 1;
   }
 
    return 0;
}

do while语句

输入一个整数,然后判断有几位

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int num;
int i;
int main()
{
    printf("请输入一个整数:");
    scanf("%d", &num);
    do
    {
        num = num / 10;//把数字去掉一位
        i++;//每去掉一位i就加

    } while (num > 0);//只要num还大于0,就继续循环
    printf("输入位数有%d", i);
    return 0;
}

for语句

在屏幕上显示5-1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int i = 0;
int main()
{
    for (i = 5; i > 0; i--)
    {
        printf("%d", i);
   }
    return 0;
}

判断一个数是否是素数

这里以6举例子

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int num;
int i ;
int main()
{
    printf("输入一个整数:");
        scanf("%d", &num);//输入6
        for (i = 2; i < num; i++)//因为素数是只有1和他本身能整除,我们从2开始
        {
            if ((num % i) == 0)//6%2==0循环结束
                break;
        }
        if (i < num)//2<num,所以6为非素数
            printf("这个数是非素数");//输出非素数
        else
            printf("这个数是素数");
    return 0;
}

素数是只有1和它本身才能整除,而非素数是除了1和它本身还有别的数能整除他。

goto跳转语句

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int main()
{
    goto b;
a:
    printf("这是a\n");
b:
    printf("这是b\n");
c:
    printf("这是c\n");
    return 0;
}

直接跳过a从b开始

------------------------------------------------------------第三讲结束----------------------------------------------------------------------

数制与码值和基本数据类型

6的源码00000110 反码为01111001 补码等于反码+1 补码等于01111010

第四节没什么写的


数组与指针入门

一维数组

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int student1=56;
int student2=64;
int student3=32;
int num;

int main()
{
    printf("输入一个学生的学号:");
    scanf("%d", &num);
    switch (num)
    {
    case 1:
        printf("学员1的成绩为:%d", student1);
        break;
    case 2:
        printf("学员2的成绩为:%d", student2);
        break;
    case 3:
        printf("学员3的成绩为:%d", student3);
        break;
    }
   
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int student1;
int student2;
int student3;
int num;

int main()
{
    printf("输入学生1的成绩:");
    scanf("%d", &student1);
    printf("输入学生2的成绩:");
    scanf("%d", &student2);
    printf("输入学生3的成绩:");
    scanf("%d", &student3);

    printf("请输入学生的学号");
    scanf("%d", &num);
    switch (num)
    {
    case 1:
        printf("学员1的成绩为:%d", student1);
        break;
    case 2 :
        printf("学员2的成绩为:%d", student2);
        break;
    case 3:
        printf("学员3的成绩为:%d", student3);
        break;
    }
   
    return 0;
}

输入三个学生的成绩,分别查询

那如果要查询很多的学生呢?这里我们引入数组

int num[5]意思是声明了一个长度为5的有符号整数类型

int num[5]={0,1,2,3,4}

思考题

让用户输入十个数,将这十个数按从小到大的顺序排列

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    // 定义一个长度为10的数组,用于存储用户输入的10个数
    int arr[10];
    int i, j, temp;

    // 1. 让用户输入10个数
    printf("请输入10个整数:\n");
    for (i = 0; i < 10; i++) {
        scanf("%d", &arr[i]);
    }

    // 2. 冒泡排序:从小到大排列
    for (i = 0; i < 9; i++) {
        for (j = 0; j < 9 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换两个数的位置
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    // 3. 输出排序后的结果
    printf("从小到大排序后的结果为:\n");
    for (i = 0; i < 10; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

这个不太会,AI生成的

多维数组

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

char string[3] = { 'a','b','c' };

int main()
{
	printf("%c",string[2]);
	return 0;
}

字符的占位符%c

字符串的占位符%s


函数和结构程序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


void hanshu1(void)
{
	printf("hello micu");
}

int main()
{
	hanshu1();
	return 0;
}

函数是一段代码的集合

求两个数的平均值

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int a = 3; int b = 5;
int pingjun;

int main()
{
	pingjun = (a + b) / 2;
	printf("%d", pingjun);
	return 0;
}

用函数来表示

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int a = 3; int b = 5;
int pingjun=0;

int average(int x, int y)
{
	int f = 0;
	f = (x + y) / 2;

	return f;

}

int main()
{
	pingjun = average(a,b);
	printf("%d", pingjun);
	return 0;
}

结果同样为4

同理求和函数也是同样的

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int a = 3; int b = 5;
int c=0;

int sum(int x, int y)
{
	int f = 0;
	f = a + b;

	return f;

}

int main()
{
	c = sum(a,b);
	printf("%d", c);
	return 0;
}

写一个交换变量

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int a = 3; 
int b = 5;
int c = 0;


int main()
{
	c = a;//先把a的数赋值给c
	a = b;//a=b=5
	b = c;//c=3,b=c,b=3
	printf("a=%d b=%d", a, b);
	return 0;
}

用函数写

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int a = 3; 
int b = 5;
int j;

void exchange(int* x, int* y)
{
	j = *x;
	*x = *y;
	*y = j;


}


int main()
{
	exchange(&a, &b);
	printf("a=%d b=%d", a, b);
	return 0;
}

找出数组a中的最大值,找出数组b中的最大值,求两个数的平均值。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int num1[5] = { 1,2,3,4,5 };
int num2[5] = { 6,7,8,9,10};
int c1;
int c2;
int h;

int max(int* addr)
{
	int m = 0;
	int i = 0;

	for (i = 0; i < 5; i++)
	{
		if (addr[i] > m)m = addr[i];
	}
	return m;
}


int average(int x, int y)
{
	int k = 0;
	k = (x + y) / 2;
	return k;
}

void main()
{

	c1 = max(num1);
	c2 = max(num2);
	h = average(c1, c2);
	printf("c1=%d c2=%d average=%d", c1, c2, h);

	return 0;
}