C语言简明教程_第1页
C语言简明教程_第2页
C语言简明教程_第3页
C语言简明教程_第4页
C语言简明教程_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计2023/2/521.2

C语言的特点语言简洁,表达能力强,易于理解只有32个关键字,9种控制语句32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile2023/2/539种控制语句:if()~else~for()~while()~do~while()continuebreakswitchgotoreturn2023/2/54运算符丰富34种运算符,运算能力强、效率高。算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-2023/2/55数据类型丰富C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union2023/2/56例1.1编写程序,在屏幕上打印字符串“ThisisaCprogram.\n”。main(){

printf("ThisisaCprogram.\n");}1.3简单C程序介绍

2023/2/57例1.2/*求两数之和*/

main() { inta,b,sum;/*定义变量*/

a=123; b=456; sum=a+b; printf(“Sumis%d\n”,sum); }

Sumis579

2023/2/58C程序结构C程序由函数构成必须有,且只能有一个main(主函数)总是从main函数开始执行函数由函数首部和函数体组成函数首部指定函数名、函数参数、类型函数体从{开始,到}结束函数内有语句2023/2/59C程序结构(续)语句包括说明性语句、可执行语句以;表示语句结束注释可以出现在程序的任何位置

用/*和*/括起来,必须成对出现或者//

注释想要注释的语句,在本行结束

C程序设计

数据类型、运算符与表达式2023/2/5112.1数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量赋初值2.7混合运算2.8运算符与表达式

数据类型、运算符与表达式

CHAPTER22023/2/512数据类型、运算符与表达式

C的数据类型数组类型数据类型构造类型空类型指针类型双精度单精度实型(浮点型)字符型枚举类型基本类型整型结构体类型共用体类型2023/2/5133.2常量与变量

3.2.1常量和符号常量常量:在运行过程中,其值不能被改变的量称为常量。

分类:整型﹑实型﹑字符﹑字符串符号常量,用一个标识符代表的常量。

习惯上,符号常量名用大写,变量用小写,以示区别。-1,0,123为整型常量

4.6,-1.23为实型常量

‘a’,‘d’

为字符常量#definePRICE255A=PRICE*A+6C=PRICE+C/120PRICE是标识符,符号常量2023/2/5143.2.2变量变量:在程序运行过程中,其值可以改变的量称为变量。标识符:用来标识变量名、符号常量名、函数名、类型名、数组名、文件名的有效字符序列称为标识符。由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。3.C语言要求对变量“先定义,后使用”。2023/2/5153.3整型数据

3.3.1整型常量由一系列数字组成。也可带有减号,但不使用加号。十进制整数:123,-456,0八进制整数:以0开头的数据,如:-011,0123十六进制整数:以0x开头的数据,如:0x123整型常量的分类根据其值的范围而决定其类型,并可以赋值给类型相匹配的整型变量。2023/2/5163.整型变量的定义对变量的定义一般放在函数的开头部分。[例2.1]main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}a+u=22,b+u=-14不同类型的数可以直接运算2023/2/517main(){inta,b;

a=32767;b=a+1;printf(“%d,%d”,a,b);}运行结果为32767,-327682023/2/5183.5字符型数据3.5.1字符常量1.定义用一对单引号括起来的单个字符,称为字符常量。例如,‘A’、‘1’、‘+’等。2023/2/5193.5.2字符型变量

字符变量的类型关键字为char,一般占用1字节内存单元。

1.变量值的存储

将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。例如:charch1,ch2; /*定义两个字符变量:ch1,ch2*/ch1=’a’;ch2=’b’;/*给字符变量赋值*/’a’、’b’的ASCII码为97、98。

2.特性1)字符数据在内存中存储的是字符的ASCII码;2)C语言允许字符型数据与整型数据之间通用,可以互相赋值。3)字符数据也可以整数形式输出。2023/2/520

[例1]字符变量的字符形式输出和整数形式输出。

main()

{charc1,c2;

c1='a';c2='b';printf(“c1=%c,c2=%c\n”,c1,c2);

printf(“c1=%d,c2=%d\n”,c1,c2);

}

程序运行结果:

c1=a,c2=b

