【前记】
大一时,贪玩,没有认真地跟着忠孝教授好好学习C语言。后来虽然又花了些时间查阅,但总归没有花一段连续的时间来研读这本教材《高级语言程序设计》(厦门大学出版社·黄翠兰主编),趁着实习前的这段空闲时间,重新拿起学习,并认真做好课后的习题,做到每题都弄懂,打好基础!有闲暇了,数据结构和C++也每题必做!发到自己的博客上监督自己完成!
【第三章】
1.把任意的三个数按大小顺序排列。
#include <stdio.h>
int _max(int a,int b)
{
if (a>b) return a;
else return b;
}
void main(){
int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);
max = _max(_max(a,b),_max(b,c));
printf("max=%d\n",max);
getch();
}
2.计算1-1/2+1/3-1/4+...+1/99-1/100的值。
#include <stdio.h>
void main(){
float i=1.000;
float a=0.000,b=0.000,c=0.000;
for (i;i<=50;i+=2.000)
{
a = a+(1.000/i);
b = b+(-1.000)*(1.000/(i+1));
printf("i:%f\n",i);
printf("a=%f b=%f\n",a,b);
}
c = a+b;
printf("a=%f,b=%f,c=%f\n",a,b,c);
getch();
}
这代码,我看了都蛋疼!
3.编程判断输入整数的正负性和奇偶性。
#include <stdio.h>
void main()
{
int a;
scanf("%d",&a);
if (a >= 0) { printf("整数!\n");}
else { printf("负数!\n");}
if (a%2 == 0) { printf("偶数!\n");}
else { printf("奇数!\n");}
getch();
}
4.编写解一元二次方程ax^2+bx+c=0的完整程序。
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c;
float temp,x1,x2;
scanf("%f,%f,%f",&a,&b,&c);
temp = b*b-4.0*a*c;
printf("temp:%f\n",temp);
if (temp<0)
{
printf("无解!");
}
if (temp>=0)
{
printf("有二个解!");
x1 = ((-b)+sqrt(temp))/(2.0*a);
x2 = ((-b)-sqrt(temp))/(2.0*a);
printf("x1:%f x2:%f\n",x1,x2);
}
getch();
}
5.输入4个整数,要求按从小到大的顺序输出。
#include <stdio.h>
void insertsort(int a[],int n)
{
int i,j,temp;
for (i = 1;i < n; ++i)
{
temp = a[i];
for (j = i;j>0 && temp<a[j-1];--j)
{
a[j] = a[j-1];
}
a[j] = temp;
}
}
void main()
{
int a[4]={4,2,1,3};
insertsort(a,4);
getch();
}
6.输入一个不多于5位的正整数,编写程序,完成以下功能:
(1)求出它是几位数;
(2)分别打印出每一位数字;
(3)按逆序打印出各位数字,例如原数为321,应输出123。
#include <stdio.h>
void fun(long i)
{ int w,q,b,s,g;
long t;
w = i/10000;
if (w == 0)
{
q = (i/1000);
if (q == 0)
{
b = (i/100);
if (b == 0)
{
s = (i/10);
if (s == 0)
{
printf("该数为1位数!\n");
g = i;
t = g;
}
printf("该数为2位数!\n");
g = i-s*10;
t = g*10+s;
}
printf("该数为3位数!\n");
s = (i-b*100)/10;
g = i-b*100-s*10;
t = g*100+s*10+b;
}
printf("该数为4位数!\n");
b = (i-q*1000)/100;
s = (i-q*1000-b*100)/10;
g = i-q*1000-b*100-s*10;
t = g*1000+s*100+b*10+q;
}
printf("该数为5位数!\n");
q = (i-w*10000)/1000;
b = (i-w*10000-q*1000)/100;
s = (i-w*10000-q*1000-b*100)/10;
g = i-w*10000-q*1000-b*100-s*10;
t = g*10000+s*1000+b*100+q*10+w;
printf("万位:%d",w);
printf("千位:%d",q);
printf("百位:%d",b);
printf("十位:%d",s);
printf("个位:%d",g);
printf("\n逆序后为:%ld",t);
}
void main()
{
long i;
scanf("%ld",&i);
fun(i);
getch();
}
7.在屏幕上显示一张如下所示的时间表:
*********time********
1 morning
2 afternoon
3 night
Please erter your choice:
要求:输入,输出,其他则提示“Selection error!”,用switch语句编程实现!
#include <stdio.h>
void fun()
{
int choice;
printf("****Time****\n");
printf("1 morning\n");
printf("2 afternoon\n");
printf("3 night\n");
printf("Please enter your choice");
scanf("%d",&choice);
switch (choice)
{
case 1:printf("Good morning!\n");
break;
case 2:printf("Good afternoon!\n");
break;
case 3:printf("Good night!\n");
break;
default:printf("Selection error!\n");
break;
}
}
void main(){
fun();
getch();
}
8.读入一个年份和月份,打印出该月有多少天(考虑闰年),用 switch 语句编程实现。
#include <stdio.h>
void main()
{
int year,month,leap=0; //leap=1为闰年
printf("year:");
scanf("%d",&year);
printf("month:");
scanf("%d",&month);
if ((year%4 == 0)&&(year%100 != 0)||(year%400 == 0)) leap = 1;
switch (month)
{
case 1:printf("31days\n");
break;
case 2:if (leap == 0) { printf("28days\n");}
else { printf("29days\n");}
break;
case 3:printf("31days\n");
break;
case 4:printf("30days\n");
break;
case 5:printf("31days\n");
break;
case 6:printf("30days\n");
break;
case 7:printf("31days\n");
break;
case 8:printf("31days\n");
break;
case 9:printf("30days\n");
break;
case 10:printf("31days\n");
break;
case 11:printf("30days\n");
break;
case 12:printf("31days\n");
break;
default:printf("error!");
break;
}
getch();
}
9.同样switch的题目,略,时间宝贵!
10.编程计算1*2*3+3*4*5+...+99*100*101的值。
#include <stdio.h>
void main()
{
int i;
long s=0;
for (i=0;i<=99;i+=2)
{
s = s+(i*(i+1)*(i+2));
}
printf("%ld",s);
getch();
}
11.编程计算1!+2!+3!+4!+...+10!的值。
调用子函数!
12.编程计算a+aa+aaa+aaaa+...+aa..a(n个a)的值,n和a的值由键盘输入。
注意溢出!
13.韩信点兵!
#include <stdio.h>
void main(){
int i,s=1;
for (i=1;i<65535;i++)
{
s = i;
if ((s%5==1)&&(s%6==5)&&(s%7==4)&&(s%11==10))
{
printf("%d",s);
break;
}
}
getch();
}
14.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有完数,并按下面的格式输出因子:
6 its factors are 1,2,3
#include <stdio.h>
void main()
{
int sum,k,j;
sum = 0;
for (k=2;k<=1000;k++)
{
sum=0;
for (j=1;j<k;j++)
{
if (k%j==0)
{
sum=sum+j;
}
if (sum==k)
{
printf("%d\n",k);
break;
}
}
}
getch();
}