# 100例C语言经典编程题 | 浙大版C语言题目集第三版，助力你C语言从入门到精通

## 1、练习2-1 Programming in C is fun!

#include<stdio.h>
int main()
{
printf("Programming in C is fun!\n");
}

## 2、练习2-3 输出倒三角图案

* * * * * * * * * *

#include<stdio.h>
int main()
{

printf("* * * *\n");
printf(" * * *\n");
printf("  * *\n");
printf("   *\n");
return 0;
}

## 3、练习2-4 温度转换

fahr = 150, celsius = 计算所得摄氏温度的整数值

#include<stdio.h>
int main()
{
int F=150;
printf("fahr = 150, celsius = %d\n",5*(F-32)/9);

}

## 4、练习2-6 计算物体自由下落的距离

height = 垂直距离值

#include<stdio.h>
#include<math.h>
int main()
{
int g=10;
int t=3;
printf("height = %.2lf\n",(double)(g/2*(int)pow(t,2)));
}

## 5、练习2-8 计算摄氏温度

150

Celsius = 65

#include<stdio.h>
int main()
{

int c;
scanf("%d\n",&c);
printf("Celsius = %d\n",5*(c-32)/9);
}

## 6、练习2-9 整数四则运算

3 2

3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 = 1

#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d\n",&m,&n);
if(n!=0){
printf("%d + %d = %d\n",m,n,m+n);
printf("%d - %d = %d\n",m,n,m-n);
printf("%d * %d = %d\n",m,n,m*n);
printf("%d / %d = %d\n",m,n,m/n);

}
return 0;
}

## 7、练习2-10 计算分段函数[1]

10

f(10.0) = 0.1

0

f(0.0) = 0.0

#include<stdio.h>
int main()
{
double x;
scanf("%lf\n",&x);
if(x==0) printf("f(%.1lf) = %.1lf\n",x,x);
else printf("f(%.1lf) = %.1lf\n",x,1/x);
return 0;
}

## 8、练习2-11 计算分段函数[2]

10

f(10.00) = 3.16

-0.5

f(-0.50) = -2.75

#include<stdio.h>
#include<math.h>
int main()
{
double x;
scanf("%lf\n",&x);
if(x>=0) printf("f(%.2lf) = %.2lf\n",x,pow(x,0.5));
else printf("f(%.2lf) = %.2lf\n",x,pow(x+1,2)+2.0*x+1/x);
return 0;
}

## 9、练习2-12 输出华氏-摄氏温度转换表

32 35

fahr celsius 32 0.0 34 1.1

40 30

Invalid.

#include<stdio.h>
int main()
{
int lower,upper;
int i;
scanf("%d %d",&lower,&upper);
if(lower<=upper)
{
printf("fahr celsius\n");
for(i=lower;i<=upper;i+=2)
{
printf("%d%6.1lf\n",i,(double)(5.0*(i-32)/9.0));
}

}
else printf("Invalid.\n");
return 0;
}

## 10、练习2-13 求N分之一序列前N项和

6

sum = 2.450000

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i;
double sum=0.0;
for(i=1;i<=n;i++)
{
sum+=1.0/i;
}
printf("sum = %.6lf\n",sum);
return 0;
}

## 11、练习2-14 求奇数分之一序列前N项和

23

sum = 2.549541

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i;
double sum=0.0;
int d=1;
for(i=1;i<=n;i++)
{
sum+=1.0/d;
d+=2;
}
printf("sum = %.6lf\n",sum);
return 0;
}

## 12、练习2-15 求简单交错序列前N项和

10

sum = 0.819

#include<stdio.h>
int main()
{
int n;
int l=1;
scanf("%d",&n);
int i;
double sum=0.0;
int d=1;
for(i=1;i<=n;i++)
{
sum+=1.0/d*l;
d+=3;
l=-l;
}
printf("sum = %.3lf\n",sum);
return 0;
}

## 13、练习2-17 生成3的乘方表

3

pow(3,0) = 1 pow(3,1) = 3 pow(3,2) = 9 pow(3,3) = 27

#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<=n;i++)
{
printf("pow(3,%d) = %d\n",i,(int)pow(3,i));
}
return 0;
}

## 14、练习2-18 求组合数

2 7

result = 21

#include<stdio.h>
double fun(int n)
{
int i;
double t=1.0;
for(i=1;i<=n;i++)
{
t*=i;
}
return t;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
double result=fun(n)/(fun(m)*fun(n-m));
printf("result = %.0lf\n",result);
}

## 15、习题2-1 求整数均值

1 2 3 4

Sum = 10; Average = 2.5

#include<stdio.h>
int main()
{
int a1,a2,a3,a4;
scanf("%d %d %d %d",&a1,&a2,&a3,&a4);
printf("Sum = %d; Average = %.1lf\n",a1+a2+a3+a4,(double)(a1+a2+a3+a4)/4.0);
return 0;

}

## 16、习题2-2 阶梯电价

10

cost = 5.30

100

cost = 55.50

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n<=50)
{
if(n<0) printf("Invalid Value!\n");
else printf("cost = %.2lf\n",n*0.53);
}
else printf("cost = %.2lf\n",(50*0.53)+(n-50)*(0.53+0.05));
return 0;
}

## 17、习题2-3 求平方与倒数序列的部分和

5 10

sum = 355.845635

#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int i;
if(m<=n&&m!=0&&n!=0){
double sum=0.0;
for(i=m;i<=n;i++)
{
sum+=(double)pow(i,2)+1.0/i;
}
printf("sum = %.6lf\n",sum);}
return 0;
}

## 18、习题2-4 求交错序列前N项和

5

0.917

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i;
if(n!=0){
double sum=0.0;
int t1=1;
int t2=1;
int temp=1;
for(i=1;i<=n;i++)
{
sum+=((double)t1/t2)*temp;
t1++;
t2+=2;
temp=-temp;
}
printf("%.3lf\n",sum);}
return 0;
}

## 19、习题2-5 求平方根序列前N项和

10

sum = 22.47

#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int i;
//if(n!=0){
double sum=0.0;
for(i=1;i<=n;i++)
{
sum+=sqrt((double)i);
}
printf("sum = %.2lf\n",sum);
//}
return 0;
}

## 20、习题2-6 求阶乘序列前N项和

5

153

#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int i;
//if(n!=0){
long long sum=0;
for(i=1;i<=n;i++)
{
sum+=fun(i);
}
printf("%lld\n",sum);
//}
return 0;
}

int fun(int n)
{
int i;
long long t=1;
for(i=1;i<=n;i++)
{
t=t*i;
}
// printf("t=%lld\n",t);
return t;
}

## 21、练习3-2 计算符号函数的值

10

sign(10) = 1

0

sign(0) = 0

-98

sign(-98) = -1

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n>=0)
{
if(n>0) printf("sign(%d) = 1\n",n);
else printf("sign(%d) = 0\n",n);
}
else printf("sign(%d) = -1\n",n);
}

## 22、练习3-4 统计字符

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

aZ & 09 Az

letter = 4, blank = 3, digit = 2, other = 1

#include<stdio.h>
int main()
{
char str[10];
int i;
int letter=0;
int blank=0;
int digit=0;
int other=0;
for(i=0;i<10;i++)
{
scanf("%c",&str[i]);
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') letter++;
else if(str[i]==' '||str[i]=='\n') blank++;
else if(str[i]>='0'&&str[i]<='9') digit++;
else other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other);
return 0;
}

## 23、练习3-5 输出闰年

2048

2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048

2000

Invalid year!

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n>=2001&&n<=2100)
{
int temp=0;
int i;
for(i=2001;i<=n;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{printf("%d\n",i);temp++;}
}
if(temp==0) printf("None\n");
}
else
printf("Invalid year!\n");
return 0;
}