c1=97,c2=982023/2/521

[例2]

大小写字母的转换。

main()

{charc1,c2;

c1='a';c2='b';c1=c1-32;c2=c2-32;printf(“%cc2=%c\n”,c1,c2);

}

程序运行结果:

AB

2023/2/5223.6变量赋初值在变量定义的同时可以为变量赋初值。如:inta=3;

(相当于inta;a=3;)

floatf=3.56;

charc=‘a’;

inta,b,c=5;表示只给c赋初值。(相当于inta,b,c;c=5;)2023/2/523练习main(){inti;floatx;x=3.6;i=(int)x;printf("x=%f,i=%d\n",x,i);}2023/2/524数据类型、运算符与表达式

运算符和表达式4.自增、自减运算符

使变量的值加1或减1。如:++i,--i在使用i之前,先使i的值加(减)1i++,i--

在使用i之后,再使i的值加(减)1例如:i的值为3,则j=++i;j的值为4,i的值为4j=i++;j的值为3,i的值为4又如:printf(“%d”,++i);输出结果为4printf(“%d”,i++);输出结果为3单独使用时,i++,++i等价2023/2/525第二章2.3运算符和表达式结合性:自右向左例:i=2;j=-i++;分析:(1)++、--、+、-是同级运算符,结合方向:自右向左。(2)-i++等价于-(i++)(3)对于括号内的自增运算,要先使用i,再使i增加1。运算结果:i的值为3,j的值为-2。2023/2/526练习a=1,b=2,c=3,d=4下列式子的值分别是多少?a*b/ca*b%c+1++a*b-c--2023/2/5273.9赋值运算符和赋值表达式

1.赋值运算符:“=”。2.复合赋值运算:在赋值符号前加上其它运算符号。

+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=例如:a+=3;等价于a=a+3;x*=y+8;等价于x=x*(y+8);x%=3;等价于x=x%3;2023/2/528练习inti=1,j=2,k=3,m=4;计算下列式子的值i+=j+kj*=k=m+5第4章最简单的C程序设计

-顺序程序设计2023/2/5301C语句概述2赋值语句3数据的输入输出4字符数据输入输出5格式输入输出7程序举例

2023/2/5314.1C语句概述

用C语言编写的程序称为C语言源程序,简称C程序。

C语言一般由一个或若干个函数组成,而这些函数可以保存在一个或几个源程序中,这些文件都以.C作为文件扩展名。[例]求园的面积#DEFINEPI=3.1415926main(){floatr,s;r=20;s=r*r*PI;printf(“area=%f”,s);}area=1256.637C程序源程序文件1源程序文件i源程序文件n……预编译命令函数1函数n…变量申明部分执行部分(语句)语句是计算机执行的最小单位2023/2/532C语句分类C语句有以下五类:⑴控制语句,完成一定的控制功能;①if()~else~(条件语句)②for()~(循环语句)③while()~(循环语句)④do~while()(循环语句)⑤continue(结束本次循环语句)⑥break(中止执行switch或循环语句)⑦Switch(多分支选择语句)⑧goto(转向语句)⑨return(从函数返回语句)2023/2/533⑵函数调用语句,由一次函数调用加一个分号构成一个语句,

如:printf(“ThisisaCstatement.”);⑶表达式语句,由一个表达式构成一个语句,

如:a=3(是表达式,不是语句)

a=3;(是语句)⑷空语句,只有一个分号,什么也不做;⑸复合语句,用{}把一些语句括起来成为复合语句。相当一条语句,哪里有语句,哪里就可用复合语句。

if(a>b){max=a;min=b;}复合语句最后一个语句中最后的分号不能忽略不写。2023/2/5344.2赋值语句赋值表达式后面加上分号,构成赋值语句。功能:将数据赋给变量。

如:x=3.1;a=‘d’+123+b/d;程序中基本的命令行必须是一个语句,表达式不能单独构成语句。例如:‘d’+123+b/d是一个表达式a=‘d’+123+b/d;是一个赋值语句

特点:

①C语言中的赋值号“=”作为赋值运算符;

②作为赋值表达式可以被包括在其他表达式之中;

if((a=b)>0)t=a;

