C语言笔记(三)

1、为什么要使用循环?循环的要素?

思考:输入输出10个学生的年龄?

数据模型:10个学生的年龄

操作:10个scanf和10个printf

总结:执行大量相同重复的操作

为什么要循环:当程序中出现大量重复操作

循环的要素:

1:重复做的事(scanf,printf)——>{}

2:重复的次数————>循环变量控制循环的次数

循环的次数n{

scanf()

}

2、常见循环的种类

1:while

2:do-while

3:for

3、while构成的循环

格式:

while(表达式){

语句1;

语句2;

……

语句n;

表达式:一般是关系表达式或逻辑表达式,循环条件

执行过程:当程序执行到while循环时,首先判断while后面表达式是否为真(非0),如果为真就执行表达式后面大括号里的操作,接着再去判断表达式是否为真,直到表达式的值为假,整个循环结束

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 0;//循环变量赋初值

while(i<10){//循环条件

printf("i = %d\n", i);//循环体

i++;//循环变量增值

}

return 0;

}

#if 0

1:重复做的事------>{}循环体

printf

2:重复的次数------>循环变量

i = 0;循环变量赋初值

i<10;循环条件

i++;使循环趋于结束

#enif

练习:

1:倒序输出0~10之间的任意数字的数字序列。

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 9;

while (i >= 0){

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

i--;

}

return 0;

}

2:打印100以内所有的奇数,偶数和3的倍数(不包括100)

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 0;//循环变量初值

while(i < 100){//循环条件

if (i%2 == 0){//偶数

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

}

if (i%2 == 1){//奇数

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

}

if (i%3 == 0){//3的倍数

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

}

i++;//增值

}

return 0;

}

3:计算1-100之间所有整数之和。

1+2+3……100

sum =
前n-1个数的和+n

sum =
前99个数的和+100

sum =
前98个数的和+99

……

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;//保存前n-1个数的和

i = 1;

while(i <= 100){

sum = sum + i;//累加

i++;

}

printf("sum = %d\n", sum);

return 0;

}

4:计算5的阶乘

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 1;

i = 1;

while(i<=5){

sum = sum * i;

i++;

}

printf("sum = %d\n", sum);

return 0;

}

5: 1!+2!+3!+4!+5!

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 1;

int total = 0;

i = 1;

while(i<=5){

sum = sum * i;

total = total + sum;

i++;

}

printf("sum = %d\n", sum);

printf("total = %d\n", total);

return 0;

}

6:输出n以内任意数的阶乘,注意n输入使用scanf输入

7:输入一行字符以’#’结束,分别统计出其中英文字母、数字、空格和其他字符的个数

#include <stdio.h>

int main(int argc, const char *argv[])

{

char ch = 0;

int n_c = 0;

int n_n = 0;

int n_s = 0;

int n_e = 0;

while ((ch = getchar()) != ‘#‘){

if (((ch>=‘A‘) && (ch<=‘Z‘)) || ((ch>=‘a‘) && (ch<=‘z‘))){

n_c++;

} else if ((ch>=‘0‘) && (ch<=‘9‘)){

n_n++;

} else if (ch == ‘ ‘){

n_s++;

} else {

n_e++;

}

}

printf("字母的个数 = %d\n", n_c);

printf("数字的个数 = %d\n", n_n);

printf("空格的个数 = %d\n", n_s);

printf("其他的个数 = %d\n", n_e);

return 0;

}

4、do-while构成的循环

格式:

do{

语句1;

语句2;

……

语句n;

}while(表达式);

表达式:关系表达式或逻辑表达式,循环条件

执行过程:当程序执行到do时,首先执行do后面大括号里的操作,再去判断while后面表达式的值是否为真,如果为真,继续执行do后面的操作,直到表达式的值为假,循环结束

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 0;//循环变量初值

do {

printf("i = %d\n", i);//循环体

i++;//循环变量增值

}while(i<10);//循环条件

return 0;

}

#if 0

1:重复做的事------->{}循环体

printf

2:重复的次数

i=0;//循环变量初值

i<10;//循环条件

i++;//循环趋于结束

#endif

练习:

1:打印100以内所有的奇数,偶数和3的倍数(不包括100)

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 1;

do {

if (i%2 == 0){//偶数

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

}

if (i%2 == 1){//奇数

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

}

if (i%3 == 0){//3的倍数

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

}

i++;

}while(i < 100);

return 0;

}