## 24、练习3-7 成绩转换

• 大于等于90分为A；
• 小于90且大于等于80为B；
• 小于80且大于等于70为C；
• 小于70且大于等于60为D；
• 小于60为E。

90

A

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n>=90) printf("A\n");
else
{
if(n>=80) printf("B\n");
else
{
if(n>=70) printf("C\n");
else
{
if(n>=60) printf("D\n");
else printf("E\n");
}
}
}
}

## 25、练习3-8 查询水果价格

[1] apple [2] pear [3] orange [4] grape [0] exit

3 -1 0 2

[1] apple [2] pear [3] orange [4] grape [0] exit price = 4.10 price =0.00

1 2 3 3 4 4 5 6 7 8

[1] apple [2] pear [3] orange [4] grape [0] exit price = 3.00 price =2.50 price = 4.10 price = 4.10 price = 10.20

#include<stdio.h>
int main()
{
int n;
int arr[1000];
int i=0;
while(scanf("%d",&arr[i])!=EOF&&arr[i]!=0)
{
i++;
}
int t=i;
printf("[1] apple\n");
printf("[2] pear\n");
printf("[3] orange\n");
printf("[4] grape\n");
printf("[0] exit\n");
int l=1;
for(i=0;i<t;i++)
{
if(arr[i]!=0&&l<=5)
{
if(arr[i]==1) printf("price = 3.00\n");
else if(arr[i]==2) printf("price = 2.50\n");
else if(arr[i]==3) printf("price = 4.10\n");
else if(arr[i]==4) printf("price = 10.20\n");
else  printf("price = 0.00\n");
l++;
}
}
return 0;
}

## 26、习题3-1 比较大小

4 2 8

2->4->8

#include<stdio.h>
int main()
{
int arr[3];
scanf("%d %d %d",&arr[0],&arr[1],&arr[2]);
int i;
int index;
int temp;
int j;
for(i=0;i<2;i++)
{
index=i;
temp=arr[i];
for(j=i+1;j<3;j++)
{
if(arr[j]<=arr[index]) index=j;
}
arr[i]=arr[index];
arr[index]=temp;
}
printf("%d->%d->%d\n",arr[0],arr[1],arr[2]);
return 0;

}

## 27、习题3-2 高速公路超速处罚

65 60

OK

110 100

Exceed 10%. Ticket 200

200 120

#include<stdio.h>
int main()
{
int m; //车速
int n; //限速
scanf("%d %d",&m,&n);
int t1=n+n*0.1;
int t2=n+n*0.5;
// printf("%d %d\n",t1,t2);
if(m<t1) printf("OK\n");
if(m>=t1&&m<t2)
{
double temp1=(m-n)/(double)n*100.0;
double temp2=temp1-(int)temp1;
int temp;
if(temp2>=0.5) temp=(int)temp1+1;
else temp=(int)temp1;
printf("Exceed %d%%. Ticket 200\n",temp);
}
if(m>=t2)
{
double temp1=(m-n)/(double)n*100.0;
double temp2=temp1-(int)temp1;
int temp;
if(temp2>=0.5) temp=(int)temp1+1;
else temp=(int)temp1;
}
}

## 28、习题3-3 出租车计价

• 起步里程为3公里，起步费10元；
• 超起步里程后10公里内，每公里2元；
• 超过10公里以上的部分加收50%的回空补贴费，即每公里3元；
• 营运过程中，因路阻及乘客要求临时停车的，按每5分钟2元计收（不足5分钟则不收费）。

2.6 2

10

5.1 4

14

12.5 9

34

#include<stdio.h>
int main()
{
double k;
int fen;
scanf("%lf %d",&k,&fen);
double money1=fen/5*2.0;
double money2=10.0;
double money;
if(k<3.0) money=money1+money2;
else
{
if(k<10.0) money=money1+money2+(k-3.0)*2.0;
if(k>=10.0) money=money1+money2+(10.0-3.0)*2.0+(k-10.0)*3.0;
}
printf("%.0lf\n",money);
return 0;
}

## 29、习题3-4 统计学生成绩

• 大于等于90分为A；
• 小于90且大于等于80为B；
• 小于80且大于等于70为C；
• 小于70且大于等于60为D；
• 小于60为E。

7 77 54 92 73 60 65 69

1 0 2 3 1

#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int i;
int arr[5]={0};
int m;
for(i=0;i<N;i++)
{
scanf("%d",&m);
if(m>=90)arr[0]++;
else if(m<90&&m>=80) arr[1]++;
else if(m<80&&m>=70) arr[2]++;
else if(m<70&&m>=60) arr[3]++;
else arr[4]++;
}
for(i=0;i<5;i++)
{
if(i==5-1) printf("%d\n",arr[i]);
else printf("%d ",arr[i]);
}
return 0;
}

## 30、习题9-1 时间换算

11:59:40 30

12:00:10

#include <stdio.h>
int main()
{
scanf("%d:%d:%d",&h,&m,&s);
scanf("%d",&n);
printf("%02d:%02d:%02d",h,m,s);
}

## 31、习题9-3 平面向量加法

3.5 -2.7 -13.9 8.7

(-10.4, 6.0)

#include <stdio.h>
#include <math.h>
int main(){
double x1,y1,x2,y2;
scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
double x,y;
x=x1+x2;
y=y1+y2;

if(fabs(x)<0.05){
x=fabs(x);
}
if(fabs(y)<0.05){
y=fabs(y);
}

printf("(%.1f, %.1f)",x,y);

return 0;
}

## 32、习题9-4 查找书籍

3 Programming in C 21.5 Programming in VB 18.5 Programming in Delphi 25.0

25.00, Programming in Delphi 8.50, Programming in VB

#include<stdio.h>

struct book
{
char name[33];
double price;
};
int main()
{
int n;
struct book arr[10];
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
getchar();
gets(arr[i].name);
scanf("%lf",&arr[i].price);
}
int index1=0;
int index2=0;
for(i=1;i<n;i++)
{
if(arr[i].price>=arr[index1].price) index1=i;
}
for(i=1;i<n;i++)
{
if(arr[i].price<=arr[index2].price) index2=i;
}

printf("%.2lf, %s\n",arr[index1].price,arr[index1].name);
printf("%.2lf, %s\n",arr[index2].price,arr[index2].name);
return 0;

}

## 33、习题9-5 通讯录排序

3 zhang 19850403 13912345678 wang 19821020 +86-0571-88018448 qian 19840619 13609876543

wang 19821020 +86-0571-88018448 qian 19840619 13609876543 zhang 19850403 13912345678

#include<stdio.h>

struct fri
{
char name[11];
char brithday[10];
char pNumber[18];
int temp;
}tt;
int main()
{
struct fri arr[10];
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%s %s %s",&arr[i].name,&arr[i].brithday,&arr[i].pNumber);
int temp1=(arr[i].brithday[0]-'0')*1000+(arr[i].brithday[1]-'0')*100+(arr[i].brithday[2]-'0')*10+(arr[i].brithday[3]-'0')*1;
int temp2=(arr[i].brithday[4]-'0')*10+(arr[i].brithday[5]-'0')*1;
int temp3=(arr[i].brithday[6]-'0')*10+(arr[i].brithday[7]-'0')*1;
arr[i].temp=(9999-temp1)*365+(12-temp2)*30+(30-temp3)*1;
}
int index;
int j;
for(i=0;i<n-1;i++)
{
index=i;
tt=arr[i];
for(j=i+1;j<n;j++)
{
if(arr[j].temp>=arr[index].temp) index=j;
}
arr[i]=arr[index];
arr[index]=tt;
}
for(i=0;i<n;i++)
{
printf("%s %s %s\n",arr[i].name,arr[i].brithday,arr[i].pNumber);
}
return 0;
}

