指针
内存
如何产生地址 32 位 32根地址线/数据线 正电 - 1 负电 - 0
00000000000000000000000000000000
......
11111111111111111111111111111111
共2^32个地址 2^32bit = 0.5gb
2^32 byte = 4gb
&取地址符号
int main()
{
int a = 10;
int* p = &a;
*p = 20;
printf("%d\n",a);
return 0;
}
0x0012ff40
int a = 10; --> 10 a
int* p = &a;--> 0x0012ff40 p 32位一个指针字节的大小为4个字节 64位 8个字节
*p = 20;用*解引用操作符直接使用a
int main()
{
char ch = 'w';
char* pc = &ch;
printf("%d\n",sizeof(pc));
*pc = 'a';
printf("%c\n",*pc);
return 0;
}
结构体 char int double ...
复杂对象 - 结构体 - 我们自己创造出来的一种类型
struct - 结构体关键字
struct Book
{
char name[20];
short price;
};
int main()
{
struct Book b1 = {"c语言程序设计",55};
strcpy(b1.name,"c++");
printf("%s\n",b1.name);
struct Book* pb = &b1;
printf("%s\n",pb->name);
printf("%d\n",pb->price);
printf("%s\n",(*pb).name);
printf("%d\n",(*pb).price);
printf("书名:%s\n",b1.name);
printf("价格:%d元\n",b1.price);
return 0;
}
分支和循环语句
c语言是一门结构化的程序设计语言
1.顺序结构 2.选择结构 3.循环结构
分支语句 if switch 循环语句 while for do while
c语言中由一个;号隔开即为一个语句
if语句
if(表达式) 语句;
if(表达式) 语句1;else 语句2;
if(表达式) 语句1; else if(表达式) 语句2; else 语句3;
int main()
{
int age = 10;
if(age<18)
{
printf("未成年\n");
printf("不能谈恋爱\n");
}
else if(age>=18 && age<23)
printf("青年\n");
else
printf("老年\n");
return 0;
}
if语句条件成立后要使多条内容成立需用{}语句块
悬空else
int main()
{
int a = 0;
int b = 0;
if(a == 1);
if(b == 2)
printf("呵呵\n");
else
printf("哈哈\n");
return 0;
}
书写规范,常量和变量判断是否相等,将常量放左边
输出0-100中的奇数
int main()
{
int a = 1;
while (a<100)
{
if(a%2 == 1)
printf("%d ",a);
a++;
}
return 0;
}
判断一个数是否为奇数
int main()
{
int a = 0;
scanf("%d",&a);
if( a%2 == 1 )
printf("奇数\n");
else
printf("偶数\n");
return 0;
}
switch语句 实现多分支
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
}
return 0;
}
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
循环语句
while(表达式)
循环语句;
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d",i);
i++;
}
return 0;
}
getchar
int main()
{
int ch = getchar();
putchar(ch);
printf("%c\n",ch);
return 0;
}
int main()
{
int ch = 0;
while((ch=getchar()) !=EOF)
{
putchar(ch);
}
int main()
{
int ret = 0;
int ch = 0;
char passward[20] = {0};
printf("请输入密码:>");
scanf("%s",passward);
while((ch = getchar()) !='\n')
{
;
}
printf("请确认(y/n):>");
ret = getchar();
if(ret == 'y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
只输出数字字符
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
if(ch<'0'||ch>'9')
continue;
else
putchar(ch);
}
return 0;
}
for循环
for(表达式1;表达式2;表达式3;) - 1初始化部分 2条件判断部分 3调整部分
int main()
{
int i =0;
for(i = 1; i<=10 ;i++)
{
printf("%d",i);
}
return 0;
}
break和continue在for循环中的功能与while循环一致
int main()
{
int i =0;
for(i = 1; i<=10 ;i++)
{
if(i == 5)
continue;
printf("%d",i);
}
return 0;
}
for循环中continue不会跳过调整部分'i++'
1.不可在for循环体内修改循环变量,防止for循环失去控制
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法
1.for循环的初始化调整判断都可省略,但是for循环的判断部分如果被省略,那判断条件就是恒为真
int main()
{
for(;;)
{
printf("hehe\n");
}
return 0;
}
int main()
{
int i = 0;
int j = 0;
for(;i<10;i++)
{
for(;j<10;j++)
{
printf("hehe\n");
}
}
return 0;
}
结果为10个hehe,当j++至10时跳出第二个for循环后因j=0的初始条件消失,所以在跳出第二个for循环后,j恒等于10
int main()
{
int x,y;
for(x=0,y=0;x<2 && y<5;x++,y++)
{
printf("hehe\n");
}
return 0;
}
int main()
{
int i = 0;
int k = 0;
for(i=0,k=0;k=0;i++,k++)
k++;
return 0;
}
do...while()循环
do
循环语句;
while(表达式);
int main()
{
int i =1;
do
{
if(i ==5)
continue;
printf("%d",i);
i++;
}
while(i<=10);
return 0;
}
break和continue在do while循环中功能与while/for循环相同
计算n的阶乘
int main()
{
int n = 0;
int i = 0;
int ret = 1;
scanf("%d",&n);
for(n,i=1;i<=n;i++)
{ret = ret*i;
}
printf("%d",ret);
return 0;
}
计算1!+...+n!的和
int main()
{
int n = 0;
int i = 0;
int ret = 1;
int sum = 0;
for(n=1;n<=3;n++)
{
ret=1;
for(i=1;i<=n;i++)
{
ret = ret*i;
}
sum = sum + ret;
}
printf("sum = %d\n",sum);
return 0;
}
int main()
{
int n = 0;
int i = 0;
int ret = 1;
int sum = 0;
for(n=1;n<=3;n++)
{
ret = ret*n;
sum = sum + ret;
}
printf("sum = %d\n",sum);
return 0;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9};
int k = 9;
int sz = sizeof arr / sizeof arr[0];
int n = 0;
for(n=1;n<=sz;n++)
{
if(k == arr[n])
{printf("找到了,下标为:%d\n",n);
break;
}
if(n==sz)
printf("找不到\n");
}
return 0;
折半查找算法/二分查找算法 算法次数=log2n
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 9;
int sz = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = sz-1;
while(left<=right)
{
int mid = (left+right)/2;
if(arr[mid]>k)
{
right = mid-1;
}
else if(arr[mid]<k)
{
left = mid+1;
}
else
{
printf("找到了,下标是:%d\n",mid);
break;
}
if(left>right)
{
printf("找不到\n");
}
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char arr1[] = "welcome to bit!!!!!";
char arr2[] = "###################";
int left = 0;
int right = strlen(arr1)-1;
while(left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n",arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
printf("%s\n",arr2);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
int i = 0;
char password[20] = {0};
for(i=0;i<3;i++)
{
printf("请输入密码:>");
scanf("%s",password);
if(strcmp(password, "123456")==0)
{
printf("登录成功\n");
break;
}
else
printf("密码错误\n");
}
if(i == 3)
printf("三次密码均错误,退出程序\n");
return 0;
}
|