C程序设计(1)

来源:互联网 发布:北魏冯太后 知乎 编辑:程序博客网 时间:2024/04/29 21:55

题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

分析:在百、十、个位用for循环嵌套遍历1234这个数,在嵌套循环内利用if语句判断去除百、十、个位有重复的数据

代码如下:

#include<stdio.h>

void main()

{

int i,j,k,n=0;

printf("1234个数字,/n能组成多少个互不相同/n且无重复数字的三位数?/n都是多少?/n/n");

for(i=1;i<5;i++)

for(j=1;j<5;j++)

for(k=1;k<5;k++) /*三层循环分别让 i,j,k 遍历 1,2,3,4 这四个数*/

{

if((i!=j)&&(i!=k)&&(j!=k)) /*用逻辑运算符*/

{

printf("%d, ",i*100+j*10+k);

//printf("%d%d%d, ",i,j,k);/*从效率来讲这条代码会更好*/

n++;

if(n%6==0)

{

printf("/n");

}

}

}

printf("/n共有%d个这样的数/n",n);

}

题目:已知直角三角形每边长为25以内的整数,求出所有这样的直角三角形。

分析:设三角形的三边分别记为a,b,c,根据三角形的三边规则(a<b+c),利用嵌套循环,在最外层的a遍历 [3,25] 的数据,中间层b遍历 [1,a) 的数据,最内层c遍历 [1,b] 的数据,在嵌套循环内用if语句判断去除不符合直角三角形三边规则(a*a=b*b+c*c)的数据

代码如下:

#include<stdio.h>

void main()

{

int a,b,c;

printf("所有符合边长在整数25以内的直角三角形的边长/n");

for(a=3;a<=25;a++)

for(b=1;b<a;b++)

for(c=1;c<=b;c++)

{

if(a*a==b*b+c*c) /*直角三角形的三边规则*/

{

printf("/nA=%d/tB=%d/tc=%d/n",a,b,c);

printf("-----------------------/n");

}

}

}

题目:甲、乙、丙三位球迷分别预测已进入半决赛的四队ABCD的名次如下:

甲预测:第一名、第二名;

乙预测:第一名、第三名;

丙预测:第二名、第三名;

设比赛结果,四队名次互补相同,并且甲,乙,丙的预测各对了一半。试求ABCD四队的名次。

分析:用嵌套循环遍历ABCD的名次即可,但在于循环内的判断条件:

因为三人各预测对了一半,如果A是第一名,则B不会是第二名;或者如果A不是第一名,则B必是第二名。

这样可用逻辑运算符进行表示: (a==1&&b!=2)||(a!=1&&b==2)

还可用关系运算符表示:(a==1)!=(b==2) ,即A是第一名和B是第二名是不会同时成立的

代码如下:

#include<stdio.h>

void main()

{

int a,b,c,d,sign;

printf("ABCD四队的名次如下:/n");

for(a=1;a<=4;a++)

for(b=1;b<=4;b++)

{

if(b==a) continue; /*球队名次不可相同*/

for(c=1;c<=4;c++)

{

if(c==a||c==b) continue; /*球队名次不可相同*/

d=10-a-b-c; /*1+2+3+4=10,即四队之和为10*/

sign=((a==1)!=(b==2))&&((c==1)!=(d==3))&&((d==2)!=(a==3));/*如下注释*/

if(sign)

{

printf("A队第%d/n",a);

printf("B队第%d/n",b);

printf("C队第%d/n",c);

printf("D队第%d/n",d);

}

}

}

}

/*

关系表达式的值是一个逻辑值,即“真”或“假”。

C语言没有逻辑型数据(boolean ,true()false())

C的逻辑运算中,以“1”代表“真”,以“0”代表“假”,

但在判断一个量是否为“真”时,以“0”代表“假”,以“非0”代表代表“真”,

即将一个“非0”的数值认为“真”。

*/