## 34、练习4-6 猜数字游戏

58 4 70 50 56 58 60 -2

Too big Too small Too small Good Guess!

#include<stdio.h>
int main()
{
int random;
int N;
scanf("%d %d",&random,&N);
int i=0;
int arr[101];
while(scanf("%d",&arr[i])!=EOF&&arr[i]>=0)
{
i++;
}
int n=i;
int l=0;
for(i=0;i<n;i++)
{
if(arr[i]>random) {printf("Too big\n");l++;}
else if(arr[i]<random) {printf("Too small\n");l++;}
else {l++;break;}
if(l>N) break;
}
if(l==1) printf("Bingo!\n");
else if(l>1&&l<=3) printf("Lucky You!\n");
else if(l>3&&l<=N) printf("Good Guess!\n");
else printf("Game Over\n");
return 0;

}

## 35、练习4-7 求e的近似值

10

2.71828180

#include<stdio.h>

double fun(int n)  //递归算法
{
if(n==0||n==1) return 1;
else return n*fun(n-1);
}
int main()
{
int n;
scanf("%d",&n);
int i;
double sum=1.0;
for(i=1;i<=n;i++)
{
sum+=1.0/fun(i);
}
printf("%.8lf\n",sum);
}

## 36、练习4-10 找出最小值

4 -2 -123 100 0

min = -123

#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i;
int index;
for(i=0;i<n;i++)
{
int t;
scanf("%d",&t);
if(i==0)index=t;
else
{
if(t<=index) index=t;
}

}
printf("min = %d\n",index);
return 0;

}

## 37、练习4-11 统计素数并求和

10 31

7 143

#include<stdio.h>

int fun(int n)
{
int t=sqrt(n);
int i;
int temp=1;
for(i=2;i<=t;i++)
{
if(n%i==0)
{
temp=0;
break;
}
}
return temp;
}
int main()
{
int M,N;
scanf("%d %d",&M,&N);
int i;
if(M<2)M=2;
int sum=0;
int l=0;
for(i=M;i<=N;i++)
{
int temp=fun(i);
if(temp==1)
{
sum+=i;
l++;
}
}
printf("%d %d\n",l,sum);
return 0;
}

## 38、习题4-1 求奇数和

8 7 4 3 70 5 6 101 -1

116

#include<stdio.h>
int fun(int n)
{
if(n%2==0) return 0;
else return 1;
}
int main()
{
int n;
int sum=0;
while(scanf("%d",&n)&&(n!=0&&n>0))
{
int temp=fun(n);
if(temp==1) sum+=n;
}
printf("%d\n",sum);
return 0;
}

## 39、习题4-2 求幂级数展开的部分和

1.2

3.3201

#include<stdio.h>

double fun(int n)
{
if(n==1||n==0) return 1;
else return n*fun(n-1);
}
int main()
{
double n;
scanf("%lf",&n);
int i;
double sum=1.0;
double n1=n;
for(i=1;;i++)
{
double t=n1/fun(i);
sum+=t;
n1*=n;
if(t<0.00001)break;

}
printf("%.4lf\n",sum);
return 0;
}

## 40、习题4-3 求分数序列前N项和

20

32.66

#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int i;
double m=2.0;
double n=1.0;
double sum=0;
for(i=1;i<=N;i++)
{
sum+=m/n;
double t=m+n;
n=m;
m=t;
}
printf("%.2lf\n",sum);
return 0;
}

## 41、习题4-4 特殊a串数列求和

2 3

s = 246

#include<stdio.h>
int main()
{
int a,n;
scanf("%d %d",&a,&n);
int i;
int sum=0;
int t=a;
for(i=1;i<=n;i++)
{
sum+=t;
t=t*10+a;
}
printf("s = %d\n",sum);
return 0;
}

## 42、习题4-6 水仙花数

3

153 370 371 407

#include<stdio.h>
void fun1(int *m,int *n,int N)
{
int i;
int t1,t2;
t1=t2=1;
for(i=1;i<=N-1;i++)
t1*=10;
for(i=1;i<=N;i++)
t2*=10;
*m=t1;*n=t2-1;
}

int fun2(int n,int N)
{
int i;
int t;
int sum=0;
int tt=n;
while(n)
{
t=1;
int temp=n%10;
for(i=1;i<=N;i++)
{
t*=temp;
}
sum+=t;
n/=10;
}
if(tt==sum) return 1;
else return 0;
}
int main()
{
int N;
scanf("%d",&N);
int m,n;
fun1(&m,&n,N);  //找出最小N位数和最大N位数
//printf("%d %d\n",m,n);
int i;
for(i=m;i<=n;i++)
{
int temp=fun2(i,N);
if(temp==1) printf("%d\n",i);
}
return 0;
}

## 43、习题4-7 最大公约数和最小公倍数

511 292

73 2044

#include<stdio.h>
int main()
{
int M,N;
scanf("%d %d",&M,&N);
int a,b;
a=M;
b=N;
int temp;
temp=M%N;
while(temp)   //辗转相除法求最大公约数
{
M=N;
N=temp;
temp=M%N;
}
printf("%d %d\n",N,a*b/N);
return 0;

}

## 44、习题7-5 找鞍点

4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9

2 1

2 1 7 4 1

NONE

#include<stdio.h>

int fun1(int arr[][7],int i,int n)
{
int j;
int index=0;
for(j=1;j<n;j++)
{
if(arr[i][j]>=arr[i][index]) index=j;
}
return index;
}

int fun2(int arr[][7],int i,int n)
{
int j;
int index=0;
for(j=1;j<n;j++)
{
if(arr[j][i]<=arr[index][i]) index=j;
}
return index;
}
int main()
{
int n;
scanf("%d",&n);
int arr[7][7];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
}
}
int l=0;
int temp1,temp2;
for(i=0;i<n;i++)
{
temp1=fun1(arr,i,n);
temp2=fun2(arr,temp1,n);
if(arr[i][temp1]==arr[temp2][temp1])
{
l=1;break;
}
}
if(l==1) printf("%d %d\n",temp2,temp1);
else printf("NONE\n");
return 0;
}

## 45、练习5-1 求m到n之和

int sum( int m, int n );

#include <stdio.h>

int sum(int m, int n);

int main()
{
int m, n;

scanf("%d %d", &m, &n);
printf("sum = %d\n", sum(m, n));

return 0;
}

/* 你的代码将被嵌在这里 */

-5 8

sum = 21

int sum(int m, int n)
{
int i;
int sum=0;
for(i=m;i<=n;i++)
{
sum=sum+i;
}
return sum;
}

## 46、练习5-2 找两个数中最大者

int max( int a, int b );

#include <stdio.h>

int max( int a, int b );

int main()
{
int a, b;

scanf("%d %d", &a, &b);
printf("max = %d\n", max(a, b));

return 0;
}

/* 你的代码将被嵌在这里 */ 输入样例：

-5 8

max = 8

int max( int a, int b )
{
if(a>=b)return a;
else return b;
}

## 47、练习5-3 数字金字塔

void pyramid( int n );

#include <stdio.h>

void pyramid( int n );

int main()
{
int n;

scanf("%d", &n);
pyramid(n);

return 0;
}

/* 你的代码将被嵌在这里 */

5

1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

void pyramid( int n )
{
int i;
int temp=n;
for(i=1;i<=n;i++)
{
int j=1;
for(;j<temp;j++)
printf(" ");
for(j=1;j<=i;j++)
{
printf("%d ",i);
}
printf("\n");
temp--;
}
}

