、在数组中随机输入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;
}