C/C++基础语言学习
目录
前言
本文总结了最近看视频学习的一些c++内容,软件用VS2010即可。
一、基本字符类型
//char字符数据类型,short短整形
char ch = 'a';
printf("%c\r\n",ch); //%c打印字符格式的数据
int age=20;
printf("%d\r\n",age); //%d打印整型十进制的数据
//short int短整型,long为长整型,long long更长的整形,float为单精度浮点数,double为双精度浮点数
//%f打印浮点型,%p以地址的形式打印,%x打印十六进制
printf("%d\r\n",sizeof(char)); //计算char所占的字节数
printf("%d\r\n",sizeof(int));
printf("%d\r\n",sizeof(long));
printf("%d\r\n",sizeof(long long));
printf("%d\r\n",sizeof(float));
printf("%d\r\n",sizeof(double));
float weight=45.6f;
//全局变量定义在({})之外的,局部变量定义在({})之内
int num1=10,num2=20,sum=0;
sum=num1+num2;
printf("sum=%d\r\n",sum);
sum=Add(30,50);
printf("sum=%d\r\n",sum);
//常量1、const-常属性
const int num=3; //num被const修饰,无法再改变,常属性变量,num不是常量
//#define定义的标示符常量
#define max 10
int arr[max]={0};
//枚举常量,枚举——一一列举,枚举关键字 enum
enum Sex
{
MALE,FEMALE,SECRET
};
enum Sex s=FEMALE;
printf("%d\r\n",MALE);
printf("%d\r\n",FEMALE);
printf("%d\r\n",SECRET);
//字符串的结束标志是一个\0的转义字符,\0是字符串结束标志,不算字符串的内容
char arr1[]="abc";
char arr2[]={'a','b','c'};
printf("%s\r\n",arr1);
printf("%s\r\n",arr2);
printf("%d\r\n",strlen(arr1)); //strlen求字符长度函数
printf("%d\r\n",strlen(arr2)); //头文件是string.h
printf("%s\r\n","\""); //打印单独的双引号
printf("%c\r\n",'\x61'); //单引号是字符 %c,双引号是字符串%s,\x61为十六进制,打印十六进制对应的十进制数所对应ASCII码值对应的字符
// \t为水平制表符 转义字符,x61的十进制为97,ascii为97对应的字符为a,故打印字符a
int input;
if(input==1)
printf("好offer\r\n");
else
printf("卖红薯\r\n");
//循环语句 while循环 for do.....while三个循环
// int i=0; //对i赋初值,while循环才会执行
// while(i<300)
// {
// printf("敲一行代码:%d\r\n",i);
// i++;
// }
// if(i>=300)
// printf("好offer\r\n");
//数组的概念,一组相同类型的元素集合
int arr3[10]={0,1,2,3,4,5,6,7,8,9}; //定义存放十个元素的数组
printf("%d\r\n",arr3[0]);
// int i=0;
// while(i<10)
// {
// printf("数组元素:%d\r\n",arr3[i]);
// i++;
// }
int a=1; //a占4个字节,总共32位,对应的二进制为0000 0000 0000 0000 0000 0000 0000 0001
int b=a<<3; //左移3位 0000 0000 0000 0000 0000 0000 0000 1000
printf("%d\r\n",b);
//&按位与,|按位或,^按位异或
int c=5; //0101
int d=7; //0111
int e=c&d;
printf("%d\r\n",e);
int f=c|d;
printf("%d\r\n",f);
int g=c^d; //相同为0,相异为1
printf("%d\r\n",g);
//复合赋值符号,=,+=,-=,*=,/=,&=,^=,|=,>>=,<<=
//单目操作符,一个操作数;双目操作符,两操作数;三目操作符,三个操作数;
//0为假,一切非0为真
//(类型) 强制类型转换
int aa=10;
printf("%d\r\n",aa);
printf("%d\r\n",!aa);
int Max =0;
Max=MAX(30,50);
printf("%d\r\n",Max);
int aa1=10,bb1=20,max1=0;
max1=aa1>bb1?aa1:bb1; //条件运算符
printf("%d\r\n",max1);
// unsigned定义的变量总是正的,无符号型
int i=0;
while(i<5)
{
test(); //1.加static,打印值为2 3 4 5 6,不加static,输出值为2 2 2 2 2,注意函数中static的应用
i++; //2.static修饰局部变量,局部变量的生命周期变长;static修饰全局变量,改变了变量的作用域-让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就无法使用了
} //3.static修饰函数,改变了函数的作用域即链接属性
int aaa=10;
printf("%p\r\n",&aaa); //打印aaa的地址,有一种变量来存放地址的-指针变量
int* p=&aaa;
printf("%p\r\n",p);
printf("%d\r\n",*p); //取值
*p=20;
printf("%d\r\n",aaa);
char ch1='a';
char* pp=&ch1;
printf("%p\r\n",pp);
printf("%c\r\n",*pp);
*pp='c';
printf("%c\r\n",ch1);
//结构体
typedef struct
{
char name[20];
int price;
}BOOK;
BOOK book={"c语言程序设计",55};
printf("%s\r\n",book.name);
printf("%d\r\n",book.price);
BOOK book1={"c语言程序设计",55};
BOOK* book2=&book1;
printf("%s\r\n",(*book2).name);
printf("%d\r\n",(*book2).price);
printf("%s\r\n",book2->name);
printf("%d\r\n",book2->price);
//字符串更改名字,不能直接book.name="C++",因为name是一个数组
//正确写法:
strcpy(book.name,"C++"); //strcpy-string copy -字符串拷贝-库函数-string.h
二、分支语句与循环语句
1.分支语句
//c语言是一门结构化的程序设计语言 1.顺序结构 2.选择结构 3.循环结构
//多分支结构 if(表达式1) 语句1;else if(表达式2) 语句2;else(表达式3) 语句3; 三个语句只能被执行一个
int age1=20;
if(age1<18)
printf("未成年\r\n");
else if(age1>=18&&age1<28)
printf("青年\r\n");
else if(age1>=28&&age1<50)
printf("壮年\r\n");
else if(age1>=50&&age1<90)
printf("老年\r\n");
else
printf("老不死\r\n");
//0为假,非0为真 else与其离得最近的if进行匹配
int a11=0;
int b11=2;
if(a11==1)
{
if(b11==2)
printf("hehe\r\n");
else
printf("haha\r\n");
}
// if(condition) {return x;} return y; 这个语句相当于条件成立返回x,否则返回y
int num11=5;
// if(num11=6)
// {
// printf("hehe\r\n"); 可以输出呵呵
// }
// if(7==num11)
// {
// printf("hehe\r\n"); 不可以输出hehe
// }
//1.判断一个数是否为奇数
// int num22;
// scanf("%d",&num22);
// if(num22%2==0)
// printf("偶数:%d\r\n",num22);
// else
// printf("奇数:%d\r\n",num22);
//2.输出1-100之间的奇数
int num21;
for(num21=0;num21<100;num21++)
{
if(num21%2!=0) printf("奇数:%d\r\n",num21);
}
//switch语句
int day;
for(day=0;day<8;day++)
{
switch(day)
{
case 0:
printf("星期一\r\n");break;
case 1:
printf("星期二\r\n");break;
case 2:
printf("星期三\r\n");break;
case 3:
printf("星期四\r\n");break;
case 4:
printf("星期五\r\n");break;
case 5:
printf("星期六\r\n");break;
case 6:
printf("星期日\r\n");break;
default:
printf("error\r\n");break;
}
}
2.循环语句
//循环语句 while do...while for
int ab=1;
while(ab<=10)
{
if(ab==5) break; //终止循环
printf("%d\r\n",ab);
ab++;
}
// int ac=1;
// while(ac<=10)
// {
// if(ac==5) continue; //终止本次循环,本次循环中continue后面的代码不会再执行,直接跳到while语句的判断部分,进行下一次的入口判断
// printf("%d\r\n",ac);
// ac++;
// }
int ad=1;
while(ad<=10)
{
ad++;
if(ad==5) continue; //终止本次循环,本次循环中continue后面的代码不会再执行,直接跳到while语句的判断部分,进行下一次的入口判断
printf("%d\r\n",ad);
}
//打印10个hehe
int ii=0,jj=0;
for(;ii<10;ii++)
{
for(;jj<10;jj++)
{
printf("hehe\r\n");
}
}
//打印100个呵呵
int ii1=0,jj1=0;
// for(ii1=0;ii1<10;ii1++)
// {
// for(jj1=0;jj1<10;jj1++)
// {
// printf("hehe\r\n");
// }
// }
//
for(ii1=0,jj1=0;ii1<2&&jj1<5;++ii1,jj1++)
{
printf("hehe\r\n");
}
// int i2=0,k2=0;
// for(i2=0,k2=0;k2=0;i2++,k2++) k2++; //该语句循环0次,因为k2=0为判断语句为假,所以for语句不循环
//do...while循环
// do
// 循环语句;
// while(表达式); 先循环后判断
int k=1;
do
{
printf("%d\r\n",k);
k++;
}
while(k<=10);
3.基础知识练习
1.计算n的阶乘
// int k3=0,n=0,sum1=1;
// scanf("%d",&n);
// for(k3=1;k3<=n;k3++)
// {
// sum1*=k3;
// }
// printf("sum1=%d\r\n",sum1);
//计算1!+2!+3!...+10!
// int numb,sum2=1,sum3=0;
// for(numb=1;numb<=10;numb++)
// {
// sum2*=numb;
// sum3+=sum2;
// }
// printf("sum3=%d\r\n",sum3);
2.在一个有序数组中查找具体某个数字n。编写int binsearch(int x,int v[],int n);功能:在v[0]<=v[1]<=v[2]<=...<=v[n-1]的数组中查找x
//二分查找算法
int arr11[]={1,2,3,4,5,6,7,8,9,10};
int kk=10;
int sz=sizeof(arr11)/sizeof(arr11[0]);
int left=0; //左下标
int right=sz-1; //右下标
while(left<=right)
{
int mid=(left+right)/2;
if(arr11[mid]>kk)
{
right=mid-1;
}
else if(arr11[mid]<kk)
{
left=mid+1;
}
else
{
printf("找到了,下标是:%d\r\n",mid);
printf("%d\r\n",arr11[mid]);
break; //跳出循环
}
}
if(left>right)
{
printf("找不到了\r\n");
}
3.//编写代码,演示多个字符从两端移动,向中间汇聚
char arr4[]="welcome to bit!!!!!!!!";
char arr5[]="######################";
int left1=0;
//int right1=sizeof(arr4)/sizeof(arr[4]-2); //因为字符串以\0结束,所以得到最后一个!的下标,则应该arr[4]-2才正确
int right1=strlen(arr4)-1;
while(left1<=right1)
{
arr5[left1]=arr4[left1];
arr5[right1]=arr4[right1];
printf("%s\r\n",arr5);
left1++;
right1--;
}
4.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次输入均错误,则退出程序)
// int in=0;
// char password[20]={0};
// for(in=0;in<3;in++)
// {
// printf("请输入密码\r\n");
// scanf("%s",password);
// if(strcmp(password,"123456")==0) //==不能用来比较两个字符串是否相等,应该使用库函数-strcmp进行比较
// {
// printf("登录成功\r\n");
// break;
// }
// else
// {
// printf("密码错误\r\n");
// }
// }
// if(in==3)
// printf("三次密码均错误,退出程序\r\n");
5.输入三个数,从大到小输出
int aa2=7,bb2=13,cc2=26;
// scanf("%d%d%d\r\n",&aa2,&bb2,&cc2); //算法实现 a放最大值,b次之,c放最小值
if(aa2<bb2)
{
int tmp=aa2;
aa2=bb2;
bb2=tmp;
}
if(aa2<cc2)
{
int tmp=aa2;
aa2=cc2;
cc2=tmp;
}
if(bb2<cc2)
{
int tmp=bb2;
bb2=cc2;
cc2=tmp;
}
printf("%d %d %d\r\n",aa2,bb2,cc2);
6.打印100到200之间的素数
// int ii8=0;
// int count22=0;
// for(ii8=100;ii8<=200;i++)
// {
// //判断i是否为素数,试除法判断,产生2->ii2-1
// int jj8=0;
// for(jj8=2;jj8<ii8;jj8++)
// {
// if(ii8 % jj8==0)
// {
// break;
// }
// }
// if(jj8==ii8)
// {
// count22++;
// printf("%d\r\n",ii8);
// }
// }
// printf("%d\r\n",count22);
// int ii8=0;
// int count1=0;
// for(ii8=100;ii8<=200;i++)
// {
// //判断i是否为素数,试除法判断,产生2->ii2-1
// int jj8=0;
// for(jj8=2;jj8<=sqrt(ii8);jj8++)
// {
// if(ii8 % jj8==0)
// {
// break;
// }
// }
// if(jj8>sqrt(ii8))
// {
// count1++;
// printf("%d\r\n",ii8);
// }
// }
// printf("%d\r\n",count1);
7.//乘法口诀表
int ii7=0;
for(ii7=1;ii7<=9;ii7++)
{
int jj7=1;
for(jj7=1;jj7<=ii7;jj7++)
{
printf("%d*%d=%-2d ",ii7,jj7,ii7*jj7); //%2d右对齐,%-2d为左对齐
}
printf("\n");
}
8.猜数字游戏 1.电脑会生成一个随机数 2.猜数字
// void menu()
// {
// printf("**************************\n");
// printf("**** 1.play 0.exit ****\n");
// printf("**************************\n");
// }
// void game()
// {
// printf("猜数字\n");
// //1.生成随机数
// int ret=0;
// int guess=0;
// ret=rand()%100+1; //生成1-100的随机数
printf("%d\n",ret);
// //2.猜数字
// while(1)
// {
// printf("猜数字>:");
// scanf("%d",&guess);
// if(guess>ret)
// {
// printf("猜大了\n");
// }
// else if(guess<ret)
// {
// printf("猜小了\n");
// }
// else
// {
// printf("恭喜你,猜对了\n");
// break;
// }
// }
// }
// int input1=0;
// //时间戳 当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0)=(xxxx)秒
// srand((unsigned int)time(NULL)); //利用时间戳生成随机数
// do
// {
// menu();
// printf("请选择>:");
// scanf("%d",&input1);
// switch (input1)
// {
// case 1:
// game(); //猜数字游戏
// break;
// case 0:
// printf("退出游戏\n");
// break;
// default:
// printf("选择错误\n");
// break;
// }
// }while(input1);
9.goto语句在深层循环中调用
//关机程序
// char input2[20]={0};
// //shutdown -s -t 60 一分钟关机指令
// //systerm()-执行系统命令的
// systerm("shutdown -s -t 60");
//again:
// printf("请注意,你的电脑在1分钟内关机,请输入:我是猪,就取消关机\n请输入>:");
// scanf("%s",input2);
// if(strcmp(input2,"我是猪")==0) //比较两个字符串
// {
// systerm("shutdown -a");
// }
// else
// {
// goto again;
// }
总结
内容比较简单,看视频做的简单笔记。