C语言第三~五周课

还在学习进步 2024-10-26 14:35:02 阅读 85

目录

一、C语言中基本语句的分类:

二、数据的输入和输出

1.putchar函数

2.getchar函数

3.printf函数

printf() 的正常输出格式:

输出控制符大全

4.scanf函数

三、顺序结构

四、选择结构

1.if

2.switch

五、循环结构

1.for循环

2.while循环

3.do while循环


一、C语言中基本语句的分类:

(1)简单语句     形式:

①表达式语句:由表达式加上分号  ";"  组成,执行表达式语句就是计算表达式的值

例如:x=y; 赋值语句

++i;实现i的自增

②函数调用语句:由函数名,实际参数加上分号组成

例如:printf("Hello,World!");  这是一个调用库函数,输出字符串的语句。

③控制语句:控制语句用于控制程序的流程,以实现程序的各种结构方式。

C语言有九种控制语句,分为三类:

条件判断语句:if语句,switch语句

循环执行语句:do while语句,while语句,for语句

转向语句:break语句,continue语句,return语句,goto语句(少见,慎用)

(2)复合语句  把多个语句用一对花括号括起来的一个语句

一般形式:{语句1;语句2;……语句n;}

(3)空语句   只由一个分号";"组成,什么也不执行

C语言没有提供输入输出语句,所有的输入输出都是通过调用标准库函数完成,函数原型都在“stdio.h”中。

 

二、数据的输入和输出

1.putchar函数

putchar()是字符输出函数,用于在显示器输出一个字符

<code>//例如:先后输出Bit三个字符

//输出结果为: Bit

#include<stdio.h>

int main()

{

char a='B',b='i',c='t';code>

putchar(a);

putchar(b);

putchar(c);

putchar('\n');

return 0;

}

运行结果

2.getchar函数

getchar()函数用于从键盘上输入一个字符,通常把输入的字符赋予一个字符变量,构成赋值语句,例如:a=getchar();

说明:

(1)getchar()函数只能接收单个字符,输入数字也按字符处理。输入多于一个字符时,            只接收第一个字符

(2)getchar()函数是无参函数,后面的括号不能省略

(3)在输入时,空格,回车键都作为字符读入,且只在输入回车键时读入才开始执行

//从键盘输入Bit三个字符,输入到屏幕

#include<stdio.h>

int main()

{

char a, b, c;

a = getchar();

b = getchar();

c = getchar();

putchar('\n');

putchar(a);

putchar(b);

putchar(c);

putchar('\n');

return 0;

}

运行结果:

3.printf函数

printf函数称为格式输出函数,用于按照用户指定的格式,把指定的数据输出到显示器上

printf() 的正常输出格式:

<code>#include <stdio.h>

int main(){

//1.printf(“字符串\n”);

printf("hello word!\n");

//2.printf(“输出控制符”, 输出参数);

int i = 10;

printf("%d\n", i);//%d是输出控制符,d 表示是十进制,后面的 i 是输出参数

//3.printf(“输出控制符1 输出控制符2…”, 输出参数1,输出参数2, …);

int j = 20;

printf("%d %d\n", i, j);

printf("i = %d j = %d\n", i, j);

//4.printf(“输出控制符 非输出控制符”,输出参数);

printf("%x\n", i);

printf("%X\n", i);

printf("%#x\n", i);

printf("%#X\n", i);

return 0;

}

运行结果:

输出控制符大全

常用的输出控制符主要有以下几个:

4.scanf函数

scanf()函数称为格式输入函数,用于按照用户指定的格式从键盘把数据输入到指定的变量中

常用格式字符可参考printf()函数

<code>#include<stdio.h>

int main()

{

float a;

int b;

printf("input some number\n");

scanf("%f %d", &a,&b);

printf("%.3f %d \n", a,b);

}

运行结果:

三、顺序结构

顺序结构:很好理解,就是自顶向下、按照书写代码的顺序执行语句,直到结束,C语言中语句块以”{}”包裹。

在以后的示例中,行号在语句尾以注释的形式给出,方便复制测试运行,语句注释是程序编写中添加的说明,以便人们看懂程序,C语言注释有两种:一是单行注释,引导符为”//”,可以在行尾,也可单独一行;二是语句块注释,用“/*”、“*/”注释,必须成对出现

四、选择结构