## 48、习题5-1 符号函数

int sign( int x );

#include <stdio.h>

int sign( int x );

int main()
{
int x;

scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));

return 0;
}

/* 你的代码将被嵌在这里 */

10

sign(10) = 1

int sign( int x )
{
if(x>0) return 1;
else if(x==0) return 0;
else return -1;
}

## 49、习题5-2 使用函数求奇数和

int even( int n ); int OddSum( int List[], int N );

#include <stdio.h>

#define MAXN 10

int even( int n );
int OddSum( int List[], int N );

int main()
{
int List[MAXN], N, i;

scanf("%d", &N);
printf("Sum of ( ");
for ( i=0; i<N; i++ ) {
scanf("%d", &List[i]);
if ( even(List[i])==0 )
printf("%d ", List[i]);
}
printf(") = %d\n", OddSum(List, N));

return 0;
}

/* 你的代码将被嵌在这里 */

6 2 -3 7 88 0 15

Sum of ( -3 7 15 ) = 19

int even( int n )
{
if(n%2==0) return 1;
else return 0;
}

int OddSum( int List[], int N )
{
int i;
int sum=0;
for(i=0;i<N;i++)
{
if(List[i]%2!=0) sum+=List[i];
}
return sum;
}

## 50、习题5-3 使用函数计算两点间的距离

double dist( double x1, double y1, double x2, double y2 );

#include <stdio.h>
#include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main()
{
double x1, y1, x2, y2;

scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2));

return 0;
}

/* 你的代码将被嵌在这里 */

10 10 200 100

dist = 210.24

double dist( double x1, double y1, double x2, double y2 )
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

## 51、习题5-4 使用函数求素数和

int prime( int p ); int PrimeSum( int m, int n );

#include <stdio.h>
#include <math.h>

int prime( int p );
int PrimeSum( int m, int n );

int main()
{
int m, n, p;

scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));

return 0;
}

/* 你的代码将被嵌在这里 */

-1 10

Sum of ( 2 3 5 7 ) = 17

int prime( int p )
{
if(p<2) return 0;
else
{
int i;
int l=1;
for(i=2;i<=sqrt(p);i++)
{
if(p%i==0)
{
l=0;
break;
}
}
return l;
}
}
int PrimeSum( int m, int n )
{
int sum=0;
int i;
for(i=m;i<=n;i++)
{
int temp=prime(i);
if(temp==1) sum+=i;
}
return sum;
}

## 52、习题5-5 使用函数统计指定数字的个数

int CountDigit( int number, int digit );

#include <stdio.h>

int CountDigit( int number, int digit );

int main()
{
int number, digit;

scanf("%d %d", &number, &digit);
printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));

return 0;
}

/* 你的代码将被嵌在这里 */

-21252 2

Number of digit 2 in -21252: 3

int CountDigit( int number, int digit )
{
if(number<0) number=-number;
if(number==0&&digit==0) return 1;
else
{
int tt=0;
while(number)
{
int temp=number%10;
if(temp==digit) tt++;
number/=10;
}
return tt;
}
}

## 53、习题5-6 使用函数输出水仙花数

int narcissistic( int number ); void PrintN( int m, int n );

#include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

return 0;
}

/* 你的代码将被嵌在这里 */

153 400

153 is a narcissistic number 370 371

int narcissistic( int number )
{
int nu=number;
int temp=0;
while(nu)
{
nu/=10;
temp++;
}
nu=number;
int sum=0;
int index;
while(number)
{
int i;
int t=number%10;
index=1;
for(i=1;i<=temp;i++)
index*=t;
sum+=index;
number/=10;
}
if(sum==nu) return 1;
else return 0;
}
void PrintN( int m, int n )
{
int i;
for(i=m+1;i<n;i++)
{
int temp=narcissistic(i);
if(temp==1) printf("%d\n",i);
}
}

## 54、习题5-7 使用函数求余弦函数的近似值

double funcos( double e, double x );

#include <stdio.h>
#include <math.h>

double funcos( double e, double x );

int main()
{
double e, x;

scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));

return 0;
}

/* 你的代码将被嵌在这里 */

0.01 -3.14

cos(-3.14) = -0.999899

double funcos( double e, double x )
{
int i,j;
double temp1;
double temp2;
double temp;
double sum=0;
int l=1;
for(i=0;;i+=2)
{
if(i==0)
{
temp=1.0;
}
else
{
temp1=1;
temp2=1;
for(j=1;j<=i;j++)
{
temp1*=x;
temp2*=j;
}
temp=temp1/temp2;
}
sum+=(temp*l);
if(temp<e) break;

l=-l;

}
return sum;
}

## 55、习题4-8 高空坠球

33 5

94.9 1.0

#include<stdio.h>
int main()
{
double h;
int n;
scanf("%lf %d",&h,&n);
int i;
double sum=h;
if(n==0)
{
printf("0.0 0.0\n");
}
else{
for(i=1;i<=n-1;i++)
{
if(h==0) break;
h=h/2.0;
sum=sum+h+h;
}
printf("%.1lf %.1lf\n",sum,h/2);
}
return 0;
}

## 56、习题4-10 猴子吃桃问题

3

10

