【C/C++】C语言基础知识【第二版】
基础语法
输出语句
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
printf("Hello world");
printf(" \n-------分界线2------- \n");
printf("Hello world \n");
printf(" \n-------分界线3------- \n");
printf("Hello \n world \n");
printf(" \n-------分界线4------- \n");
printf("Hello \n");
printf("world \n");
printf(" \n-------分界线5------- \n");
printf("Hello world \a\a\a\n");
return 0;
}
- printf:在显示器上进行输出操作,末尾的f代表format【格式化】
- \n是换行字符
- \a是响铃的转义字符,在显示您好之后响铃3次
变量
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int vx;
printf("vx的值是%d",vx);
printf(" \n-------分界线2------- \n");
int vy=100;
printf("vy的值是%d",vy);
return 0;
}
输入输出语句
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int no;
printf("Please input a postive number:");
scanf("%d",&no);
printf("The number is %d \n",no);
printf(" \n-------分界线2------- \n");
int n1,n2;
puts("Please input two numbers:");
printf("The first number is: "); scanf("%d",&n1);
printf("The second number is:"); scanf("%d",&n2);
printf("The result of the addition:%d \n",n1+n2);
printf(" \n-------分界线3------- \n");
int n3,n4;
int wa;
puts("Please input two numbers:");
printf("The first number is: "); scanf("%d",&n3);
printf("The second number is:"); scanf("%d",&n4);
wa=n3+n4;
printf("The result of the addition:%d \n",wa);
return 0;
}
- scanf函数可以从键盘读取输入的信息
- 这里同样可以用“%d"来限制函数只能读取十进制数
- 与printf函数不同,在使用scanf函数进行读取时,变量名前必须加上一个特殊的符号&。具体含义后续说明
- puts函数末尾的s来自string,可以按顺序输出字符串,并在结尾换行相当于printf("\n")
- 第三组中对程序进行了修改,先将结果保存在wa中再输出,这里不明显,但是在复杂的程序中可以有明显的优势
运算和数据类型
运算符
#include <stdio.h>
int main(void)
{
int vx,vy;
puts("Please input two numbers");
printf("The number vx :"); scanf("%d",&vx);
printf("The number vy :"); scanf("%d",&vy);
printf("vx + vy = %d\n",vx+vy);
printf("vx - vy = %d\n",vx-vy);
printf("vx * vy = %d\n",vx*vy);
printf("vx / vy = %d\n",vx/vy);
printf("vx % vy = %d\n",vx%vy);
printf("vx %% vy = %d\n",vx+vy);
return 0;
}
- 让我们来看一下程序中输出余数的地方( 蓝色底纹部分)。格式化字符串中写的是%%。这里的格式化字符串中的%号具有转换说明的功能。因此,当不需要进行转换说明,而只想输出%的时候,就必须写成%%。
- 当使用不具有转换说明功能的puts函数来进行输出的时候,就不能写成% (这样会输出%%的)。
数据类型
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int n;
double x;
n=9.99;
x=9.99;
printf("int 型变量n的值:%d\n",n);
printf(" n / 2:%d\n",n/2);
printf("double型变量x的值:%f\n",x);
printf(" x /2.0:%d\n",x/2);
printf(" \n-------分界线2------- \n");
double vx,vy;
printf("The number vx is:"); scanf("%lf",&vx);
printf("The number vy is:"); scanf("%lf",&vy);
printf("vx + vy =%f\n",vx+vy);
printf("vx - vy =%f\n",vx-vy);
printf("vx * vy =%f\n",vx*vy);
printf("vx / vy =%f\n",vx/vy);
printf(" \n-------分界线3------- \n");
int n1,n2,n3,n4;
double d1,d2,d3,d4;
n1=5/2;
n2=5.0/2.0;
n3=5.0/2;
n4=5/2.0;
d1=5/2;
d2=5.0/2.0;
d3=5.0/2;
d4=5/2.0;
printf("n1 = %d\n",n1);
printf("n2 = %d\n",n2);
printf("n3 = %d\n",n3);
printf("n4 = %d\n\n",n4);
printf("d1 = %f\n",d1);
printf("d2 = %f\n",d2);
printf("d3 = %f\n",d3);
printf("d4 = %f\n",d4);
printf(" \n-------分界线4------- \n");
int a,b;
puts("Please input two numbers");
printf("The number a is:");scanf("%d",&a);
printf("The number b is:");scanf("%d",&b);
printf("The average of a and b is %f:\n",(a+b)/2.0);
printf(" \n-------分界线5------- \n");
int a1,b1;
puts("Please input two numbers");
printf("The number a1 is:");scanf("%d",&a1);
printf("The number b1 is:");scanf("%d",&b1);
printf("The average of a1 and b1 is %f:\n",(a1+b1)/2.0);
printf(" \n-------分界线6------- \n");
int a2,b2,c2;
int sum;
double ave;
puts("Please input three numbers");
printf("The number a2 is:");scanf("%d",&a2);
printf("The number b2 is:");scanf("%d",&b2);
printf("The number c2 is:");scanf("%d",&c2);
sum=a2+b2+c2;
ave=(double)sum/3;
printf("The addition of them is %5d \n",sum);
printf("The average of them is %5.1f \n",ave);
printf(" \n-------分界线7------- \n");
printf("[%d]\n",123);
printf("[%.4d]\n",123);
printf("[%4d]\n",123);
printf("[%04d]\n",123);
printf("[%-4d]\n\n",123);
printf("[%d]\n", 12345);
printf("[%.3d]\n",12345);
printf("[%3d]\n",12345);
printf("[%03d]\n", 12345) ;
printf("[%-3d]\n\n",12345);
printf("[%f]\n",123.13);
printf("[%.1f]\n", 123.13) ;
printf("[%6.1f]\n\n", 123.13);
printf("[%f]\n",123.13);
printf("[%.1f]\n", 123.13);
printf("[%4.1f]\n\n", 123.13);
return 0;
}
- ()是优先运算的标记
- printf函数输出double值的时候,转换说明不能使用%d,而要使用%f
- double类型的变量通过scanf函数赋值的时候需要使用格式字符串%lf
- 进行整数/整数运算的时候,商的小树部分会被舍弃,但是浮点数之间的运算,就不会进行舍弃处理
- 把2赋给int时,2.5赋给int,赋值的时候会舍弃掉小数点之后的部分,所以都是2
- 把2赋给double时,会被解释为2.0,2.5赋给double,会完整保存
- int/double结果是double
- 类型转换表达式(数据类型)表达式,通常这种形式的表达式会把表达式的值转换为该数据类型对应的值。
- %5d...显示至少5位的十进制整数。
- %5.1f ...显示至少5位的浮点数。但是,小数点后只显示1位。
- 指定显示的最小位数,如果不指定,则整数的时候默认为1,浮点数的时候默认为6
- d ... 显示十进制的int型整数。
- f ... 显示十进制的double型浮点数。
分支结构
if语句
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int no;
printf("Please input a number ");
scanf("%d",&no);
if(no%5)
puts("no % 5 is not zero");
printf(" \n-------分界线2------- \n");
int no1;
printf("Please input a number ");
scanf("%d",&no1);
if(no1%5)
puts("no1 % 5 is not zero");
else
puts("no1 % 5 is zero");
printf(" \n-------分界线3------- \n");
int num;
printf("Please input a number ");
scanf("%d",&num);
if(num){
puts("The num does not equal with zero");
}else{
puts("The num equals with zero");
}
printf(" \n-------分界线4------- \n");
int n1,n2;
puts("Please input two numbers ");
printf("The first number is :"); scanf("%d",&n1);
printf("The second number is :"); scanf("%d",&n2);
if(n1==n2)
puts("The first number equals with the second number");
else
puts("The first number does not equal with the second number");
printf(" \n-------分界线5------- \n");
int n3,n4;
puts("Please input two numbers ");
printf("The first number is :"); scanf("%d",&n3);
printf("The second number is :"); scanf("%d",&n4);
if(n3!=n4)
puts("The first number does not equal with the second number");
else
puts("The first number equals with the second number");
printf(" \n-------分界线6------- \n");
int no2;
printf("Please input a number ");
scanf("%d",&no2);
if(no2>0)
if(no%2==0){
puts("no2 is an even number");
}else{
puts("no2 is an odd number");
}
printf(" \n-------分界线7------- \n");
int n5,n6,max;
puts("Please input two numbers ");
printf("The first number is :"); scanf("%d",&n5);
printf("The second number is :"); scanf("%d",&n6);
max=(n5>n6)?n5:n6;
printf("The bigger number is %d \n",max);
printf(" \n-------分界线8------- \n");
int month;
printf("请输入月份: ");
scanf("%d",&month);
if (month >= 3 && month <= 5)
printf("%d月是春季。\n", month);
else if (month >= 6 && month <= 8)
printf("%d 月是夏季。\n", month);
else if (month >= 9 && month <= 11)
printf("%d月是秋季。\n", month);
else if (month == 1|| month == 2|| month == 12)
printf("%d 月是冬季。\n", month);
else
printf("%d月不存在! !\a\n",month);
return 0;
}
- if语句判断表达式的值,如果结果不为0,则执行相应的语句
- ==运算符会对左右两侧操作数是否相等进行比较
- !=运算符会判断两个操作数是否不相等
- if语句成为了嵌套的语句这一点和之 前的程序相同,只是嵌套语句的结构不同。
- 只有条件运算符属于三目运算符,其他的运算符都是单目或者双目运算符。
- 条件运算符a? b : C如果a不为0, 则结果是b的值,否则结果为C的值
- a &&b 如果a和b都不为0, 则表达式的结果为1, 否则结果为0 (结果的类型为int)
- a||b如果a和b中有一个不为0, 则表达式的结果为1, 否则结果为0 (结果的类型为int)
switch语句
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int n1;
printf("Please input a number:");
scanf("%d",&n1);
switch(n1 % 3){
case 0 : puts("n1%3 equals with 0"); break;
case 1 : puts("n1%3 equals with 1"); break;
case 2 : puts("n1%3 equals with 2"); break;
}
printf(" \n-------分界线2------- \n");
int n2;
printf("Please input a number:");
scanf("%d",&n2);
switch(n2){
case 1:
puts("A");
puts("B");
break;
case 2:
puts("C");
case 5:
puts("D");
break;
case 6:
case 7:
puts("E");
break;
default:
puts("F");
break;
}
return 0;
}
- break能让程序调处switch语句
- case条件都不满足的时候会跳转default
循环结构
do 语句
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int retry;
do{
int no;
printf("Please input a number;");
scanf("%d",&no);
if(no % 2)
puts("The number is an odd number");
else{
puts("The number is an even number");
}
printf("Would you want to try again? Yes...0,No...9 ");
scanf("%d",&retry);
} while(retry==0);
printf(" \n-------分界线2------- \n");
int choose;
do{
printf("Please make a choice【0,1,2】");
scanf("%d",&choose);
}while(choose<0||choose>2);
printf("Your choice");
switch(choose){
case 0:printf("0");break;
case 1:printf("1");break;
case 2:printf("2");break;
}
printf(" \n-------分界线3------- \n");
int sum=0;
int cnt=0;
int retry1;
do{
int t;
printf("Please input a number");
scanf("%d",&t);
sum +=t;
cnt++;
printf("To continue?Yes..0/No..9");
scanf("%d",&retry);
}while(retry==0);
printf("The addition is %d,The average is %.2f \n",sum,(double)sum/cnt);
return 0;
}
while 语句
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int no;
printf("Please input a positive number ");
scanf("%d",&no);
while(no>=0){
printf("%d ",no);
no--;
}
printf("\n");
printf(" \n-------分界线2------- \n");
int no1;
int i;
printf("Please input a positive number ");
scanf("%d",&no1);
i=0;
while(i<=no1)
printf("%d ",i++);
printf("\n");
printf(" \n-------分界线3------- \n");
int no3;
printf("Please input a positive number ");
scanf("%d",&no3);
while (no3-->0)
putchar('*');
putchar('\n');
return 0;
}
for 循环
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int i,no;
printf("Please input a positve number ");
scanf("%d",&no);
for(i=0;i<=no;i++)
printf("%d",i);
putchar('\n');
return 0;
}
多重循环
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++)
printf("%3d",i*j);
putchar('\n');
}
printf("\n-------分界线2------- \n");
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
int seki = i*j;
if(seki>40)
break;
printf("%3d",seki);
}
putchar('\n');
}
printf("\n-------分界线3------- \n");
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
int seki = i*j;
if(seki%10==4||seki/10==4){
continue;
}
printf("%3d ",seki);
}
putchar('\n');
}
return 0;
}
- 先循环后判断可以通过do语句来实现,至少执行一次
- 先判断后循环可以通过while语句和for语句来实现
- break语句会中断该循环语句的执行
- continue语句可以跳过本次循环体剩余部分的执行
数组
#include <stdio.h>
int main(void)
{
printf("-------分界线1------- \n");
int n,t[10];
for(n=0;n<10;n++)
t[n] = n + 1;
for(n=9;n>=0;n--)
printf("%d\t",t[n]);
printf("\n-------分界线2------- \n");
int i,j,row = 0,colum = 0,max;
int a[3][4] = {{3,4,16,2},{7,5,1,9},{11,23,3,8}};
max = a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)
{
max = a[i][j];
row = i;
colum = j;
}
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
return 0;
}
- 同一类型的对象集中在一起,在内存上排列成一条直线,这就是数组
- 访问数组的各个元素时使用下标运算符[],下标从0开始
- 声明数组时,元素个数必须适用常量表达式
- 多维数组的构成元素在排列时,首先从位于末尾的下标开始增加
- 无法使用赋值运算符=复制数组的所有元素
字符串和指针
指针
#include<stdio.h>
int main(){
int a = 100,b = 10;
int *point_1,*point_2; //定义指向整型数据的指针变量 point_1,point_2
point_1 = &a; //把变量 a 的地址赋给指针变量 point_1
point_2 = &b;
printf("a=%d,b=%d\n",a,b);
printf("%p,%p\n",point_1,point_2); //输出 a 和 b 在内存中的地址
printf("*point_1=%d,*point_2=%d\n",*point_1,*point_2); //输出变量 a 和 b 的值
return 0;
}
字符串
#include <stdio.h>
int main(void)
{
printf("-------分界线------- \n");
char str[]="ABC";
printf("The String str is \"%s\".\n",str);
printf("\n-------分界线2------- \n");
char name[48];
printf("Please input your name");
scanf("%s",name);
printf("Hello,%s \n",name);
return 0;
}
- 通过在指针前写上指针运算符*来访问该指针指向的对象,称为解引用。
- 用指针实现字符串”也是一种表示字符串的方法,
文件处理
#include<stdio.h>
#include<stdlib.h> // stdlib 头文件即 standard library 标准库头文件
int main(){
FILE * fp;
char ch,filename[10];
printf("Please enter the file name:");
scanf("%s",filename);
// 如果文件不存在,fopen 会建立该文件
if((fp=fopen(filename,"w"))==NULL){ // 打开输出文件并使 fp 指向此文件
printf("Unable to open this file\n"); // 如果打开出错,就输出“打不开”的信息
exit(0); // 终止程序
}
ch=getchar(); // 用来接收最后输入的回车符
printf("Please enter a string in the disk(Ends with a #):");
ch=getchar(); // 接收从键盘输入的第一个字符
while(ch!='#'){ // 当输入 # 时结束循环
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
putchar(10);
return 0;
}
- 记录控制流所需要的信息的数据类型是FILE型,该数据类型是在<stdio.h>头文件中定义的。
- 打开文件的操作称为打开。函数库中的fopen函数用于打开文件。
- 使用fopen函数成功打开文件后,返回指向FILE型对象的指针,该对象用于控制与所打开的文件相关联的流;打开操作失败时,返回空指针。
- 在文件使用结束后,会断开文件与流的关联,将流关闭。这个操作称为关闭。用于关闭文件的函数是fclose函数。
- fscanf函数可以对任意流执行与scanf函数相同的输入操作。二者都返回成功读取的项数。
- fprintf函数可以对任意流执行与printf函数相同的输出操作。
- fgrtc函数是从任意流读取数据的函数。
- fputc函数是向任意流写入数据的函数。
【C/C++】C语言基础知识【第二版】的更多相关文章
- C语言基础知识-数组和字符串
C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...
- C语言基础知识-程序流程结构
C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- R语言实战(第二版)-part 1笔记
说明: 1.本笔记对<R语言实战>一书有选择性的进行记录,仅用于个人的查漏补缺 2.将完全掌握的以及无实战需求的知识点略去 3.代码直接在Rsudio中运行学习 R语言实战(第二版) pa ...
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
随机推荐
- 通过修改profile 来修改账号的过期时间
转至:https://blog.csdn.net/xxzhaobb/article/details/80026028 查看账号的过期时间 SYS@test>select username,exp ...
- Python:Scrapy(三) 进阶:额外的一些类ItemLoader与CrawlSpider,使用原理及总结
学习自:Python Scrapy 爬虫框架实例(一) - Blue·Sky - 博客园 这一节是对前两节内容的补充,涉及内容为一些额外的类与方法,来对原代码进行改进 原代码:这里并没有用前两节的代码 ...
- 微信小程序文件上传结合lin ul
html <l-form name="goods" l-form-btn-class="l-form-btn-class" bind:linsubmit= ...
- linux 系统 解决php -v查看到版本于phpinfo()打印的版本不一致问题
发现问题的原因: 安装zip扩展后,配置成功,但是使用gitlab合并的时候发生错误,经检查,使用phpinfo打印出来的php版本为7.1,而使用linux度服务器 运行 php -v的版本却是5. ...
- java的三大特性----封装、集成、多态
当我们被问到你对java的封装.继承.多态是什么看法的时候,你会想到什么? 想到的会不会是封装就是将类的成员属性用privet修饰一下,达到私有化的目的,只暴露方法,从而达到成员变量私有化的目的. 而 ...
- 2、mysql如何控制用户对数据库的访问
基础理解:通过对用户赋予某些权限就可以控制用户对数据库的访问 更深层次的理解:当mysql对用户赋予某些权限时,mysql底层是如何控制用户对数据库的访问 用户管理和权限管理 (基础理解) 用户管理 ...
- django的request对象方法初识
1:request.post 拿到的是post请求发送过来的数据,可以将其看作是一个个的键值对 使用get方法可以通过key拿到值,如果该值是一个列表的话,get方法只能拿到列表的最后一个值,使用ge ...
- 从此 Typora 代码块有了颜色
起因 平时喜欢用typora记笔记,但是typora默认代码块没有指定语言,没有高亮看着很不舒服,所以用Autohotkey花了半天写了个脚本,按自己的快捷键就可以自动生成代码块并添加语言,这样就方便 ...
- 如何取消以太坊智能合约授权,防止被黑客盗取Token?
在小狐狸钱包(MetaMask)日常使用中,有一个细节可能很少人注意到,就是无论你登入什么网站,或者需要跟任何项目签订智能合约都要授权的步骤,这其中就会给黑客留下很多空子,特别是将一个Token用智能 ...
- 使用ABP SignalR重构消息服务(一)
使用ABP SignalR重构消息服务 最近协助蟹老板升级新框架,维护基础设施服务,目前已经稳了. 早上蟹老板看到我进入公司,马上就叫停我,说我为什么左脚先进公司,你这样会让我很难做耶,这样把我给你一 ...