c语言程序范例

第2章:程序设计基础

题目1、定义三个整型变量,从键盘输入三个整数,计算平均值,计算结果输出到屏幕上,平均值保留2位小数。 #include <stdio.h>

void main()

{ int a,b,c;

double y;

scanf("%d%d%d",&a,&b,&c);

y=(a+b+c)/3.0;

printf("%.2f\n",y);

}

题目2、从键盘输入任意一个四位正整数,将其各位数字反序输出到屏幕上。

#include <stdio.h>

void main()

{ int x,a,b,c,d;

scanf("%d",&x);

a=x%10; //个位数

b=x/10%10; //十位数

c=x/100%10; //百位数

d=x/1000%10; //千位数

printf("%d %d %d %d\n",a,b,c,d);

}

第3章:选择结构程序设计

题目3、计算分段函数,输入x(整数),输出y(整数):

┌ 2x+1 (x<1)

y=│ 4x+3 (x=1)

└ 6x+5 (x>1)

解答方法1:

#include <stdio.h>

void main()

{ int x,y;

scanf("%d",&x);

if(x<1)

y=2*x+1;

if(x==1) //关系运算“等于”必须使用两个等号

y=4*x+3;

if(x>1)

y=6*x+5;

printf("%d\n",y);

}

解答方法2:

#include <stdio.h>

void main()

{ int x,y;

scanf("%d",&x);

if(x<1)

y=2*x+1;

else if(x==1)

y=4*x+3;

else

y=6*x+5;

printf("%d\n",y);

}

解答方法3:下面程序是错的x=0时输出5

#include <stdio.h>

void main()

{ int x,y;

scanf("%d",&x);

if(x<1)

y=2*x+1;

if(x==1)

y=4*x+3;

else

y=6*x+5;

printf("%d\n",y);

}

题目4、输入三个整数,然后输出最大值。

#include <stdio.h>

void main()

{ int a,b,c,x;

scanf("%d%d%d",&a,&b,&c);

x=a;

if(x<b)

x=b;

if(x<c)

x=c;

printf("%d\n",x);

}

题目5、输入三个双精度型数,按由大至小的顺序输出。

#include <stdio.h>

void main()

{ double a,b,c,t;

scanf("%lf%lf%lf",&a,&b,&c);

if(a<b)

{ t=a;a=b;b=t;} //if控制多条语句,必须使用花括号构成复合语句。 if(a<c)

{ t=a;a=c;c=t;}

if(b<c)

{ t=b;b=c;c=t;}

printf("%d %d %d\n",a,b,c);

}

题目6、输入一个字符,判断该字符的类型(数字、大写字母、小写字母、其它字符) 解答:

#include <stdio.h>

void main()

{ char x;

x=getchar();

if(x>='0' && x<='9') //不能写成'0'<=x<='9'

printf("%c 是数字\n",x);

else if(x>='A' && x<='Z')

printf("%c 是大写字母\n",x);

else if(x>='a' && x<='z')

printf("%c 是小写字母\n",x);

else

printf("%c 是其它字符\n",x);

}

第4章:循环结构程序设计:固定次数循环

题目7、计算级数和 s= 1/(1*3) + 2/(3*5) + 3/(5*7) +....+ n/((2*n-1)*(2*n+1))。 (n从键盘输入,保留3位小数)

#include <stdio.h>

void main()

{ int k,n;

double s=0;

scanf("%d",&n);

for(k=1;k<=n;k++)

s=s+(double)k/((2*k-1)*(2*k+1)); //注意括号和类型

printf("%.3f\n",s);

}

题目8、计算s = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... 前n项和。

解答1:

#include <stdio.h>

void main()

{ int k,n;

double t=1,s=0;

scanf("%d",&n);

for(k=1;k<=n;k++) //注意项数,for(k=1;k<=n;k=k+2)不是n次循环

{ s=s+t/(2*k-1); //t为实型

t=-t;

}

printf("%.3f\n",s);

}