#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int i;
int t=1;
for(i=N;i>1;i--)
{
t=(t+1)*2;

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

## 57、习题6-8 统计一行文本的单词个数

Let’s go to room 209.

5

#include<stdio.h>
int main()
{
char str[1000];
gets(str);
int i,j;
int len=strlen(str);
i=0;
j=len-1;
while(str[i]==' ')
{
i++;
}
while(str[j]==' ')
{
j--;
}
if(i==len&&j<0) printf("0\n");
else{
int n1=i;
int n2=j;
int temp=0;
int l=0;
for(i=n1+1;i<=n2;i++)
{
if(str[i]==' '&&str[i-1]!=' ') {l=1;temp++;}
}
printf("%d\n",temp+1);}
return 0;
}

## 58、练习7-2 求最大值及其下标

6 2 8 10 1 9 10

10 2

#include<stdio.h>
#include<math.h>
int main()
{
int n;
int a[100];
scanf("%d\n",&n);
int i;
for(i=0;i<n;i++)
scanf("%d\,",&a[i]);
int j;
int index;
index=0;
for(i=1;i<n;i++)
{
if(a[i]>a[index]) index=i;

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

## 59、练习7-3 将数组中的数逆序存放

4 10 8 1 2

2 1 8 10

#include<stdio.h>
int main()
{
int arr[11];
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
scanf("%d",&arr[i]);

for(i=0;i<n/2;i++)
{
int t=arr[i];
arr[i]=arr[n-1-i];
arr[n-1-i]=t;
}
// arr[n-1]=t;
for(i=0;i<n;i++)
{
if(i==n-1) printf("%d\n",arr[i]);
else printf("%d ",arr[i]);
}
return 0;
}

## 60、练习7-4 找出不是两个数组共有的元素

10 3 -5 2 8 0 3 5 -15 9 100 11 6 4 8 2 6 -5 9 0 100 8 1

3 5 -15 6 4 1

#include<stdio.h>
int temp[100];
int tt=0;
void fun(int arr[][22],int n1,int n2)
{
int i,j;
int l;
for(i=0;i<n1;i++)
{
int l=1;
for(j=0;j<n2;j++)
{
if(arr[0][i]==arr[1][j]){l=0;break;}
}
if(l==1) temp[tt++]=arr[0][i];
}
for(i=0;i<n2;i++)
{
int l=1;
for(j=0;j<n1;j++)
{
if(arr[1][i]==arr[0][j]){l=0;break;}
}
if(l==1) temp[tt++]=arr[1][i];
}
}
int main()
{
int arr[2][22];
int N;
int i,k;
int n1,n2;
for(k=0;k<2;k++)
{
scanf("%d",&N);
if(k==0) n1=N;
else n2=N;
for(i=0;i<N;i++)
{
scanf("%d",&arr[k][i]);
}
}
fun(&arr,n1,n2);
int j;
int l;
for(i=0;i<tt-1;i++)
{
for(j=i+1;j<tt;j++)
{
if(temp[j]==temp[i])temp[j]=-999999;
}
}
for(i=0;i<tt;i++)
{
if(temp[i]!=-999999)
{
if(i==0) printf("%d",temp[i]);
else printf(" %d",temp[i]);
}
}
printf("\n");
return 0;
}

## 61、练习7-7 矩阵运算

4 2 3 4 1 5 6 1 1 7 1 8 1 1 1 1 1

35

#include<stdio.h>
int main()
{
int n;
int arr[11][11];
scanf("%d",&n);
int i,j;
int sum=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
sum+=arr[i][j];   //全部数据相加
}
}
for(i=0;i<n;i++)
{
sum-=arr[i][n-1];  //减去最后一列
sum-=arr[n-1][i];  //减去最后一行
}
sum+=arr[n-1][n-1];   //元素arr[n-1][n-1]被减两次，因此加一次
int l=n-1;
for(i=0;i<n;i++)
{
sum-=arr[i][l];   //减去副对角线上的元素
l--;
}
sum+=arr[0][n-1];    //元素arr[0][n-1]被减两次，因此加一次
sum+=arr[n-1][0];    //元素arr[n-1][0]被减两次，因此加一次
printf("%d\n",sum);
return 0;
}

## 62、练习7-8 方阵循环右移

2 3 1 2 3 4 5 6 7 8 9

2 3 1 5 6 4 8 9 7

#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int i,j;
int arr[7][7];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
}
}
int k;
int index;
for(k=1;k<=m;k++)
{
for(i=0;i<n;i++)
{
index=arr[i][n-1];
for(j=n-1;j>0;j--)
{
arr[i][j]=arr[i][j-1];
}
arr[i][j]=index;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}

## 63、习题6-1 分类统计字符个数

void StringCount( char s[] );

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

#include <stdio.h>
#define MAXS 15

void StringCount( char s[] );
void ReadString( char s[] ); /* 由裁判实现，略去不表 */

int main()
{
char s[MAXS];

StringCount(s);

return 0;
}

/* Your function will be put here */

aZ & 09 Az

letter = 4, blank = 3, digit = 2, other = 1

void StringCount( char s[] )
{
int i;
int letter=0;
int blank=0;
int digit=0;
int other=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') letter++;
else if(s[i]==' '||s[i]=='\n') blank++;
else if(s[i]>='0'&&s[i]<='9') digit++;
else other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other);
}

## 64、习题6-2 使用函数求特殊a串数列和

int fn( int a, int n ); int SumA( int a, int n );

#include <stdio.h>

int fn( int a, int n );
int SumA( int a, int n );

int main()
{
int a, n;

scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a,n));
printf("s = %d\n", SumA(a,n));

return 0;
}

/* 你的代码将被嵌在这里 */

2 3

fn(2, 3) = 222 s = 246

int fn( int a, int n )
{
int i;
int sum=0;
for(i=1;i<=n;i++)
{
sum*=10;
sum+=a;
}
return sum;
}
int SumA( int a, int n )
{
int i,j;
int sum=0;
int t;
for(i=1;i<=n;i++)
{
t=0;
for(j=1;j<=i;j++)
{
t*=10;
t+=a;
}
sum+=t;
}
return sum;
}

## 65、习题6-4 使用函数输出指定范围内的Fibonacci数

int fib( int n ); void PrintFN( int m, int n );

#include <stdio.h>

int fib( int n );
void PrintFN( int m, int n );

int main()
{
int m, n, t;

scanf("%d %d %d", &m, &n, &t);
printf("fib(%d) = %d\n", t, fib(t));
PrintFN(m, n);

return 0;
}

/* 你的代码将被嵌在这里 */

20 100 7

fib(7) = 13 21 34 55 89

2000 2500 8

fib(8) = 21 No Fibonacci number

int fib( int n )
{
int a=1;
int b=1;
if(n==1||n==2) return 1;
else
{
int c;
int temp=2;
while(1)
{
c=a+b;
temp++;
a=b;
b=c;
if(temp>=n) break;
}
return c;
}

}
void PrintFN( int m, int n )
{
int i;
int arr[100];
int tt=0;
for(i=1;;i++)
{
int temp=fib(i);
if(temp>=m&&temp<=n)
{
arr[tt++]=temp;
}
if(temp>n) break;
}
if(tt==0) printf("No Fibonacci number\n");
else
{
for(i=0;i<tt;i++)
{
if(i==tt-1) printf("%d\n",arr[i]);
else printf("%d ",arr[i]);
}
}
}

## 66、习题6-5 使用函数验证哥德巴赫猜想

int prime( int p ); void Goldbach( int n );

 #include <stdio.h>
#include <math.h>

int prime( int p ); void Goldbach( int n );

int main() {
int m, n, i, cnt;

scanf("%d %d", &m, &n);
if ( prime(m) != 0 ) printf("%d is a prime number\n", m);
if ( m < 6 ) m = 6;
if ( m%2 ) m++;
cnt = 0;
for( i=m; i<=n; i+=2 ) {
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else printf("\n");
}

return 0; }

/* 你的代码将被嵌在这里 */

89 100

89 is a prime number 90=7+83, 92=3+89, 94=5+89, 96=7+89, 98=19+79 100=3+97,

int prime( int p )
{
if(p<2) return 0;
else{
int i;
int n=p;
int l=1;
for(i=2;i<=sqrt(p);i++)
{
if(n%i==0)
{
l=0;break;
}
}
return l;}
}
void Goldbach( int n )
{
int i;
int temp;
for(i=2;;i++)
{
temp=prime(i);
if(temp==1)
{
int tt=n-i;
if(prime(tt)) {printf("%d=%d+%d",n,i,tt);break;}
}
}
}

## 67、习题6-6 使用函数输出一个整数的逆序数

int reverse( int number );

#include <stdio.h>

int reverse( int number );

int main()
{
int n;

scanf("%d", &n);
printf("%d\n", reverse(n));

return 0;
}

/* 你的代码将被嵌在这里 */

-12340

-4321

int reverse( int number )
{
int l=1;
if(number<0) {l=-1;number=-number;}
int sum=0;
int temp;
while(number)
{
temp=number%10;
sum=sum*10+temp;
number/=10;
}
sum*=l;
return sum;
}

## 68、练习8-2 计算两数的和与差

void sum_diff( float op1, float op2, float *psum, float *pdiff );

#include <stdio.h>

void sum_diff( float op1, float op2, float *psum, float *pdiff );

int main()
{
float a, b, sum, diff;

scanf("%f %f", &a, &b);
sum_diff(a, b, &sum, &diff);
printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);

return 0;
}

/* 你的代码将被嵌在这里 */

4 6

The sum is 10.00 The diff is -2.00

void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}

## 69、练习7-9 计算天数

2009/03/02

61

2000/03/02

62

#include<stdio.h>

int fun(int yy,int mm)
{
int temp=0;
int sum=0;
if((yy%4==0&&yy%100!=0)||(yy%400==0)) temp=1;
int arr[13]={31,28,31,30,31,30,31,31,30,31,30,31};
if(temp==1) arr[1]=29;
int i;
for(i=0;i<mm-1;i++)
{
sum+=arr[i];
}
return sum;
}
int main()
{
int yyyy; //年
int mm;  //月
int dd;  //日
scanf("%d/%d/%d",&yyyy,&mm,&dd);
int temp=fun(yyyy,mm);
printf("%d\n",temp+dd);
return 0;

}

