C语言循环例题
1.
//输出a和b之间的所有素数, 10个素数为一行输出
#include
#include
#include
int panDuanSuShu(int x) //判断x是否是素数
{
int i,m,flag; //flag为1表示是素数,flag为0表示不是素数 m=(int)sqrt(x);
if(x==2)
{ flag=1;}
else
{
for(i=2;i<=m;i++)
{
if(x%i==0)
{
flag=0;
break;
}
}
if(i>m)
{ flag=1; }
}
return flag;
}
int shuChuSuShu(int a,int b)
{
int i,k=0;//i是循环变量,k表示已经输出了k个素数
for(i=a;i<=b;i++)
{
if(panDuanSuShu(i)==1)
{
printf("%6d",i);
k++;
if(k%10==0)
{ printf("\n");}
}
}
printf("\n");
return k;
}
int main()
{
int a,b,t;
while(a<2||b<2)
{
printf("重新输入n和m:");
scanf("%d%d",&a,&b);
}
if(a>b)
{ t=a;a=b;b=t; }
printf("%d和%d之间共有%d个素数",a,b,shuChuSuShu(a,b));
printf("\n\n");
return 0;
}
2.
//用户输入2个数,输出这2个数之间所有的超素数
//超素数(质数)的概念:7193是素数,719是素数,71是素数,7是素数,则7193是素数#include
#include
#include
int isPrime(int n)//判断某数是否是素数
{
int i,f,m=(int)sqrt(n);
if(n==1) f=0;
else
{
for(i=2;i<=m;i++)
{
if(n%i==0)
break;
}
if(i>m) f=1;
else f=0;
}
return f;
}
int supperPrime(int n)//判断某数是否是超素数
{
int t=n;
while(t>0)
{
if(isPrime(t)==1)
t=t/10;
else
break;
}
}
void printSupperPrime(int a,int b)//输出a到b之间所有的超素数{
int i,m=0;
for(i=a;i<=b;i++)
{
if(supperPrime(i))
{ printf("%8d",i);
m++;
if(m%5==0)
printf("\n");
}
}
printf("\n");
}
int main()
{
int a,b,t;
printf("input a,b:");
scanf("%d%d",&a,&b);
while(a<2 || b<2)
{
printf("input a,b:");
scanf("%d%d",&a,&b);
}
if(a>b) {t=a;a=b;b=t;}
printSupperPrime(a,b);
printf("\n");
//system("pause");
return 0;
}
3.
//满足a*a+b*b==c*c的a,b,c三个数,称为勾股数
//编程输出100以内的所有勾股数
#include
#include
int gouGuShu()
{
int x=0;
for(int a=1;a<=100;a++)
for(int b=a;b<=100;b++)
for(int c=b;c<=100;c++)
if(x%4==0)
printf("\n");
printf("%4d%4d%4d ",a,b,c);
x++;
}
return x;
}
int main()
{
printf("\n\n 100以内的勾股数共有:%d个。\n",gouGuShu());
// system("pause");
return 0;
}
4.
//有一堆桃子,第一天猴子吃掉桃子的一半又多吃1个,第二天猴子再吃掉桃子的一半又多吃一个//第10天只剩下1个桃子,问最初有多少个桃子
#include
#include
int houZiChiTaoZi()
{
int day=10,x1,x2=1;
while(day>1)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
return x1;
}
int main()
{
printf("最初桃子有%d个\n",houZiChiTaoZi());
//system("pause");
return 0;
}
5.
//由用户输入一个年份,再输入该年的元旦是星期几,再输入一个月份,则打印输出该月的日历。//例如:输入年份是2000年,输入元旦为星期6,输入月份为3,则输出:
//3月日一二三四五六
// 1 2 3 4
// 5 6 7 8 9 10 11
// 12 13 14 15 16 17 18
// 19 20 21 22 23 24 25
// 26 27 28 29 30 31
#include
int LeepYear(int y)//判断某年是否是闰年
{
if(y%4==0&&y%100!=0||y%400==0)
return 1;
else
return 0;
}
int HowManydays(int y,int m)//判断该月有多少天
{
int thisMonthDays;
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: thisMonthDays=31;break;
case 4:
case 6:
case 9:
case 11:thisMonthDays=30;break;
case 2: if(LeepYear(y)==1) thisMonthDays=29;
else thisMonthDays=28;
}
return thisMonthDays;
}
//whichWeek函数判断该月的1号是星期几
int whichWeek(int y,int m,int w) //w表示该年的元旦是星期几{
int febDay;//存放2月份有多少天
int days;//存放该月的1号距离元月1号有多少天
int thisWeek;//存放该月的1号是星期几
if(LeepYear(y))
{ febDay=29;}
else
{ febDay=28; }
switch(m)
{
case 1: days=0;break;
case 4: days=2*31+febDay;break;
case 5: days=2*31+30+febDay;break;
case 6: days=3*31+30+febDay;break;
case 7: days=3*31+2*30+febDay;break;
case 8: days=4*31+2*30+febDay;break;
case 9: days=5*31+2*30+febDay;break;
case 10: days=5*31+3*30+febDay;break;
case 11:days=6*31+3*30+febDay;break;
case 12:days=6*31+4*30+febDay;break;
}
thisWeek=(days+w)%7;
return thisWeek;
}
//shuChuRiLi函数的功能是输出日历
void shuChuRiLi(int year,int month,int week) //week表示该年的元旦是星期几{
int ThisMonthDay,ThisWeek,d,i;
ThisMonthDay=HowManydays(year,month);//计算这个月有多少天ThisWeek=whichWeek(year,month,week);//计算这个月的1号是星期几
printf("\n\n");
printf("%4d月日一二三四五六\n",month);
printf("%6c",' ');
d=1;
for(i=0;i printf("%6c",' '); for(i=ThisWeek;i<=6;i++,d++) //输出1号所在的那1行日历 printf("%6d",d); while(d<=ThisMonthDay) { if(i%7==0) { printf("\n"); printf("%6c",' '); } printf("%6d",d); d++; i++; } printf("\n\n"); } int main() { int year=-20,month=13,week=9; printf("请输入年份:"); scanf("%d",&year); } while(month>12||month<1) { printf("请输入月份:"); scanf("%d",&month); } while(week>7||week<1) { printf("该年的元旦是星期几?"); scanf("%d",&week); } shuChuRiLi(year,month,week); system("pause"); return 0; } 6. //输出三种形式的九九乘法口诀表 #include #include void chengFaKouJueBiao1() { int i,j; printf(" *|"); for(i=1;i<=9;i++) printf("%4d",i); printf("\n"); for(i=1;i<=40;i++) printf("-"); printf("\n"); for(i=1;i<=9;i++) { printf("%2d|",i); for(j=1;j<=9;j++) { printf("%4d",i*j); } printf("\n"); } printf("\n\n"); } void chengFaKouJueBiao2() { for(i=1;i<=9;i++) printf("%4d",i); printf("\n"); for(i=1;i<=9;i++) { printf("%2d",i); for(j=1;j<=i;j++) { printf("%4d",i*j); } printf("\n"); } printf("\n\n"); } void chengFaKouJueBiao3() { int i,j; printf("\n"); for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { printf("%d*%d=%-4d",i,j,i*j); } printf("\n"); } printf("\n\n"); } int main() { chengFaKouJueBiao1(); chengFaKouJueBiao2(); chengFaKouJueBiao3(); // system("pause"); return 0; } 7. //用户输入三角形的高度,输出由*构成的三角形。#include #include void shuChuSanJiaoXing(int n) { for(k=1;k<=n-h+1;k++) printf(" "); for(s=1;s<=2*h-1;s++) printf("*"); printf("\n"); } printf("\n\n"); } int main() { int n; printf("输入三角形的行数:"); scanf("%d",&n); while(n<2) { printf("输入三角形的行数:"); scanf("%d",&n); } shuChuSanJiaoXing(n); //system("pause"); return 0; } 8. //输出边长为n的空心菱形 #include #include void shuChuKongXinlingXing(int n) { int h,k,s; for(k=1;k<=n;k++) printf(" "); printf("*\n"); for(h=2;h<=n;h++) { for(k=1;k<=n-h+1;k++) printf(" "); printf("*"); for(k=1;k<=2*h-3;k++) printf(" "); printf("*"); printf("\n"); } for(k=1;k<=h+1;k++) printf(" "); printf("*"); for(k=1;k<=2*n-2*h-3;k++) printf(" "); printf("*"); printf("\n"); } for(k=1;k<=n;k++) printf(" "); printf("*"); printf("\n\n"); } int main() { int n; printf("输入菱形的边长:"); scanf("%d",&n); while(n<2) { printf("菱形边长必须大于2,请重新输入菱形的边长:"); scanf("%d",&n); } shuChuKongXinlingXing(n); // system("pause"); return 0; } 9. #include #include //输出所有三位的水仙花数 void sanWeiShuiXianHuaShu() { int i,a,b,c; for(i=100;i<=999;i++) { a=i/100; b=i/10%10; // b=i%100/10; c=i%10; if(i==a*a*a+b*b*b+c*c*c) printf("%6d",i); //输出所有四位的水仙花数 void siWeiShuiXianHuaShu() { int i,a,b,c,d; for(i=1000;i<=9999;i++) { a=i/1000; b=i/100%10; c=i/10%10; d=i%10; if(i==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d) printf("%6d",i); } } int main() { printf("三位的水仙花数有:\n"); sanWeiShuiXianHuaShu(); printf("\n\n"); printf("四位的水仙花数有:\n"); siWeiShuiXianHuaShu(); printf("\n\n"); //system("pause"); return 0; } 10. //一个整数的所有因子之和等于该数,则这个数是完数。//输出1000以内的完数及其因子 #include #include void wanShu() { int i,k,sum; for(i=1;i<=1000;i++) { sum=0; for(k=1;k<=i-1;k++) { if(i%k==0) sum=sum+k; } if(sum==i) { printf("%5d:its factors are ",i); for(k=1;k<=i-1;k++) { printf("\n"); } } } int main() { wanShu(); printf("\n"); system("pause"); return 0; } 11. //有6个嫌疑人,案件分析如下: //1.A,B至少有一人作案 //2.A,E,F中至少有两人作案 //3.A,D不可能是同案犯 //4.B,C或同时作案,或与本案无关 //5.C,D中有且仅有一人作案 //6.如果D没作案,则E也没作案。 //假设案件分析正确,请编程将作案人找出来 //分析: //1. x1=A||B //2. x2=A&&E || A&&F || E&&F //3. x3=!(A&&D) //4. x4=B&&C || !B&&!C //5. x5=C&&!D || !C&&D //6. x6=!D→!E 等价于 x6=D||!E //令X=x1+x2+x3+x4+x5+x6为6的结果就是答案#include #include void zhenTanDuanAn() { int a,b,c,d,e,f,x1,x2,x3,x4,x5,x6,x; for(a=0;a<=1;a++) for(b=0;b<=1;b++) for(c=0;c<=1;c++) for(d=0;d<=1;d++) for(e=0;e<=1;e++) for(f=0;f<=1;f++) { x1=a||b; x2=a&&e||a&&f||e&&f; x3=!(a&&d); x6=d||!e; x=x1+x2+x3+x4+x5+x6; if(x==6) { printf("A%s罪犯,B%s罪犯,C%s罪犯,D%s罪犯,E%s罪犯,F%s罪犯\n\n", a==1?"是":"不是",b==1?"是":"不是",c==1?"是":"不是", d==1?"是":"不是",e==1?"是":"不是",f==1?"是":"不是"); //printf("A=%d,B=%d,C=%d,D=%d,E=%d,F=%d\n",a,b,c,d,e,f); } } } int main() { zhenTanDuanAn(); //system("pause"); return 0; } 12. //一学校有4位学生中的1位做了好事不留名, //表扬信来了之后,校长问这4位是谁做了好事。 //A说:不是我;B说:是C;C说:是D;D说:他胡说。 //已知3个人说的是真话,一个人说的是假话。 //请编程找出做好事的人。 #include #include void shuiZuoLeHaoShi() { int k,f=0;//f是找到的标记,f=0表示还没找到 for(k=1;k<=4;k++)//k=1表示第1个人做了好事,k=3 表示第3个人做了好事... { //如果4句话中有3句话为真,则输出做好事者 if(((k!=1)+(k==3)+(k==4)+(k!=4))==3) { printf("做好事者为%c",char(64+k)); f=1;//f=1表示找到了 } } if(f!=1)//如果循环结束后没有找到 printf("找不到!\n"); } int main() { shuiZuoLeHaoShi(); return 0; } 13. //4人谈论4湖 //A说:洞庭湖(d)最大,洪泽湖h最小,鄱阳湖b第三 //B说:洪泽湖h最大,洞庭湖d最小,鄱阳湖b第二,太湖t第三 //C说:洪泽湖h最小,洞庭湖d第三 //D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 //4个人每个人仅答对了一个。 //编程给出4个湖从大到小的顺序。 //分析: //A=(d==1)+(h==4)+(b==3) //B=(h==1)+(d==4)+(b==2)+(t==3) //C=(h==4)+(d==3) //D=(b==1)+(t==4)+(h==2)+(d==3) #include #include void panDuanSiDaDanShuiHu() { int b,d,h,t,A,B,C,D; for(b=1;b<=4;b++) for(d=1;d<=4;d++) for(h=1;h<=4;h++) for(t=1;t<=4;t++) { A=(d==1)+(h==4)+(b==3); B=(h==1)+(d==4)+(b==2)+(t==3); C=(h==4)+(d==3); D=(b==1)+(t==4)+(h==2)+(d==3); if(A==1&&B==1&&C==1&&D==1&&b!=d&&b!=h&&b!=t&&d!=h&&d!=t&&h!=t) printf("洪泽湖第%d\n鄱阳湖第%d\n太湖第%d\n洞庭湖第%d\n\n",h,b,t,d); } } int main() { panDuanSiDaDanShuiHu(); // system("pause"); return 0; } 14. //猜一个1-100之间的数并以最快的速度根据提示猜出所产生的随机数 #include void caiShu() { char ch; clock_t start,end; //clock_t数据类型用来记录CPU的运行单元时间(clocks数) double var; //var存放玩游戏所用的秒数 int i,guess; //i存放计算机产生的随机数,guess存放玩家猜的数 srand(time(0)); printf("想测测你的智力么?来试一下?(Y/N)\n"); ch=getchar(); while(ch=='y'||ch=='Y') { i=rand()%100+1; printf("\n请猜一个1-100之间的数并以最快的速度根据提示猜出所产生的随机数:\n"); start=clock(); //clocks()函数,返回类型clock_t,返回的是从程序开始,到你掉用clock()函数这段时间的clocks scanf("%d",&guess); while(guess!=i) { if(guess { printf("大点!\n"); } else { printf("小点!\n"); } scanf("%d",&guess); } end=clock(); var=(double)(end-start)/CLOCKS_PER_SEC; //end-start是段时间的clocks,除以系统常量CLOCKS_PER_SEC 才能得到秒数printf("\1\1:你花了%6.3f秒\n",var); if(var<15) printf("\1\1 太棒了!你很聪明! \1\1\n\n"); else if(var<25) printf("\1\1 还可以啦,继续努力! \1\1\n\n"); else printf("\1\1 你好笨呐,再来…… \1\1\n\n"); printf("\n 再来一次吗?(\"y\".or.\"n\")\n"); scanf("%*c%c",&ch); } } int main() { caiShu(); 15. //四则运算游戏 #include #include #include #include #define XiaoShu 1e-2 //让XiaoShu表示一个很小的数,比如1的-2次方。 void siZeYunSuanYouXi() { int x,y,f,s,n=0,w=0; //n是总游戏次数,w是赢的次数 char q='y'; double d; srand(time(0)); while(q=='y'||q=='Y') { x=rand()%1000; //随机产生第一个操作数 y=rand()%999+1;//随机产生第二个操作数 f=rand()%3+1; //随机产生运算符号 switch(f) { case 1:d=x+y;printf("%d+%d=",x,y);break; case 2:d=x-y;printf("%d-%d=",x,y);break; case 3:d=x*y;printf("%d*%d=",x,y);break; case 4:d=(double)x/y;printf("%d/%d=",x,y);break; } scanf("%d",&s); n++; if(fabs(d-s)< XiaoShu) { printf("正确!\1\n");w++;} else { printf("错! 正确答案是:%-12.2lf\n",d);} printf("继续吗?(y/n)\n"); scanf(" %c",&q); } printf("\n总结:共计算%d次,赢%d次,获胜率为%.2lf%%\n\n",n,w,(double)w/n*100); } int main() { siZeYunSuanYouXi(); system("pause"); return 0; 循环习题集锦 一.选择题 1.for(i=0;i<10;i++);结束后,i的值是;(10) A 9 B 10 C 11 D 12 2.下面程序的循环次数是:(D) int k=0; while(k<10) {if(k<1) continue; if(k==5) break; k++; } A. 5 B 6 C 4 D 死循环,不能确定循环次数3.下面程序的输出结果是(10) main() { int s,k; for(s=1,k=2;k<5;k++) s+=k; printf(“%d\n”,s); } A 1 B 9 C 10 D 15 4.要使下面程序输出10个整数,则在下画线处填入正确的数是:(c) for(i=0;i<= ;) printf(“%d\n”,i+=2); A 9 B 10 C 18 D 20 5.运行下面程序:(B) main() { int i=10,j=0; do { j=j+i; i--; }while(i>5); printf(“%d\n”,j); } 输出结果是: A 45 B 40 C 34 D 55 6.运行下面程序 #include “stdio.h” main() { int k=0,a=1; while(k<10) { for( ; ;) { if((k%10)==0) break; else k--; } k+=11; a+=k; } printf(“%d %d\n”,k,a); } 则输出的结果是(C) A 21 32 B 21 33 C 11 12 D 10 11 7.以下叙述正确的是:(D) A.do---while语句构成的循环不能用其他语句构成的循环来代替。B.do---while语句构成的循环只能用break语句退出。 C.用do---while语句构成的循环,在while 后的表达式为非零时结束循环。 D.用do---while语句构成的循环,在while后的表达式为零时结束循环。 8.有如下程序: main() { int x=3; do{ 1. //输出a和b之间的所有素数, 10个素数为一行输出 #include while(a<2||b<2) { printf("重新输入n和m:"); scanf("%d%d",&a,&b); } if(a>b) { t=a;a=b;b=t; } printf("%d和%d之间共有%d个素数",a,b,shuChuSuShu(a,b)); printf("\n\n"); return 0; } 2. //用户输入2个数,输出这2个数之间所有的超素数 //超素数(质数)的概念:7193是素数,719是素数,71是素数,7是素数,则7193是素数#include 第5章循环结构程序设计 练习题 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 第5章循环结构程序设计35 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是_B___。 #include 第 5 章循环结构程序 设计 练习题 1.单项选择题 ( 1)语句 while (!e);中的条件!e等价于A。 A. e==0 B. e!=1 C. e!=0 D. ~e ( 2)下面有关for循环的正确描述是D。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在 for循环中,不能用break 语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中D。 A.不能使用do-while语句构成的循环 B. do-while 语句构成的循环必须用break 语句才能退出 C. do-while 语句构成的循环,当while 语句中的表达式值为非零时结束循环 D. do-while 语句构成的循环,当while 语句中的表达式值为零时结束循环 ( 4) C 语言中 while 和 do-while 循环的主要区别是A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 ( 5)以下程序段C。 int x=-1; do { x=x*x; } while (!x); A.是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误( 6)下列语句段中不是死循环的是__C__。 A.i=100; while (1) { i=i%100+1; if (i==20) break; } B.for (i=1;;i++) sum=sum+1; C.k=0; do { ++k; } while (k<=0); D.s=3379; while (s++%2+3%2) s++; 5.2 练习题5 1. 单项选择题 (1)语句while (!e);中的条件!e等价于。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是____。 A. i=100; while (1) { i=i%100+1; if (i==20) break; 第5章循环结构程序设计35 } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是____。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是____。 #include 第5章循环结构程序设计 5.1基本知识点 ?while语句的使用格式和注意事项 ?do-while语句的使用格式和注意事项 ?for语句的使用格式和注意事项 ?break和continue语句在循环语句中的应用 ?循环结构的嵌套 ?使用goto语句实现循环结构 ?穷举法程序设计方法 ?迭代程序设计方法 5.2练习题5 1.单项选择题 (1)语句while(!e);中的条件!e等价于A。 A.e==0 B.e!=1 C.e!=0 D.~e (2)下面有关for循环的正确描述是D。 A.for循环只能用于循环次数已经确定的情况 B.for循环是先执行循环体语句,后判定表达式 C.在for循环中,不能用break语句跳出循环体 D.for循环体语句中,可以包含多条语句,但要用花括号括起来(3)C语言中D。 A.不能使用do-while语句构成的循环 B.do-while语句构成的循环必须用break语句才能退出 C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是A。 A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 (5)以下程序段C。 intx=-1; do { x=x*x; } while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误(6)下列语句段中不是死循环的是__C__。 A.i=100; while(1) { i=i%100+1; if(i==20)break; } B.for(i=1;;i++) sum=sum+1; C.k=0; do { ++k; }while(k<=0); D.s=3379; while(s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while(a) { if(b)continue; c; } A.while(a) B.while(c) {if(!b)c;} {if(!b)break;c;} C.while(c) D.while(a) 1、计算n的阶乘(n!),n的取值在1~10之间。分别使用while、do…while和for 语句实现。(三个程序) 给循环变量赋初值 循环条件 循环体 循环变量的增值 2、输入一行字符,分别统计输入了多少个 字母、数字、空格和其他字符。 3、假设函数f(x)=3x2+2x+1,试利用for循环语句分别求出1<=x<=9的f(1)~f(9)各函 数值。 4、有分数序列2/1,3/2,5/3,8/5,13/8, 21/13…求这个数列的前20项和。 (分析提示:每个分子等于前一个数据分子与分母的和,每个分母等于前一个数据的分 子) 5、输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。要求每一行显示5个数,并且统计一共有多少个整数能 被n整除。 6、下面程序的功能是从键盘上输入若干学 生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。 main() { float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while( ①) { if(x>amax) amax=x; if( ②) amin=x; scanf("%f",&x); } printf("\namax=%f\namin=%f\n",amax,a min); } 7、使用循环语句输出以下图形 8、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。 8、一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问 一百只鸡中公鸡、母鸡、小鸡各多少)。 分析: 这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为 三元一次方程组: 100=x*5+y*3+z/3 100=x+y+z 这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围: 1) x的取值范围为1~20 2) y的取值范围为1~33 3) z的取值范围为3~99,步长为3 对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。 2.3顺序结构程序设计 2.3.1 要点导读 1.printf() 与scanf()语句。 printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于stdio.h库文件中。 2.字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。 2.3.2 经典例题分析 1.下列程序运行后输出的结果是。 #include { int a=732; printf(“%d\n”,a); printf(“%2d\n”,a); printf(“%10d\n”,a); printf(“%-10d\n”,a); } 分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m 为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。 答案: 732 732 □□□□□□□732 /*□表示空格*/ 732□□□□□□□ 3.已知char a=‘\103’;则语句printf(“%3d”,a);执行后的输出结果为(□表示空格) 。 A)□67 B)’c’C)67□D)103 分析:’\103’是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf(“%3d”,a);把’\103’转换为十进制数输出,结果占3列。但67占2列,小于要求的3列,所以左补空格,即□67。 答案:C。 4.下列程序运行后结果是。 #include 第5章循环结构程序设计 基本知识点 ? while语句的使用格式和注意事项 ? do-while语句的使用格式和注意事项 ? for语句的使用格式和注意事项 ? break和continue语句在循环语句中的应用 ? 循环结构的嵌套 ? 使用goto语句实现循环结构 ? 穷举法程序设计方法 ? 迭代程序设计方法 练习题5 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B. for (i=1;;i++) sum=sum+1; C. k=0; do { ++k; } while (k<=0); D. s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; }(8)以下程序的输出结果是_B___。 实验五循环结构实验——for循环 目的和要求: 1、掌握循环结构程序设计的方法 2、掌握简单循环程序设计方法 3、掌握for循环程序设计 实验题目: 1、求1+2+3+……+100的和,并输出。 #include #include { int a,b,c=1; printf ("请输入一个数(正整数)\n"); scanf ("%d",&a); if (a==1) printf ("NO\n"); else { if (a==2) printf ("YES\n"); else { for(b=2;b<=(a-1);b++) { if(a%b==0) { c=0; break; } } if (c==1) printf ("YES\n"); else printf ("NO\n"); } } } 1、 // 输出 a 与 b 之间的所有素数, 10 个素数为一行输出#include 一、选择题 1、语句while(!e);中的条件!e 等价于( )。 A) e==0 B) e!=1 C) e!=0 D) ~e 2、以下for循环是( )。 for(x=0,y=0;(y!=123) && (x<4);x++) A) 无限循环B) 循环次数不定 C) 执行4次D) 执行3次 3、对于for(表达式1;;表达式3)可理解为( )。 A) for(表达式1;0;表达式3) B) for(表达式1;1;表达式3) C) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3) 4、C语言中while 和do-while 循环的主要区别是( )。 A) do-while的循环体至少无条件执行一次 B) while 的循环控制条件比do-while 的循环控制条件严格 C) do-while 允许从外部转到循环体内 D) do-while 的循环体不能是复合语句 5、下面关于for循环的正确描述是( )。 A) for循环只能用于循环次数已经确定的情况 B) for循环的循环体可以是一个复合语句 C) 在for循环中,不能用break语句跳出循环体 D) for循环的循环体不能是一个空语句 6、若i为整型变量,则以下循环语句的循环次数是( )。for(i=2;i==0;) printf("%d",i--); A) 无限次B) 0次 C) 1次D) 2次 7、以下叙述正确的是( )。 A) continue语句的作用是结束整个循环的执行 B) 只能在循环体内和switch语句体内使用break语句 C) 在循环体内使用break语句或continue语句的作用相同 D) 从多层循环嵌套中退出时,只能使用goto语句 8、对下面程序段,描述正确的是( )。 for(t=1;t<=100;t++) { scanf("%d",&x); if (x<0) continue; printf("%d\n",t); } A) 当x<0时,整个循环结束 B) 当x>=0时,什么也不输出 C) printf函数永远也不执行 D) 最多允许输出100个非负整数 循环控制练习题 1.设有程序段int k=10; while (k=0) k=k-1; 则下面描述中正确的是() A while循环执行10次 B 循环是无限循环 C 循环体语句一次也不执行 D 循环体语句执行一次 2.设有以下程序段int x=0,s=0; while(!x!=0)s+=++x;printf("%d",s) ;则() A 运行程序段后输出0 B 运行程序段后输出1 C 程序段中的控制表达式是非法的 D 程序段执行无限次 3、语句while(!E);中的表达式!E特等价于() A、E==0B、E!=1C、E!=0D、E==1 4、下面程序段的执行结果是() a=1;b=2;c=2; while(a while(x<15) y++,x+=++y; printf("%d,%d",y,x); A、20,7 B、6,12 C、20,8 D 8,20 6、下面程序段的运行结果是() int n=0; while (n++<=2); printf("%d",n); A,2 B、3 C、4 D 有语法错误 7、设有程序段 t=0; while(printf("*")) {t++; if(t<3) break;}下面描述正确的是() A、其中循环控制表达式与0等价 B、其中循环控制表达式与’0‘等价 C 、其中循环表达式是不合法的 D、以上说法都不对 8、下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等的数时结束循环,请选择填空。 main() 顺序结构程序设计 2.3.1 要点导读 () 与scanf()语句。 printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于库文件中。 2.字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。 2.3.2 经典例题分析 1.下列程序运行后输出的结果是。 #include <> void main() { int a=0,b=0; a=10; b=20; printf(“a+b=%d”,a+b); } 分析:printf( )是输出函数,它的括号内由两部分组成: 1)控制字符串,是用双引号括起来的字符串,它包括两种信息: (1) 格式说明。由”%”和格式字符组成,如:%d、%f、%c 等。它的作用是将输出的数据转换成指定的格式输出。 (2) 普通字符。需要原样输出的字符。 2)”输出表列”是需要输出的一些数据,可以是表达式。 题目中a的值是10,b的值是20,在 printf(“a+b=%d”,a+b); 格式说明 中,”a+b= “是普通字符,需原样输出。输出表列是一个表达式,它的结果以整型输出。 答案:a+b=30。 2.下列程序运行后输出的结果是。 #include <> void main() { int a=732; printf(“%d\n”,a); printf(“%2d\n”,a); printf(“%10d\n”,a); printf(“%-10d\n”,a); } 分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。 C语言-for循环的嵌套题(含解析和答案) 第33、34课时for循环的嵌套 实验题一: 1、下面有关for循环的正确描述是: D A) for循环只能用于循环次数已经确定的情况 B) for循环是先执行循环体语句,后判断表达式 C) 在for循环中,不能用break语句跳出循环体 D) for循环的循环体语句中, 可以包含多条语句,但必须用花括号括起来 2、对for(表达式1;;表达式3)可理解为:B A) for(表达式1; 0;表达式3) B) for(表达式1;1;表达式3) C) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3) 3、若i为整型变量,则以下循环执行次数是:B for (i=2;2==0;) printf("%d",i-- ); A)无限次B) 0次C) 1 次D) 2次 4、以下for循环的执行次数是:C for (x=0,y=0; (y=123)&&(x<4); x++) ; A)是无限循环B)循环次数不定C)执行4次D)执行3次 成立,x++→x=2 第三次:(y=123)&&(2<4)成立,x++→x=3 第四次:(y=123)&&(3<4)成立,x++→x=4 第五次:(y=123)&&(4<4)不成立,退出循环。 5、以下不是无限循环的语句为:A A) for (y=0,x=1;x > ++y;x =i++) i=x ; B) for (;1; x++=i); C) while (1) {x ++;} D) for(i=10;1 ;i--) sum+=i; 6、下面程序段的运行结果是:C for (y=1;y<10;) y=((x=3* y,x+1),x-1); printf ("x=%d,y=%d",x,y); A)x=27,y=27 B)x=12,y=13 C)x=15,y=14D)x=y=27 第一次:1<10为真,x=3,x+1=3+1=4, y=(4,x-1) y=(4,2)=2 第二次:2<10为真,x=3*2=6,7 y=(7,x-1)=(7,5) y=5 第三次:5<10为真,x=3*5=15 16 y=(16,x-1)=(16,14) y=14 第四次:14<10为假, 高二《C程序设计》月假作业 姓名: 选择题: 1、对for(表达式1;;表达式3)可理解为()。 A.for(表达式1;0;表达式3) B.for(表达式1;表达式3;表达式3) C.for(表达式1;1;表达式3) D.for(表达式1;表达式1;表达式3) 2、以下叙述正确的是() A.不能使用do-while语句构成的循环 B.do-while语句构成的循环必须用break语句才能退出 C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环 3、以下描述正确的是() A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C.在do-while循环体中,一定要有能使while后面表达式的值变为零(假)的操作 D.do-while循环中,根据情况可以省略while 4、下面有关for循环正确的描述是() A.for循环只能用于循环次数已经确定的情况 B.for循环是先执行循环体语句,后判断表达式 C.在for循环中,不能使用break语句跳出循环体 D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 5、int n=0,p; do { Scanf(“%d”,&p);n++;} While(p!=12345 && n<3); 此处do-while循环的结束条件是() A.p的值不等于12345并且n的值小于3 B.p的值等于12345并且n的值大于等于3 C.p的值不等于12345或者n的值小于3 D.P的值等于12345或者n的值大于等于3 6、以下程序的运行结果为() #include 第五章循环结构程序设计 一、选择题 1.while循环语句中,while后一对圆括号中表达式的值决定了循环体是否进行,因此,进入while循环后,一定有能使此表达式的值变为的操作,否则,循环将会无限制地进行下去。(0级) A)0 B)1 C)成立D)2 2.在do-while循环中,循环由do开始,用while结束;必须注意的是:在while表达式后面的不能丢,它表示do-while语句的结束。(0级) A)0 B)1 C);D), 3.for语句中的表达式可以部分或全部省略,但两个不可省略。但当三个表达式均省略后,因缺少条件判断,循环会无限制地执行下去,形成死循环。(0级)A)0 B)1 C);D), 4.程序段如下 int k=-20; while(k=0) k=k+1; 则以下说法中正确的是。(1级) A)while循环执行20次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次5.程序段如下 int k=1; while(!k==0) {k=k+1;printf("%d\n",k);} 说法正确的是。(1级) A)while循环执行2次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次6.以下for循环是。(1级) for(a=0,b=0;(b!=123)&&(a<=4);a++) A)无限循环B)循环次数不定C)执行4次D)执行5次7.在下列程序中,while循环的循环次数是。(1级) main( ) { int i=0; while(i<10) {if(i<1) continue; if(i= =5) break; i++; } ...... } A)1 B)10 C)6 D)死循环、不能确定次数8.程序段如下 int k=0; while(k++<=2) printf("%d\n",k); 则执行结果是。(1级) 循环结构练习一 1、若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是 for (i=5;i;i--) for (j=0;j<4;j++){...} A) 20 B) 25 C) 24 D) 30 2、设i,j,k均为int型变量,则执行完下面的for循环后,k的值为 for(i=0,j=10;i<=j;i++,j--) k=i+j; A) 12 B) 10 C) 11 D) 9 3、当执行以下程序段时 x=-1; do { x=x*x;} while( !x); A) 循环体将执行一次 B) 循环体将执行两次 C) 循环体将执行无限次 D) 系统将提示有语法错误 4、若输入字符串:abcde<回车>,则以下while循环体将执行多少次。 while((ch=getchar())=='e') printf("*"); A) 5 B) 4 C) 6 D) 1 5、有以下程序段 int k=0; while (k=1) k++; while循环执行的次数是 A) 无限次 B) 有语法错,不能执行 C) 一次也不执行 D) 执行一次 6、语句while(!e);中的条件 !e 等价于( )。 A) e==0 B) e!=1 C) e!=0 D) ~e 7、以下for循环是( )。 for(x=0,y=0;(y!=123) && (x<4);x++) A) 无限循环 B) 循环次数不定 C) 执行4次 D) 执行3次 8、C语言中while 和do-while 循环的主要区别是( )。 A) do-while的循环体至少无条件执行一次 B) while 的循环控制条件比do-while 的循环控制条件严格 C) do-while 允许从外部转到循环体内 D) do-while 的循环体不能是复合语句 9、以下叙述正确的是( )。 A) continue语句的作用是结束整个循环的执行 B) 只能在循环体内和switch语句体内使用break语句 C) 在循环体内使用break语句或continue语句的作用相同 D) 从多层循环嵌套中退出时,只能使用goto语句 10、对下面程序段,描述正确的是( )。 for(t=1;t<=100;t++) { scanf("%d",&x); if (x<0) continue; printf("%d\n",t); } A) 当x<0时,整个循环结束 B) 当x>=0时,什么也不输出 C) printf函数永远也不执行 D) 最多允许输出100个非负整数 11、在下列选项中,没有构成死循环的程序段是 A) int i=100; while (1) { i=i%100+1; if (i>100) break; } B) for( ; ; ); C) int k=1000; do {++k;} while (k>=1000); D) int s=36; while (s) --s; 12、以下程序的输出结果是 main( ) { int a,b; for(a=1,b=1;a<=100;a++) { if (b>=10) break; if (b%5==1) { b+=5; continue; } } printf("%d\n",a); } A) 101 B) 6 C) 4 D) 3 13、以下程序的输出结果是( )。 #include C语言循环习题答案
C语言循环例题
(完整版)C语言循环结构练习题带答案
C语言循环结构练习题带答案.doc
C语言循环结构练习题
C语言循环结构练习题带答案
c语言循环结构上机习题
C语言习题:顺序、选择、循环
C语言循环结构练习题带答案
C语言FOR 循环练习题 配解析···
C语言循环例题
C语言循环结构选择题(新)
C语言循环控制练习题
C语言习题:顺序、选择、循环
C语言-for循环的嵌套题(含解析和答案)
C语言循环语句练习题
C语言 循环结构程序设计模拟题
C语言循环结构选择题(新)2