函数题
练习5-1 求m到n之和
int sum(int m,int n){
int sum=0;
for(int i=m;i<=n;i++){
sum+=i;
}
return sum;//必须返回
}
练习5-2 找两个数中最大者
int max( int a, int b ){
if(a>b)return a;
else return b;
}//So easy,妈妈再也不用担心我的学习(狗头)
练习5-3 字符金字塔
void CharPyramid( int n, char ch ){
for(int i=1;i<=n;i++){
for(int j=0;j<n-i;j++) printf(" ");
//只关心左侧空格个数,样例为3,逐个递减,So(n-i)
for(int j=0;j<i;j++) printf("%c ", ch);
//依个数打印即可
printf("\n");
}
}
习题5-1 符号函数
int sign( int x ){
if(x>0)x=1;
else if(x==0)x=0;
else x=-1;
return x;//必须要返回,基础错误不能再犯,裂开。
}
习题5-2 使用函数求奇数和
int even( int n ){
int even;
if(n%2==0) even=1;
else even=0;
return even;
}
int OddSum( int List[], int N ){
int OddSum=0;
for(int i=0;i<N;i++)
if(!even(List[i]))//狗头
OddSum+=List[i];
return OddSum;
}
习题5-3 使用函数计算两点间的距离
double dist( double x1, double y1, double x2, double y2 ){
double dist1;
dist1=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
return dist1;
}//此书编程类原题3-5三角形同题
习题5-4 使用函数求素数和懒得动弹了
编程题
练习2-1 Programming in C is fun!
#include<stdio.h>
int main(){
printf("Programming in C is fun!");
}
练习2-3 输出倒三角图案
#include<stdio.h>
int main(){
printf("* * * *\n");
printf(" * * *\n");
printf(" * *\n");
printf(" *");
}
练习2-4 温度转换
#include<stdio.h>
int main(){
int C,F=150;
C=5*(F-32)/9;
printf("fahr = 150, celsius = %d",C);
return 0;
}
练习2-6 计算物体自由下落的距离
#include <stdio.h>
int main(){
float h,t = 3,g = 10;
h = 0.5*g*t*t;
printf("height = %.2f",h);
return 0;
}
练习2-8 计算摄氏温度
#include<stdio.h>
int main(){
int C,F;
scanf("%d",&F);
C=5*(F-32)/9;
printf("Celsius = %d",C);
return 0;
}
练习2-9 整数四则运算
#include<stdio.h>
int main(){
int m,n;
scanf("%d %d",&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);
printf("%d / %d = %d",m,n,m/n);
return 0;
}
练习2-10 计算分段函数[1]
#include<stdio.h>
int main()
{
float x,result;
scanf("%f",&x);
if(x!=0){
result=1/x;
}else{
result=0;
}
printf("f(%.1f) = %.1f",x,result);
return 0;
}
练习2-11 计算分段函数[2]
#include<stdio.h>
#include<math.h>
int main(){
float x,y;
scanf("%f",&x);
if(x>=0){
y=sqrt(x);
}else
y=(x+1)*(x+1)+x*2+1/x;
printf("f(%.2f) = %.2f",x,y);
}
练习2-12 输出华氏-摄氏温度转换表
#include<stdio.h>
int main(){
int lower,upper,F;
double C;
scanf("%d %d",&lower,&upper);
F=lower;
if(lower<=upper&&upper<=100){
printf("fahr celsius\n");
C=5.0*(F*1.0-32)/9.0;
printf("%d%6.1f",F,C);//占据6个字符宽度,靠右对齐,保留1位小数
while((F+=2)<=upper){
C=5.0*(F*1.0-32)/9.0;
printf("\n%d%6.1f",F,C);//保证结尾无空行
}
}else printf("Invalid.");
return 0;
}
练习2-13 求N分之一序列前N项和
#include<stdio.h>
int main(){
int i;
double sum;
scanf("%d",&i);
for(int j=1;j<=i;j++){
sum+=1.0/j;
}
printf("sum = %.6f",sum);
}
练习2-14 求奇数分之一序列前N项和
#include<stdio.h>
int main(){
int i;
double sum;
scanf("%d",&i);
for(int j=1;j<=i;j++){
sum+=1.0/(2*j-1);
}
printf("sum = %.6f",sum);
}
练习2-15 求简单交错序列前N项和
#include<stdio.h>
int main(){
int i;
double sum;
scanf("%d",&i);
for(int j=1;j<=i;j++){
if(j%2==1){
sum+=1.0/(3*j-2);
}else{
sum-=1.0/(3*j-2);
}
}
printf("sum = %.3f",sum);
}
练习2-17 生成3的乘方表
#include<stdio.h>
#include<math.h>
int main(){
int i,a;
scanf("%d",&i);
if(i<0){
return 0;
}else{
for(int j=0;j<=i;j++){
a=pow(3,j);
printf("pow(3,%d) = %d\n",j,a);
}
}
}
练习2-18 求组合数
#include<stdio.h>
double fact(int n){
double fact=1;
for(int i=1;i<=n;i++){
fact*=i;
}
return fact;
}
int main(){
double result;
double m,n;
scanf("%lf %lf",&m,&n);
result = fact(n)/(fact(m)*fact(n-m));
printf("result = %.0lf",result);
return 0;
}
习题2-2 阶梯电价习题2-1 求整数均值
#include<stdio.h>
int main() {
int a, b, c, d, sum;
float ave;
scanf("%d %d %d %d", &a, &b, &c, &d);
sum = (a + b + c + d);
ave = (a + b + c + d) / 4.0;
printf("Sum = %d; Average = %.1f", sum, ave);
}
习题2-2 阶梯电价
#include<stdio.h>
int main() {
int a;
double cost;
scanf("%d",&a);
if(a<0){
printf("Invalid Value!");
return 0;
}else if(a<=50){
cost=a*0.53;
}else{
cost=(50*0.53+(a-50)*0.58);
}
printf("cost = %.2f",cost);
return 0;
}
习题2-3 求平方与倒数序列的部分和
#include<stdio.h>
int main(){
int m,n;
double sum=0;
scanf("%d %d",&m,&n);
for(int i=m;i<=n;i++){
sum+=i*i+1.0/i;
}
printf("sum = %.6lf",sum);
return 0;
}
习题2-4 求交错序列前N项和
#include<stdio.h>
int main(){
double i,m,sum;
int n,flag=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
m=flag*i/(2*i-1);
sum+=m;
flag*=-1;
}
printf("%.3lf",sum);
return 0;
}
习题2-6 求阶乘序列前N项和
#include<stdio.h>
int main(){
int n,sum=0,i,j=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
j*=i;
sum+=j;
}
printf("%d",sum);
}
练习3-2 计算符号函数的值
#include<stdio.h>
int main()
{
int n,sign;
scanf("%d",&n);
if(n<0)sign=-1;
if(n==0)sign=0;
if(n>0)sign=1;
printf("sign(%d) = %d",n,sign);
return 0;
}
练习3-3 统计学生平均成绩与及格人数
#include<stdio.h>
int main(void)
{
int i,n,score,count=0;
double sum=0,average;
scanf("%d",&n);
if(n==0){
printf("average = 0.0\n");
printf("count = 0");
}else{
for(i=1;i<=n;i++){
scanf("%d",&score);
sum=sum+score;
if(score>=60)count++;
}
average=sum/n;
printf("average = %.1f\n",average);
printf("count = %d",count);
}
return 0;
}
练习3-4 统计字符
#include <stdio.h>
int main(){
int i,letter=0,blank=0,digit=0,other=0;
char ch;
for(i=0;i<=9;i++){
ch=getchar();
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))letter++;
else if((ch==' ')||(ch=='\n'))blank++;
else if(ch>='0'&&ch<='9') digit++;
else other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
}
练习3-5 输出闰年
#include <stdio.h>
int main() {
int a, x = 2004;
scanf("%d", &a);
if (a <= 2000 || a >2100) printf("Invalid year!");
else if (a < 2004) printf("None");
else while (x <= a ) {
if(x % 100 != 0)
printf("%d\n", x);
x += 4;
}
}
练习3-7 成绩转换
#include <stdio.h>
int main(){
int i;
scanf("%d",&i);
switch(i/10){
case (10):printf("A");break;
case (9):printf("A"); break;
case (8):printf("B"); break;
case (7):printf("C"); break;
case (6):printf("D"); break;
default:printf("E");
}
return 0;
}
练习3-8 查询水果价格
习题3-1 比较大小
#include<stdio.h>
int main(){
int x,y,z,t;
scanf("%d %d %d",&x,&y,&z);
if(x>y){
t=y;
y=x;
x=t;
}if(x>z){
t=z;
z=x;
x=t;
}if(y>z){
t=z;
z=y;
y=t;
}
printf("%d->%d->%d\n",x,y,z);
return 0;
}
习题3-2 高速公路超速处罚
#include <stdio.h>
int main(){
int a,b;
double c;
scanf("%d %d",&a,&b);
c=(a-b)*100.0/b;
if(c>=50)printf("Exceed %.lf%%. License Revoked",c);
else if(c>=10)printf("Exceed %.lf%%. Ticket 200",c);
else printf("OK");
}
习题3-3 出租车计价
#include <stdio.h>
#include <math.h>
int main() {
double f, sum = 0;
int time;
scanf("%lf %d", &f, &time);
if (f <= 3) sum = 10;
else if (f <= 10) sum = 10 + (f - 3) * 2.0;
else sum = 24 + (f - 10) * 3.0;
sum += time / 5 * 2;
printf("%.f", round(sum));
}
习题3-4 统计学生成绩
#include <stdio.h>
#include <math.h>
int main() {
int N, g, A=0, B=0, C=0, D=0, E=0;
scanf("%d\n", &N);
for (int i = 1; i <= N; i++) {
scanf("%d", &g);
if (g >= 90 && g <= 100)A++;
else if (g >= 80)B++;
else if (g >= 70)C++;
else if (g >= 60)D++;
else E++;
}
printf("%d %d %d %d %d", A, B, C, D, E);
}
习题3-5 三角形判断
#include <stdio.h>
#include <math.h>
int main(){
double x1,x2,x3,y1,y2,y3;
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
double d12,d13,d23,L,A;
d12=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
d13=sqrt(pow(x1-x3,2)+pow(y1-y3,2));
d23=sqrt(pow(x2-x3,2)+pow(y2-y3,2));
if(d12+d13>d23&&d13+d23>d12&&d23+d12>d13){
L=d12+d13+d23;
A=sqrt(L/2*(L/2-d12)*(L/2-d23)*(L/2-d13));
printf("L = %.2lf, A = %.2lf",L,A);
}else printf("Impossible");
}
练习4-3 求给定精度的简单交错序列部分和
练习4-6 猜数字游戏
#include <stdio.h>
#include <math.h>
int main(){
int a,N,x,b=0;
scanf("%d %d",&a,&N);
for(int i=1;i<=N;i++){
scanf("%d",&x);
}
if(x<0)printf("Game Over");
else while(x!=a){
if(x>a)printf("Too big\n");
else if(x<a)printf("Too small\n");
b++;
break;
}
if(b=1)printf("Bingo!");
else if(b<4)printf("Lucky You!");
else if(b<N)printf("Good Guess!");
else printf("Game Over");
}
练习4-7 求e的近似值
#include<stdio.h>
int main(){
int a;
double e=1,b=1;
scanf("%d",&a);
for(int i=1;i<=a;i++){
b*=i;
e+=(1/b);
}
printf("%.8f",e);
}//沃柑!我忘了.f和.lf有啥区别了
练习4-10 找出最小值
#include<stdio.h>
int main(){
int m ,q,min;
scanf("%d",&m);
//想用for进行输入循环,但是发现输入时不在一行,并且vsac中栈有问题(胡言乱语)
scanf("%d",&q);//既然正整数,那么必定有值,遂先捞出来观察
min=q;
//我想了又想,删掉数组,优化
for(int i=1;i<m;i++){
scanf(" %d",&q);
if(min>q) min=q;
}
printf("min = %d",min);
}
练习4-11 统计素数并求和
习题4-1 求奇数和
习题4-2 求幂级数展开的部分和
习题4-3 求分数序列前N项和
习题4-4 特殊a串数列求和
习题4-5 换硬币
习题4-6 水仙花数
//典典典,李典!都出了这么多年了,水仙花早都不仙了
#include<stdio.h>
#include<math.h>
int main(){
int i,n,z,g,m=0,a[]={0};
scanf("%d",&n);
z=n;
//我的意思存数组,然后pow看
//能想到颇为pow(100,n-1)到 pow(n)时此题已解
for(i=pow(10,n-1);i<pow(10,n);i++){
//如果i从1开始那么时间会较大
for(int m=0;m<n;m++){
a[m]=i/(10*z-1);
z--;
g+=pow(a[m],n);
}
if(g==i)
printf("%d\n",i);
}
}