解答2:

#include <stdio.h>

void main()

{ int k,n;

double s=0;

scanf("%d",&n);

for(k=1;k<=n;k++)

{ if(k%2) //与if(k%2==1)等价

s=s+1.0/(2*k-1); //注意1.0

else

s=s-1.0/(2*k-1);

}

printf("%.3f\n",s);

}

解答3:

#include <stdio.h>

void main()

{ int k,n;

double t=1,s=0;

scanf("%d",&n);

for(k=1;k<=2*n-1;k=k+2)

{ s=s+t/k; //t为实型

t=-t;

}

printf("%.3f\n",s);

}

第4章:循环结构程序设计:不固定次数循环

题目9、计算s=1+1/2!+1/3!+....,直到加上的项值刚好小于0.00001为止。 解答1:

#include <stdio.h>

void main()

{ int k=1,p=1;

double s=0;

do

{ p=p*k

s=s+1.0/p;

k=k+1;

}while(1.0/p>=0.1e-4);

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

}

解答2:

#include <stdio.h>

void main()

{ int k=1,p=1;

double s=0;

while(1)

{ p=p*k

s=s+1.0/p;

if(1.0/p<0.1e-4)

break;

k=k+1;

}

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

}

题目10、输入若干名学生成绩(非负),统计平均分、最高分、不及格人数。 #include <stdio.h>

void main()

{ int n1=0,n2=0,s=0,g=0,x;

double v;

while(1)

{ scanf("%d",&x)

if(x<0) //输入负数时结束循环

break;

s+=x;n1++; //总成绩和总人数

if(x<60)

n2++; //不及格人数

if(x>g)

g=x; //最高分

}

v=(double)s/n1;

printf("平均分=%f,最高分=%d,不及格人数=%d\n",v,g,n2); }

第4章:循环结构程序设计:输出图形

题目11、输出n行图形(n值通过键盘输入),

假设n=5,则图形如下:

#####*

####**

###***

##****

#*****

#include <stdio.h>

void main()

{ int k=1,j,n;

scanf("%d",&n);

for(k=1;k<=n;k++)

{ for(j=1;j<=n-k+1;j++) //少一个:-k

printf("#");

for(j=1;j<=k;j++) //多一个:+k

printf("*");

printf("\n");

}

}

题目12、输出n行图形(n值通过键盘输入),

假设n=5,则图形如下:

#####*

####***

###*****

##*******

#*********

#include <stdio.h>

void main()

{ int k=1,j,n;

scanf("%d",&n);

for(k=1;k<=n;k++)

{ for(j=1;j<=n-k+1;j++)

printf("#");

for(j=1;j<=2*k-1;j++) //多二个:+2*k printf("*");

printf("\n");

}

}

题目13、输出n行图形(n值通过键盘输入),

假设n=5,则图形如下:

*********

*******

*****

***

*

#include <stdio.h>

void main()

{ int k=1,j,n;

scanf("%d",&n);

for(k=1;k<=n;k++)

{ for(j=1;j<=k-1;j++)

printf(" ");

for(j=1;j<=2*n-2*k+1;j++) //少二个:-2*k

printf("*");

printf("\n");

}

}

题目14、输出n行图形(n值通过键盘输入),

假设n=5,则图形如下:

#*******#

#*****#

#***#

#*#

#

#include <stdio.h>

void main()

{ int k=1,j,n;

scanf("%d",&n);

for(k=1;k<=n;k++)

{ for(j=1;j<=k-1;j++)

printf(" ");

if(k!=n)

printf("#");

for(j=1;j<=2*n-2*k-1;j++)

printf("*");

printf("#\n");

}

}

第4章:循环结构程序设计:其它

题目15、用100元钱买100只鸡,其中公鸡5元1只,母鸡3元1只,小鸡1元3只, 要求每种鸡至少买1只,100元钱必须一分不剩,计算输出所有的购买方案(整数解). 解答1:

#include <stdio.h>

void main()

{ int x,y,z;

for(x=1;x<20;x++)

for(y=1;y<33;y++)

for(z=1;z<100;z++)

if(x+y+z==100 && 5*x+3*y+z/3.0==100) //注意3.0

printf("%d %d %d\n",x,y,z);

}

解答2:

#include <stdio.h>

void main()

{ int x,y,z;

for(x=1;x<20;x++)

for(y=1;y<33;y++)

{ z=100-x-y;

if(x+3*y+z/3.0==100)

printf("%d %d %d\n",x,y,z);

}

}

题目16、有一条长阶梯,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶则最后剩5阶;若每步跨7阶,最后才正好一阶不剩。这条阶梯至少多少阶? #include <stdio.h>

void main()

{ int n=1;

while(1)

{ if(n%2==1 && n%3==2 && n%5==4 && n%6==5 && n%7==0)

break;

n++;

}

printf("%d\n",n);

}

第5章:数组

题目17、输入9名同学考试成绩,计算并输出平均分和高于平均分的成绩。

#include <stdio.h>

void main()

{ int a[9],k,s;

double v;

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

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

for(k=0,s=0;k<9;k++)

s+=a[k];

v=s/9.0;

printf("v=%f\n",v);

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

if(a[k]>v)

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

}

题目18、按行输入4行5列二维整型数组,将首列与最后一列对应元素对调,最后按列输出。

#include <stdio.h>

void main()

{ int a[4][5],i,j,t;

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

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

scanf("%d",&a[i][j]); //按行顺序输入

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

{ t=a[i][0];

a[i][0]=a[i][4]; //对调0、4两列元素

a[i][4]=t;

}

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

{ for(i=0;i<4;i++)

scanf("%d ",a[i][j]); //按列顺序输出

printf("\n");

}

}

题目19、按行输入4行5列二维整型数组,求最后一列元素最大值g,将g加到首行所有元素上,最后按行输出。 #include <stdio.h>

void main()

{ int a[4][5],i,j,g;

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

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

scanf("%d",&a[i][j]); //按行顺序输入

//在最后一列(列标为4)选最大数g

g=a[0][4];

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

if(a[i][4]>g)

g=a[i][4];

//将g加到首列(列标为0)元素上

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

a[0][j]+=g;

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

{ for(j=0;j<5;j++)

scanf("%d ",a[i][j]); //按行顺序输出

printf("\n");

}

}

题目20、输入字符串(长度小于80),将其中小写字母转换为大写、将大写字母转换为小写。

#include <stdio.h>

void main()

{ int k;

char a[80];

gets(a);

k=0;

while(a[k]!='\0')

{ if(a[k]>='A' && a[k]<='Z')

a[k]+=32;

else if(a[k]>='a' && a[k]<='z')

a[k]-=32;

k++;

}

puts(a);

}

第7章:函数与指针

题目21、编写一个函数vvv,求三个整数的平均数,并编写主函数中调用该函数。

#include <stdio.h>

double vvv(int x,int y,int z); //函数声明

void main()

{ int a=3,b=3,c=4;

double v;

v=vvv(a,b,c); //函数调用

printf("%f\n",v);

}

double vvv(int x,int y,int z) //函数定义

{ double w;

w=(x+y+z)/3.0;

return w;

}

题目22、编写一个函数fff,判断一个三位数是否为“水仙花”数(该数等于各位数字的立方和,如153),在主函数中判断并输出所有“水仙花”数。

#include <stdio.h>

int fff(int x); //函数声明

void main()

{ int a;

for(a=100;a<=999;a++)

if(fff(a))

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

}

int fff(int x) //函数定义

{ int a,b,c;

a=x%10;b=x/10%10;c=x/100%10;

if(x==a*a*a+b*b*b+c*c*c)

return 1;//是

else

return 0;//不是

}