③赋值语句可以连接赋值;

a=b=c=2;2023/2/535[例]从键盘上输入一个大写字母,分别用大小写字母形式输出,同时输出它们的ascii码。#include“stdio.h”main(){charc1,c2;c1=getchar();printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}A↓A,65a,972023/2/5364.5格式输入与输出函数1.格式输出函数printf()按规定格式向终端输出若干个任意类型的数据。一般格式:printf(控制格式,输出列表)被输出的数据,可以是常量、变量、表达式用双引号括起的转换控制字符串,它包括两种信息:格式说明,由%开始。如:%d,%f,%c普通字符,要输出的字符printf(“%d%d”,a,b)格式说明输出列表printf(“a=%db=%d”,a,b);

控制格式输出列表2023/2/537例1.

main()

{intx1=123;

longx2=123456;

printf("x1=%d,x1=%5d,x1=%-5d,x1=%2d\n",x1,x1,x1,x1);

printf("x2=%ld,x2=%8ld,x2=%5ld\n",x2,x2,x2);

}

程序运行结果如下:x1=123,x1=□□123,x1=123□□,x1=123x2=123456,x2=□□123456,x2=1234562023/2/538例2.main(){intm=-1;longn=123456789;printf(“m=%d,%o,%x,%u\n",m,m,m,m);printf("n=%d\n",n);printf("n=%ld\n",n);}程序输出:1122a=11,b=22m=-1,177777,ffff,65535n=-13035n=1234567892023/2/539例3.main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);}

程序运行结果如下:123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010

第五章

选择结构程序设计2023/2/5415.1关系运算符和关系表达式1.关系运算符关系运算实际上是两个量的比较,比较的结果只有两种可能:真(1)、假(0)。例如:a>3?当a=5时,比较的结果为真;当a=1时,结果为假。

C语言提供6种关系运算符<(小于)<=(小于或等于)>(大于)>=(大于或等于)==相等!=不等2023/2/5422.关系表达式用关系运算符或者等式运算符将两个表达式连接起来,叫关系表达式。合法的关系表达式:

a>b、a+b>b+c、(a=3)>(b=5)、(a==3)>(b==5)、‘a’<‘b’、(a>b)>(b<c)关系表达式的值是一个逻辑值,非真即假.

关系表达式5==3的值为假(在计算机中记为0);

5>=0的值为真(在计算机中记为1)。

例:a=3,b=2,c=1,

则:(1)a>b的值为1(2)(a>b)==c的值为真(即1)(3)b+c<a的值为0(4)d=a>b中d的值为a>b的值,为1。(5)f=a>b>c中f的值为1>c的值,为0。2023/2/543关系、等式和逻辑运算符关于优先次序<,<=,>,>=为同一级别,==和!=为同一级别。在同一级别中,采取由左至右的结合方向。

算术运算符关系运算符赋值运算符高低[例]c>a+bc>(a+b)a>b!=c(a>b)!=ca==b<ca==(b<c)a=b>ca=(b>c)

等式运算符2023/2/5445.2逻辑运算符逻辑运算:产生真假值的运算。逻辑运算符:①

&&逻辑与(AND)②||

逻辑或(OR)③

!逻辑非(NOT)“&&”和“||”是双目运算符。“!”是一元运算符.

如:

a&&ba,b同时为真,则表达式为真a||ba,b只要有一个为真,表达式为真!aa为真,则表达式为假ab!a!ba&&ba||bTTFFTTTFFTFTFTTFFTFFTTFF2023/2/545关系、等式和逻辑运算符逻辑运算符的优先级!&&||逻辑运算符“&&”和“||”低于关系运算符,“!”高于算术运算符

a>b&&x>y相当于:(a>b)&&(x>y)a==b||x==y相当于:(a==b)||(x==y)!a||a>b相当于:(!a)||(a>b)!算术关系逻辑赋值2023/2/546逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。在C语言中,当判断一个量的真假时,一切非0数均被当成‘真’来处理。

例如:若a=4,则!a的值为0若a=4,b=5,则a&&b的值为1

a||b的值为1

!a||b的值为14&&0||2的值为1区分下面的表达式中算术运算量,关系运算量和逻辑运算量:

5>3&&2||8<4-!0结果为1

5>3是两个数值间的比较,结果为11&&2是两个非0值(逻辑量)间的运算,结果为11||8<4-!0,根据优先级,先计算!0,结果为12023/2/5475.3if语句if语句的三种形式if用来判断给定的条件的真假,并决定执行哪一种操作。1.if<表达式>语句条件满足时执行表达式后面的语句,然后继续执行以下的语句。条件不满足时,越过if表达式后面的语句,往下执行。表达式语句真(非0)假(0)例如:如果输入的是正数,则打印出来。if(x>0)printf("%d",x);2023/2/548选择结构程序设计

if语句if语句的三种形式2.if<表达式>语句1else语句2条件满足时,执行语句1,然后继续执行if以下的语句。条件不满足时,执行语句2,然后继续执行if以下的语句。表达式语句1语句2真假PYNAB例如:输出两个数中较大的一个。if(x>y)printf("%d",x);elseprintf("%d",y);2023/2/549选择结构程序设计

if语句if语句的第三种形式if<表达式1>语句1;

elseif<表达式2>语句2;elseif<表达式3>语句3;elseif<表达式4>语句4;else语句5

表达式1表达式2表达式3表达式4语句1语句2语句3语句4语句5假假假假真真真真2023/2/550选择结构程序设计

if语句例如:商场促销,购物500元以上,8折;购物300元以上,85折;购物100元以上,9折;购物50元以上,95折;购物50元以下,不打折。根据消费量,计算优惠率。

设:消费量为money;折扣为cost;实际花费priceif(money>500)cost=0.2;elseif(money>300)cost=0.15;elseif(money>100)cost=0.1;elseif(money>50)cost=0.05;elsecost=0;price=money-(money*cost);2023/2/551选择结构程序设计

if语句If语句的嵌套嵌套的定义:在if语句中又包含一个或多个if语句。嵌套的一般形式:If()if()语句1else语句2Elseif()语句3else语句4(注意!!If与else的配对关系。)2023/2/552[例]比较两个整数的关系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}2023/2/553[例]输入两个数,按数值大小次序排列输出.main(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}

输入为3.6,-3.2输出为-3.20,3.602023/2/554[例]输入三个数,按由小到大次序排列并输出。main(){flaota,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f",a,b,c);}输入为:3,7,1输出为:1.00,3.00,7.002023/2/555选择结构程序设计

程序举例[例]写一程序判断某一年是否是闰年.main(){intyear,leap;printf("输入年份:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap)printf("%disleapyear\n",year);elseprintf("%disnotleapyear\n",year);}输入年份:20042004isleapyear

2023/2/556选择结构程序设计

if语句条件运算符max=(a>b)?a:b;条件表达式当(a>b)为真时,表达式取a的值当(a>b)为假时,表达式取b的值条件运算符是三目运算符

表达式1?表达式2:表达式3条件运算符的结合方向为"从右向左"

例如:a>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值为4。2023/2/557选择结构程序设计

if语句main(){intx,y;scarf("%d",&x);if(x==0)y=0;elseif(x>0)y=1;elsey=-1;print("x=%d,y=%d\n",x,y);}[例]

-1(x<0)

y=0(x=0)1(x>0)开始输出Y结束输入XX<0X=0Y=-1Y=0Y=1YNYN输入为:4输出为:x=4,y=12023/2/558[例]输入一个字符,判断大小写,如是大写,则转换成小写,输出。main(){charc;scanf("%c",&c);c=(c>='A'&&c<='Z')?(c+32):c;printf("%c",c)}选择结构程序设计

if语句2023/2/5595.4switch语句Switch语句是多分支选择语句,也叫开关语句或者选择语句。一般形式:

switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;

…………case常量表达式n:语句n;default:语句n+1;}功能:1.计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、…、n+12.若与所有常量表达式值都不相等,执行语句序列n+1。如:switch(a)

{case5:printf("&");break;case2:printf("#");break;default:printf("$");break;}如:switch(a)

{case5:printf("&");case2:printf("#");default:printf("$");}2023/2/560选择结构程序设计

switch语句[例]根据成绩等级打出成绩范围.main(){chargrade;printf("Enteryourgrade\n");scanf("%c",&grade);switch(grade);{case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("error\n");}}输入为B输出为70~842023/2/561例:给出百分制成绩,要求输出等级'A','B','C','D','E'。90分以上为'A',80—89分为'B',70—79分为'C',60—69分为'D',60分以下为'E'。main(){intscore,num;chargrade;scanf("%d",&score);

num=score/10;switch(num){case10:grade='A';

break;case9:grade='A';break;case8:grade='B':break;case7:grade='C';break;case6:grade='D';break;default:grade='E';}printf("%d%c",score,grade);}输入为76输出为76C2023/2/562选择结构程序设计

switch语句switch语句的说明条件表达式的类型和常量表达式的类型是整数、字符。当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case

后面的语句,若所有的

case

中的常量表达式的值都没有与表达式的值匹配,则执行default

后面的语句。每一个case

的常量表达式的值必须互不相同。case常量表达式只起语句标号作用;必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。多个case可共用一组执行语句。2023/2/5631概述2goto语句3while语句4do-while语句5for语句6循环的嵌套7break语句和continue语句8程序举例

循环控制

2023/2/5646.1概述一般需要使用循环的情况是:有重复的动作(循环体)循环次数可以控制(循环条件)例如:1+2+3+….+100在C语言中可以用下列语句实现循环:

goto

和if

结合

while

do-while

for2023/2/5656.2goto语句Goto语句的一般形式:goto

语句标号;

……语句标号:语句;

功能:无条件转向语句。Goto语句的常用形式:1.与if语句构成循环;

2.从循环体中转到循环体外。例:求1+2+3+…+100。main(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;}printf(“%d\n”,sum);}2023/2/5666.3while语句一般形式:While(表达式)语句功能:实现“当型"循环,"先判断,后执行"。表达式为真时(非0值),执行while语句的内嵌语句。说明:①<表达式>可以是关系表达式、逻辑表达式或其它类型,表达式后不允许有分号结尾;②语句可以是简单的,也可以是复合的;③循环体中应有使循环趋向于结束的语句。表达式语句0非02023/2/567[例]求1+2+3+….+100。

main(){inti=1,sum=0;

while(i<=100)

{sum=sum+i;//累加器i++;}printf("%d",sum);}i=1,sum=0

i<=100

sum=sum+i

i=i+1输出sum如果有一个以上的语句循环,则必须用{}构成复合语句。要有修改循环变量的语句。2023/2/568

6.4do-while语句一般形式:do

循环语句while(表达式);功能:实现“当型"循环结构。说明:①当while后面的表达式的第一次的值为"真"时,两种循环得到的结果相同。否则,二者结果不相同。②dowhile中的循环体至少执行一次,而while语句中的循环语句可能一次都不执行。表达式语句非0(真)0(假)2023/2/569[例]求1+2+3+….+100。

main(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i<=100);printf("%d",sum);}i=1,sum=0直到i>100

sum=sum+i

i++输出sum2023/2/5706.5for语句在C语言中用for语句构成的循环最为灵活。一般形式:for(表达式1;表达式2;表达式3)语句执行过程:

例:for(i=1;i<=100;i++)sum=sum+i;从图中可以看出FOR语句等价于下列程序:表达式1;While(表达式2){语句表达式3;}求解表达式1表达式2语句求解表达式3For语句的下一语句假真2023/2/571说明:①语句的一般形式中的"表达式1"可以省略,此时应在语句之前给循环变量赋初值(注意!省略表达式1时,其后的分号不能省略);如:for(;i<=100;i++)sum=sum+i;②如果表达式2省略,即不判断循环条件,循环无终止地进行下去;如:for(i=1;;i++)sum=sum+1;③表达式3也可以省略,但此时应另外设法保证循环能正常结束;如:for(i=1;i<=100;){sum=sum+i;i++}④可以省略表达式1和表达式3,只有表达式2,即只给循环条件;

如:for(;i<=100;)

{sum=sum+i;i++}⑤for(;;)表示无限循环,相当于while(1)语句;2023/2/572循环控制

for语句说明:循环终止条件的种类:(逻辑)关系表达式:如:for(;a>b&&x<y;)如:for(;(c=getchar())!='\n';)printf("%c",c);由以上说明可以看出,C语言中for语句的功能比其它语言中的for语句功能要强、要灵活,它能替代while语句。[例]求n!=1×2×3×…nmain(){doubles=1;intk;for(k=1;k<=100;k++)s=s*k;printf("s=%f",s);}整数连乘结果一定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。2023/2/574

6.6循环的嵌套嵌套的概念:一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。⑴while(){…while(){…}}(2)for(;;){for(;;){…}}(3)for(;;){…while(){}…}2023/2/575break语句用来从循环体里退出,中止循环Continue语句用来跳过剩下的语句,回到循环开始表达式1表达式2循环的下一个语句语句语句breaknyyn表达式1表达式2循环的下一个语句语句语句continuenyyn6.7break语句和continue语句2023/2/576[例]把100…200之间不能被3整除的数输出。

main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}}2023/2/577[例]判断m是否是素数。操作:用2~m-1依次去除m,若其中有任意一个数被除尽,则没有必要再判断下去,它肯定不是素数,跳出循环;若所有数都不能被除尽,则循环可以自然完成。#include"math.h"main(){intm,i,k;scanf("%d",&m);k=m-1;for(i=2;i<=k;i++)if((m%i)==0)break;if(i>k+1)printf("%disprimenumber\n",m);elseprintf("%disnotaprime\n",m);}或一个数x在[2,sqrt(x)]范围内没有因子,我们就称其为素数(质数)。k=sqrt(m);2023/2/578[例]打印出100到200之间所有的素数。

#include"math.h"main(){intm,i,k,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k){printf("%d\n",m);n=n+1;}if(n%10==0)printf(“\n”);}printf(“\n”);}2023/2/579[例]用/41-1/3+1/5-1/7+…的公式求的近似值,直到最后一项的绝对值小于10-6为止。

#include"math.h"main(){ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;while((fabs(t))>=1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f\n",pi);}t=1,pi=0,n=1,s=1当|t|10-6pi=pi+tn=n+2s=-s;t=s/npi=pi*4输出pi2023/2/580循环控制

本章总结三种循环语句:while,do---while和for建立循环通常有以下情况:1.给定次数,for比较适用for(i=1;i<100;i++)2.给定条件,while比较适用while((x+y)<z)3.字符的情况通常以回车做结束符

while((c=getchar())!='\n')4.判断字符范围是否为英文字母

(c>'a'&&c<'z')||(c>'A'&&c<'Z')2023/2/581【例】编程序,输出以下图形。

****************一共有4行,每行由空格和星号组成:空格数按行增加,星号按行减少变量

i

控制输出行数,从1变化到4变量j控制输出每行的空格和星号:j从1变化到

i,每次输出一个空格j从1变化到8-2*i+1,每次输出一个星号思路:2023/2/582总结for(…;…;…)while(){}do{}while()…continuebreakgoto2023/2/5837.1一维数组的定义和引用6.3字符数组

第七章数组2023/2/584

在c语言中,除了前面介绍的基本类型之外,还有另外一些数据类型---构造类型。其中数组就属于构造类型中的一种。 数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。7.1一维数组的定义和引用一、定义一般形式:类型说明符数组名[常量表达式];

例如:inta[10];a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]