## 70、练习7-10 查找指定字符

m programming

index = 7

a 1234

#include<stdio.h>
#include<math.h>
int main()
{
char c;
char str[81];
scanf("%c",&c);
getchar();
gets(str);
//printf("c==%c\n",c);
//puts(str);
int len=strlen(str);
int i;
int l=0;
for(i=len-1;i>=0;i--)
{
if(str[i]==c)
{
l=1;break;
}
}
else printf("index = %d\n",i);
return 0;
}

## 71、练习7-11 字符串逆序

Hello World!

!dlroW olleH

#include<stdio.h>
#include<math.h>
int main()
{
char str[81];
gets(str);
int len=strlen(str);
int i;
for(i=len-1;i>=0;i--)
{
printf("%c",str[i]);
}
printf("\n");
return 0;
}

## 72、习题7-1 选择法排序

4 5 1 7 6

7 6 5 1

#include<stdio.h>
int main()
{
int n;
int arr[11];
int i,j,index,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
for(i=0;i<n-1;i++)
{
index=i;
t=arr[i];
for(j=i+1;j<n;j++)
{
if(arr[j]>=arr[index]) index=j;
}
arr[i]=arr[index];
arr[index]=t;
}
for(i=0;i<n;i++)
{
if(i==n-1) printf("%d\n",arr[i]);
else printf("%d ",arr[i]);
}
return 0;
}

## 73、习题7-2 求一批整数中出现最多的个位数字

3 1234 2345 3456

3: 3 4

#include<stdio.h>

void fun(int*arr,int temp)
{
while(temp)
{
arr[temp%10]++;
temp/=10;
}
}
int main()
{
int N;
scanf("%d",&N);
int i;
int temp;
int arr[10]={0};
for(i=0;i<N;i++)
{
scanf("%d",&temp);
fun(&arr,temp);
}
int index=0;
for(i=1;i<10;i++)
{
if(arr[i]>=arr[index]) index=i;
}
printf("%d:",arr[index]);
for(i=0;i<10;i++)
{
if(arr[i]==arr[index]) printf(" %d",i);
}
return 0;
}

## 74、练习8-8 移动字母

void Shift( char s[] );

#include <stdio.h>
#include <string.h>

#define MAXS 10

void Shift( char s[] );

void GetString( char s[] ); /* 实现细节在此不表 */

int main()
{
char s[MAXS];

GetString(s);
Shift(s);
printf("%s\n", s);

return 0;
}

/* 你的代码将被嵌在这里 */

abcdef

defabc

void Shift( char s[] )
{
int len=strlen(s);
if(len==3) ;
else
{
int i;
char str[100];
int t=0;
for(i=0;i<3;i++)
{
str[i]=s[i];
}
for(i=3;i<len;i++)
{
s[t++]=s[i];
}
for(i=0;i<3;i++)
{
s[t++]=str[i];
}
}
}

## 75、习题8-1 拆分实数的整数与小数部分

void splitfloat( float x, int *intpart, float *fracpart );

#include <stdio.h>

void splitfloat( float x, int *intpart, float *fracpart );

int main()
{
float x, fracpart;
int intpart;

scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);

return 0;
}

/* 你的代码将被嵌在这里 */

2.718

The integer part is 2 The fractional part is 0.718

void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-(int)x;
}

## 76、习题7-3 判断上三角矩阵

2 3 1 2 3 0 4 5 0 0 6 2 1 0 -8 2

YES NO

#include<stdio.h>

int fun(int arr[][11],int n)
{
int i,j;
int l=1;
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
if(arr[i][j]!=0){l=0;break;}
}
if(l==0) break;
}
return l;

}
int main()
{
int T,n;
scanf("%d",&T);
int t,i,j;
int k=0;
int arr[11][11];
int temp[11];
for(t=1;t<=T;t++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
}
}
int t=fun(&arr,n);
temp[k++]=t;
}
for(i=0;i<k;i++)
if(temp[i]==1)printf("YES\n");
else printf("NO\n");
return 0;
}

## 77、习题7-4 求矩阵各行元素之和

3 2 6 3 1 -8 3 12

9 -7 15

#include<stdio.h>
int main()
{
int i,j;
int arr[100][100];
int m,n;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
{
int sum=0;
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
sum+=arr[i][j];
}
printf("%d\n",sum);
}
return 0;
}

## 78、习题7-6 统计大写辅音字母

HELLO World!

4

#include<stdio.h>
int main()
{
char str[81];
gets(str);
int len=strlen(str);
int i;
int temp=0;
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
if(str[i]!='A'&&str[i]!='E'&&str[i]!='I'&&str[i]!='O'&&str[i]!='U')
temp++;
}
}
printf("%d\n",temp);
return 0;
}

## 79、习题3-5 三角形判断

4 5 6 9 7 8

L = 10.13, A = 3.00

4 6 8 12 12 18

Impossible

#include<stdio.h>
#include<math.h>
double fun(double x1,double y1,double x2,double y2)
{
double temp1=x1-x2;
double temp2=y1-y2;
return sqrt(temp1*temp1+temp2*temp2);
}
int main()
{
double x1,y1;
double x2,y2;
double x3,y3;
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
double lon1=fun(x1,y1,x2,y2);
double lon2=fun(x2,y2,x3,y3);
double lon3=fun(x3,y3,x1,y1);
if(lon1+lon2>lon3&&lon1+lon3>lon2&&lon2+lon3>lon1)
{
double p=(lon1+lon2+lon3)/2.0;
double A=sqrt(p*(p-lon1)*(p-lon2)*(p-lon3));
printf("L = %.2lf, A = %.2lf\n",lon1+lon2+lon3,A);
}
else printf("Impossible\n");
return 0;
}
//定义：x1,y1,----x3,y3时，类型double int 出错

## 80、练习4-3 求给定精度的简单交错序列部分和

4E-2

sum = 0.854457

0.02

sum = 0.826310

#include<stdio.h>
int main()
{
double exp;
scanf("%lf",&exp);
int i;
int l=1;
double sum=0;
double t;
for(i=1;;i+=3)
{
t=1.0/i*l;
sum+=t;
if(fabs(t)<=exp) break;
l=-l;
}
printf("sum = %.6lf\n",sum);
return 0;
}

## 81、习题7-7 字符串替换

A

Z

B

Y

C

X

D

W

X

C

Y

B

Z

A

Only the 11 CAPItaL LeTtERS are replaced.

Lnly the 11 XZKRtaO OeGtVIH are replaced.

A+Z=155 B+Y=155 C+X=155 D+W=155 … … X+C=155 Y+B=155 Z+A=155

#include<stdio.h>

// A+Z=155
// B+Y=155
// ......
int main()
{
char str[81];
gets(str);
int i;
for(i=0;i<strlen(str);i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
str[i]=155-str[i];
}
}
puts(str);
}

## 82、习题8-10 输出学生成绩

average = 平均成绩 max = 最高成绩 min = 最低成绩

3 85 90 95

average = 90.00 max = 95.00 min = 85.00

#include<stdio.h>

double fun(int *arr,int n,int l)
{
int i;
int index=0;
for(i=1;i<n;i++)
{
if(l==1)
{
if(arr[i]>=arr[index]) index=i;
}
else
{
if(arr[i]<=arr[index]) index=i;
}
}
return arr[index]/1.0;
}
int main()
{
int N;
int arr[10000];
scanf("%d",&N);
int i;
int sum=0;
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
sum+=arr[i];
}
printf("average = %.2lf\n",sum/(double)N);
printf("max = %.2lf\n",fun(&arr,N,1));
printf("min = %.2lf\n",fun(&arr,N,2));
return 0;

}