选择结构:通过某个给定条件进行判断,条件为真或假时分别执行不同的程序内容,选择结构分if语句和switch语句两种(就像人生不是一帆风顺,直线往前走。比如今天出门看到外面下雨了就会带伞,没有下雨就不用带伞一样进行判断)

1.if

if语句(只会匹配一个表达式对应内容)

语法结构(主要分为三种,下面会一 一举例):

说明:以 ; 结尾是一条语句,

1. 1 第一种

if(表达式)

执行语句;

<code>#include <stdio.h>

int main(void) {

int age = 0;

printf("请输入你的年龄:>");

scanf("%d", &age);

if (age >= 18) //当if括号内表达式为真时(即非0),才会执行紧接if的第一条语句

printf("成年\n");

return 0;

}

代码块: 一对大括号 { }包裹的语句叫做代码块

在if语句中如果不使用代码块则只会执行紧接if的第一条语句,后面语句与if表达式判断无关。如果想当if表达式为真时执行多条语句,需要将多条语句包裹在代码块内,下面将举例说明:

//程序本意是当用户输入年龄大于等于18时,输出成年并可以谈恋爱。小于18时则什么都不输出

//但是if表达式后面有两条语句,但没有使用代码块包裹,则不管用户输入什么都会输出 可以谈恋爱

#include <stdio.h>

int main(void) {

int age = 0;

printf("请输入你的年龄:");

scanf("%d", &age);

if (age >= 18)

printf("成年\n");

printf("可以谈恋爱了");

return 0;

}

运行结果:

使用代码块执行多条语句

<code>//用户输入大于等于18输出成年并可以谈恋爱,小于18则什么都不输出

#include <stdio.h>

int main(void) {

int age = 0;

printf("请输入你的年龄:>");

scanf("%d", &age);

if (age >= 18) {

printf("成年\n");

printf("可以谈恋爱了");

}

return 0;

}

运行结果:

1.2 第二种

if(表达式)

执行语句1;

else

执行语句2;

<code>//当用户输入年龄大于等于18时输出成年可以谈恋爱,否则输出未成年不可以谈恋爱

#include <stdio.h>

int main(void) {

int age = 0;

printf("请输入你的年龄:>");

scanf("%d", &age);

if (age >= 18)

{

printf("成年\n");

printf("可以谈恋爱\n");

}

else

{

printf("未成年\n");

printf("不可以谈恋爱\n");

}

return 0;

}

运行结果:

第三种(多分枝选择)

if(表达式1)

执行语句1;

else if(表达式2)

执行语句2;

else

执行语句3;

<code>//根据用户输入年龄,输出所处年龄段

#include <stdio.h>

int main(void) {

int age = 0;

printf("请输入你的年龄:");

scanf("%d", &age);

if (age <= 12) //当if表达式为真,输出童年并退出整个if语句,否则继续向下判断

{

printf("童年\n");

}

else if (age < 18) //当年龄大于12小于18此表达式为真,输出青少年,

{

printf("青少年\n");

}

else if (age < 60) //当年龄大于等于18小于60此表达式为真,输出壮年,

{

printf("壮年\n");

}

else //当上面多个表达式都不匹配时最后会匹配else对应语句,即输出老年

{

printf("老年\n");

}

return 0;

}

运行结果:

2.switch

当分支条件过多时使用if会十分的不方便,上面例子中判断年龄段的程序,如果再判断的精细些(加上青少年、青年、中老年等),则整个if语句会十分臃肿且难以维护。使用switch就能很好解决这种问题。

语法( 下面[ ]内代表可选参数):

switch(整形表达式)