题目23、编写一个函数fff,计算一个整型数组中非负元素的平均数。

#include <stdio.h>

double fff(int x[],int n); //函数声明

void main()

{ int a[8]={1,-2,3,4,-5,6,-7,8};

double v;

v=fff(a,8);

printf("%f\n",v);

}

double fff(int x[],int n) //函数定义

{ int k,m=0,s=0;

double w;

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

if(x[k]>=0)

{ s+=x[k];

m++;

}

w=(double)s/m;

return w;

}

题目24、编写一个函数fff,将一个字符串中的所有大写字母改成小写。 #include <stdio.h>

void fff(char *p); //函数声明

void main()

{ char a[]="aAbBcCdD";

fff(a);

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

}

方法1:

void fff(char *p) //函数定义

{ int k=0;

while(p[k])

{ if(p[k]>='A' && p[k]<='Z')

p[k]=p[k]+32;

k++;

}

}

方法2:

void fff(char *p) //函数定义

{

while(*p)

{ if(*p>='A' && *p<='Z')

*p=*p+32;

p++;

}

}

题目25、编写一个函数fff,计算两个整数的和、差、积、商(商的结果为实型)。 #include <stdio.h>

void fff(int x,int y,int *p1,int *p2,int *p3,double *p4); //函数声明 void main()

{ int a=3,b=4,c,d,e;

double f;

fff(a,b,&c,&d,&e,&f);

printf("%d,%d,%d,%f\n",c,d,e,f);

}

void fff(int x,int y,int *p1,int *p2,int *p3,double *p4) //函数定义 { *p1=x+y;

*p2=x-y;

*p3=x*y;

*p4=(double)x/y;

}

第11章:文件

题目26、读in.txt文本文件中的字符,并将所有非空格符输出到out.txt文件。 #include <stdio.h>

void main()

{ FILE *f1,*f2;char x;

f1=fopen("in.txt","r");

if(f1==NULL) return;

f2=fopen("out.txt","w");

if(f2==NULL){fclose(f1);return;}

while(1)

{ x=fgetc(f1);

if(feof(f1)) break;

if(x!=' ')

fputc(x,f2);

}

fclose(f1);

fclose(f2);

}

注意:在运行程序之前,必须在工作区文件夹先建立输入文件in.txt,输出文件由程序自动建立。

题目27、在文本文件aaa.txt中每行输入三角形三边边长(用空格间隔)。编写程序读数据文件,计算三角形面积,并将三边数据与面积输出到bbb.txt文件,如果三边不能构成三角形,输出相关信息。

#include <stdio.h>

#include <math.h>

void main()

{ FILE *f1,*f2;double a,b,c,p,s;int n;

f1=fopen("aaa.txt","r");

if(f1==NULL) return;

f2=fopen("bbb.txt","w");

if(f2==NULL){fclose(f1);return;}

while(1)

{ n=fscanf(f1,"%lf%lf%lf",&a,&b,&c);

if(n!=3) break;

if(a+b>c && b+c>a && a+c>b)

{ p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

fprintf(f1,"a=%f,b=%f,c=%f,s=%f\n",a,b,c,s);

}

else

fprintf(f2,"a=%f,b=%f,c=%f,不能组成三角形\n",a,b,c);

}

fclose(f1);

fclose(f2);

}

如果aaa.txt文件数据如下(程序运行前自己建立输入文件):

3 4 5

3.1 3.2 3.3

1 2 3

3.1 4.1 5.1

那么bbb.txt输出文件内容如下:

a=3.000000,b=4.000000,c=5.000000,s=6.000000

a=3.100000,b=3.200000,c=3.300000,s=4.425381

a=1.000000,b=2.000000,c=3.000000,不能组成三角形

a=3.100000,b=4.100000,c=5.100000,s=6.354173

相关推荐