1、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#include <stdio.h>
int main(void)
{
int i = 0;
int j = 0;
int k = 0;
int m = 0;
int num = 0;
int count = 0;
for(i=1;i<5;i++)
{
for(j=1;j<5;j++)
{
for(k=1;k<5;k++)
{
m++;
if(i != j && j!=k && i!=k)
{
num = i*100+j*10+k;
printf(" %d ",num);
if(m%10 ==0)
{
printf("\r\n");
}
count++;
}
else
{
}
}
}
}
printf("\r\n count is %d \r\n",count);
return 0;
}
2、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
#include <stdio.h>
int main(void)
{
float I = 0;
float bonus = 0;
printf("请输入当月利润I,按Enter完成输入 \r\n");
printf("单位:万元 \r\n ");
printf("I: ");
scanf("%f",&I);
if(I>100)
{
bonus = (I-100)*0.01+40*0.015+20*0.03+20*0.05+10*0.075+10*0.1;
}
else if(I>60)
{
bonus = (I-60)*0.015+20*0.03+20*0.05+10*0.075+10*0.1;
}
else if(I>40)
{
bonus = (I-40)*0.03+20*0.05+10*0.075+10*0.1;
}
else if(I>20)
{
bonus = (I-20)*0.05+10*0.075+10*0.1;
}
else if(I>10)
{
bonus = (I-10)*0.075+10*0.1;
}
else
{
bonus = I*0.1;
}
printf("I:%f 万元, bonus:%f 万元 \r\n",I,bonus);
return 0;
}
3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h>
#include <math.h>
int main(void)
{
int a = 0;
int b = 0;
int i = 0;
float c = 0;
float d = 0;
float diff_a = 0;
float diff_b = 0;
do
{
a = i+100;
b = i+168;
//使用sqrt函数计算开方后的数
c = sqrt(a);
d = sqrt(b);
//判断开方后是否为整数
diff_a = c - (int)c;
diff_b = d - (int)d;
if(diff_a == 0 && diff_b ==0)
{
printf("%d \r\n",i);
break;
}
i++;
}while(1);
return 0;
}
4、输入三个整数x,y,z,请把这三个数由小到大输出
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 0;
int c = 0;
int temp = 0;
printf("请输入三个整数,以空格隔开,最后点击enter键结束!\r\n");
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if(a>b)
{
temp = a;
a = b;
b = temp;
}
if(b>c)
{
temp = b;
b = c;
c = temp;
}
if(a>b)
{
temp = a;
a = b;
b = temp;
}
printf("%d<%d<%d \r\n",a,b,c);
return 0;
}
5、用*号输出字母c的图案。
#include <stdio.h>
int main(void)
{
printf(" * * *\r\n");
printf(" * \r\n");
printf(" * \r\n");
printf(" * \r\n");
printf(" * * * \r\n");
return 0;
}
6、输出9*9口诀
#include <stdio.h>
int main(void)
{
int i = 0;
int j = 0;
for(i = 1;i<10;i++)
{
for(j = 1;j<10;j++)
{
printf("%d * %d = %-3d",i,j,i*j);
}
printf("\r\n");
}
return 0;
}
7、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
#include <stdio.h>
int main(void)
{
int i = 0;
long num[20] = {1,1};
for(i=2;i<20;i++)
{
num[i] = num[i-1] + num[i-2];
printf("第%d个月兔子总数为:%d对 \r\n",i+1,num[i]);
}
return 0;
}
8、将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。
#include <stdio.h>
int main(void)
{
long i = 0;
int b[20] = {0};//暂定该数有20个质因数
int j = 0;
long a = 0;
int k = 0;
printf("请输入一个正整数:");
scanf("%d",&a);
printf("输入的正整数为:%d \r\n",a);
printf("%d = ",a);
i = 2;
while(i<=a)
{
if(a%i == 0 )
{
a = a/i;
b[j] = i;
//得到一个约数后,要将i重置为1,重新寻找下一个约数
i = 1;
j++;
}
i++;
}
//打印成题目要求的格式
for(k=0;k<j;k++)
{
//最后一个乘数,不打印*
if(j ==0 || k == j-1)
{
printf("%d",b[k]);
}
else
{
printf("%d*",b[k]);
}
}
printf("\r\n");
return 0;
}
9、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
#include <stdio.h>
int main(void)
{
char g = '0';
char A = 'A';
char B = 'B';
char C = 'C';
unsigned int a = 0;
printf("请输入成绩:");
scanf("%d",&a);
printf("输入的成绩为:%d \r\n",a);
g = (a >= 90)?A:((a>=60)?B:C);
printf("成绩等级为:%c \r\n",g);
return 0;
}
10、输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>
int main(void)
{
//定义输入的两个正整数
int a = 0;
int b = 0;
int temp = 0;
//打印时使用
int c = 0;
int d = 0;
//定义最大公约数
int maxCommonNumber = 0;
//定义最小公倍数
int minCommonNumber = 0;
printf("请输入两个正整数,以空格隔开:");
scanf("%d%d",&a,&b);
printf("\r\n");
//保证a>b
if(a>b)
{}
else
{
temp = a;
a = b;
b = temp;
}
//打印赋值,方便打印
c = a;
d = b;
//辗除法。
//思路:a%b =c,b%c =d,...,一直循环,直至为0
do
{
if(b!=0)
{
a = a%b;
if(a!=0)
{
b = b%a;
}
}
}while(a!=0 && b!=0);
//最大公约数为a,b中非零的
maxCommonNumber = (a==0)?b:a;
//最大公倍数为二者相乘,再除以最大公约数
minCommonNumber = c*d/maxCommonNumber;
printf("%d %d的最大公约数为:%d \r\n",c,d,maxCommonNumber);
printf("\r\n");
printf("最小公倍数为:%d \r\n",minCommonNumber);
return 0;
}
11、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include <stdio.h>
int main(void)
{
char txt[] = "0"; //char * txt = "0" 只读 char txt[] = "0"可读可写
int num = 0;
int i = 0;
int j = 0;
int LetCount = 0;
int spaCount = 0;
int numCount = 0;
int othCount = 0;
printf("请输入一行字符:");
gets(txt);
while(txt[i] != '\0')
{
num = txt[i] + 0;//字符类型转数字类型
if(num >= 97 && num <= 122)
{
LetCount++;
}
else if(num >= 65 && num <= 90)
{
LetCount++;
}
else if(num == 32)
{
spaCount++;
}
else if(num >= 48 && num <= 57)
{
numCount++;
}
else
{
othCount++;
}
i++;
}
printf("输入的字符为:");
for(j=0;j<i;j++)
{
printf("%c",txt[j]);
}
printf("\r\n其中,中英文字母个数为: %d \r\n",LetCount);
printf(" 空格个数为: %d \r\n",spaCount);
printf(" 数字个数为: %d \r\n",numCount);
printf(" 其他字符个数为: %d \r\n",othCount);
return 0;
}
12、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned int a = 0;
unsigned int times = 0;
long s = 0;
long sNumber[10] = {0};//暂定10个,若定义为sNumber[],则不能超过3个
long f = 0;
int i = 0;
int j = 0;
printf("请输入0-9中的一个数字:");
scanf("%d",&a);
printf("\r\n");
printf("请输入相加的次数:");
scanf("%d",×);
for(i=0;i<times;i++)
{
s = s + a*pow(10.0,i);//求取每个加数
sNumber[i] = s;//保存每个加数到数组中
}
//打印对应的格式
printf(" s = ");
for(j=0;j<times;j++)
{
f = f + sNumber[j];//求和
if(j == times-1)
{
printf("%d",sNumber[j]);
}
else
{
printf("%d+",sNumber[j]);
}
}
printf("\r\n s = %d \r\n",f);
}
13、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
#include <stdio.h>
int main(void)
{
int a = 0;
int i = 0;
int j = 0;
int k = 0;
int sum = 0;
int c[100] = {0};//约数个数上限暂定100
j = 0;
for(a=1;a<1000+1;a++)
{
j = 0;
i = 1;
//求取所有约数
while(i<a)
{
if(a%i == 0)
{
c[j] = i;
j++;
}
i++;
}
//求和判断
sum = 0;
if(j>0)
{
for(k=0;k<j;k++)
{
sum = sum + c[k];
}
if(sum == a)
{
printf(" %d ",a);
}
}
}
printf("\r\n");
return 0;
}
14、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include <stdio.h>
int main(void)
{
double high = 100;
double sum = 0;
int i = 0;
for(i=0;i<10;i++)
{
sum = sum + high + 0.5*high;
high = 0.5*high;
}
//减去第10次反弹的高度
sum -= high;
printf("第10次落地共经过:%f 米 \r\n",sum);
printf("第10次反弹高度为:%f 米 \r\n",high);
return 0;
}
15、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#include <stdio.h>
int main(void)
{
int i = 0;
int peach = 0;
peach = 1;
for(i = 1;i<10;i++)
{
peach = (peach*2+2);
printf(" 第%d天的桃子数为:%d \r\n",10-i,peach);
}
return 0;
}
16、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include <stdio.h>
int main(void)
{
int temp = 0;
//将x,y,z编号
int x = 1;
int y = 2;
int z = 3;
int a = 0;
int b = 0;
int c = 0;
printf("x的编号为:%d \r\n",x);
printf("y的编号为:%d \r\n",y);
printf("z的编号为:%d \r\n",z);
for(temp=1;temp<=3;temp++)
{
if(temp!=x && temp!=z)
{
c = temp;
}
}
//a的对手不会是c的对手
for(temp=1;temp<=3;temp++)
{
if(temp!=x && temp!=c)
{
a = temp;
}
}
//b的对手不会是a、c的对手
for(temp=1;temp<=3;temp++)
{
if(temp!=a && temp!=c)
{
b = temp;
}
}
printf("\r\n");
printf("a的对手编号为:%d \r\n",a);
printf("b的对手编号为:%d \r\n",b);
printf("c的对手编号为:%d \r\n",c);
return 0;
}
17、打印菱形
#include <stdio.h>
int main(void)
{
int i = 0;
int j = 0;
int sum = 0;
//临时变量,因为不能直接修改i,j的值,会死循环(调试出现)
int m = 0;
int n = 0;
for(i=1;i<7+1;i++)
{
for(j=1;j<7+1;j++)
{
m = i;
n = j;
if(m>4)
{
m = 8-m;
}
if(n>4)
{
n = 8-n;
}
sum = m+n;
if(sum>=5)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\r\n");
}
return 0;
}
18、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
#include <stdio.h>
int main(void)
{
float a[20] = {2,3};//只初始化前两项即可
float b[20] = {1,2};
int i = 0;
int j = 0;
float temp = 0;
float sum = 0;
printf("\r\n该数列的前20项为:\r\n");
for(i=2;i<20;i++)
{
a[i] = a[i-1]+a[i-2];//分子规律
b[i] = a[i-1];//分母规律
}
for(j=0;j<20;j++)
{
printf("%.f",a[j]);//打印整数浮点数,但是不打印小数点出来
printf("/");
printf("%.f ",b[j]);
//打印换行,每5项换行
if((j+1)%5 ==0)
{
printf("\r\n");
}
//涉及到相除,所以不光temp要设置为浮点型,a[j]、b[j]也要设置为浮点型
temp = a[j]/b[j];
sum += temp;//求和
}
printf("\r\n该数列的前20项之和为:%f \r\n",sum);
return 0;
}
19、求1+2!+3!+…+20!的和
#include <stdio.h>
int main(void)
{
_int64 a[20] = {1};//只初始化首项为1,其他为0即可
int i = 0;
int j = 0;
_int64 sum = 0; //注意类型定义
for(i=1;i<20;i++)
{
a[i] = a[i-1]*(i+1);
}
for(j=0;j<20;j++)
{
printf(" %I64d ",a[j]);//注意打印格式
sum += a[j];
if((j+1)%5 == 0)
{
printf("\r\n");
}
}
printf("\r\n 1+2!+3!+...+20!的和为:%I64d \r\n",sum);//注意打印格式
return 0;
}
20、利用递归方法求5!
#include <stdio.h>
int multiply(int n);
int main(void)
{
int a =5;
int b = 0;
b = multiply(a);
printf("=%d \r\n",b);
}
//递归函数
int multiply(int n)
{
int s = 0;
//递归的判断停止条件
if(n > 0)
{
s = n*multiply(n-1);
//设置打印格式,为了好看点
if(n!=5)
{
printf("%d*",n);
}
else
{
printf("%d",n);
}
}
else
{
s = 1;
}
return s;
}
对于新手学习C语言还是比较枯燥和乏味的,这里推荐一个学习交流群【669325409】,里面有很多学习资料也可以免费领取,省去了很多学习成本,需要学习资料的小伙伴都可以加群,找群主或者管理员免费领取,平时里面也有大神不时分享一些公开课和项目经验,很合适小白。