## 83、习题8-2 在数组中查找指定元素

int search( int list[], int n, int x );

#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );

int main()
{
int i, index, n, x;
int a[MAXN];

scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
else

return 0;
}

/* 你的代码将被嵌在这里 */

5 1 2 2 5 4 2

index = 1

5 1 2 2 5 4 0

int search( int list[], int n, int x )
{
int i;
int l=-1;
for(i=0;i<n;i++)
{
if(list[i]==x){l=1;break;}
}
if(l==1) return i;
else return l;
}

## 84、习题8-3 数组循环右移

int ArrayShift( int a[], int n, int m );

#include <stdio.h>
#define MAXN 10

int ArrayShift( int a[], int n, int m );

int main()
{
int a[MAXN], n, m;
int i;

scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

ArrayShift(a, n, m);

for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");

return 0;
}

/* 你的代码将被嵌在这里 */

6 2 1 2 3 4 5 6

5 6 1 2 3 4

int ArrayShift( int a[], int n, int m )
{
int i;
int k;
for(k=1;k<=m;k++)
{
int temp=a[n-1];
for(i=n-1;i>0;i--)
{
a[i]=a[i-1];
}
a[0]=temp;
}
}

## 85、题8-9 分类统计各类字符个数

void StringCount( char *s );

#include <stdio.h>
#define MAXS 15

void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现，略去不表 */

int main()
{
char s[MAXS];

StringCount(s);

return 0;
}

/* Your function will be put here */

aZ&*? 093 Az

2 2 1 3 4

void StringCount( char *s )
{
int suma=0;   //小写字母个数
int sumA=0;   //大写字母个数
int sum_=0;   //空格个数
int sum1=0;   //数字个数
// int sumO=0;
int i;
int len=strlen(s);
for(i=0;i<len;i++)
{

if(s[i]>='A'&&s[i]<='Z') sumA++;
if(s[i]>='a'&&s[i]<='z') suma++;
if(s[i]==' ') sum_++;
if(s[i]>='0'&&s[i]<='9') sum1++;

}
printf("%d %d %d %d %d\n",sumA,suma,sum_,sum1,len-(suma+sumA+sum_+sum1));
}

## 86、习题9-2 计算两个复数之积

struct complex multiply(struct complex x, struct complex y);

struct complex{ int real; int imag; };

#include <stdio.h>

struct complex{
int real;
int imag;
};

struct complex multiply(struct complex x, struct complex y);

int main()
{
struct complex product, x, y;

scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
product = multiply(x, y);
printf("(%d+%di) * (%d+%di) = %d + %di\n",
x.real, x.imag, y.real, y.imag, product.real, product.imag);

return 0;
}

/* 你的代码将被嵌在这里 */

3 4 5 6

(3+4i) * (5+6i) = -9 + 38i

struct complex multiply(struct complex x, struct complex y)
{
struct complex t;
t.real=x.real*y.real-x.imag*y.imag;
t.imag=x.real*y.imag+y.real*x.imag;
return t;
};

## 87、习题9-6 按等级统计学生成绩

int set_grade( struct student *p, int n );

struct student{ int num; char name[20]; int score; char grade; };

#include <stdio.h>
#define MAXN 10

struct student{
int num;
char name[20];
int score;
};

int set_grade( struct student *p, int n );

int main()
{   struct student stu[MAXN], *ptr;
int n, i, count;

ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
printf("The count for failed (<60): %d\n", count);
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}

/* 你的代码将被嵌在这里 */

10 31001 annie 85 31002 bonny 75 31003 carol 70 31004 dan 84 31005 susan 90 31006 paul 69 31007 pam 60 31008 apple 50 31009 nancy 100 31010 bob 78

The count for failed (<60): 1 The grades: 31001 annie A 31002 bonny B 31003 carol B 31004 dan B 31005 susan A 31006 paul C 31007 pam C 31008 apple D 31009 nancy A 31010 bob B

int set_grade( struct student *p, int n )
{
int i;
int temp=0;
for(i=0;i<n;i++)
{
}
return temp;
}

## 88、习题11-1 输出月份英文名

char *getmonth( int n );

#include <stdio.h>

char *getmonth( int n );

int main()
{
int n;
char *s;

scanf("%d", &n);
s = getmonth(n);
if ( s==NULL ) printf("wrong input!\n");
else printf("%s\n", s);

return 0;
}

/* 你的代码将被嵌在这里 */

5

May

15

wrong input!

char *getmonth( int n )
{

if(n>12||n<=0) return NULL;
else
{
if(n==1) return "January";
if(n==2) return "February";
if(n==3) return "March";
if(n==4) return "April";
if(n==5) return "May";
if(n==6) return "June";
if(n==7) return "July";
if(n==8) return "August";
if(n==9) return "September";
if(n==10) return "October";
if(n==11) return "November";
if(n==12) return "December";

}
}

## 89、习题11-2 查找星期

0

Sunday

1

Monday

2

Tuesday

3

Wednesday

4

Thursday

5

Friday

6

Saturday

int getindex( char *s );

#include <stdio.h>
#include <string.h>

#define MAXS 80

int getindex( char *s );

int main()
{
int n;
char s[MAXS];

scanf("%s", s);
n = getindex(s);
if ( n==-1 ) printf("wrong input!\n");
else printf("%d\n", n);

return 0;
}

/* 你的代码将被嵌在这里 */

Tuesday

2

today

wrong input!

int getindex( char *s )
{
char str[8][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i,j;
int len=strlen(s);
int l=-1;
for(i=0;i<7;i++)
{
if(strcmp(s,str[i])==0)
{
l=1;break;
}
}
if(l==1) return i;
else return -1;
}

## 90、练习10-1 使用递归函数计算1到n之和

int sum( int n );

#include <stdio.h>

int sum( int n );

int main()
{
int n;

scanf("%d", &n);
printf ("%d\n", sum(n));

return 0;
}

/* 你的代码将被嵌在这里 */

10

55

0

0

int sum( int n )
{
if(n>0)
{
if(n==1) return 1;
else return n+sum(n-1);
}
else return 0;
}

## 91、习题10-2 递归求阶乘和

double fact( int n ); double factsum( int n );

#include <stdio.h>

double fact( int n );
double factsum( int n );

int main()
{
int n;

scanf("%d",&n);
printf("fact(%d) = %.0f\n", n, fact(n));
printf("sum = %.0f\n", factsum(n));

return 0;
}

/* 你的代码将被嵌在这里 */

10

fact(10) = 3628800 sum = 4037913

0

fact(0) = 1 sum = 0

double fact( int n )
{
if(n==1||n==0) return 1;
else return n*fact(n-1);
}
double factsum( int n )
{
int i;
double sum=0;
if(n==0) return 0;
else
{
for(i=1;i<=n;i++)
sum+=fact(i);
return sum;
}
}

## 92、习题8-5 使用函数实现字符串部分复制

void strmcpy( char *t, int m, char *s );

#include <stdio.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现，略去不表 */

int main()
{
char t[MAXN], s[MAXN];
int m;

scanf("%d\n", &m);
strmcpy( t, m, s );
printf("%s\n", s);

return 0;
}

/* 你的代码将被嵌在这里 */

7 happy new year

new year

void strmcpy( char *t, int m, char *s )
{
int len=strlen(t);
int i=0;
if(m>len) *s=NULL;
else
{
m=m-1;
while(t[m]!='\0')
{
s[i++]=t[m];
m++;
}
s[i]='\0';
}
}

## 93、习题8-6 删除字符

void delchar( char *str, char c );

#include <stdio.h>
#define MAXN 20

void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现，略去不表 */

int main()
{
char str[MAXN], c;

scanf("%c\n", &c);
delchar(str, c);
printf("%s\n", str);

return 0;
}

/* 你的代码将被嵌在这里 */

a happy new year

hppy new yer

void delchar( char *str, char c )
{
int len=strlen(str);
char *strTemp=(char*)malloc(sizeof(char)*len);
int i=0;
int t=0;
while(str[i]!='\0')
{
if(str[i]!=c) strTemp[t++]=str[i];
i++;
}
strTemp[t]='\0';
for(i=0;i<=t;i++)
str[i]=strTemp[i];
}

## 94、习题8-8 判断回文字符串

bool palindrome( char *s );

#include <stdio.h>
#include <string.h>

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
char s[MAXN];

scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);