2:正序输出两个大写字母之间的字母序列。注意输入使用scanf输入

#include <stdio.h>

int main(int argc, const char *argv[])

{

char beginCh = 0;

char endCh = 0;

beginCh = getchar()+1;

endCh = getchar();

do {

printf("%c", beginCh);

beginCh++;

}while(beginCh<endCh);

return 0;

}

3:计算1-100之间所有整数之和。

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;

i = 0;

do {

sum = sum + i;

i++;

}while(i <= 100);

printf("sum = %d\n", sum);

return 0;

}

4:1!+2!+3!+4!+5!

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 1;

int total = 0;

i = 1;

do {

sum = sum * i;

total = total + sum;

i++;

}while(i<=5);

printf("sum = %d\n", sum);

printf("total = %d\n", total);

return 0;

}

5、while和do-while的比较

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;

scanf("%d", &i);

while(i<=10){

sum = sum + i;

i++;

}

printf("sum = %d\n", sum);

return 0;

}

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

int sum = 0;

scanf("%d", &i);

do{

sum = sum + i;

i++;

}while(i <= 10);

printf("sum = %d\n", sum);

return 0;

}

总结:

1:当循环条件一开始为真时,两个循环运行结果相同

2:当一开始循环条件为假时,while循环的循环体一次也不执行,do-while循环的循环体执行一次

6、for构成的循环

格式:

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

语句1;

语句2;

……

语句n;

1:表达式:

表达式1:循环变量赋初值

表达式2:循环条件

表达式3:循环变量增值

2:表达式的作用

表达式1:循环变量赋初值,也可以是多个变量赋初值

表达式2:循环条件,每次执行循环体之前都需要判断表达式2的值是否为真

表达式3:循环变量增值,使循环趋于结束

3:表达式执行过程

1:先执行表达式1

2:执行表达式2,并判断表达式2的值是否为真,如果为真执行3,如果为假,循环结束

3:执行循环体中的操作

4:执行表达式3

5:回到2继续执行

4:表达式执行的次数

for(i=0;i<1;i++){

printf();

表达式1:1次

表达式2:11次

循环体:10次

表达式3:10次

5:表达式的省略

1:表达式1可以省略,需要程序的其他位置加上表达式1

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 0;

for (; i<10; i++){

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

}

return 0;

}

2:表达式2可以省略,死循环

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

for (i=0; ; i++){

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

}

return 0;

}

3:表达式3可以省略,需要把表达式3放进循环体中

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

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

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

i++;

}

return 0;

}

4:表达式1和表达式3可以同时省略等价于while循环

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 0;

for (; i<10; ){

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

i++;

}

return 0;

}

5:三个表达式可以同时省略,死循环

#include <stdio.h>

int main(int argc, const char *argv[])

{

int i = 0;

i = 0;

for (; ; ){

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

i++;

}

return 0;

}

练习:

1:打印100以内所有的奇数,偶数和3的倍数(不包括100)。

2:计算1-100之间所有整数之和。

3:打印Fibonacci数列的前20个数,并打印这20个数的总和。

Fibonacci特点:第1,2两个数值为1,从第三个数开始,该数是其前面两个数之和

4:输入一个数,判断这个数是几位数。(打印每一位,计算每一位的总和)

5:输出一下4*5的矩阵

1  2
3   4   5

2 4
6   8  10

3 6
9 12  15

4 8
12 16  20

7、while和do-while和for循环的比较

总结:三种循环语法格式不同但循环的本质相同

8、break:结束当前循环

思考:16-100之间能被15整除的最小整数

int n = 0;

for (n=16; n<100; i++){

if (n % 15 == 0){

结束循环;

}

}

课堂练习:

1:在全系10学生中,征集慈善募捐,当总数得到100时就结束,统计此时的捐款人数,以及每人捐款的数目。

2:输入一个大于3的数判断这个数是否为素数。(只能被1和本身整除)

条件运算符:? :

格式:表达式1 ?表达式2 :表达式3

执行过程:首先执行表达式1,判断表达式1的值是否为真,如果为真则执行表达式2并把表达式2的值,作为整个表达式的值,如果表达式1为假,则执行表达式3,并把表达式3的值作为整个表达式的值

9、continue:结束本次循环(100—>1次)

输出100-200之间所有不能被3整除的数

int i = 0;

for (i=100; i<200; i++){//i=103—200

if (i%3 == 0){

continue;//i = 102

}

printf(“i = %d”, i);

}

