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;
}