编程题
目录
练习2-1 Programming in C is fun!
练习2-1 Programming in C is fun!
#include <stdio.h>
int main(void){
printf("Programming in C is fun!");
return 0;
}
练习2-3 输出倒三角图案
#include <stdio.h>
int main(void) {
int i, j;
for ( i = 0; i < 4; i++ ) { //行数,共有4行。
for ( j = 0; j < i; j++ )
printf(" "); //每行的空格数。
for ( j = 3-i; j > 0;j-- )
printf("* "); //每行的“* ”数。
printf("*"); //每行最后一个“*”不带空格。
printf("\n"); //换行
}
return 0;
}
练习2-4 温度转换
#include <stdio.h>
int main(){
//根据公式计算并输出
printf("fahr = 150, celsius = %d",5*(150-32)/9);
return 0;
}
练习2-6 计算物体自由下落的距离
#include<stdio.h>
int main()
{
float h; //用h变量记录下落距离
h=0.5*10*9; //位移公式:h=½gt²
printf("height = %.2f",h);//保留小数点后两位,输出下落距离
return 0;
}
练习2-8 计算摄氏温度
#include <stdio.h>
int main(){
int h; //记录用户输入的华氏温度
scanf("%d",&h); //用户输入
printf("Celsius = %d\n",5*(h-32)/9); //计算并输出
return 0;
}
练习2-9 整数四则运算
#include <stdio.h>
int main(){
int a,b; //记录需要计算的两个整数
scanf("%d%d",&a,&b); /*注意%d%d 是按十进值格式输入两个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。
如果使用 , 来分隔输入的 %d, 相应的输入时也需要添加, */
//输出格式有空格
printf("%d + %d = %d\n",a,b,a+b);//加
printf("%d - %d = %d\n",a,b,a-b);//减
printf("%d * %d = %d\n",a,b,a*b);//乘
printf("%d / %d = %d\n",a,b,a/b);//除
return 0;
}
练习2-10 计算分段函数[1]
#include <stdio.h>
int main(){
float x;
scanf("%f",&x);
if(x==0){ //x为0时
printf("f(0.0) = 0.0",x);
}else{ //x不为0时
printf("f(%.1f) = %.1f",x,1/x);
}
return 0;
}
练习2-11 计算分段函数[2]
#include <stdio.h>
#include <math.h>
int main(){
float x,result;
scanf("%f",&x);
if(x>=0){ //x大于等于0时
result=sqrt(x); //对x开根号
}else{ //x小于0时
result=pow(x+1,2) + 2 * x + 1 / x ;
}
printf("f(%.2f) = %.2f",x,result);
return 0;
}
练习2-12 输出华氏-摄氏温度转换表
#include <stdio.h>
int main(){
int lower,upper;
float celsius;
int i;
scanf("%d%d",&lower,&upper);
if(lower<=upper && upper <= 100){ //用户输入合法
printf("fahr celsius\n");
for(i=lower;i<=upper;i=i+2){ //循环输出温度对应表的每一行
celsius=5.0 * (i-32) / 9;
printf("%d%6.1f\n",i,celsius);
}
}else{ //用户输入不合法
printf("Invalid.");
}
return 0;
}
练习2-13 求N分之一序列前N项和
#include <stdio.h>
int main(){
int n,i;
double sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++){ //循环计算前n项的和
sum += 1.0 / i;
}
printf("sum = %.6lf",sum);
return 0;
}
练习2-14 求奇数分之一序列前N项和
#include <stdio.h>
int main(){
int n,i;
double sum=0;
scanf("%d",&n);
for(i=1;i<=2*n;i=i+2){ //循环计算前n项的和
sum += 1.0 / i;
}
printf("sum = %.6lf",sum);
return 0;
}
练习2-15 求简单交错序列前N项和
#include <stdio.h>
int main(){
int i=1,n,num=1; //num记录已进行到第num项
float sum=0; //记录前n项之和
scanf("%d",&n); //用户输入
while(num<=n){ //将前n项循环相加
if(num%2==0){ //若是奇数项则相加
sum=sum-1.0/i;
}else{ //若是偶数项则相减
sum=sum+1.0/i;
}
num++;
i=i+3;
}
printf("sum = %.3f",sum); //输出结果
return 0;
}
练习2-17 生成3的乘方表
#include <stdio.h>
#include <math.h>
int main(){
int n,i;
scanf("%d",&n);
for(i=0;i<=n;i++){
printf("pow(3,%d) = %.0f\n",i,pow(3,i));// %.0f表示浮点数不要小数点后的结果,取整
}
return 0;
}
练习2-18 求组合数
#include <stdio.h>
double fact(int n){ //计算n的阶乘
double sum=1;
for(int i=1;i<=n;i++){
sum=sum*i;
}
return sum;
}
int main(){
int m,n;
double result;
scanf("%d%d",&m,&n);
result = fact(n)/(fact(m) * fact(n-m)); //调用定义的阶乘函数计算公式
printf("result = %.0lf",result); //按照格式要求输出结果
return 0;
}
习题2-1 求整数均值
#include <stdio.h>
int main (){
int a,b,c,d;
double average,sum=0;
scanf("%d%d%d%d",&a,&b,&c,&d);
sum=a+b+c+d;
average = sum / 4;
printf("Sum = %.0lf; Average = %.1lf",sum,average);
return 0;
}
习题2-2 阶梯电价
#include <stdio.h>
int main (){
double electricity; //电量
double cost=0; //电费
scanf("%lf",&electricity);
if(electricity < 0){
printf("Invalid Value!");
}else if(electricity<=50){
cost = electricity * 0.53;
printf("cost = %.2lf",cost);
}else{
cost =50 * 0.53+(electricity-50)*0.58;
printf("cost = %.2lf",cost);
}
return 0;
}
习题2-3 求平方与倒数序列的部分和
#include <stdio.h>
int main(){
int m,n;
double sum=0;
scanf("%d%d",&m,&n);
for(;m<=n;m++){
sum=sum+m*m+(1.0/m);
}
printf("sum = %.6lf",sum);
return 0;
}
习题2-4 求交错序列前N项和
#include <stdio.h>
int main(){
int n;
int i,j;
double sum=0;
scanf("%d",&n);
for(i=1,j=1;i<=n;i++,j=j+2){
if(i%2!=0){
sum=sum+(double)i/j; //注意i/j,因i,j皆为整型,相除为0,则强制类型转换成浮点型
}else{
sum=sum-(double)i/j;
}
}
printf("%.3lf",sum);
return 0;
}
习题2-5 求平方根序列前N项和
#include <stdio.h>
#include <math.h>
int main(){
int n;
double sum=0;
scanf("%d",&n);
while(n>0){
sum = sum + sqrt(n);
n--;
}
printf("sum = %.2lf",sum);
return 0;
}
习题2-6 求阶乘序列前N项和
#include <stdio.h>
double fact(int n){
double sum = 1;
for(int i=1;i<=n;i++){
sum=sum * i;
}
return sum;
}
int main(){
int n;
double sum = 0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
sum=sum + fact(i);
}
printf("%.0lf",sum);
return 0;
}
练习3-2 计算符号函数的值
#include <stdio.h>
int main (){
int n,result;
scanf("%d",&n);
if(n<0){
result = -1;
}else if (n==0){
result = 0;
}else{
result = 1;
}
printf("sign(%d) = %d",n,result);
return 0;
}
练习3-3 统计学生平均成绩与及格人数
#include <stdio.h>
int main(){
int n,count=0,i;
float sum=0,grade=0;
scanf("%d",&n);
if(n!=0){
for(i=0;i<n;i++){
scanf("%f",&grade);
sum=sum+grade;
if(grade>=60){
count++;
}
}
printf("average = %.1f\ncount = %d",sum/n,count);
}else{
printf("average = 0.0\ncount = 0");
}
return 0;
}
练习3-4 统计字符
#include <stdio.h>
int main(){
int letter=0,blank=0,digit=0,other=0;
char c;
for(int i=0;i<10;i++){
c=getchar();
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
letter++;
}else if(c==' '||c=='\n'){
blank++;
}else if (c>='0'&&c<='9'){
digit++;
}else{
other++;
}
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}
练习3-5 输出闰年
#include<stdio.h>
int main(void)
{
int i, year;
scanf("%d", &year);
if ( year > 2003 && year <= 2100 )//注意这里要小于等于21世纪的上届
{
for ( i = 2004; i <= year; i++ )
{
if ( i % 4 == 0 && i % 100 != 0)
printf("%d\n", i);
}
}
else if ( year > 2000 && year <2004)
printf("None");
else
printf("Invalid year!");
return 0;
}
练习3-7 成绩转换
#include <stdio.h>
int main(){
float grade;
char level;
scanf("%f",&grade);
if(grade>=90){
level = 'A';
}else if(grade>=80&&grade<90){
level = 'B';
}else if(grade>=70&&grade<80){
level = 'C';
}else if(grade>=60&&grade<70){
level = 'D';
}else{
level = 'E';
}
printf("%c",level);
return 0;
}
练习3-8 查询水果价格
#include <stdio.h>
int main(){
float a[4]={3.00,2.50,4.10,10.20};
int num;
printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
for(int i=0;i<5;i++){
scanf("%d",&num);
if(num==0){
break;
}else if (num>=1&&num<=4){
printf("price = %.2f\n",a[num-1]);
}else{
printf("price = 0.00\n");
}
}
return 0;
}
习题3-1 比较大小
#include <stdio.h>
int main(){
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
习题3-2 高速公路超速处罚
#include <stdio.h>
int main(){
float speed,limit;
float x;
scanf("%f%f",&speed,&limit);
x=(speed-limit)/limit * 100;
if(x>=10&&x<50){
printf("Exceed %.0f%%. Ticket 200",x);//%%在输出中将被替换为一个单独的%字符
}else if(x>=50){
printf("Exceed %.0f%%. License Revoked",x);
}else{
printf("OK");
}
return 0;
}
习题3-3 出租车计价
#include <stdio.h>
int main(){
float distance,wait;
float cost=0;
scanf("%f%f",&distance,&wait);
if(distance<=3){
cost = 10;
}else if (distance >3 && distance<=10){
cost = 10+(distance-3)*2;
}else{
cost = 24+(distance-10)*3;
}
if(wait>=5){
cost =cost + ((int)wait/5)*2;
}
printf("%.0f",round(cost));
return 0;
}
习题3-4 统计学生成绩
#include <stdio.h>
int main(){
int personNum[5]={0};
float grade;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%f",&grade);
if(grade>=90){
personNum[0]++;
}else if(grade>=80&&grade<90){
personNum[1]++;
}else if(grade>=70&&grade<80){
personNum[2]++;
}else if(grade>=60&&grade<70){
personNum[3]++;
}else{
personNum[4]++;
}
}
for(i=0;i<4;i++){
printf("%d ",personNum[i]);
}
printf("%d",personNum[i]);
return 0;
}
习题3-5 三角形判断
#include <stdio.h>
#include <math.h>
int main()
{
double x1,y1,x2,y2,x3,y3;
double a,b,c,l,s;
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
a=sqrt(pow((x1-x2),2)+pow((y1-y2),2) );
b=sqrt(pow((x1-x3),2)+pow((y1-y3),2) );
c=sqrt(pow((x3-x2),2)+pow((y3-y2),2) );
if((a+b)<=c||(a+c)<=b||(c+b)<=a){
printf("Impossible");
}else{
l=(a+b+c)/2;
s=sqrt(l*(l-a)*(l-c)*(l-b));
printf("L = %.2f, A = %.2f",a+b+c,s );
}
return 0;
}