10、return:结束一个自定义函数

11、exit:结束整个程序

12、continue,break,return,exit的比较

continue:结束本次循环

break:结束当前循环

return:结束一个自定义函数

exit:结束整个程序

课后练习:(简单)

1:正序输出0~10之间的任意数字的数字序列。注意输入使用scanf输入

2:倒序输出0~10之间的任意数字的数字序列。注意输入使用scanf输入

3:倒序输出0~10之间的任意数字的偶数序列。注意输入使用scanf输入

4:正序输出0~10之间的任意数字的偶数序列。注意输入使用scanf输入

5:顺序输出26个小写字母。注意输入使用scanf输入

6:顺序输出从A到26个大写字母之间的任意字母序列。注意输入使用scanf

7:倒序输出两个大写字母之间的字母序列。注意输入使用scanf输入

8:顺序输出两个小写字母之间的字母序列。注意输入使用scanf输入

9:输入任意一个字符,将该字符的大小写及ASCII码同时输出。注意输入使用scanf输入

10:输出10000以内的从0开始到任意数范围内的奇数和与偶数和。,注意输入使用scanf输入

11:输出10000以内的从0开始到任意数范围内的总和,注意输入使用scanf输入

12:输出10的阶乘。注意输入使用scanf输入

13:输出n以内任意数的阶乘,注意n输入使用scanf输入

14:输出n以内任意数范围内的的质数。注意输入使用scanf输入

15:正序输出0~10之间的任意数字的奇数序列。注意输入使用scanf输入

16:
输出数字序列,a,aa,aaa,aaaa.....输出个数与显示数字由键盘输入。每个数以整数形式输出。注意输入使用scanf输入

课后练习:(中等)

1.
在屏幕上输出10行内容,每行的内容都是“*”。

2.
在屏幕上输出10行内容,每行的内容都是“*****”。

3.
在屏幕上输出10行内容,每行的内容都不一样,第1行一个星号,第2行2个星号,依此类推第10行10个星号。

4.
在屏幕上输出10行内容,每行的内容都是“1”。

5.
在屏幕上输出10行内容,每行的内容都不一样,第1行输出“1”,第
2行输出“2”,依此类推第10行输出“10”。

6.
在屏幕上输出以下内容:

A

AB

ABCD

ABCDE

ABCDEF

7.
在屏幕上输出以下内容:

12345

1234

123

12

1

8.
计算10个99相加后的值并输出。

9.
计算从1加到100的值并输出。

10. 计算10的阶乘(1x2x3x4x5x6x7x8x9x10)。

11. 计算2的20次方。

12.
计算从1到1000以内所有奇数的合并输出。

13.
计算从1到1000以内所有能被3或者17整除的数的合并输出。

14.
计算从1到1000以内所有能同时被3,5和7整除的数的合并输出。

15.
计算1到100以内能被7或者3整除但不能同时被这两者整除的数的个数。

16.
计算1到100以内能被7整除但不是偶数的数的个数。

17.
计算从1到100之间临近两个整数的合并依次输出。比如第一次输出3(1+2),第二次输出5(2+3),最后依次输出199(100+99)。

18.
计算从1加到100中途的所有数值的合,比如第一次输出1,第二次输出1+2的合,第3次输出1+2+3的合,最后一次输出1到100所有数相加之后的合。

19.
判断1077是不是一个质数(质数是只能被1和它自身整除的数)。

20.
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?

21.
将某个8位的整数所有位的数值加在一起并输出。

22.
给定一个5位的整数,将该数按照10进制位逆置,例如给定12345变成54321,12320变成2321。

23. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字(1-9之间)计算的数据的个数是5。例如2+22+222+2222+22222。

24. 给定一个正整数n按照下面的公式计算S(浮点类型)的值。公式:S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)

课后练习:(难)

1:输入一行字符以’#’结束,分别统计出其中英文字母、数字、空格和其他字符的个数

2:打印Fibonacci数列的前20个数,并打印这20个数的总和。

Fibonacci特点:第1,2两个数值为1,从第三个数开始,该数是其前面两个数之和

3:求a+a*a+a*a*a+......+a*a......*a(n个a),其中a是一个数字,n表示a的位数。例如:2
+ 2*2 + 2*2*2 + 2*2*2*2 + 2*2*2*2*2(n等于5),a和n由键盘输入

4:求1!+2!+3!+4!+5!.......20!的值