{

case 整数常量表达式1 :

语句1_1

语句1_2

[break]

case 整数常量表达式2 :

语句2_1

语句2_2

[break]

[default

语句n_1

[break]

}

说明:

1.当case后面常量表达式值等于switch的整数表达式时,执行该case后面的语句,但不退出switch,而是一直执行下去,直到整个switch结束,所以case只是switch的入口,这跟if匹配到某个表达式执行对应语句后就退出不一样

2.case后面的常量表达式的值不能相同,例如出现多个 case 1:

3.在switch中遇到break会退出整个switch

4.当switch的整数表达式与所有case都没匹配上时,则执行default对应语句

此时用户输入除了1-7以外的值,整个switch没有匹配到,程序不会输出什么,此程序对用户不够友好。我们无法预测用户输入的所有可能值,但我们可以对不符合规则的输入进行提醒,此时会用到default关键字,即case都没有匹配到,则执行default对应语句

示例代码:

<code>//当用户输入1-7时输出对应星期几

#include <stdio.h>

int main()

{

int day = 0;

printf("请输入今天是星期几: ");

scanf("%d", &day);

switch (day)

{

case 1:

printf("星期一\n");

break; //遇到break跳出对应switch

case 2:

printf("星期二\n");

break;

case 3:

printf("星期三\n");

break;

case 4:

printf("星期四\n");

break;

case 5:

printf("星期五\n");

break;

case 6:

printf("星期六\n");

break;

case 7:

printf("星期天\n");

break;

default:

printf("输入错误,请输入1-7范围内的数字\n");

break;

}

return 0;

}

当想多个case执行相同语句时

//当用户输入1-5时输出工作日,输出6-7时输出休息日

#include <stdio.h>

int main()

{

int day = 0;

printf("请输入今天是星期几:");

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("输入错误,请输入1-7范围内的数字\n");

break;

}

return 0;

}

五、循环结构

循环结构:当条件为真时反复执行,直到条件为假则跳出(《围城》里面说到,有的人想进去,有的人却想出去,就像人生一样好像一直循环着)

1.for循环

语法:

for(表达式1;表达式2;表达式3)

循环语句;

说明:

表达式1:初始化部分,用于初始化循环变量,整个for循环只会执行1次

表达式2:条件判断部分,用于判断循环终止

表达式3:调整部分,用于循环条件的调整

建议:不要在循环体内修改循环变量,防止for循环失控

<code>//输出数组所有元素

#include <stdio.h>

int main() {

int arr[] = {1,2,3,4,5,6,7,8,9,10};

int i;

//第一次循环首先将i初始化为0,这个初始化部分只会执行1次,此时i<10(只有判断条件为真才会进入循环)

//执行循环语句输出arr[0],然后进入调整部分让变量i加1,此时i=1;

//第二次循环,首先进入判断部分进入判断;此时i<10 即 1<10为真,执行循环语句输出arr[1],然后进入调整部分

//让变量i+1,此时i=2;后续循环跟第二次循环类似

//注意:初始化部分在整个for循环只执行1次,判断部分会比循环语句多1次

for (i = 0; i < 10; i++)

{

printf("%d ", arr[i]);

}

return 0;

}

输出: 1 2 3 4 5 6 7 8 9 10

break:循环中遇到break直接终止整个循环(while、do while中也一样)

//在1-10中输出小于5的数

#include <stdio.h>

int main()

{

int i = 0;

for (i = 1; i <= 10; i++)

{

if (i == 5) //当i == 5时,if条件为真,执行break,跳出整个for循环,所以数字5及后续数字不会打印

break;

printf("%d ", i);

}

return 0;

}

输出: 1 2 3 4

continue:循环中遇到continue会终止本次循环,也就是本次循环continue后面代码不会执行(while、do while中也一样)

#include <stdio.h>

int main()

{

int i = 0;

for (i = 1; i <= 10; i++)

{

if (i == 5) //当i == 5时,if条件为真,执行continue,终止本次循环后面代码(即5不会打印)。直接跳到调整部分,i++后i为6,进行下一次循环的判断

continue;

printf("%d ", i);

}

return 0;

}

输出:1 2 3 4 6 7 8 9 10

2.while循环

语法:

while(表达式)

循环语句

当表达式为真时执行循环语句,然后再次判断…

<code>#include <stdio.h>

int main()

{

int i = 1;

while (i <= 10) //当表达式为真执行里面{ }内循环语句

{

if (i == 5) //当i==5时执行continue,终止本地循环continue后面部分,

continue; //i++不会执行,所以进入判断部分i还是5,导致死循环

printf("%d ", i);

i++; //调整部分,使i变量逐渐大于10后终止循环,没有调整部分将会是死循环

}

return 0;

}

输出:1 2 3 4  //死循环,后面光标一直闪烁,程序没有停止运行

 

3.do while循环

语法

do

循环语句

while(表达式)

do while与while基本相同,表达式为真才会执行循环语句。但是do while第一次执行时不会判断表达式。即就算表达式为假也会执行一次循环语句

do while 适用场景:某个功能必须执行一次,后续是否执行通过是否满足条件判断

<code>//输出1-4

#include <stdio.h>

int main()

{

int i = 1;

do

{

if (i == 5)

break;

printf("%d ", i);

i++;

} while (i <= 10);

return 0;

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。