C语言程序设计基础实验与题解参考答案

实验一
(1)定义iNUM时未对其初始化,修改程序参考如下:
#include<stdio.h>
void main(void)
{
int iNUM=5;
float fNUM=134.23;
printf("a=%d\tf=%.2f\n",iNUM,fNUM);
}
运行结果:
a=5 f=134.23
Press any key to continue_
(2)
#include<stdio.h>
void main()
{
int a,b,c,sum=0;
scanf("a=%d,%d%d",&a,&b,&c);
sum=a+b+c;
printf("a=%d,b=%d,c=%d\n",a,b,c);
printf("sum=%d",sum);
}
输入及其运行结果:
a=4,6 7
a=4,b=6,c=7
sum=17Press any key to continue_
(3)
#include<stdio.h>
void main()
{
char a,b;
scanf("%3c%4c",&a,&b);
printf("C1=%c,C2=%c",a+1,b-1);
}
运行结果:
ABCDEFGH
C1=B,C2=CPress any key to continue_
(4)
#include<stdio.h>
#include<conio.h>
void main()
{
float a;
printf("Enter a: ");
scanf("%f",a);
printf("The original data is:%f\n\n",a);
printf("The transformed data is:%.2f\n");
}
(5)
#include<stdio.h>
void main()
{
int a,b,c,d,f;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
c=a+b;
d=c*c;
f=a*a+b*b;
printf("它们的和为:%d\n",c);
printf("和的平方为:%d\n",d);
printf("平方的和为:%d\n",f);
}
(6)
#include<stdio.h>
void main()
{
float a,b;
printf("输入华氏温度值:");
scanf("%f",&a);
b=(a-32)*5/9;
printf("%f(℉)=%.2f(℃)\n",a,b);
}
(7)
#include<stdio.h>
void main()
{
float a,b,c;
printf("请输入该球队赢球场数和输球场数:");
scanf("%f%f",&a,&b);
c=a/(a+b);
c=c*100;
printf("该队赢球百分比:%.2f%\n",c);
}
实验二
(1)
#include<stdio.h>
void main()
{
float x,y;
printf("请输入x的值:");
scanf("%f",&x);
if(x<=1)
y=x;
else if(x>1&&x<10)
y=2*x-1;
else
y=3*x-11;
printf("按公式计算得y的值为:%f\n",y);
}
(2)
#include<stdio.h>
void main()
{
int i,j=0,k=0;
char a[50];
printf("请输入若干字符:");
gets(a);
for(i=0;a[i]!=0;i++)
{
if(48<=a[i]&&a[i]<=57)
j++;
if((65<=a[i]&&a[i]<=90)||(97<=a[i]&&a[i]<=122))
k++;
}
printf("数字字符的个数为:%d\n",j);
printf("英文字母的个数为:%d\n",k);
}
(3)
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,d,e,f,x1,x2;
printf("求解ax^2+bx+c=0的根,请输入a,b,c的值:");
scanf("%f%f%f",&a,&b,&c);
if(a==0&&b==0&&c==0)
printf("此方程有任意实数解。");
if(a==0&&b==0&&c!=0)
printf("此方程无实数解。");
if(a!=0)
{
d=b*b-4*a*c;
if

(d<0)
printf("此方程无实数解。");
if(d==0)
{
e=-b/(2*a);
printf("此方程有两相等实根:x1=x2=%f",e);
}
if(d>0)
{
f= sqrt( d);
f=f/(2*a);
e=-b/(2*a);
x1=e+f;
x2=e-f;
printf("此方程有两不等实根:x1=%f,x2=%f",x1,x2);
}
}
printf("\n");
}
(4)
#include<stdio.h>
void main()
{

float p,t;
printf("请输入该公司员工该月所接工程的利润:");
scanf("%f",&p);
if(p<=1000)
t=0;

if(p>1000&&p<=2000)
t=0.1*p;
if(p>2000&&p<=5000)
t=0.15*p;
if(p>5000&&p<=10000)
t=0.20*p;
if(p>10000)
t=0.25*p;
printf("该员工的利润提成为%.2f\n",t);
}
(5)
#include<stdio.h>
void main()
{
int a,b,c,t;
printf("请输入三个整数:");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;a=b;b=t;
}
if(b>c)
{
t=a;a=b;b=t;
}
if(a>b)
{
t=b;b=c;c=t;
}
printf("居中的数为:%d\n",b);
}
实验三
1.
#include<stdio.h>
void main()
{
int a,b;
printf("在2--1000之间的守形数如下:\n");
for(a=2;a<=1000;a++)
{
b=a*a;
if(b%10==a||b%100==a||b%1000==a||b%10000==a)
printf("%d ",a);
}
printf("\n");
}
2.
#include<stdio.h>
void main ()
{
int m,n,i,min,t;
printf("请输入两个正整数:");
scanf("%d%d",&m,&n);
if(m<=0||n<=0)
printf("输入错误!");
else
{
min=m<n?m:n;
i=2;
while(i<=min)
{
if(m%i==0&&n%i==0)
t=i;
i++;
}
printf("%d和%d的最大公约数是%d,最小公倍数是%d.\n",m,n,t,(m*n)/t);
}
}
3.
#include<stdio.h>
void main()
{
int a,n,s,i,t;
printf("输入a和n的值:");
scanf("%d%d",&a,&n);
printf("a=%d,n=%d.\n",a,n);
t=a;
for(i=1,s=0;i<=n;i++)
{
s=s+t;
t=t*10+a;
}
printf("a+aa+aaa+…+aa..a=%d\n",s);
}
4.
#include<stdio.h>
void main()
{
int n,s=0;
printf("输入一个正整数:");
scanf("%d",&n);
do{
s+=n%10;
n/=10;
}while(n>0);
printf("各位数之和是:%d\n",s);
}
5.
#include<stdio.h>
void main()
{
int i,x,y=1;
for(i=1;i<10;i++)
{
x=2*(y+1);
y=x;
}
printf("第一天共摘下桃子数为:%d\n",x);
}
实验四
1.
#include<stdio.h>
void main()
{
int i,j,s=1;
for(i=1;i<=1000;i++)
{
s=1;
for(j=2;j<=i/2;j++)
{
if(i%j==0)
s+=j;
}
if(s==i)
{
printf("%d=1",i);
for(j=2;j<=i/2;j++)
if(i%j==0)
printf("+%d",j);
printf("\n");
}
}
}
2.
#include<stdio.h>
void main()
{
int i,a,b,c;
for(a=6;a<=10000;a++)
{
b=c=1;
for(i=2;i<=a/2;i++)
{
if(a%i==0)
b=b+i;
}
for(i=2;i<=b/2;i++)
{
if(b%i==0)
c=c+i;
}
if(a==c&&a!=b)
printf("%6d,%6d\n

",a,b);
}
}
运行结果:
220, 284
284, 220
1184,1210
1210,1184
2620,2924
2924, 2620
5021,5564
5564, 5020
6232,6368
6368, 6232
Press any key to continue_
3.
#include<stdio.h>
void main()
{
int a,b,c,d,e;
for(a=1;a<=100;a++)
for(b=1;b<=100;b++)
for(c=1;c<=100;c++)
{
if((a+b+c==100)&&(9*a+6*b+c==300))
printf("母鸡%d只,公鸡%d只,小鸡%d只。\n",a,b,c);
}
}
4.
#include<stdio.h>
void main()
{
char i,j,k;
for(i='X';i<='Z';i++)
for(j='X';j<='Z';j++)
for(k='X';k<='Z';k++)
{
if(i!=j&&i!=k&&j!=k)
{
if(i!='X'&&k!='X'&&k!='Z')
printf("A--%c\tB--%c\tC--%c\n",i,j,k);
}
}
}
实验五
1.
#include<stdio.h>
void main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100
};
int t1,t2,n,e,i,j;
printf("原有数组为:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n请输入一个新数:");
scanf("%d",&n);
e=a[9];
if(n>e)
a[10]=n;
else
{
for(i=0;i<10;i++)
{
if(a[i]>n)
{
t1=a[i];
a[i]=n;
for(j=i+1;j<11;j++)
{
t2=a[j];
a[j]=t1;
t1=t2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%d ",a[i]);
printf("\n");
}
2.
#include<stdio.h>
void main()
{
int a[10],i,j,t;
printf("请输入十个整数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0,j=10;i<j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("逆序存放后的数组为:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
3.
#include<stdio.h>
void main()
{
int x,mid,top,bottom,a[15]={1,2,3,4,5,6,7,8,11,14,35,68,70,87,99};
printf("请输入要查找的数:");
scanf("%d",&x);
bottom=0;
top=14;
while(bottom<=top)
{
mid=(top+bottom)/2;
if(x<a[mid])
top=mid-1;
else if(x>a[mid])
bottom=mid+1;
else
break;
}
if(bottom<=top)
printf("%d在数组中的下标为%d\n",x,mid);
else printf("查无此数!\n");
}
4.
#include<stdio.h>
#include<string.h>
void main()
{
char a[80];
int i;
printf("请输入一个字符串:\n");
gets(a);
for(i=0;i<strlen(a);i++)
{
if('a'<=a[i]&&a[i]<='z')
a[i]=a[i]-32;
else if('A'<=a[i]&&a[i]<='Z')
a[i]=a[i]+32;
}
puts(a);
}
5.
#include<stdio.h>
void main()
{
long a,b;
int i;
a=b=1;
printf("斐波那契数列的前20项分别为:\n");
printf("%7ld%7ld",a,b);
for(i=3;i<=20;i++)
{
a=a+b;
printf("%7ld",a);
if(i%5==0)
printf("\n");
i++;
b=a+b;
printf("%7ld",b);
if(i%5==0)
printf("\n");
}
}
实验六
1.
#define M 5
#define N 5
#inclu

de<stdio.h>
void main()
{
int i,j;
char a[M][N];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j]='*';
printf("%c",a[i][j]);
}
printf("\n");
}
}
2.
#include<stdio.h>
void main()
{
int i,j,a[10][10];
printf("\n");
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
{
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
3.
#include<stdio.h>
fun(int a[80][80],int i,int n)
{
int j,k,max=0;
for(j=0;j<n;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
k=j;
}
}
return k;
}
void main()
{
int a[80][80],i,j,k,m,n,b;
printf("请输入该二维数组的行列数:\n");
scanf("%d%d",&m,&n);
printf("请输入该数组:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",a[i][j]);
}
for(i=0;i<m;i++)
{
j=fun(a,i,n);
for(k=0;k<m;k++)
{
if(a[i][j]>=a[k][j])
b=k;
}
if(i==b)
printf("该数组的一个鞍点为%d.",a[i][j]);
}
}
实验七
1.出错原因:函数不可嵌套定义。
2.
#include<stdio.h>
void main()
{
int a[50],s=0,aver,i,d=0;
printf("请输入50个学生的成绩:\n");
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
s+=a[i];
}
aver=s/50;
printf("aver=%d\n",aver);
printf("分数高于平均分的人数:\n");
for(i=0;i<50;i++)
{
if(a[i]>=aver)
d++;
}
printf("%d\n",d);
}
3.
#include<stdio.h>
float fun(int n,int j)
{
int i;
float b[20],max,min,s=0.00;
printf("请输入每个评委对第%d位选手的评分:\n",j);
for(i=0;i<n;i++)
scanf("%f",&b[i]);
max=b[0];
min=b[0];
for(i=0;i<n;i++)
{
if(max<b[i])
max=b[i];
if(min>b[i])
min=b[i];
s+=b[i];
}
s=s-max-min;
s=s/(n-2);
return s;
}
void main()
{
int i,j,m,n,p;
printf("请输入参赛选手人数m和评委人数n:");
scanf("%d%d",&m,&n);
float a[100],t,b[100];
for(i=1;i<=m;i++)
{
a[i]=fun(n,i);
printf("第%d个选手的最终得分为%f\n",i,a[i]);
}
for(i=1;i<=m;i++)
b[i]=a[i];
for(i=1;i<m;i++)
{
p=i;
for(j=i+1;j<m+1;j++)
{
if(b[j]>b[p])
p=j;
}
t=b[p];b[p]=b[i];b[i]=t;
}
printf("成绩排名:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++)
if(b[i]==a[j])
printf("第%d名:第%d个选手(成绩%f)\n",i,j,b[i]);
}
}
4.
#include<stdio.h>
int f1(int n)
{
int i,m=1;
for(i=1;i<=n;i++)
{
m=m*i;
}
return m;
}
void main()
{
int a,b,c,d,j,k;
for(j=0;j<=7;j++)
{
a=f1(j);
for(k=0;k<=j;k++)
{
b=f1(k);
c=f1(j-k);
d=a/(b*c);
printf("%d ",d);
}
printf("\n");
}
}
5.
#include<stdio.h>
void input(int a[],int n)
{
int

i;
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
return;
}
void sort(int a[],int n)
{
int i,j,k;
for(j=1;j<=n-1;j++)
for(i=0;i<=n-1-j;i++)
if(a[i]<a[i+1])
{
k=a[i];
a[i]=a[i+1];
a[i+1]=k;
}
return;
}
void search(int a[],int n,int x)
{

int mid,top,bottom;
bottom=0;
top=n-1;
while(bottom<=top)
{
mid=(top+bottom)/2;
if(x==a[mid])
{
printf("%d位于表中第%d个数\n",x,mid+1);
break;
}
else if(x>a[mid])
top=mid-1;
else
bottom=mid+1;
}
if(bottom>top)
printf("查无此数!\n");
}
void main()
{
int a[10],i,b;
input(a,10);
printf("\n该10个整数为:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
sort(a,10);
printf("\n排序后:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n请输入要查找的数:");
scanf("%d",&b);
search(a,10,b);

}
6.
#include<stdio.h>
int day(int y,int m,int d)
{
int k,l;
int t[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
l=y%4==0&&y%100!=0||y%400==0;
for(k=1;k<m;k++)
d+=t[l][k];
return d;
}
void main()
{
int yy,mm,dd,d,w,s;
printf("please input yy,mm,dd:\n");
scanf("%d%d%d",&yy,&mm,&dd);
d=day(yy,mm,dd);
s=yy-1+(yy-1)/4-(yy-1)/100+(yy-1)/400+d;
w=s-7*(s/7);
p
rintf("%d-%d-%d:<%d>\n",mm,dd,yy,w);
}
7.
#include<stdio.h>
#include<math.h>
float fun(float a,float b,float c,float d)
{
float x=1,y,f1,f2;
do
{
y=x;
f1=((a*y+b)*y+c)*y+d;
f2=(3*a*y+2*b)*y+c;
x=y-f1/f2;
}while(fabs(x-y)>=1e-5);
return x;
}
void main()
{
float a,b,c,d;
printf("\n输入方程的系数a,b,c,d:\n");
scanf("%f,%f,%f,%f",&a,&b,&c,&d);
printf("\n方程是:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0",a,b,c,d);
printf("\nx=%10.7f\n",fun(a,b,c,d));
}
8.
#include<stdio.h>
int yue(int m,int n)
{
int i,min,t;
if(m<=0||n<=0)
printf("输入错误!");
else
{
min=m<n?m:n;
i=2;
while(i<=min)
{
if(m%i==0&&n%i==0)
t=i;
i++;
}
}
return t;
}
int bei(int m,int n,int t)
{
int s;
s=(m*n)/t;
return s;
}
void main ()
{
int m,n,t,s;
printf("请输入两个正整数:");
scanf("%d%d",&m,&n);
t=yue(m,n);
s=bei(m,n,t);
printf("%d和%d的最大公约数是%d,最小公倍数是%d.\n",m,n,t,s);
}
实验八
1.
#include<stdio.h>
void main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int t1,t2,n,e,i,j;
printf("original array is:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
printf("insert a new number:");
scanf("%d",&n);
e=a[9];
if(n>e)
a[10]=n;
else
{
for(i=0;i<10;i++)
{
if(a[i]>n)
{

t1=a[i];
a[i]=n;
for(j=i+1;j<11;j++)
{
t2=a[j];
a[j]=t1;
t1=t2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%d ",a[i]);
printf("\n");
}
2.
#define N 5
#include<stdio.h>
void main()
{
int a[N]={8,6,5,4,1},i,t;
printf("\n original array:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
for(i=0;i<N/2;i++)
{
t=a[i];
a[i]=a[N-i-1];
a[N-i-1]=t;
}
printf("\nsorted array:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
}
3.
#include<stdio.h>
void main()
{
int x,mid,top,bottom,a[15]={1,2,3,4,5,6,7,8,11,14,35,68,70,87,99};
printf("请输入要查找的数:");
scanf("%d",&x);
bottom=0;
top=14;
while(bottom<=top)
{
mid=(top+bottom)/2;
if(x<a[mid])
top=mid-1;
else if(x>a[mid])
bottom=mid+1;
else
break;
}
if(bottom<=top)
printf("%d在数组中的下标为%d\n",x,mid);
else printf("查无此数!\n");
}
4.
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
void fun(char p1[],char p2[])
{
int i,j;
for(i=0;p1[i]!='\0';i++);
for(j=0;p2[j]!='\0';j++)
p1[i++]=p2[j];
p1[i]='\0';
}
void main()
{
char s1[80],s2[40];
system("CLS");
printf("Enter s1 and s2:\n");
scanf("%s%s",s1,s2);
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
printf("Invoke fun(s1,s2):\n");
fun(s1,s2);
printf("After invoking:\n");
printf("%s\n",s1);
}
实验九
1.
#include<stdio.h>
void main()
{
char a[10],b[10],*t,*s;
int i,j;
printf("请给数组a和b赋值:\n");
gets(a);
gets(b);
printf("对应元
素交换后数组a和b:\n");
for(t=a,s=b;*t!='\0'&&*s!='\0';t++,s++)
{
i=*t;
*t=*s;
*s=i;
}
puts(a);printf("\n");
puts(b);printf("\n");
}
2.
#include<stdio.h>
void main()
{
int a[10],*s=a,i,max;
printf("请输入整型数组的各个元素:\n");
for(i=0;i<10;i++)
scanf("%d",s+i);
for(i=0;i<10;i++)
{
if(*(s+i)>max)
max=*(s+i);
}
printf("该整形数组的最大值为:%d\n",max);
}
3.
#include<stdio.h>
void fun(char *s)
{
int i,j;
for(i=j=0;s[i]!='\0';i++)
if(s[i]!='k')
s[j++]=s[i];
s[j]='\0';
}
void main()
{
char s[80];
printf("\nEnter a string:");
gets(s);
printf("The original string:");
puts(s);
fun(s);
printf("The string after deleted:");
puts(s);
printf("\n");
}
4.
#include<stdio.h>
void sort(int [],int);
void main()
{
int i,a[10];
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
v

oid sort(int a[],int n)
{
int i,j,p,t;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(a[j]<a[p])
{
p=j;
}
t=a[p];
a[p]=a[j];
a[j]=t;
}
}
5.
#include<stdio.h>
#define N 10
void main()
{
int s[N],*p=s,*min,*max,t1,t2;
printf("输入十个整数(用空格分开):\n");
for(p=s;p<s+N;p++)
scanf("%d",p);
min=&s[0];max=&s[N-1];
for(p=s;p<s+N;p++)
{
if(*p<*min)
min=p;
if(*p>*max)
max=p;
}
t1=*min;*min=s[0];s[0]=t1;
t2=*max;*max=s[N-1];s[N-1]=t2;
for(p=s;p<s+N;p++)
printf("%d ",p);
printf("\n");
}
6.
































相关文档
最新文档