return 0;
}

/* 你的代码将被嵌在这里 */

thisistrueurtsisiht

Yes thisistrueurtsisiht

thisisnottrue

No thisisnottrue

bool palindrome( char *s )
{
int len=strlen(s);
int i;
int l=1;
for(i=0;i<len/2;i++)
{
if(s[i]!=s[len-1-i])
{
l=0;
break;
}
}
if(l==1) return true;
else return false;
}

## 95、习题10-3 递归实现指数函数

double calc_pow( double x, int n );

#include <stdio.h>

double calc_pow( double x, int n );

int main()
{
double x;
int n;

scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));

return 0;
}

/* 你的代码将被嵌在这里 */

2 3

8

double calc_pow( double x, int n )
{
if(n==1) return x;
else return x*calc_pow(x,n-1);
}

## 96、习题10-4 递归求简单交错幂级数的部分和

f(x,n)=x−x​2+x​3​​ −x​4+⋯+(−1)​n−1xn

​​

double fn( double x, int n );

#include <stdio.h>

double fn( double x, int n );

int main()
{
double x;
int n;

scanf("%lf %d", &x, &n);
printf("%.2f\n", fn(x,n));

return 0;
}

/* 你的代码将被嵌在这里 */

0.5 12

0.33

double fn( double x, int n )
{
if(n==1) return x;
else return pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}

## 97、习题10-5 递归计算Ackermenn函数

int Ack( int m, int n );

#include <stdio.h>

int Ack( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));

return 0;
}

/* 你的代码将被嵌在这里 */

2 3

9

int Ack( int m, int n )
{
if(m==0) return n+1;
else
{
if(n==0&&m>0) return Ack(m-1,1);
if(n>0&&m>0) return Ack(m-1,Ack(m,n-1));
}
}

## 98、习题10-6 递归求Fabonacci数列

f(n)=f(n−2)+f(n−1) (n≥2)，其中f(0)=0，f(1)=1。

int f( int n );

#include <stdio.h>

int f( int n );

int main()
{
int n;

scanf("%d", &n);
printf("%d\n", f(n));

return 0;
}

/* 你的代码将被嵌在这里 */

6

8

int f( int n )
{
if(n==0||n==1) return n;
//else if(n==1) return 1;
else
{
return f(n-2)+f(n-1);
}
}

## 99、习题10-7 十进制转换二进制

void dectobin( int n );

#include <stdio.h>

void dectobin( int n );

int main()
{
int n;

scanf("%d", &n);
dectobin(n);

return 0;
}

/* 你的代码将被嵌在这里 */

10

1010

void dectobin( int n )
{
if(n<2) printf("%d",n%2);
else
{
dectobin(n/2);
printf("%d",n%2);
}
}

## 100、习题10-8 递归实现顺序输出整数

void printdigits( int n );

#include <stdio.h>

void printdigits( int n );

int main()
{
int n;

scanf("%d", &n);
printdigits(n);

return 0;
}

/* 你的代码将被嵌在这里 */

12345

1 2 3 4 5

void printdigits( int n )
{
if(n<=10) printf("%d\n",n%10);
else
{   printdigits(n/10);
printf("%d\n",n%10);

}
}

0 条评论

• ### 【阅读清单】系列文章清单列表（一）

Centreon+Nagios实战 https://cloud.tencent.com/developer/inventory/272

• ### 很多小伙伴问我推荐什么书籍和网课，这次把私藏很久的资料都贡献了（上）

平时有不少读者朋友问，有没有学习书籍网上课程推荐？今天结合自己学习经历与身边几个朋友的经历总结了一份程序员相关的书籍和网课。

• ### 浙大版《C语言程序设计（第3版）》题目集 习题9-5 通讯录排序

输入n个朋友的信息，包括姓名、生日、电话号码，本题要求编写程序，按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

• ### 浙大版《C语言程序设计（第3版）》题目集 习题3-5 三角形判断

给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)，检验它们能否构成三角形。

• ### 我一 jiao 踹开了 C 语言的大门

老读者都知道了，我妹今年上大一，学校安排的编程语言是 C 语言，这对于一个初学编程的小白来说，并不容易！作为她亲哥的我，肩膀上抗着巨大的责任，那就是尽全力帮助她...

• ### 浙大版《C语言程序设计（第3版）》题目集 习题7-3 判断上三角矩阵

上三角矩阵指主对角线以下的元素都为0的矩阵；主对角线为从矩阵的左上角至右下角的连线。

• ### C 语言与 C++ 学习路线、书籍、视频推荐和资料，值得收藏！

C 语言是最接近计算机的语言，很多时间，我们都会发现，C 语言是非常有必要学习的。

• ### 「算法与数据结构」从入门到进阶整理推荐书单

小吴花了几天时间整理了一下学习「数据结构与算法」可以参考的书籍，希望能在学习的道路上帮到你,文末提供收集的PDF版。

• ### 浙大版《C语言程序设计（第3版）》题目集 习题10-1 判断满足条件的三位数

本题要求实现一个函数，统计给定区间内的三位数中有两位数字相同的完全平方数（如144、676）的个数。

• ### 畅行全球20年，最值得拥有的殿堂级C++入门神作！！

它融合了令全球无数程序员为之迷醉的C++大师Stanley B. Lippman的丰富实践经验，注入了C++标准委员会原负责人Josée Lajoie 对C++...

• ### 刷了 1000 多道算法题，一点心得

开个玩笑，其实，算法题目已经成为了公司筛人的一种方式，大厂的每一轮面试基本都会有几道算法题，甚至有的公司笔试全部都是算法题。其他题目答的都差不多，那你算法题做不...

• ### 学习C++要读那些书

加入编程界已经好几个年头了，也看了一些书，迷失过，总结过，绕过弯路，最后想想，就是因为开始没有指导性的意见。为了让后人不要重蹈覆辙，给大家推荐几本书，好好看看吧...

• ### 如何用三个月搞定C语言

C语言上个世纪七十年代诞生至今，已经度过了40多个春秋，在此期间经历多次的版本的更迭，目前市面上绝大部分语言的底层实现都是基于C语言，随着C语言之父的逝去，C语...

• ### 零基础究竟怎样才可以学好C语言？多年开发老司机告诉你答案！

看到这，你也许有疑问：C语言功能强大，运行这么简单的一个程序就算入门了，没这么简单吧?

• ### 从业必看！2017年Python这些重要的事件

2017年仿佛整个程序员圈都在焦虑学习python，为了帮助马哥小伙伴发现2018年Python的趋势，汤哥在马哥Python的万人学习社群做了个调研，盘点了一...

• ### 从业必看！2017年Python这些重要的事件

2017年仿佛整个程序员圈都在焦虑学习python，为了帮助马哥小伙伴发现2018年Python的趋势，汤哥在马哥Python的万人学习社群做了个调研，盘点...