1204609398011502023/2/585二、一维数组元素的引用数组元素的引用形式:数组名[下标]

每次可引用一个数组元素,不能引用整个数组一个数组元素就如同一个简单变量[例]main(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);}

98765432102023/2/586数组

一维数组的定义和引用一维数组的初始化初始化方法:从数组的第一个元素开始依次给出初始值表;表中各值之间用逗号分开,并用一对大括号括起来。在定义数组时对数组元素赋予初值inta[10]={0,1,2,3,4,5,6,7,8,9};

只给一部分元素赋初值inta[10]={0,1,2,3,4};

欲使一个数组中全部元素初值为0,可以写成

inta[10]={0,0,0,0,0,0,0,0,0,0,};或inta[10]={0};

在对全部数组元素赋初值时,可以不指定数组长度inta[]={0,1,2,3,4,5};2023/2/587数组

一维数组的定义和引用[例]求Fibonacci数列{1,1,2,3,5,8,13,21,...}main(){intf[20]={1,1};inti;for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%12d",f[i]);}}2023/2/588[例]用冒泡法对10个数排序。第1次,a[0]和a[1]比较9854206137}

8954206137

8594206137

8549206137

85429

06137

8542096137

8542069

137

85420619

37

8542061397

8542061379第2次,a[1]和a[2]比较第i次,a[i]和a[i+1]比较{9895949297for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}2023/2/589main(){inta[11]inti,j,t;printf(“input10number:\n);for(i=1;i<11;i++)scanf(“%d”,&a[i]);//从键盘给数组元素赋值printf(“\n”);for(j=1;j<=9;j++)//排序for(i=1;i<=10-i;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}for(i=1;i<11;i++)//输出数组元素printf("%3d",a[i]);}2023/2/590数组

二维数组的定义和引用[例]求出3*4矩阵中的最大值及其所在的行列号。分析:

1.设一个变量存放最大值max;2.设两个变量row和column存放最大值在数组中的行列;3.遍历数组中的每一个元素。

max=a[0][0]

forj=0to3a[i][j]>maxynmax=a[i][j]row=icolumn=j输出max,row,columnfori=0to22023/2/591main(){inti,j,row,column,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};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;column=j;}printf(“max=%d,row=%d,colum=%d\n",max,row,column);}2023/2/592二、字符数组的初始化1.逐个元素初始化。

例如:charc[10]={'c','h','a','r'};2.说明:如果初值个数>数组长度,则作语法错误处理;如果初值个数<数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符(即’\0’);如果初值个数=数组长度,则在定义时可省略数组长度。3.用字符串来初始化字符数组

chara[11]=”Iamaboy”;

char'\0''\0''\0''\0''\0''\0'2023/2/593例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。程序如下:#include<stdio.h>main(){charstring[81];inti,num=0,word=0;charc;gets(string);for(i=0;(c=string[i])!=‘\0’;i++)if(c==‘‘)word=0;elseif(word==0){word=1;num++;}printf(“thereare%dwordsintheline.\n”,num);}运行如下:Iamaboy.thereare4wordsintheline.解题思路:单词的数目由空格出现的次数决定。若测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词出现了”,此时使num累加1.2023/2/594第八章函数

8.1概述模块化程序设计:基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充开发方法:自顶向下,逐步分解,分而治之2023/2/595例:打印图形:******************

Howdoyoudo!************************************编程:

main(){printf("******************\n");printf("Howdoyoudo!\n");printf("******************\n");printf("******************\n");}三个语句一样,可编写成函数:

printstar(){printf("******************\n");}则原程序可简化为:main(){printstar();printf("Howdoyoudo!\n"):printstar():

printstar();

}2023/2/596函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数2023/2/597函数的定义形式函数类型函数名(形式参数表){说明部分语句}

8.2函数的一般形式intmax(intx,inty)/*形式参数说明*/{intz;/*函数体内部说明*/

z=x>y?x:y;return(z);/*返回值*/}2023/2/5988.3函数的参数和函数的值一、形式参数和实际参数在函数定义时指定的参数为形式参数(形参);在函数调用时给出的参数叫实际参数(实参)。main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}2023/2/599说明:实参必须有确定的值形参与实参类型一致,个数相同参数传递方式为值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。特点:形参与实参占用不同的内存单元;单向值传递。2023/2/5100[例]main(){inta,b;a=2;b=3;printf("%d%d",a,b);change(a,b);printf("%d%d",a,b);}change(inta,intb){a=10;b=20;printf("%d%d",a,b);}

2310202323ab32ab1020main空间change空间2023/2/5101二、函数的返回值形式:return(表达式);

return表达式;

功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数说明:函数中可有多个return语句若无return语句,遇

}

时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换----函数调用转换void型函数用来明确表明函数不带回任何值例无返回值函数voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}2023/2/5102说明:函数类型决定返回值类型;[例]main(){floata,b,c;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%f",c);}max(floatx,floaty){floatz;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论