【C/C++】C语言基础知识【第二版】

基础语法 输出语句

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

  1. printf:在显示器上进行输出操作,末尾的f代表format【格式化】
  2. \n是换行字符
  3. \a是响铃的转义字符,在显示您好之后响铃3次
变量
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

输入输出语句
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. scanf函数可以从键盘读取输入的信息
  2. 这里同样可以用“%d"来限制函数只能读取十进制数
  3. 与printf函数不同,在使用scanf函数进行读取时,变量名前必须加上一个特殊的符号&。具体含义后续说明
  4. puts函数末尾的s来自string,可以按顺序输出字符串,并在结尾换行相当于printf("\n")
  5. 第三组中对程序进行了修改,先将结果保存在wa中再输出,这里不明显,但是在复杂的程序中可以有明显的优势
运算和数据类型 运算符
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. 让我们来看一下程序中输出余数的地方( 蓝色底纹部分)。格式化字符串中写的是%%。这里的格式化字符串中的%号具有转换说明的功能。因此,当不需要进行转换说明,而只想输出%的时候,就必须写成%%。
  2. 当使用不具有转换说明功能的puts函数来进行输出的时候,就不能写成% (这样会输出%%的)。
数据类型
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. ()是优先运算的标记
  2. printf函数输出double值的时候,转换说明不能使用%d,而要使用%f
  3. double类型的变量通过scanf函数赋值的时候需要使用格式字符串%lf
  4. 进行整数/整数运算的时候,商的小树部分会被舍弃,但是浮点数之间的运算,就不会进行舍弃处理
  5. 把2赋给int时,2.5赋给int,赋值的时候会舍弃掉小数点之后的部分,所以都是2
  6. 把2赋给double时,会被解释为2.0,2.5赋给double,会完整保存
  7. int/double结果是double
  8. 类型转换表达式(数据类型)表达式,通常这种形式的表达式会把表达式的值转换为该数据类型对应的值。
  9. %5d...显示至少5位的十进制整数。
  10. %5.1f ...显示至少5位的浮点数。但是,小数点后只显示1位。
  11. 指定显示的最小位数,如果不指定,则整数的时候默认为1,浮点数的时候默认为6
  12. d ... 显示十进制的int型整数。
  13. f ... 显示十进制的double型浮点数。
分支结构 if语句
#include 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 numberdoes 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. if语句判断表达式的值,如果结果不为0,则执行相应的语句
  2. ==运算符会对左右两侧操作数是否相等进行比较
  3. !=运算符会判断两个操作数是否不相等
  4. if语句成为了嵌套的语句这一点和之 前的程序相同,只是嵌套语句的结构不同。
  5. 只有条件运算符属于三目运算符,其他的运算符都是单目或者双目运算符。
  6. 条件运算符a? b : C如果a不为0, 则结果是b的值,否则结果为C的值
  7. a &&b 如果a和b都不为0, 则表达式的结果为1, 否则结果为0 (结果的类型为int)
  8. a||b如果a和b中有一个不为0, 则表达式的结果为1, 否则结果为0 (结果的类型为int)
switch语句
#include 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; }

  1. break能让程序调处switch语句
  2. case条件都不满足的时候会跳转default
循环结构 do 语句
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

while 语句
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

for 循环
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

多重循环
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. 先循环后判断可以通过do语句来实现,至少执行一次
  2. 先判断后循环可以通过while语句和for语句来实现
  3. break语句会中断该循环语句的执行
  4. continue语句可以跳过本次循环体剩余部分的执行
数组
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. 同一类型的对象集中在一起,在内存上排列成一条直线,这就是数组
  2. 访问数组的各个元素时使用下标运算符[],下标从0开始
  3. 声明数组时,元素个数必须适用常量表达式
  4. 多维数组的构成元素在排列时,首先从位于末尾的下标开始增加
  5. 无法使用赋值运算符=复制数组的所有元素
字符串和指针 指针
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

字符串
#include 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; }

【C/C++】C语言基础知识【第二版】
文章图片

  1. 通过在指针前写上指针运算符*来访问该指针指向的对象,称为解引用。
  2. 用指针实现字符串”也是一种表示字符串的方法,
文件处理
#include #include// 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 stringin the disk(Ends with a #):"); ch=getchar(); // 接收从键盘输入的第一个字符 while(ch!='#'){// 当输入 # 时结束循环 fputc(ch,fp); putchar(ch); ch=getchar(); }fclose(fp); putchar(10); return 0; }

【【C/C++】C语言基础知识【第二版】】【C/C++】C语言基础知识【第二版】
文章图片

  1. 记录控制流所需要的信息的数据类型是FILE型,该数据类型是在头文件中定义的。
  2. 打开文件的操作称为打开。函数库中的fopen函数用于打开文件。
  3. 使用fopen函数成功打开文件后,返回指向FILE型对象的指针,该对象用于控制与所打开的文件相关联的流; 打开操作失败时,返回空指针。
  4. 在文件使用结束后,会断开文件与流的关联,将流关闭。这个操作称为关闭。用于关闭文件的函数是fclose函数。
  5. fscanf函数可以对任意流执行与scanf函数相同的输入操作。二者都返回成功读取的项数。
  6. fprintf函数可以对任意流执行与printf函数相同的输出操作。
  7. fgrtc函数是从任意流读取数据的函数。
  8. fputc函数是向任意流写入数据的函数。

    推荐阅读