3.
(1)0
(2)1(3)1(4)0(5)1
4.max=(max=a>b?
a:
b)>c?
max:
c
5.-4
6.1
7.5,0,3
8.
(1)(a==0)
(2)(b==0)(3)(disc<0)
4-3编程题
1.#include“math.h”
main()
{floata,b,c,s,area;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“%f”,area);
}
}
2.main()
{intx,y;
scanf(“%d,%d”,&x,&y);
if(x*x+y*y>1000)
printf(“%d\n”,(x*x+y*y)/100);
else
printf(“%d\n”,x+y);
}
3.main()
{intx,
scanf(“%d”,&x);
if(x%3==0&&x%5==0&&x%7==0)
printf(“yes\n”);
else
printf(“no\n”);
}
4.#include“math.h”
main()
{floatx,y;
scanf(“%f”,&x);
if(x<-2)y=x*x-sin(x);
elseif(x<=2)y=pow(2,x)+1;
elsey=sqrt(x*x+x+1);
printf(“%f\n”,y);
}
5.main()
{
longge,shi,qian,wan,x;
scanf("%ld",&x);
wan=x/10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/
printf("thisnumberisahuiwen\n");
else
printf("thisnumberisnotahuiwen\n");
}
6.main()
{floatp,w,s,d,f;
scanf(“%f,%,%f”,p,s,w);
if(s>3000)d=0.15
elseif(s>=2000)d=0.1;
elseif(s>=1000)d=0.08;
elseif(s>=500)d=0.05;
elseif(s>=250)d=0.02;
elsed=0
f=p*w*s*(1-d);
printf(“%f”,f);
}
习题5
5-1单选
1~5CDABA6~10ABDDB11~14DBCB
5-2填空题
1.20
2.333
3.
(1)i<10
(2)j%3!
=0
4.
(1)flag*(float)k/(k+1)
(2)flag=-flag
5.
(1)max=x
(2)x!
=-1(3)scanf("%d",&x)
5-3编程题
1.
(1)main()
{inti;lonts=0;
for(i=1;i<=100;i++)
s+=i*i;
printf(“%ld”,s);
}
(2)main()
{inti=1;lontp=1;floats=0;
do{
s+=1.0/p;
p*=++i;
}while(1.0/p>1e-6)
printf(“%f”,s);
}
2.main()
{intm,n,t,a,b;
scanf(“%d,%d” ,&m,&n) ;
if(ma=m;b=n;
t=m%n ;
while(t)
{m=n ;n=t ;t=m%n;}
printf(”%d,%d”,n,a*b/n);
}
3.main()
{intx,y,s=1;
scanf(”%d,%d ”,&x,&y) ;
for( ;y>0 ;y--)s*=x ;
printf(”%d,%d,%d\n ”,s%10,s/10%10,s/100%10);
}
4.main()
{intx,y,z;
for(x=1 ;x<20 ;x++)
for(y=1 ;y<33 ;y++)
{z=100-x-y ;
if(z>=0&&(5*x+3*y+z/3)-100<1e-5)
printf(”x=%d,y=%d,z=%d\n”,x,y,z) ;
}
}
5.main()
{intj,k ;
for(j=1 ;j<=4 ;j++)
{for(k=1;k<=4-j;k++;)printf(””);
for(k=1 ;k<=2*j-1 ;k++)
printf(”*”) ;
printf(”\n”) ;
}
for(j=3;j>=1;j--)
{for(k=1;k<=4-j;k++;)printf(””);
for(k=1;k<=2*j-1;k++)
printf(”*”);
printf(”\n”);
}
}
6.例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
main()
{
inti,j,k,n;
printf("'waterflower'numberis:
");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
10.main()
{intx,y,z;
for(x=1 ;x<17 ;x++)
for(y=1 ;y<25 ;y++)
{z=30-x-y ;
if(z>0&&3*x+2*y+z==50)
printf("man=%d,woman=%d,child=%d\n”,x,y,z);
}
}
习题6
6-1填空题
1-5 CBBAD6-10 DBCCD11-15 DCABC
6-2思考题
1. 120
2. x
3. 3,2,2,34.fac×1.0/i
5. 8,17
6. 9
7. 1.0/(i*i)
8. fun-in:
30,20,10
fun-end:
1015,35,1050
10,20,30
9. 01234510.93636
6-3编程题
1.
voidzhuan()
{charch;
while((ch=getchar())!
=’\n’)
{if(ch>=’a’&&ch<=’z’)ch=ch-32;
putchar(ch);
}
}
2.
floatexpp(intn)
{intk,fac=1;
floatsum=0;
for(k=1;k<=n;k++)
{fac*=k;
sum+=1.0/fac;
}
return(sum);
}
3.
intxy3(intx,inty)
{intk,num=1;
for(k=1;k<=y;k++)
num*=x;
num=num%1000;
returnnum;
}
4.
intage(intn)
{intc;
if(n==1)c=10;
elsec=age(n-1)+2;
returnc;
}
习题7
7-1填空题
1-5 DBCCB6-8BDC
7-2思考题
1. c
2. 60
3. 1000 10
4. 16
7-3编程题
1.
#defineF(a)a*a+sqrt(3*a*a+2*a+1)
main()
{floatx,f;
scanf(“%f”,&x);
f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x);
printf(“%f\n”,f);
}
习题8
8-1单选题
1~10CADACCCDAB
11~16CBBCD
10000
01000
00100
00010
00001
8-2填空题
1
(1)1345
(2)10010(3)QuickC(4)
2.
(1)j+=2
(2)a[i]>a[j]
3.
(1)r+b[k]
(2)*x
8-3编程题
1.#defineN10
main()
{inta[N]={1,2,3,4,5,6,7,8,9,0},osum=0,qsum=0,j;
for(j=0;j<10;j++)
if(a[j]%2)qsum+=a[j];
elseosum+=a[j];
printf(“osum=%d,qsum=%d\n”,osum,qsum);
}
2.#defineN10
main()
{inta[N]={10,20,30,40,50,60,70,80,90},j,k,x;
scanf(“%d”,&x);
for(j=0;jif(xfor(k=N-1;k>j;k--)
a[k]=a[k-1];
a[j]=x;
for(j=0;jprintf(“%d”,a[j]);
}
3.#defineM3
main()
{inta[M][M]={{1,2,3},{4,5,6},{7,8,9}},j,sum1=0,sum2=0;
for(j=0;j{sum1+=a[j][j];
sum2+=a[j][M-(j+1)];
}
printf(“%d,%d\n”,sum1,sum2);
}
4.#defineM3
main()
{inta[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;
for(j=0;jfor(k=0;kif(a[j][k]!
=a[k][j]){flag=0;break;}
if(flag)printf(“ok”);
elseprintf(”NO”);
}
5.#include“string.h”
main()
{charc1[10],c2[10],j;
gets(c1);gets(c2);
for(j=0;(c1[j]==c2[j])&&c1[j]&&c2[j];j++);
printf(“%d\n”,c1[j]-c2[j]);
}
6.#include”string.h”
#defineM3
#defineN80
main()
{chara[M][N],j,k,n[5]={0};
for(j=0;jgets(a[j]);
for(j=0;jfor(k=0;a[j][k];k++)
if(a[j][k]>=’A’&&a[j][k]<=’Z’)n[1]++;
elseif(a[j][k]>=’a’&&a[j][k]<=’z’)n[2]++;
elseif(a[j][k]>=’0’&&a[j][k]<=’9’)n[3]++;
elseif(a[j][k]=’’)n[4]++;
else
n[5]++;
for(j=0;j<5;j++)
printf(“%4d”,n[j]);
}
习题9
9-1单选题
1~10DBCCBACBAD
11~15CDACC
9-2思考题
1.
(1)2,1
(2)10#30#5#(3)FOUR,P(4)60
2.
(1)49
(2)2(3)2(4)75319(5)15
1,1,1
1,1
3,3,3
3,3
(6)
10001
01010
00100
01010
10001
(7)
3.
(1)*x
(2)t
4.
(1)'\0'或0
(2)n++或n+=1或n=n+1
5.024
9-3编程题
1.按以下要求编写一个程序。
定义三个变量用于存放输入的三个整数;另定义三个指向整型变量的指针变量,并利用它们实现将输入的三个整数按由小到大的顺序输出。
main()
{
intn1,n2,n3;
int*pointer1,*pointer2,*pointer3;
printf("pleaseinput3number:
n1,n2,n3:
");
scanf("%d,%d,%d",&n1,&n2,&n3);
pointer1=&n1;
pointer2=&n2;
pointer3=&n3;
if(n1>n2)swap(pointer1,pointer2);
if(n1>n3)swap(pointer1,pointer3);
if(n2>n3)swap(pointer2,pointer3);
printf("thesortednumbersare:
%d,%d,%d\n",n1,n2,n3);
}
swap(p1,p2)
int*p1,*p2;
{intp;
p=*p1;*p1=*p2;*p2=p;
}
2.编写函数,得到两个整数相除的商和余数。
要求通过指针在函数间传递商和余数这两个数据。
main()
{inta,b,d ;floatc;
voidfun(inta,intb,float*c,int*d)
scanf(“%d,%d “,&a,&b);
fun(a,b,&c,&d);
printf(“%f%d”,c,d);
}
voidfun(inta,intb,float*c,int*d)
{if(b){*c=(float)a/b;*d=a%b;}}
3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
编写三个函数:
①输入10个数;②进行处理;③输出10个数。
main()
{voidinput(int*);voidoutput(int*);voidchuli(int*);
inta[10];
input(a);chuli(a);output(a);
}
voidinput(int*a)
{intj;
for(j=0;j<10;j++)
scanf(”%d”,a+j);
}
voidchuli(int*a)
{intj,minl=0,maxl=0;
for(j=0;j<10;j++)
{if(a[maxl]<*(a+j))maxl=j;
if(a[minl]>*(a+j))minl=j;
}
j=a[0];a[0]=a[minl];a[minl]=j;
j=a[9];a[9]=a[maxl];a[maxl]=j;
}
voidoutput(int*a)
{intj;
for(j=0;j<10;j++)
printf(”%d”,*(a+i));
}
4.按下列要求输入和输出下列数据阵列:
输入阵列如下:
1234
5678
9101112
输出阵列如下:
1211109
8765
4321
#defineM3
#defineN4
main()
{inta[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=a,t;
for(k=0,j=M*N-1;k{t=*(p+k);*(p+k)=*(p+j);*(p+j)=t;}
for(k=0 ;k{for(j=0 ;jprintf("%4d",a[k][j]);
printf(“\n”);
}
}
5..写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
main()
{
intlen;
char*str[20];
printf("pleaseinputastring:
\n");
scanf("%s",str);
len=length(str);
printf("thestringhas%dcharacters.",len);
}
length(p)
char*p;
{
intn;
n=0;
while(*p!
='\0')
{
n++;
p++;
}
returnn;
}
6.请编写一个程序,运行时输出命令行参数的个数及参数名。
main(intargc,char*argv[])
{intk;
printf(“argc=%d”,argc);
for(k=1;kprintf(“%s”,argv[k]);
}
7用指针数组操作将输入的八个字符串按由小到大的顺序。
#include“string.h”
main()
{
char*str1[8],ch[8][20],k;voidsort(char**);
for(k=0;k<8;k++)
{str1[k]=ch[k];
gets(str1[k]);}
sort(str1);
for(k=0;k<8;k++)
puts(str1[k]);
}
voidsort(char**str1)
{intk,j,t;char*c;
for(k=0;k<7;k++)
{t=k;
for(j=k+1;