资源描述
第2章 C语言概述
2.3 参照例题,编写一个C语言程序,输出以下信息:
****************************
Hello,World!
****************************
程序代码如下:
#include <stdio.h> /*编译预处理命令*/
void main(void) /* 主函数*/
{
printf(“****************************\n”); /*输出一行**/
printf(“ Hello World!\n”); /*输出Hello World!*/
printf(“****************************\n”); /*输出一行**/
}
2.4 编写一个C语言程序,输入a、b、c三个数,输出其中最大者。
程序代码如下:
#include <stdio.h>
void main ( ) /* 主函数*/
{
int max(int x,int y); /*函数声明*/
int a,b,c,d; /*声明部分,定义变量*/
scanf("%d,%d,%d",&a,&b,&c); /*输入变量a、b、c的值*/
d=max(a,b); /*调用max函数,将得到的值赋给d*/
d=max(d,c); /*调用max函数,将得到的值赋给d*/
printf("max=%d\n",d); /*输出d的值*/
getch();
}
int max(int x,int y) /*定义max函数,函数值为整型,形式参数x,y为整型*/
{
int z; /* max函数中的声明部分,定义本函数中用到的变量z为整型*/
if(x>y)
z=x;
else
z=y;
return (z); /*将z的值返回,通过add带回调用处*/
}
第3章 数据类型、运算符与表达式
3.7 编写程序,输入两个字符,利用条件运算符,输出其中较小字符的ASCII 码值。
程序代码如下:
void main()
{
char c1,c2;
int i;
printf("input two letters:");
scanf("%c,%c",&c1,&c2); /*注意:输入的两个字符之间要用逗号隔开*/
i= c1<c2?c1:c2;
printf("minimum ASCII is %d\n",i);
}
第4章 程序控制结构
4.1 用*号输出大写字母“C”的图案。
程序代码如下:
#include <stdio.h>
void main()
{
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
4.2 从键盘输入一个大写字母,要求分别用大小写字母形式输出该字母及对应的ASCII码值。
程序代码如下:
#include <stdio.h>
void main()
{
char c1,c2;
printf("Input a uppercase letter: ");
c1=getchar(); /*输入大写字母*/
c2=c1+32; /*将大写字母转换成对应的小写字母*/
printf("%c,%d\n",c1,c1); /*输出大写字母及对应的ASCII码值*/
printf("%c,%d\n",c2,c2); /*输出小写字母及对应的ASCII码值*/
}
4.3 输入一个整数,判断它能否被3或7整除,若能整除,输出“YES”,否则输出“NO”。
程序代码如下:
#include <stdio.h>
void main()
{
int n;
scanf("%d",&n);
if (n%3==0||n%7==0) /*判断能否被3或7整除*/
printf("YES\n");
else
printf("NO\n");
}
4.4 输入x和a的值,按下列公式计算y的值。
程序代码一:
#include <stdio.h>
#include <math.h>
void main()
{
float x,a,y;
printf ("\nPlease input x,a: ");
scanf("%f,%f",&x,&a);
if (x>-a&&x<a) /*或fabs(x)<a */
y=sqrt(a*a-x*x);
if (x==a || x== -a) /*或fabs(x)==a */
y=0;
if (x<-a || x>a ) /*或fabs(x)>a*/
y=x-1;
printf("x=%g,a=%g,y=%g\n",x,a,y);
}
程序代码二:
#include <stdio.h>
#include <math.h>
void main()
{
float x,a,y;
printf ("\nPlease input x,a: ");
scanf("%f,%f",&x,&a);
if (fabs(x)<a) /*或 x>-a&&x<a */
y=sqrt(a*a-x*x);
else if (fabs(x)==a ) /*或x==a || x== -a */
y=0;
else
y=x-1;
printf("x=%g,a=%g,y=%g\n",x,a,y);
}
程序代码三:
#include <stdio.h>
#include <math.h>
void main()
{
float x,a,y;
printf ("\nPlease input x,a: ");
scanf("%f,%f",&x,&a);
if (fabs(x)<=a)
if (fabs(x)< a)
y=sqrt(a*a-x*x);
else
y=0;
else
y=x-1;
printf("x=%g,a=%g,y=%g\n",x,a,y);
}
4.5 输入四个不相等的数,找出其中的最小数。
程序代码一:
#include <stdio.h>
void main()
{
int a,b,c,d,min;
printf("\nPlease input 4 numbers:");
scanf("%d%d%d%d",&a,&b,&c,&d);
min=a; /* 先假设a为最小数min */
if (b<min) min=b; /* 若b比min小,min改为b */
if (c<min) min=c; /* 若c比min小,min改为c */
if (d<min) min=d; /* 若d比min小,min改为d */
printf("The minimum number is:%d\n",min);
}
程序代码二:
#include <stdio.h>
void main()
{
int a,b,c,d,t1,t2,min;
printf("\nPlease input 4 numbers:");
scanf("%d%d%d%d",&a,&b,&c,&d);
t1=(a<b)? a:b; /* 比较a与b,较小者存入t1 */
t2=(c<d)? c:d; /* 比较c与d,较小者存入t2 */
min=(t1<t2)? t1:t2; /* 比较t1、t2,较小者即为4个数中的最小数 */
printf("The minimum number is:%d\n",min);
}
4.6 输入三个整数,分别放入x,y,z中,要求程序把数据重新按从小到大的顺序放入x,y,z中,然后输出x,y,z中的值。
程序代码如下:
#include <stdio.h>
void main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{ t=x;x=y;y=t;} /*交换x,y的值*/
if(x>z)
{ t=z;z=x;x=t;} /*交换x,z的值*/
if(y>z)
{ t=y;y=z;z=t;} /*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}
4.7 输入一个不多于4位的正整数,求它的位数,并按逆序输出各位数字。
程序代码一:
#include <stdio.h>
void main()
{
int i, a,b,c,d;
printf("\nPlease input a number(0-9999):");
scanf("%ld",&i);
if( i<0 || i>9999)
printf("Error input.");
else
{
if (i<=9) n=1; /* 求i的位数 */
else if (i<=99) n=2;
else if (i<=999) n=3;
else n=4;
printf("There are %d digits.\n",n);
a=i%10; /* 求i的个位数 */
b=i/10%10; /* 求i的十位数 */
c=i/100%10; /* 求i的百位数 */
d=i/1000%10; /* 求i的千位数 */
printf("Reverse digit: ");
switch (n)
{ case 1: printf("%d\n", a); break;
case 2: printf("%d,%d\n", a,b); break;
case 3: printf("%d,%d,%d\n", a,b,c); break;
case 4: printf("%d,%d,%d,%d\n", a,b,c,d);
}
}
}
程序代码二:
#include <stdio.h>
void main()
{
int i, a,b,c,d;
printf("\nPlease input a number(0-9999): ");
scanf("%d",&i);
a=i%10; /* 求i的个位数 */
b=i/10%10; /* 求i的十位数 */
c=i/100%10; /* 求i的百位数 */
d=i/1000%10; /* 求i的千位数 */
if (d!=0 ) /* 千位数非0时 */
{ printf("There are 4 digits.\n"); /* 4位数 */
printf("Reverse digit: %d,%d,%d,%d\n", a,b,c,d);
}
else if ( c!=0 ) /* 千位数为0但百位数非0时 */
{ printf("There are 3 digits.\n"); /* 3位数 */
printf("Reverse digit: %d,%d,%d\n", a,b,c);
}
else if ( b!=0 ) /* 千、百位数为0但十位数非0时 */
{ printf("There are 2 digits.\n"); /* 2位数 */
printf("Reverse digit: %d,%d\n", a,b);
}
else /* 千、百、十位数为0时 */
{ printf("There are 1 digits.\n"); /* 1位数 */
printf("Reverse digit: %d\n", a);
}
}
4.8 输入一个年份和一个月份,输出该年的这个月有多少天。用switch语句编程。
程序代码如下:
#include <stdio.h>
void main()
{
unsigned y,m,d;
printf("\nInput year-month:");
scanf("%u-%u",&y,&m);
switch(m)
{ case 1: case 3: case 5: case 7: case 8: case 10: case 12:
d=31; break;
case 2: /*2月份要考虑是否闰年*/
d=(y%4==0&&y%100!=0||y%400==0)?29:28; break;
case 4: case 6: case 9: case 11:
d=30; break;
}
printf("There are %u days this month.\n",d);
}
4.9 编制程序,计算某个学生奖学金的等级,以三门课程成绩为评奖依据。奖学金评奖标准如下:
符合下列条件之一者获一等奖:
(1)平均分大于95分者;
(2)有两门成绩是100分,且第三门课程成绩不低于80分者。
符合下列条件之一者获二等奖:
(1)平均分大于90分者;
(2)有一门成绩是100分,且其他课程成绩不低于75分者。
符合下列条件者获三等奖:
各门功课成绩不低于70分。
符合条件者就高不就低,只能获得高的那一项奖学金。要求显示获奖的等级。
程序代码如下:
#include <stdio.h>
void main()
{
int s1,s2,s3; float aver;
printf("\nInput three scores: ");
scanf("%d,%d,%d",&s1,&s2,&s3);
aver=(s1+s2+s3)/3.0;
if ( aver>95 || s1==100&&s2==100&s3>=80 || s1==100&&s3==100&s2>=80
|| s2==100&&s3==100&s1>=80 )
printf("Grade: 1\n");
else if ( aver>90 || s1==100&&s2>=75&s3>=75 || s2==100&&s1>=75&s3>=75
|| s3==100&&s1>=75&s2>=75 )
printf("Grade:2\n");
else if ( s1>=70&&s2>=70&s3>=70 )
printf("Grade:3\n");
}
4.10 输入华氏温度F,利用公式C=5/9*(F-32)转换成摄氏温度C,根据转换结果C的不同值,按以下要求给出相应的提示。
C>40时,打印“Hot”
30<C≤40时,打印“Warm”
20<C≤30时,打印“Room Temperature”
10<C≤20时,打印“Cool”
0<C≤10时,打印“Cold”
C≤0时,打印“Freezing”
程序代码如下:
#include <stdio.h>
void main()
{
float f,c;
printf("Input the fahrenheit temperature: ");
scanf("%f",&f);
c=5.0/9.0*(f-32); /*将华氏温度转换成摄氏温度*/
if (c>40)
printf("Hot\n");
else if (c>30)
printf("Warm\n");
else if (c>20)
printf("Room Temperature\n");
else if(c>10)
printf("Cool\n");
else if(c>0)
printf("Cold\n");
else
printf("Freezing\n");
}
4.11 某商场开展购物打折活动,若购物款x在下述范围内,所付款y按对应折扣支付:
x (x<1000)
y=
0.9x (1000≤x<2000)
0.8x (2000≤x<3000)
0.7x (x≥3000)
从键盘输入购物款x,求实际所付款y。
程序代码一:
#include <stdio.h>
void main()
{
float x,y;
printf("Input x: ");
scanf("%f",&x);
if (x<0)
printf("Input error.\n");
else
{
if (x<1000)
y=x;
else if (x<2000)
y=0.9*x;
else if (x<3000)
y=0.8*x;
else
y=0.7*x;
printf("x=%.2f,y=%.2f\n",x,y);
}
}
程序代码二:
#include <stdio.h>
void main()
{
float x,y; int c;
printf("Input x: ");
scanf("%f",&x);
if (x<0)
printf("Input error.\n");
else
{
c=x/1000;
switch (c)
{
case 0: y=x; break;
case 1: y=0.9*x; break;
case 2: y=0.8*x; break;
default: y=0.7*x;
}
printf("x=%.2f,y=%.2f\n",x,y);
}
}
4.12 企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%;高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数。
程序代码一:
#include <stdio.h>
void main()
{
float x,y;
printf("\nInput the profit x= ");
scanf("%f",&x);
if (x<=0)
printf("No prize.\n");
else
{
if ( x<=10e4 )
y=x*0.1;
else if ( x<=20e4 )
y=10e4*0.1+(x-10e4)* 0.075;
else if ( x<=40e4 )
y=10e4*0.1+10e4*0.075+(x-20e4)* 0.05;
else if ( x<=60e4 )
y=10e4*0.1+10e4*0.075+20e4*0.05+(x-40e4)* 0.03;
else if ( x<=100e4 )
y=10e4*0.1+10e4*0.075+20e4*0.05+20e4*0.03+(x-60e4)* 0.015;
else
y=10e4*0.1+10e4*0.075+20e4*0.05+20e4*0.03+40e4*0.015+(x-100e4) 0.01;
printf ("Total prize y= %.2f\n",y);
}
}
程序代码二:
#include <stdio.h>
void main()
{
float x,y;
printf("\nInput the profit x= ");
scanf("%f",&x);
if (x<=0)
printf("No prize.\n");
else
{
y10=10e4*0.1; /*利润为10万的奖金*/
y20=y10+10e4*0.075; /*利润为20万的奖金*/
y40=y20+20e4*0.05; /*利润为40万的奖金*/
y60=y40+20e4*0.03; /*利润为60万的奖金*/
y100=y60+40e4*0.015 /*利润为100万的奖金*/
if ( x<=10e4 ) y=x*0.1;
else if ( x<=20e4 ) y= y10+(x-10e4)* 0.075;
else if ( x<=40e4 ) y=y20+(x-20e4)* 0.05;
else if ( x<=60e4 ) y=y40+(x-40e4)* 0.03;
else if ( x<=100e4 ) y=y60+(x-60e4)* 0.015;
else y=y100+ (x-100e4) 0.01;
printf ("Total prize y= %.2f\n",y);
}
}
4.13 输入一个用24小时制表示的时间(h:m),把它转换为用12小时制表示的时间并输出。如:输入9:05,输出9:05AM;输入12:10,输出12:10PM;输入14:30,输出2:30PM。
程序代码如下:
#include <stdio.h>
void main()
{
int h,m;
printf("24 hour time: ");
scanf("%d:%d",&h,&m);
if(h>=24||m>=60)
printf("Input error.\n");
else if(h<12)
printf("12 hour time: %d:%02dAM\n",h,m);
else if(h<13)
printf("12 hour time: %d:%02dPM\n",h,m);
else
printf("12 hour time: %d:%02dPM\n",h-12,m);
}
4.14 输入一个学生的生日(年y1、月m1、日d1),再输入当前日期(年y2、月m2、日d2),求该生的实足年龄。
程序代码一:
#include <stdio.h>
void main()
{
int y1,m1,d1,y2,m2,d2,age;
printf("Enter the birthday (yyyy-mm-dd): ");
scanf("%d-%d-%d",&y1,&m1,&d1);
printf("Enter the current date (yyyy-mm-dd): ");
scanf("%d-%d-%d",&y2,&m2,&d2);
if(m1>m2)
age=y2-y1-1;
else if(m1<m2)
age=y2-y1;
else /* m1==m2的情形*/
if(d1>d2)
age=y2-y1-1;
else
age=y2-y1;
printf("Age= %d\n",age);
}
程序代码二:
#include <stdio.h>
void main()
{
int y1,m1,d1,y2,m2,d2,age;
printf("Enter the birthday (yyyy-mm-dd): ");
scanf("%d-%d-%d",&y1,&m1,&d1);
printf("Enter the current date (yyyy-mm-dd): ");
scanf("%d-%d-%d",&y2,&m2,&d2);
if(m1>m2|| (m1==m2&&d1>d2) )
age=y2-y1-1;
else
age=y2-y1;
printf("Age= %d\n ",age);
}
程序代码三:
#include <stdio.h>
void main()
{
int y1,m1,d1,y2,m2,d2,age;
printf("Enter the birthday (yyyy-mm-dd): ");
scanf("%d-%d-%d",&y1,&m1,&d1);
printf("Enter the current date (yyyy-mm-dd): ");
scanf("%d-%d-%d",&y2,&m2,&d2);
age=y2-y1-(m1>m2|| (m1==m2&&d1>d2) );
printf("Age= %d\n ",age);
}
4.15 输出1-300之间能同时被3和5整除的所有数。
程序代码一:
#include<stdio.h>
void main()
{
int i,k;
for(i=1,k=0;i<=300;i++,k++)
if(i%3!=0 || i%5!=0)
continue; /*当i不被3或5整除时,继续下一次循环*/
else
{
if(k%5==0)
{
printf("\n");k=0;
} /*当k为5的倍数时换行,即每行输出5个数*/
k++;
printf("%6d",i);
}
}
程序代码二:
上面的for循环可以改写为:
for(i=1,k=0;i<=300;i++,k++)
if(i%3==0 && i%5==0)
{
if(k%5==0)
{
printf("\n");
k=0;
}
k++;
printf("%6d",i);
}
4.16 任意输入n个数,输出其中最大数和最小数,并输出它们在序列中的位置。
程序代码如下:
#include<stdio.h>
void main()
{
int i,n,max_location=1,min_location=1;
float x,max=0,min=0;
printf("input n:");
scanf("%d",&n); /*输入数的个数*/
printf("input x:");
scanf("%f",&x); /*输入第一个数*/
max=min=x; /*假设第一个数既是最大数,也是最小数*/
for(i=2;i<=n;i++) /*从第二个数开始循环,所以i=2*/
{
scanf("%f",&x);
if(x>max)
{
max=x; max_location=i;
} /*如果x>max,则赋给max,并记下位置*/
if(x<min)
{
min=x; min_location=i;
} /*如果x<min,则赋给mix,并记下位置*/
}
printf("\nmax=%6.2f,max_location =%d\n",max,max_location);
printf("\nmin=%6.2f,min_location =%d\n",min,min_location);
}
4.17 计算多项式12+22+32+…+1002的值。
程序代码如下:
#include<stdio.h>
void main()
{
int i;
long sum=0;
for(i=1;i<=100;i++)
sum+=i*i; /*每项直接累加,相当于sum=1+2*2+3*3+……*/
printf("sum=%ld\n",sum);
}
4.18 计算多项式7+72+73+······+7n的值,n由键盘输入。
程序代码一:
#include<stdio.h>
void main()
{
int i,n;
long t=1,s=0;
printf("please input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t*=7; s+=t; /*每次循环t乘于7以后各单项累加*/
} /*
printf("7+7*7+7*7*7+...=%d\n",s);
}
程序代码二:
#include<stdio.h>
void main()
{
int i,j,n;
long t,s=0;
printf("please input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(t=1,j=1;j<=i;j++)t*=7; /*每个单项都用一个循环实现*/
s+=t;
} /*各单项累加*/
printf("7+7*7+7*7*7+...=%d\n",s);
}
4.19 输入x值,按照下列公式计算cos(x)的值,直到最后一项小于10-6为止。
程序代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
float sum , term=1,x ; int k=1 ,sign=1;
printf("please input x:");
scanf ("%f",&x ) ;
sum=1 ; /*第一项直接赋值*/
while( fabs(term)>=1e-6)
{
k=k+2;
term*=x*x /k / (k-1) ; /*计算单项值*/
sign=-sign ; /*符号变量,用来实现正负号转换*/
sum+= sign* term ; /*累加*/
}
printf ("sum =%6.2f\n" , sum ) ;
}
4.20 输入若干个数,如:2.3、-11.2、66.7、······ 、116.9,求它们的和,并统计个数(个数≤100)。
程序代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
int i;
float x,sum=0;
for(i=1;i<=100;i++)
{
scanf("%f",&x);
if(fabs(x)<0.000001)break;
sum+=x;
}
printf ("sum=%f,count=%d\n",sum,i-1); /*判别是否结束前,i总是先加1,项数为i-1*/
}
4.21 编写输出如下字母塔的程序:
A
ABA
ABCBA
ABCDCBA
………………
……………………
…………………………
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
程序代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
int a,b;
for (a=1;a<=26;a++) /*循环26次,输出26行*/
{
for( b=1;b<=26-a;b++) printf(""); /*输出每行左边的空格*/
for(b=1;b<=a;b++) printf("%c",b+64); /*输出每行左边(包括中间)的字母*/
for(b=a-1;b>=1;b--) printf("%c",b+64); /*输出每行右边(不包括中间)的字母*/
printf("\n"); /*每行输出以后换行*/
}
}
4.22 “鸡兔同笼”是一个中国古算题,最早出现在《孙子算经》中。笼中有若干只鸡和兔子,它们共有88个头,244只脚,问鸡和兔各有多少只?
程序代码如下:
#include<stdio.h>
voi
展开阅读全文