5:输入一个数,判断这个数是几位数。

6:输入一个数,判断这个数是几位数并把每一位上的数输出。

6:输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如:153
= 1*1*1+5*5*5+3*3*3

7:输入一个大于3的数判断这个数是否为素数。

8:编写一个程序,输入一个整数,然后输出小于或等于该数的素数。

9:输入两个数,求这两个数的最大公约数和最小公倍数

10:输出一下4*5的矩阵

1  2
3   4   5

2 4
6   8  10

3 6
9 12  15

4 8
12 16  20

11:编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的十进制ASCII码。每行打印8个字符/编码对。建议:利用字符计数和模运算符(%)在每8个循环周期时打印一个换行符。

12:编写一个程序。该程序输入整数,直到输入0。输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。

13:编写一个程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替换。

14:编写一个程序读取输入,直到#。并报告ei出现的次数。

15:
有 1、2、3、4
个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

16:有人想将手中一张面值100元的人民币换成5元、1元、0.5元面值的零钱100张,以上三种面值的零钱至少有一张,问共有几种换法。请编程实现。

17:打印输出乘法口诀表

时间: 2024-10-14 19:02:34

C语言笔记(三)的相关文章

JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> String.prototype.trim=function(){ r

iOS学习笔记---oc语言第三天

继承.初始化方法 一.继承 继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量也继承过来了,只是不能访问) 面向对象提供了继承语法.能大大简化代码,把公共的方法和实例对象写在父类里.子类只需要写自己独有的实例变量和方法即可 继承既能保证类的完整,又能简化代码 继承特点 oc中只允许单继承 没有父类的类称为根类,oc中得根类是NSObject(祖宗) 继承的内容:所有的实例变量

Go语言学习笔记(三) [控制结构、内建函数]

日期:2014年7月21日 一.控制结构 1.Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语句,另外Go中还提供了类型选择和多路通信转接器的select.Go的控制结构的语法和C相比有所不同,它不需要圆括号,但语句体必须总是包含在大括号内. 2.控制结构语法 1)if-else (1)if后紧跟单个条件 例如:if x > 0 {   //{必须和if在同一行,这是Go语法规定的,如果换行写,编译

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

swift学习笔记(三)关于拷贝和引用

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型. 闭包和函数同属引用类型 捕获则为拷贝.捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值 class属于引用类型. Array的情况稍微复杂一些,下面主要对集合类型进行分析: 一.关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会

C语言笔记1--类型、运算符与表达式

 C语言笔记1--类型.运算符与表达式 总论: 变量和常量是程序处理的两种基本的数据对象.声明语句说明变量的名字和类型,也可以指定变量的初值.运算符指定将要进行的操作.表达式则把变量与常量组合起来生成新的值.对象的类型决定该对象可取值的集合以及可以对该对象执行的操作. 一.变量与常量的名字 1.名字是由字母.下划线和数字组成的序列,其第一个字符必须为字母:下划线"_"被看做是字母,但一般不要以下划线"_"开头. 2.名字区分字母大小写,变量名使用小写字母.符号常量

《世界是数字的》读书笔记 三

<世界是数字的>读书笔记 三 第六章 软件系统 操作系统是软件中的基础层,他负责管理计算机硬件,并为其他被称作应用程序的程序运行提供支持. 6.1操作系统 操作系统控制和分配计算机资源.首先,他负责管理CPU,调度和协调当前运行的程序.操作系统通常都需要管理数十个同时运行的进程或任务. 其次,操作系统管理RAM.他把程序加载到内存中以便执行指令. 最后,操作系统管理和协调外接设备的活动. 6.2操作系统怎么工作 计算机启动时首先要加载代码,加载的过程中还要检查硬件,比如哪些设备已经接入电脑,,

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

C++语言笔记系列之十六——赋值兼容规则&amp;多继承的二义性

1.赋值兼容规则 (1)派生类对象可以给基类对象赋值,这种情况下派生类对象将从基类继承的成员的值赋值给一个基类对象:但是不允许将一个基类的对象赋值给一个派生类. (2)可以将派生类对象的地址赋给基类指针,使基类指针指向派生类对象,通过基类指针引用成员时只可以引用派生类从基类继承而来的成员,而不允许引用派生类的新成员. (3)引用与指针相同. 2.多继承 (1)一个派生类从两个以上的基类中去继承. (2)说明: class 派生类名:继承方式 基类1, 继承方式 基类2,...... {派生类成员

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH