C语言谭浩强版第6章循环控制

合集下载

C语言程序谭浩强第四版 第六章课后习题解析

C语言程序谭浩强第四版 第六章课后习题解析

1.程序如下:#include "stdio.h"#include<math.h>void main(){ int i,j,n,a[101];for(i=1;i<=100;i++)a[i]=i;a[1]=0;for(i=2;i<=sqrt(100);i++)for(j=i+1;j<=100;j++){if(a[i]!=0&&a[j]!=0)if(a[j]%a[i]==0)a[j]=0;}printf("\n");for(i=2,n=0;i<=100;i++){if(a[i]!=0){printf("%5d",a[i]);n++;}if(n==10){printf("\n");n=0;}}printf("\n");}运行结果:2.程序如下:#include "stdio.h"void main(){ int i,j,min,temp,a[11];printf("enter data:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\n");printf("The orginal numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThe sorted numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}运行结果:3.程序如下:#include "stdio.h"void main(){ int a[3][3],sum=0;int i,j;printf("enter data:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%3d",&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%6d\n",sum); }运行结果:4.程序如下:#include "stdio.h"void main(){ int a[11]={1,4,6,9,12,15,19,32,45,100}; int temp1,temp2,number,end,i,j;printf("arry a:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");printf("insert data:");scanf("%d",&number);end=a[9];if(number>end)a[10]=number;else{for(i=0;i<10;i++){if(a[i]>number){temp1=a[i];a[i]=number;for(j=i+1;j<11;j++){temp2=a[j];a[j]=temp1;temp1=temp2;}break;}}}printf("Now arry a:\n");for(i=0;i<11;i++)printf("%5d",a[i]); printf("\n");}运行结果:5.程序如下:#include "stdio.h"#define N 5void main(){ int a[N],i,temp;printf("enter arry a:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);printf("arry a:\n");for(i=0;i<N;i++)printf("%4d",a[i]);for(i=0;i<N/2;i++){ temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf("\nNow,arry a:\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");}运行结果:6.程序如下:#include "stdio.h"void main(){ int i,j,n=0,a[31][31]={0};while(n<1||n>30) /*最多可输出30行*/ {printf("请输入杨辉三角形的行数:");scanf("%d",&n);}for(i=0;i<n;i++)a[i][0]=1; /*第一列全置为一*/ for(i=1;i<n;i++)for(j=1;j<=i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/ for(i=0;i<n;i++) /*输出杨辉三角*/{ for(j=0;j<=i;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:7.程序如下:#include "stdio.h"void main(){ int a[15][15],i,j,k,p,n;p=1;while(p==1){printf("enter n(n=1--15):");scanf("%d",&n);if((n!=0)&&(n<=15)&&(n%2!=0))p=0;}//初始化for(i=1;i<=n;i++);for(j=1;j<=n;j++);a[i][j]=0;//建立魔方阵j=n/2+1;a[1][j]=1;for(k=2;k<=n*n;k++){i=i-1;j=j+1;if((i<1)&&(j>n)){i=i+2;j=j-1;}else{if(i<1) i=n;if(j>n) j=1;}if(a[i][j]==0)a[i][j]=k;else{i=i+2;j=j-1;a[i][j]=k;}}//输出魔方阵for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:(错误)8.程序如下:#include "stdio.h"#define N 4#define M 5void main(){ int i,j,k,a[N][M],max,maxj,flag;printf("please input matrix:\n");for(i=0;i<N;i++)for(j=0;j<M;j++)scanf("%d",&a[i][j]);for(i=0;i<N;i++){max=a[i][0];maxj=0;for(j=0;j<M;j++)if(a[i][j]>max){max=a[i][j];max=j;}flag=1;for(k=0;k<N;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("It is not exist!\n");}运行结果:9.程序如下:#include "stdio.h"#define N 15void main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf("enter data:\n");scanf("%d",&a[0]);i=1;while(i<N){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enter this data again:\n");}printf("\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");while(flag)printf("input number to look for:");scanf("%d",&number);sign=0;top=0;bott=N-1;if((number<a[0])||(number>a[N-1]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Has found %d,its position is %d\n",number,loca+1);sign=1;}else if(number<a[mid])bott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannot find %d.\n",number);printf("continue or not(Y/N)?");scanf("%c",c);if(c=='N'||c=='n')flag=0;}运行结果:(死循环)10.程序如下:#include "stdio.h"void main(){ int i,j,upp,low,dig,spa,oth;char text[3][80];upp=low=dig=spa=oth=0;for(i=0;i<3;i++){ printf("please input line %d:\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!=0;j++){ if (text[i][j]>='A'&&text[i][j]<='Z')upp++;else if (text[i][j]>='a'&&text[i][j]<='z')low++;else if (text[i][j]>='0'&&text[i][j]<='9')dig++;else if (text[i][j]==' ')spa++;elseoth++;}}printf("\nupper case:%d\n",upp);printf("lower case:%d\n",low);printf("digit :%d\n",dig);printf("space :%d\n",spa);printf("other :%d\n",oth); }14.#include<stdio.h>main(){int i,ans;char str1[100],str2[100];printf("input string 1:");gets(str1);printf("input string 2:");gets(str2);i=0;while((str1[i]==str2[i]) && (str1[i]!='\0')) i++;if((str1[i]=='\0') && (str2[i]=='\0'))ans=0;elseans=str1[i]-str2[i];printf("\nans:%d\n",ans);}15.#include<stdio.h>#include<string.h>main(){int i;char str1[100],str2[100];printf("input string 2:");scanf("%s",str2);for(i=0;i<=strlen(str2);i++)str1[i]=str2[i];printf("str1:%s\n",str1); }。

《C语言程序设计》第6章 循环控制

《C语言程序设计》第6章 循环控制
8
§ 6.5 for 语 句 ─ ─ 支 持 当 型 循 环 结 构 一般形式 for(表 达 式 1;表 达 式 2;表 达 式 3)语 句
求解表达式 1
表达式- 算术 关系 字符 表达式 赋值 逗号 语 句- 单个语句 复合语句
fo r 语 句 的 下 一 句 求解表达式 3 语句 表达式
2
0
main ( ) {int i=1, pro=1; b1: if( i<=5 ) { pro=pro*i; i=i+1; goto b1; } printf("pro=%d\n",pro); } pro=120
i 1 pro 1 2 2 3 4 5 6 24 120
4
§ 6.3while 语 句 — — 支 持 当 型 循 环 结 构
输入 10 输出 n=10,
n 计算 i*i i 1
sum=%d\n",n,sum);
sum=385
注 意 : 对 同 一 问 题 , 既 可 用 while 也 可 用 do while。 一般情况下,若二者循环体一样,结果也一样。 但当一开始表达式值即为 0 时,两种循环结果不同, while 不 执 行 循 环 体 , do while 执 行 一 次 循 环 体 语 句 。 而

i 1
n
i
பைடு நூலகம்
2

n ( n 1 )( 2 n 1 ) 6
此段可改写成 while( n ) { sum+=n*n; n--; }
printf("n=%d, sum=%d\n",n,sum); 输 入 10 输 出 n=0, sum=385
注意:循环体中应有使循环趋于结束的语句

06_第06章 循环控制

06_第06章  循环控制
表达式 非0 语句 0
说明: 说明: 循环语句时, (1)执行 )执行while循环语句时,如果表达式的值第一次 循环语句时 计算就等于0,则循环体一次也不执行。 计算就等于 ,则循环体一次也不执行。 循环结束执行: (2)发生下列情况之一时,while循环结束执行: )发生下列情况之一时, 循环结束执行 • 表达式的值为 ; 表达式的值为0; • 循环体内遇到 循环体内遇到break语句; 语句; 语句 • 循环体内遇到 循环体内遇到goto 语句,且与该 语句,且与该goto语句配合使 语句配合使 用的标号所指定的语句在本循环体外; 用的标号所指定的语句在本循环体外; • 循环体内遇到 循环体内遇到return语句,此时退出 语句,此时退出while循环后, 循环后, 语句 循环后 执行的流程从包含该while语句的函数返回到调用 执行的流程从包含该 语句的函数返回到调用 函数。 函数。
100
例6.2 求 n main( ) n=1 { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf(“%d”,sum); }

i=1,sum=0 零 i<=100? 非零 sum=sum+i i=i+1
说明: 说明: 1)循环体中如果包含一个以上的语句,应该用 )循环体中如果包含一个以上的语句, 花括号括起来; 花括号括起来; 2)在循环体中应有使循环趋于结束的语句,避 )在循环体中应有使循环趋于结束的语句, 免进入死循环;在本例中, 免进入死循环;在本例中,设置循环条件为 i<100,然后语句中有出 ,这样就不会出 ,然后语句中有出i++, 现死循环。 现死循环

修——C语言程序设计(第三版)第六章-谭浩强

修——C语言程序设计(第三版)第六章-谭浩强

Computer↙ (输入) 其作用是每读入一个字符后立即输出该字符,直到输入 Computer (输出) 一个“换行”为止。请注意,从终端键盘向计算机输入 时,是在按Enter键以后才将一批数据一起送到内存缓 冲区中去的。不是从终端键盘敲入一个字符马上输出一 个字符,而是按Enter键后数据送入内存缓冲区,然 后每次从缓冲区读一个字符,在输出该字符。
循环的嵌套
(4) while( ) (5) for(;;) {… {… do{…} while( ) while( ) { } {…} … } } (6) do {…
for(;;){ } … } while( )
流程的转移控制
• 转移语句用于改变程序的流向。 • C语言提供了4种转移语句: goto语句,break语句,cotinue语句,return语 句
注意: 当for语句中的各表达式省略时,分号间隔符不能少; 在循环体中应实现循环变量的增减和循环条件的判断, 否则成为死循环。
用for 语句实现循环 说明:
(6) 表达式1和表达式3可以是一个简单的表达式,也可 以是逗号表达式。
在逗号表达式内按自左向右顺序求解,整个逗号表 达式的值为其中最右边的表达式的值。
例1:输入3个整数,从小到大排列输出
(way2) #include<stdio.h> void main() {int a, b, c, max, min; scanf(“%d%d%d”, &a, &b, &c); if (a>b) {max=a; min=b;} else {max=b; min =a;} if (max<c) max=c; else if (min<c) min=c; printf (“%d, %d, %d \n”, min, a+b+c-max-min, max); }

第六章 循环控制

第六章 循环控制
6.8.1 break 语句
语法: 语法 break ; 功能:终止包含该语句的最内 功能 层循环。 · 不能用于循环语句和switch语 句之外的任何其他语句。 main( ) { int n; for(n=1;n<=10;n++) { if(n%3= =0) break ; printf(“%6d”,n); } }
while( ) { do { ··· } while( ); } while循环体嵌套 循环体嵌套 循环体 do_while循环 循环 do { for( ; ; ) { ··· } }while( ); do_while循环体嵌套for循环 循环体嵌套 循环 循环体嵌套
19
break和continue语句 6.8 break和continue语句
(4)for 语句的循环体还可为另一个循环语句 例如:
for(i=1;i<=2;i++) for(j=1;j<=2;j++) { printf(“%3d”,i+j); printf(“\n”); } output: 2 3 3 4
for(i=1;i<=2;i++) { for(j=1;j<=2;j++) printf(“%3d”,i+j); printf(“\n”); } output: 2 3 3 4
while(表达式)语句 (表达式) 执行过程: 执行过程: 0 表达式 非0 语句
∑n
n =1
i=1
否 i<=100? 是 sum=sum+i i=i+1
先判断循环条件, 先判断循环条件,后执行循环 体语句
4
main()

C语言第6章 循环控制结构

C语言第6章 循环控制结构

n!
直到最后一项的绝对值小于1e-5
累加项的前后项之间无关
寻找累加项的计算通式
fac = fac * n; term = 1.0 / fac; e = e + term; e初值为1.0
累加项的前后项之间有关
利用前项计算后项
term = term / n; e = e + term; e,term初值为1.0
14/95
start
i ← 0, sum ← 0
false
i< 5
true
input n
sum ← sum + n
i++
output sum
C语言程序设计
end
第6章 循环控制结构
for循环语句
循环次数已知,计数控制 int i, sum, n; sum = 0; for (i=0; i<5; i++) {
第6章 循环控制结构
例5.4 只猜一次
magic = rand()%100 + 1; /*模拟计算机想一个[1,100]之间的数magic*/
怎样模拟计算机 想一个数呢?
产生[a,a+b-1] 之间的随机数
magic = rand()%b + a;
C语言程序设计
35/95
#include <stdlib.h>
#include <stdio.h>
main()
{
int magic; int guess;
/*计算机"想"的数*/ /*人猜的数*/
end
第6章 循环控制结构
n1
2
n2

C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案Revised by Chen Zhen in 2021C程序设计(第四版)(谭浩强)第一章课后习题答案#include<>代码均调试成功,若有失误大多不是代码问题.自已找找.int main(){printf("Welcome to \n");return 0; }#include<>int main(){int a,b,sum;a=5;b=4;sum=a+b;printf("The sum is %d .\n",sum);return 0;}P008 调用函数比较两个数的大小.#include<>int main(){int max(int x,int y); int a,b,c;scanf("%d,%d",&a,&b); c=max(a,b); printf("The max is %d .\n",c);return 0;}int max(int x,int y) {int z; if (x>y)z=x;elsez=y;return(z); }P015 三个数的大小.(数字0表示课后练习题)#include<>int main(){int a,b,c,d; int max(int x , int y , int z); printf("Please input 3 numbers :\n");scanf("%d %d %d",&a,&b,&c);d=max(a,b,c); printf("The max is :%d .\n",d); }int max(int x , int y , int z){int m;if (x>y && x>z) m=x;if (y>x && y>z)m=y;if (z>y && z>x)m=z;return (m); }C程序设计(第四版)(谭浩强)第2章课后习题答案算法——程序的灵魂P017 计算机1-5相乘的积.#include<>int main(){int i,s=1; for(i=1;i<6;i++) {s=s*i; n",s);return 0;}#include<> int main(){int i,s=1; for(i=1;i<12;i++) 可以是i=i+2{if(i%2!=0) s=s*i;elsecontinue; }printf("The sum is %d .\n",s);return 0;}暂时没法做.年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是天(目前)。

c语言(第六章循环控制)

c语言(第六章循环控制)
%ld\n” , m, n, b); getch();
}
§6.4 do-while语句
§一般形式: do 语句 while (表达式) ; §特点:
“直到型”循环结构。 先执行一次“语句”,后判“表达式”,当 “表达式”非0,再执行“语句”,直到“表 达式”为0,循环结束。
语句 非0
语 句
直到P为假
5. 表达式2也可以省略,此时,系统不再判断循 环条件,认为表达式2的值始终为真。即循环 条件始终成立。循环将出现死循环,程序设 计者必须设法保证循环能正常结束。
例、sum=0; for(i=1; ;i++) sum+=i; 或:sum=0; i=1; for( ; ; ) sum+=i; i=1; sum=0; for( ; ; ) { sum+=i; i++; if (i>100) break; }
i=1,sum=0 i<=100 真 sum=sum+i i=i+1 假
[例6.4]任意输入两个正整数,求它们的最 n, r, a, b; printf (“input m, n:”); scanf (“%ld%ld”, &m, &n); if (m>n) {a = m; b = n;} else {a = n; b = m;} r = a%b; while (r != 0) { a = b; b = r ; r = a%b ;} printf(“the greatest common divisor of %ld and %ld is
“表达式2”,循环条件(i<=100)。
for (i=1;i<=100;i++) sum = sum + i;

谭浩强 C语言程序设计教程(由曾怡视频修改) 第6章 循环结构程序设计

谭浩强 C语言程序设计教程(由曾怡视频修改)   第6章 循环结构程序设计
第6章 循环结构程序设计
循环就是在满足一定条件时,重复执行一 段程序
•概述 •循环结构控制语句 (if-goto 、while、do-while、for) •几种循环的比较 •循环的嵌套 •break语句与continue语句
5.1 概述
实现循环的四种语句:
1. 用goto语句和if语句构成循环;不提倡! 2. 用while语句;
for ( ; k<=3;k++) s=s+k;
2. 表达式1省略时,不判断循环条件,将成为“死循 环”,需要在循环体中引入break语句以推出循环 。 3. 表达式1省略时,循环体内应有使循环条件改变的 语句。 如: for (k=1; k<=3;) {s=s+k; k++;
4. 同时省略表达式1和表达式3,只有表达式2,此时 相当于while语句。 如: k=1; k=1; for (;k<=3;) while (k<=3) {s=s+k; {s=s+k; k++; k++; } } 5. 表达式2一般是关系表达式或逻辑表达式,但也可 以是数值表达式或字符表达式,只要其值不等于0 就执行循环体。 如: for (k=1;k-4;k++) s=s+k; 仅当k的值等于4时终止循环,k-4是数值表达式。
读程序
/* 文件名:ex060011.cpp */ # include <stdio.h> int main (void) { int k=1,s=0,n; printf(―enter n:‖) scanf(―%d‖,n); while(k<=n) {s+=k; k++; } printf(―sum is %d.\n", s); return 0; } /* 文件名:ex060012.cpp */ # include <stdio.h> int main (void) { int k=1,t=1,n; printf(―enter n:‖) scanf(―%d‖,n); while(k<=n) {t*=k; k++; } printf(―n!= %d.\n", t); return 0; }

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。

解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。

C语言程序设计第三版谭浩强课后习题答案完整版

C语言程序设计第三版谭浩强课后习题答案完整版

C语言程序设计第三版谭浩强课后习题答案完整版第一章1.5请参照本章例题,编写一个C程序,输出以下信息:Very Good!解:mian(){printf(“**************************”); printf(“\n”);printf(“Very Good!\n”);printf(“\n”);printf(“**************************”); 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。

解:mian(){int a,b,c,max;printf(“请输入三个数a,b,c:\n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max<b)max=b;if(max<c) max=c;printf(“最大数为:“%d”,max);第三章3.6写出以下程序运行的结果。

main(){charc1=’a’,c2=’b’,c3=’c’,c4=’\10 1’,c5=’\116’;printf(“a%cb%c\tc%c\tabc\n”,c1,c2 ,c3);printf(“\t\b%c %c”,c4,c5);解:aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabcAㄩN3.7 要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。

因此,"China"应译为"Glmre"。

请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

解:#include <stdio.h>main(){ char c1=’C’,c2=’h’,c3=’i’,c4=’n’, c5=’a’;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);运行结果:密码是Glmre3.9求下面算术表达式的值。

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。

先把N个⾃然数按次序排列起来。

1不是质数,也不是合数,要划去。

第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。

2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。

3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。

这样⼀直做下去,就会把不超过N 的全部合数都筛掉,留下的就是不超过N的全部质数。

因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。

(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。

)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。

c程序设计 谭浩强 第6章实例

c程序设计 谭浩强 第6章实例

第六章
#include <stdio.h> #include <stdlib.h> #include <time.h> main() {int ia,ib,ic,ires; char ch,cord; randomize(); do{ 产生两个一*/ ia=random(9); /*产生两个一 产生两个一 ib=random(9);/*位的随机整数 位的随机整数*/ 位的随机整数 if(rand()%2) {ch='-'; ic=ia-ib; } 计算机计算结果*/ else{ ch='+'; ic=ia+ib;} /*计算机计算结果 计算机计算结果 printf("\n%d%c%d=",ia,ch,ib); /*显示运算题目 显示运算题目*/ 显示运算题目 scanf("%d",&ires); /*接收学生答案 接收学生答案*/ 接收学生答案
15
12、交通流量的统计 、
读入信号sig 读入信号
为进行交通流量的统计调 y 查,在路边设置了一个车辆探 sig==0 测器。 测器。探测信号用线路连接到 计算机。当有车辆通过时, 计算机。当有车辆通过时,探 y 测器传送一个数字信号1给计算 测器传送一个数字信号 给计算 sig==1 机,而且探测器中有一个计时 nums++ 器,每一秒钟发出一个数字信 给计算机。 号2给计算机。该计时器从开始 给计算机 seconds++ 探测时计时, 探测时计时,探测结束时探测 器传送一个数字信号0给计算机 给计算机。 器传送一个数字信号 给计算机。 读入信号sig 读入信号 编写程序读入这一系列信号, 编写程序读入这一系列信号, 并计算输出统计调查的时间以 及在这个时间内通过的车辆数。 及在这个时间内通过的车辆数。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}
printf("%d",sum);
}
11.10.2020 11.10.2020
C语言程序设计
循环条件
sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 循环终值
循环体
第6 章循环控制
C语言程序设计
例 从键盘输入一组数据,以0结束输入,求数据和
第6 章循环控制
C语言程序设计
说明: ❖for语句中expr1, expr2 ,expr3 类型任意,都可省略
,但分号;不可省
❖无限循环: for(;;)
❖for语句可以转换成while结构
100
例 用for循环求 n n 1
#include <stdio.h>
main() { int i,sum=0;
scanf("%d",&i); do { sum+=i;
i++; }while(i<=10); printf("%d",sum); }
#include <stdio.h> void main() { int i,sum=0;
scanf("%d",&i); while(i<=10) { sum+=i;
}
11.10.2020 11.10.2020
第6 章循环控制
while语句
一般形式:
执行流程:
C语言程序设计
while(表达式) 循环体语句;
while
假(0) 表达式
真(非0) 循环体
11.10.2020 11.10.2020
第6 章循环控制
C语言程序设计
特点:先判断表达式,后执行循环体 说明:
#include <stdio.h> void main() { int i,sum=0;
i=1; while(i<=100) { sum=sum+i;
i++; } printf("%d",sum); }
11.10.2020 11.10.2020
C语言程序设计 循环条件
循环终值 循环体
第6 章循环控制
goto语句及用goto构成循环
❖goto语句一般格式:
C语言程序设计
11.10.2020 11.10.2020
goto 语句标号;
….….. 标号:语句;
第6 章循环控制
C语言程序设计
C语言谭浩强版第6章循环控制
功能:无条件转移语句 说明:
❖不能用整数作标号 ❖只能出现在goto所在函数内,且唯一 ❖只能加在可执行语句前面 ❖限制使用goto语句
for(i=1;i<=100;i++) sum+=i;
printf("%d",sum); }
例 显示1~10的平方
C语言程序设计
#include <stdio.h> void main() { int i=1;
while(i<=10) { printf("%d*%d=%d\n",i,i,i*i);
i++; } }
运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100
11.10.2020 11.10.2020
第6 章循环控制
do~while语句
一般形式:
执行流程:
do 循环体语句; while(表达式);
C语言程序设计
11.10.2020 11.10.2020
do
循环体
真(非0)
while 表达式
假(0)
第6 章循环控制
C语言程序设计
特点:先执行循环体,后判断表达式 说明:
❖至少执行一次循环体 ❖do~while可转化成while结构
循环体
假(0) expr
真(非0) 循环体
while循环
11.10.2020 11.10.2020
第6 章循环控制 100 例 用do~while循环求 n n 1
#include <stdio.h> void main() { int i,sum=0;
i=1; do { sum+=i;
i++; }while(i<=100); printf("%d",sum); }
11.10.2020 11.10.2020
C语言程序设计
第6 章循环控制
例 while和do~while比较
C语言程序设计
#include <stdio.h> void main() { int i,sum=0;
#include <stdio.h>
void main()
{
int number,sum=0;
read_loop: scanf("%d",&number);
if(!number) goto print_sum;
sum+=number;
goto read_loop;
print_sum: printf("The total sum is %d\n",sum);
第6 章循环控制
C语言程序设计
C语言谭浩强版第6章循环控制
掌握循环的概念和分类 掌握while循环 掌握do while循环 掌握for循环 掌握循环的嵌套 掌握break和continue的用法 能够设计复杂的程序
11.10.2020 11.10.2020
第6 章循环控制
概述
C语言可实现循环的语句: ❖用goto 和 if 构成循环 ❖while 语句 ❖do ~ while 语句 ❖for 语句
11.10.2020 11.10.2020
第6 章循环控制 100
例 用if 和goto语句构成循环,求
n
n 1
#include <stdio.h>
void main()
{ int i,sum=0;
循环初值
i=1;
loop: if(i<=100)
{ sum+=i;
i++;
循环变量增值
goto loop;
i++; } printf("%d",sum); }
11.10.2020 11.10.2020
第6 章循expr1] ;[ expr2] ;[ expr3])
一般形式:
循环体语句;
执行流程:
for expr1
假(0) expr2
真(非0)
循环体
expr3
11.10.2020 11.10.2020
❖循环体有可能一次也不执行 ❖循环体可为任意类型语句 ❖下列情况,退出while循环
条件表达式不成立(为零) 循环体内遇break,return,goto
❖无限循环: while(1)
循环体;
11.10.2020 11.10.2020
第6 章循环控制
100
例 用while循环求
n
n 1
循环初值 循环变量增值
相关文档
最新文档