几个C练习题

、在数组中随机输入10个整数,然后按倒序打印这10个数(排序)。

#include <stdio.h>//降序输出

 

int main()

{

    int i,j,m;

    int a[10];

 

    for(i=0;i<=9;i++)

    {

      scanf("%d",&a[i]);

    }

 

    for(i=0;i<9;i++)

    {

      for (j = 0; j < 9 - i; j++)

        {

          if(a[j+1]>a[j])

          {

            m = a[j];

            a[j] = a[j+1];

 a[j+1] = m;

          }

        }

   }

    for(j=0;j<=9;j++)

    {

      printf ("%d\n",a[j]);

    }

    return 0;

}

实验结果如下:

 

 

2、0~99中有多少个数字‘9’。

#include <stdio.h>//几个9

 

int main()

{

    int i,j,k,count=0;

 

    for(i=0;i<100;i++)

    {

      j = i/10;

      k = i%10;

      if (j==9)

      {

        count++;

      }

      if (k==9)

      {

        count++;

      }

    }

    printf("There are %d\n",count);

    return 0;

}

实验结果如下:

 

 

3、随机输入一串字符,将其中的小写字母转化成大写字母。

#include <stdio.h>//字符中大小写转换

 

int main()

{

    char a[25];

    int i;

 

    scanf("%s",a);

 

    for(i=0;a[i]!='\0';i++)

      {

        if('a'<= a[i] && a[i]<='z')

        {

          a[i]=a[i]-32;

        }

      }

    printf("%s\n",a);

    return 0;

}

实验结果如下:

 

 

4、验证:“任一大于2的偶数,都可表示成两个素数之和”。

#include <stdio.h>//prove 任意大于2的偶数都可以表示成两个素数之和

#include <math.h>

 

int su(int);

int main()

{

    int ou,i;

 

    printf("input a oushu beyond 2:%d\n",ou);

 

    scanf("%dou",&ou);

 

    for(i=2;i<=ou/2;i++)

    {

      if(su(i)==1&&su(ou-i))

      {

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

      }

    }

    return 0;

}

 

int su(int s)

{

   int i,leap=1;

 

   for (i=2;i<=sqrt(s);i++)

   {

     if(s%i==0)

     {

       leap=0;

       break;

     }

   }

 

    return leap;

}

实验结果如下:

 

 

5、问题描述:30个人(编号1~30),从1开始报数,报到7的退出,剩下的人继续从1开始报数。求剩余最后一个人的编号(约瑟夫问题)。

#include <stdio.h>//josef question

 

int num(int a[]);

 

int main()

{

    int count=0,i;

    int a[30];

    for (i=0;i<30;i++)

    {

      a[i] = 1;

    }

 

    while(num (a) > 1)

     {

       for(i=0;i<30;i++)

       {

        if(a[i])

         {

           count++;

}

        if(count == 7)

         {

          count = 0;

          a[i] = 0;

         }

       }

     }

     for(i=0;i<30;i++)

     {

       if(a[i]==1)

       printf("%d\n",i+1);

     }

 

    return 0;

}

 

int num(int a[])

{

    int i,num=0;

for (i=0;i<30;i++)

    {

      if(a[i]!=0)

      {

        num++;

      }

    }

    return num;

}

 

实验结果如下:

 

 

6、整理continue和break的用法。(转载)

break、continue、return之间的区别与联系

在软件开发过程中,逻辑清晰是非常之重要的。 代码的规范也是非常重要的。往往细节决定成败。在编写代码的时候,一定要理解语言的作用以及使用的方法和场景。下面来介绍一下break、continue、return三者的区别和联系。

 

1. break :

(1).结束当前整个循环,执行当前循环下边的语句。忽略循环体中任何其它语句和循环条件测试。

(2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。[逐层判断,逐步跳出]

(3).break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。

(4).当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。

总的来说:就近原则,结束当前的整个循环。

2. return:

(1).return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。

(2).return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。

(3). return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。

3. continue:

(1).终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。

(2).结束当前循环,进行下一次的循环判断。

(3).终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行.

 

代码如下:

public static void test() {

 

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

            if (i == 3) {

                // break;//

                // continue;//i=3的时候结束这一次的循环,继续执行i=4的循环

                return;// 直接结束整个函数

 

            }

            System.out.println("----" + i);

        }

 

        System.out.println("-111--");

 

}

当为return的时候: 
 
当为continue的 时候 
当为break的时候:
 

 

附:约瑟夫

#include <stdio.h>

 

#define N   30  //总人数

#define NUM 7   //出局的数字

 

void print (int *a, int n)

{

int i;

for (i = 0;i < n; i++)

{

printf ("%2d",a[i]);

}

putchar ('\n');

}

 

/*

  将所有人的值编为1,出局的的人编为0,直到只有一个1为止

*/

void Joseph (int *a)

{

int temp = 0;   //报数

    int count = N;  //当前剩余1的数量

    while (count != 1)   //剩余一人结束报数

{

int i;

//遍历报数,超出总人数则第一个人接着报数

for (i = 0;i < N; i++)  

{

if (a[i] == 0)   //遇到出局的人跳过报数

{

continue;   

}

temp++;

if (temp % NUM == 0)   //判断是否出局,若出局值编为0

{

count--;

a[i] = 0;

}

}

}

}

 

int main ()

{

 

int a[N] = {};

 

int i;

for (i = 0;i < N; i++)

{

a[i] = 1;

}

 

printf ("Start: ");

print (a,sizeof(a)/sizeof(a[0]));

 

Joseph (a);

 

printf ("End  : ");

print (a,sizeof(a)/sizeof(a[0]));

 

for (i = 0;i < N; i++)

{

if (a[i] == 1)

{

printf ("Last one is %d !\n", i+1);  //数组下标从0开始,所以第n个元素是第n+1个人的序号

}

}

 

return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值