1、任意输入一个半径给r,求圆的面积。
#include <stdio.h>
#include <windows.h>
void main()
{
double r,s;
printf("输入一个半径给r");
scanf("%lf",&r);
s=r*r*3.1415926;
printf("%lf",s);
system("pause");
}
2、任意输入a,b,c的值,求得并输出当y=0时,y=ax2+bx+c的解。
#include <stdio.h>
#include <windows.h>
#include<math.h>
void main()
{
double a,b,c,x,x1,x2;
do
{
printf("输入a b c的值");
scanf("%lf %lf %lf",&a,&b,&c);
}while((b*b)-(4*a*c)<0);//while里面是 0答案为假不执行
{
if(b*b-4*a*c==0)
{
x=-b/(2*a);
printf("%lf\n",x);
}
else
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b+sqrt(b*b-4*a*c))/(2*a);
printf("%lf %lf\n",x1,x2);
}
}
system("pause");
}
3、输出以下图形
*
***
*****
*******
*****
***
*
#include <stdio.h>
#include <windows.h>
void main()
{
int h,i;
for(h=1;h<=4;h++)//行
{
for(i=1;i<=4-h;i++)
printf(" ");
for(i=1;i<=h*2-1;i++)
printf("*");
for(i=1;i<=4-h;i++)
printf(" ");
printf("\n");
}
for(h=3;h>0;h--)
{
for(i=1;i<=4-h;i++)
printf(" ");
for(i=1;i<=h*2-1;i++)
printf("*");
for(i=1;i<=4-h;i++)
printf(" ");
printf("\n");
}
system("pause");
}
4、任意输入一个5位的正整数,分别求出它每位上的数值,然后逆序输出。
(最终要实现任意输入一个正整数,不限制位数,分别求出它每位上的数值,然后逆序输出。)
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int n,z,i;
printf("任意输入一个5位整数");
scanf("%d",&n);
for(i=0;i<=4;i++)
{
z=(n/(int)pow(10,i))%10;
printf("%d",z);
}
}任意输入n位数
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int n,z;
printf("任意输入一个正整数");
scanf("%d",&n);
while(n>0)
{
z=n%10;
printf("%d",z);
n=n/10;
}
}
5、通过键盘上输入一位同学的5门课程的成绩(大学英语、大学体育、高等数学、计算机导论、计算机程序设计技术),计算该同学的平均成绩和总成绩并输出。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double y,t,s,j,c,z,ave;
printf("输入英语成绩");
scanf("%lf",&y);
printf("输入体育成绩");
scanf("%lf",&t);
printf("输入数学成绩");
scanf("%lf",&s);
printf("输入计算机导论成绩");
scanf("%lf",&j);
printf("输入计算机程序设计技术成绩");
scanf("%lf",&c);
z=y+t+s+j+c;
ave=z/5;
printf("%lf\n%lf",z,ave);
system("pause");
}
6、任意输入一个三角形的三边的值分别给a、b、c,求得并输出该三角形的面积。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a,b,c,s,p;
printf("任意输入一个三角形的三边的值分别给a、b、c");
scanf("%lf %lf %lf",&a,&b,&c);
p=(a+b+c)/2;
s=pow((p*(p-a)*(p-b)*(p-c)),0.5);
printf("%lf",s);
}
7、任意输入2个数值给自变量x和y,要求实现2个变量之间的数值交换(注意不能使用交换的思想)。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double x,y;
printf("任意输入2个数值给自变量x和y");
scanf("%lf %lf",&x,&y);
x=x+y;
y=x-y;
x=x-y;
printf("%lf\n%lf",x,y);
}
二、选择结构程序设计
1、任意输入一个正整数给x,判断其是奇数还是偶数?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int x;
printf("任意输入一个正整数给x");
scanf("%d",&x);
if(x%2==0)
printf("这是偶数");
else
printf("这是奇数");
}
2、任意输入一个年份,判断其实闰年还是平年?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int year;
printf("任意输入一个年份");
scanf("%d",&year);
if(year%4==0&&year%100!=0||year%400==0)
printf("这是闰年");
else
printf("这是平年");
}
3、任意输入2个数值给变量a和b,求得它们的最大值
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a,b,big;
printf("任意输入2个数值给变量a和b");
scanf("%lf %lf",&a,&b);
if(a>b)
big=a;
else
big=b;
printf("%lf",big);
}
4、任意输入3个数值分别给变量a、b、c,求得它们的最大值。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a,b,c,big;
printf("任意输入3个数值给变量a b c");
scanf("%lf %lf %lf",&a,&b,&c);
if(a>b)
big=a;
else
big=b;
if(big>c)
big=big;
else
big=c;
printf("%lf",big);
}
5、任意输入3个数值分别给变量a、b、c,要求按照从小到大的顺序输出。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a,b,c,t;
printf("任意输入3个数值给变量a b c");
scanf("%lf %lf %lf",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(b>c);
{
t=b;
b=c;
c=t;
}
if(a>b)
{
t=a;
a=b;
b=t;
}
printf("%lf %lf %lf",a,b,c);
}
6、任意输入4个数值分别给变量a、b、c,要求按照从小到大的顺序输出。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a,b,c,d,t,i;
printf("任意输入4个数值给变量a b c d");
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
for(i=1;i<=3;i++)
{
if(a>b)
{t=a;a=b;b=t;}
if(b>c)
{t=b;b=c;c=t;}
if(c>d)
{t=c;c=d;d=t;}
}
printf("%lf %lf %lf %lf",a,b,c,d);
}
7、任意输入一个正整数,判断其能被3、5、7整除的情况。
(1)能被3个数值同时整除。
#include<stdio.h>
#include<windows.h>
void main()
{
int x;
printf("任意输入一个正整数x:");
scanf("%d",&x);
if(x%3==0&&x%5==0&&x%7==0)
printf("%d",x);
else
printf("x错误不满足条件");
}
(2)只能被其中2个数值整除,但是必须指出是哪2个数值。
#include<stdio.h>
#include<windows.h>
void main()
{
int x,y=3,z=5,k=7;
printf("任意输入一个正整数x:");
scanf("%d",&x);
if(x%y==0&&x%z==0&&x%k!=0)
printf("能被%d %d整除",y,z);
if(x%y==0&&x%k==0&&x%z!=0)
printf("能被%d %d整除",y,k);
if(x%k==0&&x%z==0&&x%y!=0)
printf("能被%d %d整除",k,z);
}
(3)只能被其中1个数值整除,但是必须指出是哪1个数值。
#include<stdio.h>
#include<windows.h>
void main()
{
int x,y=3,z=5,k=7;
printf("任意输入一个正整数x:");
scanf("%d",&x);
if(x%y==0&&x%z!=0&&x%k!=0)
printf("能被%d整除",y);
if(x%y!=0&&x%k==0&&x%z!=0)
printf("能被%d整除",k);
if(x%k!=0&&x%z==0&&x%y!=0)
printf("能被%d整除",z);
}
(4)不能被其中任意一个数值整除
#include<stdio.h>
#include<windows.h>
void main()
{
int x;
printf("任意输入一个正整数x:");
scanf("%d",&x);
if(x%3!=0&&x%5!=0&&x%7!=0)
printf("答案正确%d",x);
else
printf("答案错误");
system("pause");
}
*8、任意输入一个年月日,计算并输出这天是该年的第几天?
#include<stdio.h>
#include<windows.h>
void main()
{
int year,month,day,sum=0;
printf("任意输入日期year-month-day:");
scanf("%d-%d-%d",&year,&month,&day);
while(--month)
{
if(month==4||month==6||month==9||month==11)
sum=sum+30;
if(month==2)
sum=sum+28;
if(month==1||month==3||month==5||month==7||month==8||month
==10)
sum=sum+31;
}
if(year%4==0&&year%100!=0||year%400==0)
sum=sum+1;
sum=sum+day;
printf("%d",sum);
}*9、任意输入某个同学的 程序设计技术的期末成绩(百分制,要求输入的时候成绩控制在0-100之间),然后将其转换为对应的5级等级制成绩然后输出。(等级制成绩是:优、良、中、及格、不及格)。
#include<stdio.h>
#include<windows.h>
void main()
{
int cj;
printf("任意输入某个同学的 程序设计技术的期末成绩");
scanf("%d",&cj);
switch(cj/10)
{
case 10:
case 9:printf("优");break;
case 8:printf("良");break;
case 7:printf("中");break;
case 6:printf("及格");break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("不及格");break;
default:printf("成绩不合法");break;
}
system("pause");
}
*10、任意输入2个数值之间的四则运算表达式,输出结果。(例如输入:10+20 输出30)
#include<stdio.h>
#include<windows.h>
void main()
{
double a,b,result;
char op;
printf("任意输入2个数值之间的四则运算表达式");
scanf("%lf%c%lf",&a,&op,&b);
switch(op)
{
case '+':result=a+b;printf("%lf",result);break;
case '-':result=a-b;printf("%lf",result);break;
case '*':result=a*b;printf("%lf",result);break;
case '/':
if(b!=0)
{
result=a/b;printf("%lf",result);break;
}
else
printf("此答案无解");
}
system("pause");
}
11、企业发放的奖金根据利润提成。利润(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>
#include<windows.h>
void main()
{
double m,i;
printf("输入利润");
scanf("%lf",&i);
if(i<=10)
m=i*0.1;
if(i>10&&i<=20)
m=10*0.1+(i-10)*0.075;
if(i>20&&i<=40)
m=10*0.1+10*0.075+(i-20)*0.05;
if(i>40&&i<=60)
m=10*0.1+10*0.075+20*0.05+(i-40)*0.03;
if(i>60&&i<=100)
m=10*0.1+10*0.075+20*0.05+20*0.03+(i-60)*0.015;
if(i>100)
m=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(i-100)*0.01;
printf("%lf",m);
}
三、循环结构程序设计
1、求s=1+2+3+……+98+99+100 2、求s=1+3+5+……+97+99
#include<stdio.h>
#include<windows.h>
void main()
{
int s=0,i;
for(i=1;i<=99;i=i+2)
{
s=s+i;
}
printf("%d",s);
}
第二题
#include<stdio.h>
#include<windows.h>
void main()
{
int s=0,i;
for(i=1;i<=99;i=i+2)
{
s=s+i;
}
printf("%d",s);
}
3、求s=1-3+5-7+……+97-99 *4、求π的值,已知π/4≈1-1/3+1/5-1/7+……
#include<stdio.h>
#include<windows.h>
void main()
{
int i=1,j=3,s=0;
while(i<=97&&j<=99)
{
s=s+i-j;
i+=4;
j+=4;
}
printf("%d",s);
}
第四题 计算至某项的绝对值小于1E-6为止。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double s=0,i=1,j=3;
while(fabs(s)<pow(10,-6))
{
s=4*(s+pow(i,-1)-pow(j,-1));
i=i+4;
j=j+4;
}
printf("%d",s);
}
*5、求s=1+2!+3!+4!+……+19!+20! 6、s=1+3!+5!+7!+……+17!+19!
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double s=0,i=1,j=1;
while(i<=20)
{
i++;
s=s+j;
j=j*i;
}
printf("%lf",s);
}
*第六题
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double s=0,i=1,j=1;
while(i<=19)
{
i=i+2;
s=s+j;
j=j*i*(i-1);
}
printf("%lf",s);
}
7、任意输入x的值,求sinx≈x-x3/3!+x5/5!-x7/7!+……,直到某项的绝对值小于1E-6为止。最后输出sinx的值。
*8、已知s=1/1+2/1+3/2+5/3+8/5+…… 9、已知s=1+11+111+1111+…….
求出前40项之和。 一直加到n位1,n的值自己输入。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double i=1,x,j=1,s=0;
for(x=1;x<=39;x++)
{
s=s+i/j;
j=i;
i=i+j;
}
printf("%lf",s);
}
第九题
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double n,s=0,i,j=1;
printf("输入任意n项");
scanf("%lf",&n);
for(i=1;i<=n;i++)
{
s=s+j;
j=j*10+1;
}
printf("%lf",s);
}
10、已知s=1+12+123+1234+……. *11、从键盘上输入若干学生的程序设计成绩,
一直加到n位123…n,n的值自己输入。 计算并输出所有学生的平均分和最高成绩
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double n,s=0,i,j=1,k=1;
printf("输入任意n项");
scanf("%lf",&n);
for(i=1;i<=n;i++)
{
s=s+j;
k=k+1;
j=j*10+k;
}
printf("%lf",s);
} 当输入负数的时候循环结束,再输出结果。
第十一题
12、任意输入一个正整数,判断其是否是素数,所谓素数就是指质数。
(建议使用2到3种方法来实现判断)
第一种方法
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int s,i,n=0;
printf("输入一个数");
scanf("%d",&s);
for(i=1;i<=s;i++)
{
if(s%i==0)
n++;
}
if(n==2)
printf("答案是素数");
else
printf("答案不是素数");
}
第二种方法
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int s,i;
printf("输入一个数");
scanf("%d",&s);
for(i=2;i<=s-1;i++)
{
if(s%i!=0)
continue;
else
break;
}
if(i==s)
printf("答案是素数");
else
printf("答案不是素数");
}
第三种方法
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int s,i,n=0;
printf("输入一个数");
scanf("%d",&s);
for(i=2;i<=s-1;i++)
{
if(s%i==0)
n++;
}
if(n==0)
printf("答案是素数");
else
printf("答案不是素数");
}
13、输出1000以内所有的质数
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i,n,j;
for(j=1;j<=1000;j++)
{
n=0;
for(i=1;i<=j;i++)
{
if(j%i==0)
n++;
}
if(n==2)
printf("%d\n",j);
}
system("pause");
}
*14、输入一个正整数,输出比它小的最大的最多的10个质数
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i,x,n,y,a[10],k=0;
scanf("%d",&y);
for(x=y-1;x>0;x--)
{
n=0;
for(i=1;i<=x;i++)
{
if(x%i==0)
n++;
}
if(n==2)
{ a[k]=x;
k++;}
if(k==10)
break;
}
k--;
for(k=9;k>=0;k--)
{
printf("%5d",a[k]);
}
}
*15、任意输入2个正整数给自变量x和y,要求求得它们之间的最大公约数和最小公倍数。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int x,y,i;
printf("任意输入两个值");
scanf("%d %d",&x,&y);
for(i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
printf("最大公约数%d\n",i);
printf("最小公倍数%d\n",x*y/i);
}
16、爱因斯坦阶梯问题。设有一阶梯,每步跨2阶余1阶,每步跨3阶余2阶,每步跨5阶余4阶,每步跨6阶余5阶,每步跨7阶刚好到顶。问该阶梯一共有多少阶?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i;
for(i=1;;i++)
{
if(i%2==1&&i%3==2&&i%5==4&&i%6==5&&i%7==0)
{
printf("%d\n",i);
break;
}
}
system("pause");
}
17、任意输入一个十进制整数,要求输出对应的二进制结果。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a[36],n,i=0;
printf("任意输入一个十进制整数");
scanf("%d",&n);
while(n)
{
a[i]=n%2;
n=n/2;
i++;
}
while(i--)
{
printf("%d",a[i]);
}
}
18、根据媒体发布的信息,2010年中国GDP总量为5.845万亿美元,增长率是10.1%;美国GDP总量是14.536万亿美元,增长率3.3%,在2个GDP增长率保持2010年的水平不变的情况下,编程计算到哪一年中国的GDP总量有望超过美国?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double c=5.845,a=14.536;
int i;
for(i=2011;;i++)
{
c=c*1.101;
a=a*1.033;
if(c>a)
break;
}
printf("%d",i);
}
19、从键盘上任意输入2个正整数给a和b,计算a和b之间所有整数(包括a和b)的累加和,并输出结果。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a,b,i,s=0;
printf("任意输入2个正整数给a和b");
scanf("%d %d",&a,&b);
if(a<b)
for(i=a;i<=b;i++)
{
s=s+i;
}
else
for(i=b;i<=a;i++)
{
s=s+i;
}
printf("%d",s);
}
*20、张三在10年前存了一笔钱准备用来购房,按照当时的房价,这笔钱可以买房150平方米。已知银行存款年利率为6%,房价却按照每年10%的速度增长,请编写程序,计算张三存的这笔钱现在能购买多少平米的房子?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double h=1.06,f=1.1,i,z;
for(i=1;i<=9;i++)
{
h=h*1.06;
f=f*1.1;
z=150*(h/f);
}
printf("%lf",z);
}
方法二
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
printf("%lf",(150*pow(1.06,10)/pow(1.1,10)));
}
21、某班级准备举行一次五子棋比赛,参赛选手每人之间必须进行一场对弈,进过统计发现一共进行了300场比赛,编程,计算并输出参赛的人数是多少?
22、输入1000以内所有的完数,所谓完数是指一个数值刚好是它的因子之和(但是因子中不包含本身),例如6=1+2+3,所以6就是完数。
23、一个口袋中有3个红球,5个白球,6个黑球,从其中任意取出8个球,要求至少有一个白球。
(1)输出所有的可能组合。
*(2)计算这些可能出现的概率是多少?
(1)#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int h,w,b;
for(h=0;h<=3;h++)
for(w=0;w<=5;w++)
for(b=0;b<=6;b++)
{
if((h+w+b)==8&&w>=1)
printf("%d %d %d\n",h,w,b);
}
}
(2)#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int h,w,b;
double i=0,j=0;
for(h=0;h<=3;h++)
for(w=0;w<=5;w++)
for(b=0;b<=6;b++)
{
if((h+w+b)==8&&w>=1)
i++;
if((h+w+b)==8)
j++;
}
printf("概率%lf",i/j*100);
}
24、有若干只鸡兔同在一个笼子里,从上面数,有36个头,从下面数,有100只脚。问笼中各有多少只鸡和兔?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int j,t;
for(j=1;j<=36;j++)
for(t=1;t<=36;t++)
{
if(j+t==36&&(j*2)+(t*4)==100)
printf("%d %d",j,t);
}
}
25、0-9可以组成多少个没有重复的3位偶数?这里没有重复的就是指该数值中每位上的数值互不相等。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a,b,c,i=0;
for(a=0;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
if((a*100+b*10+c)%2==0&&a!=b&&b!=c&&a!=c)
i++;
}
printf("%d",i);
}
26、编写程序输出9*9乘法表。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%2dx%d=%d",j,i,i*j);
}
printf("\n");
}
}
27、求出用1元人民币兑换1分,2分,5分硬币的所有兑换方案,要求兑换硬币总数是70枚。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a,b,c;
for(a=1;a<=70;a++)
for(b=1;b<=70;b++)
for(c=1;c<=70;c++)
{
if((a*1+b*2+c*5)==100&&a+b+c==70)
printf("%d %d %d\n",a,b,c);
}
}
28、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a,b,c;
for(a=0;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
if((a*100+b*10+c)==((a*a*a)+(b*b*b)+(c*c*c)))
printf("%d%d%d\n",a,b,c);
}
}
*29、输出以下图形(必须用循环的思想来解决)。
*
***
*****
*******
*****
***
*
#include <stdio.h>
#include <windows.h>
void main()
{
int h,i;
for(h=1;h<=4;h++)//行
{
for(i=1;i<=4-h;i++)
printf(" ");
for(i=1;i<=h*2-1;i++)
printf("*");
for(i=1;i<=4-h;i++)
printf(" ");
printf("\n");
}
for(h=3;h>0;h--)
{
for(i=1;i<=4-h;i++)
printf(" ");
for(i=1;i<=h*2-1;i++)
printf("*");
for(i=1;i<=4-h;i++)
printf(" ");
printf("\n");
}
system("pause");
}
30、有一本教材页码符号一共有6897个字符,计算该书一共有多少页?比如:99 就是2个数字字符。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i=1,y=0;
while(y<6897)
{
if(i>0&&i<=9)
y=y+1;
if(i>=10&&i<=99)
y=y+2;
if(i>=100&&i<=999)
y=y+3;
if(i>=1000&&i<=6897)
y=y+4;
i++;
}
i--;
printf("%d",i);
}
方法二
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i,y=0;
for(i=1;;i++)
{
if(i>=0&&i<=9)
y++;
else if(i>=10&&i<=99)
y=y+2;
else if(i>=100&&i<=999)
y=y+3;
else if(i>=1000&&i<=9999)
y=y+4;
if(y==6897)
break;
}
printf("%d",i);
}
31、某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的?
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int x,i,s;
for(x=1;x<100;x++)
{
s=0;
for(i=x;i<=100;i++)
{
s=s+i;
if(s==236)
{
printf("%d",x);
break;
}
}
}
}
四、数组
1、输入一个寝室6位同学的身高,要求按照从小到大的顺序输出。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a[7],t;
int i,j;
for(i=0;i<=5;i++)
{
printf("输入第%d个同学",i+1);
scanf("%lf",&a[i]);
}
for(j=1;j<=5;j++)
{
for(i=0;i<=4;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<=5;i++)
{
printf("%lf\n",a[i]);
}
system("pause");
}
2、输入某班级所有同学的程序设计技术期末成绩(人数是33人),要求输出最好的2位同学的成绩。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a[33],t;
int i,j;
for(i=0;i<=32;i++)
{
printf("第%d个",i+1);
scanf("%lf",&a[i]);
}
for(j=1;j<=32;j++)
{
for(i=0;i<=31;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
printf("%lf",a[32]);
printf("%lf",a[31]);
}
*3、学校举行校园歌手大赛,一共有7位裁判,7位裁判位为选手打分,去掉一个最高分和去掉一个最低分,再计算平均分就是该选手的最后得分。请编写程序模仿7位裁判为某位选手的打分过程。
(此题可以要求为参赛选手一共有n位(大于10),然后对所有选手演唱过程打分,最后评选出十佳歌手)
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a[7],t,c[100],big;
int i,j,n,b,k;
printf("有多少个参赛者");
scanf("%d",&n);
for(b=0;b<=n-1;b++)
{
for(i=0;i<=6;i++)
{
printf("第%d个裁判",i+1);
scanf("%lf",&a[i]);
}
for(j=1;j<=6;j++)
{
for(i=0;i<=5;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
c[b]=(a[1]+a[2]+a[3]+a[4]+a[5])/5;
printf("%lf\n",c[b]);
}
k=1;
big=c[0];
for(b=1;b<=n;b++)
{
if(big<c[b])
{
big=c[b];
k=b+1;
}
else
{
big=big;
k=k;
}
}
printf("十佳选手是%d\n",k);
printf("十佳选手成绩%lf",big);
system("pause");
}
4、任意输入10个数值,计算出它们的平均值,然后求得并输出与平均值最接近的数。
5、输入班级33位同学的程序设计技术期末成绩(百分制,分数控制在0-100之间),分别统计优,良,中,及格,不及格等5种情况的人数,以及百分比。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a[33],y,n,z,jg,bjg;
int i;
for(i=0;i<=32;i++)
{
printf("输入第%d个同学程序设计技术期末成绩",i+1);
scanf("%lf",&a[i]);
}
n=0;y=0;z=0;jg=0;bjg=0;
for(i=0;i<=32;i++)
{
if(a[i]>=90&&a[i]<=100)
y++;
if(a[i]<90&&a[i]>=80)
n++;
if(a[i]<80&&a[i]>=70)
z++;
if(a[i]<70&&a[i]>=60)
jg++;
if(a[i]>=0&&a[i]<60)
bjg++;
}
printf("优的人数%lf 百分比%lf\n",y,(y/33)*100);
printf("良的人数%lf 百分比%lf\n",n,(n/33)*100);
printf("中的人数%lf 百分比%lf\n",z,(z/33)*100);
printf("及格的人数%lf 百分比%lf\n",jg,(jg/33)*100);
printf("不及格的人数%lf 百分比%lf\n",bjg,(bjg/33)*100);
}
6、任意输入5个数据,实现将这5个数据逆序存放,然后再将结果输出。
7、FIBONACCI数列,已知该数列的第1个数值是1,第2个数值也是1,从第3个数值开始,每个数值等于其前2个数值之和,请编程输出该数列的前40项。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
double a[40];
int i;
a[0]=1;
a[1]=1;
for(i=2;i<=39;i++)
{
a[i]=a[i-2]+a[i-1];
}
for(i=0;i<=39;i++)
{
printf("%lf\n",a[i]);
}
}
8、请编写程序,请给一个一维数组任意输入6个整数,例如:假设输入如下数值
7 4 8 9 1 5
要求建立一个具有如下内容的方阵并输出:
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a[6],i,j,t;
for(i=0;i<=5;i++)
{
scanf("%d",&a[i]);
}
for(j=1;j<=6;j++)
{
for(i=5;i>0;i--)
{
t=a[i];
a[i]=a[i-1];
a[i-1]=t;
}
for(i=0;i<=5;i++)
{
printf("%d",a[i]);
}
printf("\n");
}
}
9、请编写程序实现功能:从键盘上输入6名学生的5门成绩,分别统计出每个学生的平均成绩和总成绩,并输出。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i;
double f,b,c,d,e,ave,sum,a[6];
for(i=0;i<=5;i++)
{
printf("输入第1科成绩");
scanf("%lf",&f);
printf("输入第2科成绩");
scanf("%lf",&b);
printf("输入第3科成绩");
scanf("%lf",&c);
printf("输入第4科成绩");
scanf("%lf",&d);
printf("输入第5科成绩");
scanf("%lf",&e);
a[i]=f+b+c+d+e;
system("cls");
}
for(i=0;i<=5;i++)
{
sum=a[i];
ave=a[i]/5;
printf("总成绩%lf 平均分%lf\n",sum,ave);
}
system("pause");
}
*10、任意输入3行4列的矩阵中的所有值,要求转置矩阵。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a[3][4],i,j;
for(i=0;i<=2;i++)
{
for(j=0;j<=3;j++)
{
printf("输入你想要的值");
scanf("%d",&a[i][j]);
}
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=3;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
*11、任意输入一个二维数组4行5列的所有制,找到并输出该二维数组中最大值及其位置。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a[4][5],i,j,big,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
printf("输入你想要的值");
scanf("%d",&a[i][j]);
}
printf("\n");
}
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
12、编写程序输出n行n列的杨辉三角。n的值自己输入,如下所示
输入 5
输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int a[36][36],i,j,n;
printf("输入任意n");
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||i==j)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=i;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
13、鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。输入n行n列的矩阵,求出鞍点。
14、任意输入一段英文,统计其中英文字符a的个数,不区分大小写。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
char english[100];
int i,z;
printf("输入一段英文");
gets(english);
z=0;
for(i=0;english[i]!='\0';i++)
{
if(english[i]=='a'||english[i]=='A')
{
z++;
}
}
printf("%d",z);
}
15、任意输入一段英文,分别统计出其中26个英文字母各自的个数,不区分大小写。
16、任意输入一段英文,分别统计出英文字符、数字字符、空格字符和其他字符等四大类字符各自的个数。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
char a[100];
int i,sz=0,yw=0,kg=0,qt=0;
printf("输入一段英文");
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='0'&&a[i]<='9')
sz++;
else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')
yw++;
else if(a[i]==' ')
kg++;
else
qt++;
}
printf("%d\n",sz);
printf("%d\n",yw);
printf("%d\n",kg);
printf("%d\n",qt);
}
17、任意输入一段英文,统计其中英文单词的个数。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
char a[1000];
int i,zm=0;
gets(a);
for(i=0;a[i]!='\0';i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
if(!(a[i+1]>='a'&&a[i+1]<='z')||(a[i+1]>='A'&&a[i+1]<='Z'))
if(a[i+1]!='-')
zm++;
}
printf("%d",zm);
}
18、任意输入一段英文,将其中所有的数字字符删除,再输出结果。(删除功能采用的是后面的往前覆盖的思路设计)
方法一
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
char a[1000];
int i,j;
printf("输入一段英文");
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='0'&&a[i]<='9')
{
for(j=0;a[j]!='\0';j++)
{
a[i+j]=a[i+j+1];
}
i--;
}
}
puts(a);
}
19、从键盘上任意输入一个字符串,将该字符串中的字符按照ASCII码的顺序从小到大的顺序排序后输出。
五、自定义函数
1、任意输入一个整数,编写一个函数isPrimeNumber用来判断输入的整数是否是素数。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void f(int n)
{
int i,j=0;
for(i=1;i<=n;i++)
{
if(n%i==0)
j++;
}
if(j==2)
{
printf("是质数");
}
else
{
printf("不是质数");
}
}
void main()
{
int n;
printf("任意输入一个整数");
scanf("%d",&n);
f(n);
}
2、编写函数求Fibonacci数列的第n项的值,然后再主函数中调用该函数输出第n项的值。
#include<stdio.h>
#include<windows.h>
#include<math.h>
int f(int n)
{
int y;
if(n>=3)
y=f(n-1)+f(n-2);
if(n==2||n==1)
y=1;
return y;
}
void main()
{
int n,z;
printf("任意输入一个整数");
scanf("%d",&n);
z=f(n);
printf("%d",z);
}
3、编写排序的函数sort,实现调用该函数对任意一组数据进行从小到大的顺序排序(建议使用冒泡法排序的格式书写)。
*4、任意输入一个正整数给n,求n!(例如5!=1*2*3*4*5)。要求将求n!的过程写成自定义函数。
#include<stdio.h>
#include<windows.h>
#include<math.h>
double f(double n)
{
double y;
if(n>=2)
y=n*f(n-1);
else if(n==1)
y=1;
return y;
}
void main()
{
double n,z;
scanf("%lf",&n);
z=f(n);
printf("%lf",z);
}
*5、汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
#include<stdio.h>
#include<windows.h>
#include<math.h>
void hanoi(int n,char star,char help,char end)
{
if(n>=2)
{
hanoi(n-1,star,end,help);
printf("%c-->%c\n",star,end);
hanoi(n-1,help,star,end);
}
else if(n==1)
{
printf("%c-->%c\n",star,end);
}
}
void main()
{
int n;
printf("输入几个圆盘");
scanf("%d",&n);
hanoi(n,'A','B','C');
}
*6、任意输入一段英文,分别统计出英文字符、数字字符、空格字符和其他字符等四大类字符各自的个数。要求将统计四大类字符个数的过程书写为自定义函数,输入、调用函数、输出结果放在主函数中完成。
#include<stdio.h>
#include<windows.h>
#include<math.h>
int i,sz,yw,qt,kg;
void f(char a[1000])
{
int i;
sz=0,yw=0,qt=0,kg=0;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='0'&&a[i]<='9')
sz++;
else if(a[i]==' ')
kg++;
else if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
yw++;
else
qt++;
}
}
void main()
{
char a[1000];
printf("输入一段英文");
gets(a);
f(a);
printf("%d\n",sz);
printf("%d\n",qt);
printf("%d\n",kg);
printf("%d\n",yw);
}
*7、一个班级33位同学,输入他们的程序设计技术期末考试成绩,要求将求所有人的平均分功能、求最高分功能、最低分功能分别写成3个自定义函数。
判断平均分
#include<stdio.h>
#include<windows.h>
#include<math.h>
void f(double a[33])
{
int i;
double y=0;
for(i=0;i<=32;i++)
{
y=y+a[i];
}
y=y/5;
printf("%lf",y);
}
void main()
{
int i;
double a[33];
for(i=0;i<=32;i++)
{
printf("输入第%d个同学的成绩",i+1);
scanf("%lf",&a[i]);
}
f(a);
}
判断大
#include<stdio.h>
#include<windows.h>
#include<math.h>
void f(double a[33])
{
int i,j;
double z=0,t;
for(j=1;j<=32;j++)
{
for(i=0;i<=31;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
printf("%lf",a[32]);
}
void main()
{
int i;
double a[33];
for(i=0;i<=32;i++)
{
printf("输入第%d个同学的成绩",i+1);
scanf("%lf",&a[i]);
}
f(a);
}
判断小
#include<stdio.h>
#include<windows.h>
#include<math.h>
void f(double a[33])
{
int i,j;
double z=0,t;
for(j=1;j<=32;j++)
{
for(i=0;i<=31;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
printf("%lf",a[0]);
}
void main()
{
int i;
double a[33];
for(i=0;i<=32;i++)
{
printf("输入第%d个同学的成绩",i+1);
scanf("%lf",&a[i]);
}
f(a);
}
8、输入2个正整数给x和y,求得这2个数值的最大公约数和最小公倍数,(要求求最大公约数和求最小公倍数的功能必须分别用自定义函数来完成)。
#include<stdio.h>
#include<windows.h>
#include<math.h>
int f(int x,int y)
{
int i,k;
for(i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
k=x*y/i;
return k;
}
int f(int x,int y)
{
int i,z;
for(i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
z=i;
return z;
}
void main()
{
int x,y,a,b;
printf("任意输入两个值");
scanf("%d %d",&x,&y);
a=f(x,y);
b=f(x,y);
printf("最大公约数%d",a);
printf("最小公倍数%d",b);
}
9验证歌德巴赫猜想:输入一个任何一个不小于6的偶数,它可以表示为两个素数之和。(也就是两个质数之和,要求判断某个数是否是素数的过程用自定义函数来 实现)
六、指针
*1、从键盘输入一个字符串,要求找出大写字母、小写字母、空格、数字和其他字符各自的数量。(必须用指针来完成)
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
char *p;
int n,i,big=0,xiao=0,sz=0,kg=0,qt=0;
printf("输入你想要输入的数量");
scanf("%d",&n);
p=(char*)malloc(1*n);
getchar();
gets(p);
for(i=0;*(p+i)!='\0';i++)
{
if(*(p+i)>='A'&&*(p+i)<='Z')
big++;
else if(*(p+i)>='a'&&*(p+i)<='z')
xiao++;
else if(*(p+i)>='0'&&*(p+i)<='9')
sz++;
else if(*(p+i)==' ')
kg++;
else
qt++;
}
printf("%d\n",big);
printf("%d\n",xiao);
printf("%d\n",sz);
printf("%d\n",kg);
printf("%d\n",qt);
}
2、输入6个整数,要求输出最大值和最小值(必须用指针来完成)
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int *p,i,j,t;
p=(int*)malloc(6*4);
for(i=0;i<=5;i++)
{
printf("输入%d个数字",i+1);
scanf("%d",p+i);
}
for(j=1;j<=5;j++)
{
for(i=0;i<=4;i++)
{
if(*(p+i)>*(p+i+1))
{
t=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=t;
}
}
}
printf("%d\n",*p);
printf("%d\n",*(p+5));
}
*3、输入10个整数,存入一维数组a中。要求设计一个函数move,实现如下功能:使数组a中前面各个元素顺序向后移动m个位置,最后m个数变成最前面的m个数。(要求此题必须用自定义函数外加指针来实现数据的移动)
#include<stdio.h>
#include<windows.h>
#include<math.h>
void move(int *p,int *q,int m)
{
int i,j;
for(i=m-1;i>=0;i--)
{
j=(m-1)-i;
{
*(q+j)=*(p+i);
}
}
for(i=9;i>m-1;i--)
{
j=i;
{
*(q+j)=*(p+i);
}
}
for(j=0;j<=9;j++)
{
printf("%d",*(q+j));
}
}
void main()
{
int *p,i,m,*q;
p=(int*)malloc(10*4);
q=(int*)malloc(10*4);
printf("你想要移动的位置");
scanf("%d",&m);
for(i=0;i<=9;i++)
{
printf("输入第%d个数",i+1);
scanf("%d",p+i);
}
move(p,q,m);
}