goto循环
/*
* 反复执行某部分代码,称为循环执行
* do-while while for 递归 goto
* goto 标记;
* 1、需要反复执行的语句放在循环体内
* 2、为了避免无限循环,指定结束循环的语句(循环需要能够开始,能够结束)
* 3、goto语句在某种程度上是有害的,慎用
*/
//实现1+2+3....+100
#include<stdio.h>
int main1(void)
{
int i = 0;
int sum = 0;
i = 1;
lop:
if(i <= 100)
{
sum += i;
i++;
goto lop;
}
printf("sum = %d\n",sum);
return 0;
}
//从键盘输入若干字符,统计输入的元音字母的个数。输入'q'结束
//aeiou
int main()
{
int num = 0;
char c = 0;
lop:
scanf("%c",&c);
if(c != 'q')
{
//if(c == 'a'|| c==''e||......)
// num++;
switch(c)
{
case 'a':case 'e':case 'i':case 'o':case 'u':
case 'A':case 'E':case 'I':case 'O':case 'U':
num++;
}
goto lop;
}
printf("%d\n",num);
return 0;
}
for 循环
/*
* for(表达式1;表达式2;表达式3)
* {
* 循环体
* }
* 表达式1:循环开始
* 表达式2:当表达式2为真时,执行循环体,当表达式2为假时,循环结束
* 表达式3:如何结束
*/
#include<stdio.h>
int maini(void)
{
int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++)
{
sum += i;
}
printf("%d\n",sum);
return 0;
}
//输入年月日,计算这是这一年中的第几天。
int main()
{
int y,m,d;
int days=0;
scanf("%d %d %d",&y,&m,&d);
for(m--; m >= 1; m--)
{
switch(m)
{
case 11:case 9:case 6:case 4:
days += 30;
break;
case 10:case 8:case 7:case 5:case 3:case 1:
days += 31;
break;
case 2:
days += 28+((y%4==0&&y%100!= 0)||y%400 ==0?1:0);
break;
}
}
days += d;
printf("%d\n",days);
return 0;
}
while循环
/*
* 循环开始 表达式1
* while(表达式2)
* {
* 循环体
* 如何结束 表达式3
* }
*/
#include<stdio.h>
int main1()
{
int i = 0;
int sum = 0;
i = 1;
while(i <= 100)
{
sum += i;
i++;
}
printf("1到100的和是:%d\n",sum);
return 0;
}
//输入一个整型n,使用while循环,依次输出n的每一位上的值。
//1234 4 3 2 1
int main()
{
int n;
scanf("%d",&n);
if(n < 0)
n *= -1;
while(n != 0)
{
printf("%d ",n%10);
n = n/10;
}
printf("\n");
return 0;
}
do…while循环
/*
* 循环开始 表达式1
* do
* {
* 循环体
* 表达式3
* }while(表达式2);
*/
#include<stdio.h>
int main()
{
int i=0;
int sum = 0;
i = 101;
do
{
sum += i;
i++;
}while(i <= 100);
printf("%d\n",sum);
i = 101;
sum = 0;
while(i <= 100)
{
sum += i;
i++;
}
printf("%d\n",sum);
return 0;
}
//1*2*3*...*n(n不超过20)
int main2()
{
int n;
long value = 0;
scanf("%d",&n);
value = 1;
do
{
value *= n;
n--;
}while(n >= 1);
printf("%ld\n",value);
//for(scanf("%d",&n),value=1;)
return 0;
}
重点内容
/*
* 1 1 2 3 5 8 13 21 34 55,前10项
*/
#include<stdio.h>
int main1()
{
int i = 0;
int item1 = 1;
int item2 = 1;
int item;
printf("%d\n%d\n",item1,item2);
item = item2;
for(i = 3; ; i++)
{
item1 = item2;
item2 = item;
item = item1+item2;
printf("%d\n",item);
if(item >= 1000)
break;//循环结束条件
}
printf("第一次大于1000:%d\n",i);
return 0;
}
//第一次大于1000时,是第几项
//练习:判断100以内的所有的数,该数是否含有7
//或是7的倍数
int main()
{
int n = 0;
for(n = 1; n < 100; n++)
{
if(n % 7 == 0)
{
printf("%d是7的倍数\n",n);
continue;//结束当次循环,进入下一次循环(执行表达式3,执行表达式2...)
}
int tmp = n;
for( ;tmp > 0 ; tmp = tmp/10)
{
if(tmp%10 == 7)
{
printf("%d含有7\n",n);
break;
}
}
}
return 0;
}
小试牛刀
goto语句练习:随即输入一段字母,统计出现元音的个数
//goto语句实现循环
#include <stdio.h>
//goto语句实现 1+2+3+.....+100
int main(void)
{
int i=1;
int sum=0;
lop:
if (i<=100) {
sum+=i;
i++;
goto lop;
}
printf("sum= %d\n",sum);
return 0;
}
//练习:随即输入一段字母,统计出现元音的个数
#include <stdio.h>
int main(void)
{
char letter=0;
int num=0;
printf("请输入一段英文字母:\n ");
lop:
scanf("%c",&letter);
if (letter=='a'||letter=='e'||letter=='i'||letter=='o'||letter=='u') {
num++;
}
if(letter=='q'){
printf("元音个数为: %d\n",num);
return 0;
}
goto lop;
return 0;
}
for循环练习:输入年月日,判断是一年中的第几天
//练习:输入年月日,判断是一年中的第几天
#include <stdio.h>
int main(void)
{
int y,m,d;
int days=0;
printf("请输入年:\n");
scanf("%d",&y);
printf("请输入月:\n");
scanf("%d",&m);
printf("请输入日:\n");
scanf("%d",&d);
int n ;
for(n--; n >= 1; n--)
{
switch(m)
{
case 11:case 9:case 6:case 4:
days += 30;
break;
case 10:case 8:case 7:case 5:case 3:case 1:
days += 31;
break;
case 2:
days += 28+((y%4==0&&y%100!= 0)||y%400 ==0?1:0);
break;
}
}
days += d;
printf("%d年 %d月 %d日",y,m,d);
printf("是今年的第:%d",days);
printf("天\n");
return 0;
}
while练习 输入一个整型n,依次逆序输出n的每一位上的值
#include <stdio.h>
int main(void)
{
int sum=0;
int i=1;
while (i<=100) {
sum+=i;
i++;
}
printf("1到100之和为:%d\n",sum);
return 0;
}
//练习 输入一个整型n,依次逆序输出n的每一位上的值
#include <stdio.h>
int main(void)
{
int num=0;
scanf("%d",&num);
while (num!=0) {
printf("%d " ,num%10);
num=num/10;
}
printf("\n");
return 0;
}
do…while练习:1*2*3*….*n(n不超过20)
#include <stdio.h>
int main(void)
{
int i=1;
int sum=0;
do {
sum+=i;
i++;
} while (i<=100);
printf("1到100之和为:%d\n",sum);
}
//练习:1*2*3*....*n(n不超过20)
#include<stdio.h>
int main(void)
{
int n=1;
int result=1;
do {
result*=n;
n++;
} while (n<=20);
printf("%d\n",result);
}
条件循环语句混合练习:判断100以内的所有的数,该数是否含有7
//练习:判断100以内的所有的数,该数是否含有7
//或是7的倍数
int main()
{
int n = 0;
for(n = 1; n < 100; n++)
{
if(n % 7 == 0)
{
printf("%d是7的倍数\n",n);
continue;//结束当次循环,进入下一次循环(执行表达式3,执行表达式2...)
}
int tmp = n;
for( ;tmp > 0 ; tmp = tmp/10)
{
if(tmp%10 == 7)
{
printf("%d含有7\n",n);
break;
}
}
}
return 0;
}
其他经典练习
//
// 从键盘随机输入一个数,判断有几位构成
//
//
#include <stdio.h>
int main(void)
{
int num;//从键盘输入的整形数据
int n=0;
printf("请输入一个数:\n");
scanf("%d",&num);
while (!0) {
num=num/10;
n++;
if (num==0) {
break;
}
}
printf(" 此数由%d位数字组成!\n",n);
return 0;
}
//
//打印九九乘法表
//
#include <stdio.h>
int main(void)
{
for (int i=1; i<10; i++) {
for (int j=1; j<=i; j++) {
printf("%d*%d=%d\t",i,j,(i*j));
}
printf("\n");
}
return 0;
}
//
//求:Sn=a+aa+aaa+aaaa+aaaaa+....
//
#include <stdio.h>
int main(void)
{
int a=0,b=0,Sn=0;
int i=0;
int n=0;
printf("输入数字a的值:\n");
scanf("%d",&a);
printf("输入相加的项数:\n");
scanf("%d",&n);
while (i<n) {
b+=a;
Sn+=b;
a=a*10;
i++;
}
for (int i=0; i<n; i++) {
b+=a;
Sn+=b;
a=a*10;
}
printf("Sn=%d\n",Sn);
return 0;
}
//百鸡问题
#include <stdio.h>
int main(void)
{
int men=0;
int women=0;
int children=0;
for (int men=1; men<=50/3; men++) {
for (int women=1; women<=50/2; women++) {
children=30-men-women;
if (3*men+2*women+1*children==50) {
printf("men=%d,women=%d,children=%d\n",men,women,children);
}
}
}
return 0;
}
//
// 韩信点兵问题
//
#include <stdio.h>
int main(void)
{
int i;
for (i=1; ; i++) {
if (i%5==1 && i%6==5 && i%7==4 && i%11==10) {
break;
}
}
printf("总人数为:%d\n",i);
return 0;
}
//
//6=1+2+3; 完数
//
//
#include <stdio.h>
int main(void)
{
int n;
int sum=0;
for(n=1;n<=1000;n++){
//求n的因子
sum=0; //清空sum
for(int i=1;i<=n/2;i++){
if(n%i==0){ //若i是n的因子,则加入sum中
sum+=i;
}
}
if(sum==n){
printf("%d\n",n);
}
}
return 0;
}
//
// 猴子吃桃子问题
//
#include <stdio.h>
int main(void)
{
int num1=0;
int num2=1;
for (int day=9; day>0; day--) {
num1=(num2+1)*2;
num2=num1;
printf("第%d天后还剩%d个桃子\n",day,num1);
}
printf("一共的桃子数为:%d\n",num1);
return 0;
}
//
//回文问题
//
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
int i = 0;
for(i=0; i<=7; i++)
{
int v = 0;
for(int num = n; num > 0; num = num/10)
{
v = v*10+num%10;
}
if(v == n)
break;
else
n = v+n;
}
if(i < 7)
printf("%d通过%d计算得到回文数\n",n,i);
else
printf("通过7次没有得到回文数\n");
return 0;
}