1.
题目描述:输入三个整数存放在变量a、b、c中,找出三个数中的最大值放于max中,并将其输出。以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
void main()
{
int a,b,c,max; //声明四个整型变量
printf("请输入3个整型数据:");
scanf("%d%d%d",&a,&b,&c);
if (a>b) max=a;
else max=b; //将a和b中的较大值记录在max中
if (c>max) max=c; //如果c是最大值
printf("max=%d\n",max); //输出最大值max
}
2.
题目描述:根据三边长求三角形的面积。请将未完成的部分填入,使之完整。该题中使用海伦公式求解:area=sqrt(s*(s-a)*(s-b)*(s-c)),其中s是三边和的一半,即(a+b+c)/2。sqrt函数包含在math.h的头文件中,它的功能是求平方根。
代码:
#include
#include
main()
{
float a,b,c,s,area;
printf("输入三角形的边长a,b,c:");
scanf("%f%f%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
/* 函数sqrt()用来计算一个非负数的平方根,使用这个函数,需要在源程序中增加"#include" */
printf("area=%.2f\n",area);
}
3.
题目描述:输入一个不多于4位的正整数,要求求出它是几位数,分别输出其每一位数字。以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
main()
{
int n,ge,shi,bai,qian; //个,十,百,千位: ge,shi,bai,qian
printf("输入一个不多于4位的正整数:");
scanf("%d",&n);
if (n<10) printf("%d是1位数\n",n);
else
if(n<100)
{
printf("%d是2位数\n",n);
ge=n%10;
shi=n/10;
printf("十位:%d,个位:%d\n",shi,ge);
}
else
if(n<1000)
{
printf("%d是3位数\n",n);
ge=n%10;
shi=n/10%10;
bai=n/100;
printf("百位:%d,十位:%d,个位:%d\n",bai,shi,ge);
}
else
if( n>9999) printf("它超过了4位!\n");
else
{
printf("%d是4位数\n",n);
ge=n%10;
shi=n/10%10;
bai=n/100%10;
qian=n/1000;
printf("千位:%d,百位:%d,十位:%d,个位:%d\n",qian,bai,shi,ge);
}
}
4.
题目描述:在屏幕上显示一张中文时间表,用户根据提示从中选择,程序应根据用户的选择输出相应的英文问候信息。以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
main()
{
int n;
printf("**** 时间表 ****\n");
printf("1:上午\n");
printf("2:下午\n");
printf("3:晚上\n");
printf("请输入您的选择:");
scanf("%d",&n); //用户输入1,2或3
switch (n)
{
case 1: printf("Good morning!\n"); break;
case 2: printf("Good afternoon!\n"); break;
case 3: printf("Good evening!\n"); break;
default: printf("输入错误!\n");
}
}
5.
题目描述:已知银行整存整取存款不同期限的月息利率分别为:
0.33% 期限1年
0.36% 期限2年
月息利率 = 0.39% 期限3年
0.45% 期限5年
0.54% 期限8年
要求输入存款的本金和期限,求到期时能从银行得到的利息与本金的合计。
以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
main()
{
int year; //存款期限
float money,rate=0,total; //money:本金,rate:月利率,total:本利合计
printf("输入本金和期限(1,2,3,5或8年): ");
scanf("%f%d",&money,&year);
switch(year)
{
case 1: rate=0.0033; break; //期限一年的月利率
case 2: rate=0.0036; break;
case 3: rate=0.0039; break;
case 5: rate=0.0045; break;
case 8: rate=0.0054; break;
default: printf("年限输入错误!\n");
}
total=money*(1+ year*12*rate);
printf("到期后本利合计为%.4f元\n",total);
}
6.
题目标题:通过日期求某月的天数。
题目描述:输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。
输入描述: 输入两个正整数y和m分别表示年份和月份。
输出描述:如果y和m满足条件:1900<=y<3000,0
样例输入:2010 12
样例输出:31
#include
void main()
{
int y,m;
printf("输入年份和月份:\n");
scanf("%d%d",&y,&m);
if (1900<=y && y<3000 && 0
7.
题目标题:录取研究生。
题目描述:某高校录取研究生的要求是,新生的每门课成绩不低于60分,总成绩不低于340分,370分以下为自费。编一程序实现输入一个学生的四门课成绩,试判断该生为该校录取的情况(“没有录取”、“自费”、“公费”三种情况)。
输入描述:输入四门课的成绩,成绩均为0~150之间的整数。
输出描述:录取结果。(“没有录取”、“自费”、“公费”)
样例输入:60 100 130 80
样例输出:公费
#include
void main()
{
int n1,n2,n3,n4;
printf("输入四门课的成绩,成绩均为0~150之间的整数。\n");
scanf("%d%d%d%d",&n1,&n2,&n3,&n4);
if ( n1>150 || n2>150 || n3>150 || n4>150 || n1<0 || n2<0 || n3<0 || n4<0 )
printf("error!\n");
else
{
if ( n1>=60 && n2>=60 && n3>=60 && n4>=60 && n1+n2+n3+n4>=340 )
{
if ( n1+n2+n3+n4>=370 )
{
printf("公费\n");
}
else
{
printf("自费\n");
}
}
else
{
printf("没有录取\n");
}
}
}
8.
题目标题:骑车与走路
题目描述:在华农校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。
输入描述:一个整数:为一次办事要行走的距离,单位为米。
输出描述:对输入的整数,如果骑车快,输出一行“Bike”;如果走路快,输出一行“Walk”;如果一样快,输出一行“All”。
样例输入:
【样例输入1】 【样例输入2】
50 120
样例输出:
【样例输出1】 【样例输出2】
Walk Bike
#include
#include
void main()
{
float walk,bike;
int meter;
printf("输入距离:\n");
scanf("%d",&meter);
walk=meter/1.2;
bike=50+meter/3.0;
if ( fabs(walk-bike)<=1e-3 )
printf("all\n");
else
{
if ( walk
9.
题目标题:停车场收费
题目描述:一个停车场的标准收费是3小时之内收5元,超过3小时,每增加1小时加收2元;如果时间不是整数,按比例收取,例如:如果输入为3.6小时,则费用为5 + (3.6-3)*2 = 6.2 元。最高收费为40元。假设任何车辆的停车时间都不超过24小时。编写程序,计算每辆车的停车费。
输入描述:输入停车的时间t。
输出描述:输出应该收取的停车费用cost,保留小数点后2位。
样例输入:3.46
样例输出:5.92
#include
void main()
{
float t;
float cost = 5;
printf("输入停车的时间t:");
scanf("%f",&t);
if ( t>24 )
printf("error!\n");
else
{
if ( t>3 )
{
cost=cost+2*(t-3);
if ( cost>40 )
cost=40;
}
printf("%.2f\n",cost);
}
}
10.
题目标题:简单计算器。
题目描述:模拟计算器的功能,能根据用户输入的两个运算数和运算符(’+’、 ‘-’、 ‘*’ 或‘/ ’),对两个数进行相应的运算,输出运算结果。注意:除法运算‘/ ’的除数不能为0。
输入描述:两个实数a、b和一个运算符号c。
输出描述:如果能运算,输出a和b的运算结果;如果c为除号,且b为0,输出“除数为0!”;如果c不是’+’、 ‘-’、 ‘*’ 或‘/ ’中的运算符号,输出“运算符号错误!”
样例输入:4*9
样例输出:4.00*9.00=36.00
#include
#include
void main()
{
float a,b;
char c;
scanf("%f%c%f",&a,&c,&b);
if ( c!='+' && c!='-' && c!='*' && c!='/' )
printf("运算符号错误!\n");
else
{if ( c=='/' && fabs(b-0)<=10e-10 )
printf("除数为0!\n");
else
{
switch(c)
{
case '+':
printf("%f + %f = %f\n",a,b,a+b);
break;
case '-':
printf("%f - %f = %f\n",a,b,a-b);
break;
case '*':
printf("%f * %f = %f\n",a,b,a*b);
break;
case '/':
printf("%f / %f = %f\n",a,b,a/b);
break;
}
}
}
}
1.
题目描述:马克思曾经出过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花了3先今,每个女人花了2先令,每个小孩花了1先令,一共花去50先令。问男人、女人以及小孩各有几个人。以下是完成此项工作的程序,请将未完成的部分填入,实现其功能,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
main()
{
int n; //n记录解的个数
int a,b,c; //分别记录男、女、小孩的人数
n=0; //初始化n的值
for(a=1;a<=30;a++)
{
for(b=1;b<=30;b++)
{
c=50-3*a-2*b;
if((a+b+c==30) && (c<=30))
{
printf("男人有: %d个;女人有:%d个;小孩有:%d个。\n",a,b,c);
n++;
}
}
}
printf("共有%d种方案\n",n);
}
2.
题目描述:下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填空使程序完整,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
main()
{
int n, k=1, s=0, m ;
for (n=1 ; n<=100 ; n++)
{
k=1 ; s=0 ;
m=n ;
while ( m!=0 )
{
k*=m%10;
s+=m%10;
m=m/10;
}
if (k>s) printf("%d ",n);
}
printf("\n");
}
3.
题目描述:一个数如果恰好等于除它本身的所有因子之和,这个数就称为完数。例如,6=1+2+3, 6就称为完数。输出1000以内所有满足完数条件的数及其个数。请阅读以下不完整的程序,并在计算机上调试该程序以补足其中的空格,实现其功能。
代码:
#include
main()
{
int n,s,i,count=0;
printf("1000以内的完数为:");
for(n=1;n<1000;n++)
{
s=0;
for(i=1;i
if (n%i==0) s=s+i; //如果i是n的因数
if (s==n) //判断是否满足完数的条件
{
printf("%d ",n);
count=count+1; //完数的个数+1
}
}
printf("\n1000以内完数的个数为:%d\n",count);
}
4.
题目描述:求100以内能被3整除 且个位数字为9的所有正整数。请阅读以下不完整的程序,并在计算机上调试该程序以补足其中的空格,实现其功能。
代码:
#include
main()
{
int i;
for(i=1;i<100;i++)
{
if(i%3==0&& i%10==9)
printf("%d ",i);
}
printf("\n");
}
5.
题目描述:求输入的两个正整数的最大公约数。请阅读以下不完整的程序,并在计算机上调试该程序以补足其中的空格,实现其功能。
代码:
#include
main()
{
int x,m,n;
printf("请输入两个正整数:");
scanf("%d%d",&m,&n);
if(m
else x=n; //x取m和n中的较小值
//x从m和n的较小值开始到1的范围内递减寻找公约数
while(x>=1)
{
if(m%x==0 && n%x==0) //如果x是m和n的约数,x的值即为最大公约数
break;
x=x-1;
}
printf("%d和%d的最大公约数是%d\n",m,n,x);
}
6.
题目标题:数字求和。
题目描述:给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?
输入描述:输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。
输出描述:输出一行,给出一个正整数,是5个数中小于a的数的和。
样例输入:
10 1 2 3 4 11
样例输出:
10
#include
main()
{
int a,i,sum;
int n[5];
scanf("%d",&a);
for(i=0;i<5;i++)
scanf("%d",&n[i]);
sum=0;
for(i=0;i<5;i++)
{
sum=sum+n[i];
}
printf("%d",sum);
}
7.
题目标题:球弹跳高度的计算。
题目描述:一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第5次落地时,共经过多少米? 第5次反弹多高?
输入描述:输入一个整数h0,表示球的初始高度。
输出描述:两个数据s和h,分别表示第5次落地时共经过s米,第5次反弹高度为h米,s和h用空格隔开。
注意:结果可能是实数,结果用float类型保存。
样例输入:10
样例输出:28.7500 0.3125
#include
main()
{
int h0;
float s,h,i;
scanf("%d",&h0);
h=h0;
s=0;
for(i=1;i<=5;i++)
{
if (i==1)
s=s+h;
else s=s+2*h;
h=h/2;
}
printf("%f %f\n",s,h);
}
8.
题目标题:求分数序列和。
题目描述:有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。
输入描述:输入有一行:正整数n。
输出描述:输出有一行:分数序列的和(浮点数,精确到小数点后4位)。
【提示】
1. 最好在程序中使用双精度浮点数(double)记录求得的和。
2. 要输出浮点数、双精度数小数点后4位数字。
样例输入:
99
样例输出:
160.4849
#include
void main()
{
long n,i;
double sum,p,q,t;
scanf("%d",&n);
p=2;
q=1;
sum=0;
for(i=1;i<=n;i++)
{
sum=sum+p/q;
t=p+q;
q=p;
p=t;
}
printf("%.4lf\n",sum);
}
9.
题目标题:点和正方形的关系。
题目描述:在平面坐标系中,有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断给定的多个点是否在这个正方形内。
输入描述:多组数据,每行包含两个浮点型数据,分别表示一个点的横、纵坐标,输入坐标为0,0时表示输入结束。(注意,输入的数据不止3组)
输出描述:对每组输入的点进行判断,显示yes或no,表示是否在正方形中,最后输入的原点也要显示yes,然后才不再继续输入点坐标。(当点在正方形的边上时,也认为在正方形内)
样例输入:
3 4
0.5 1
0 0
样例输出:
no
yes
yes
#include
void main()
{
float x,y;
do
{
scanf("%f%f",&x,&y);
if(x<=1 && y<=1 && x>=-1 && x>=-1)
printf("yes\n");
else
printf("no\n");
} while(x!=0 && y!=0);
}
10.
题目标题:抓交通肇事犯。
题目描述:一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号所构成的数字正好等于某一个整数的平方。请根据以上线索求出车号。
输入描述:无。
输出描述:直接显示一个四位整数表示肇事车号
样例输入:
样例输出:
#include
main()
{
int i,j,k,c;
for(i=1;i<=9;i++) /*i:车号前二位的取值*/
for(j=0;j<=9;j++) /*j:车号后二位的取值*/
if(i!=j) /*判断二位数字是否相异*/
{
k=i*1000+i*100+j*10+j; /*计算出可能的整数*/
for(c=31;c*c
if(c*c==k) printf("%d\n",k); /*若是,打印结果*/
}
}
}
1.
题目描述:
随机产生10个整数存放到数组中(下标0的位置不放,从下标1开始),输入待查找的整数x,查找x是否存在于这10个数中。若存在,则输出x(最初)出现在这批数中的位置序号(例如1或2或……);若不存在x,则输出“不存在”。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
#include
void main( )
{
int a[101],k,x;
for(k=1;k<=10;k++) //从数组中下标1的元素开始存放数据
{
a[k]=rand( )%101; //产生0~100之间的的整数
printf("%d ",a[k]);
}
printf("\n");
scanf("%d",&x); //输入待查找数x
for(k=1;k<=10;k++)
if(a[k]==x) break; //若发现了x,则不用继续循环、继续查找
if(k<=10)
printf("x存在,它的位置序号是:%d\n",k);
else
printf("不存在!\n");
}
2.
题目描述:
编写一个程序,输入一个5×5阶的矩阵,分别计算并输出其两条对角线上的各个元素之和。请填空使程序完整,并在计算机上调试程序,以测试填入的部分是否正确。
代码:
#include
main( )
{
int a[5][5],i,j,sum1,sum2;
for(i=0;i<5;i++) //输入25个数据存入5×5的矩阵中
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
printf("矩阵为:\n");
for(i=0;i<5;i++) //按行列方式显示矩阵
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
sum1=sum2=0; //初始化表示对角线和的变量
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(i==j) //将左上到右下的对角线上的元素加到sum1中
sum1+=a[i][j];
if(i+j==4) //将右上到左下的对角线上的元素加到sum2中
sum2+=a[i][j];
}
}
printf("两条对角线的元素和分别为:%d,%d",sum1,sum2);
}
3.
题目描述:
输入5个整数依次存放到数组a中(从下标1开始存放),再输入待插入的整数x以及它要插入到数组中的位置下标k(1≤k≤5),要求插入后不影响a中原来下标为k到5的所有元素的先后顺序。请按照数组中的元素顺序,输出插入前的5个整数和插入后的这6个整数。提示:插入时,应该先从后往前地(从下标5到下标k)将每个数组元素都后移1个位置,最后再将x存放到下标k的元素中。请在计算机上调试以下程序以补足其中的空格。
代码:
#include
#include
void main( )
{
int a[101],k,j,x;
//分别输入5个整数
for(j=1;j<=5;j++) scanf("%d",&a[j]);
scanf("%d%d",&x,&k); //输入待插入的数x和插入的位置下标k
if(k<1 || k>5) exit(0);
for(j=5;j>=k;j--) //从下标5到下标k,将每个数组元素都后移1个位置
a[j+1]=a[j];
a[k]=x;
//输出将x插入到下标k后的这6个数
for(j=1;j<=6;j++) printf("%d ",a[j]);
}
4.
题目描述:
输入字符串s及待删除的字符ch,将s中所有与ch相同的字符都删除掉,输出删除后得到的新串。以下程序是直接在数组s中进行删除,得到的新串仍然在数组s中。请在计算机上调试该程序以补足其中的空格。
代码:
#include
main( )
{
char s[81], ch;
int k,j;
gets(s); //输入一个字符串后按回车键
ch=getchar(); //输入待删除的字符后按回车键
//k代表s中每个字符的下标
//j代表未删除(保留)字符应放在s中新的位置下标
for(k=j=0;s[k]!='\0';k++)
if(s[k]!=ch)
{
s[j]= s[k];
j++;
}
s[j]='\0'; //得到的新串末尾要放结束符
printf("%s\n",s);
}
5.
题目描述:
输入一行字符串,分别统计其中英文字母、空格、数字和其他字符的个数,并输出。请阅读以下不完整的程序,并在计算机上调试该程序以补足其中的空格,实现其功能。
代码:
#include
void main( )
{
int a,b,c,d;//a,b,c,d分别用来记录英文字母、空格、数字和其他字符的个数
char s[101];
int i=0;
gets(s); //输入一个含有空格的字符串存入s中
a=b=c=d=0;
while(s[i]!='\0') //当下标为i的字符不是字符串结束标记时循环
{
if(s[i]>='A'&&s[i]<='Z' || s[i]>='a'&&s[i]<='z')//如果是一个英文字母字符
a++;
else
if (s[i]==' ') //如果是一个空格字符
b++;
else
if(s[0]>='0'&&s[i]<='9') //如果是一个数字字符
c++;
else
d++;
i++;
}
printf("%d %d %d %d\n",a,b,c,d); //输出英文字母、空格、数字和其他字符的个数
}
6.
题目标题:陶陶摘苹果。
题目描述:
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入描述:
输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出描述:
输出只包含一个整数,表示陶陶能够摘到的苹果的数目。
样例输入:
100 200 150 140 129 134 167 198 200 111
110
样例输出:
5
#include
#include
int main()
{
int a[10];
int h,i,count;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
if (a[i]<100 || a[i]>200)
{
printf("input error!\n");
exit(0);
}
}
scanf("%d",&h);
if (h<100 || h>120)
{
printf("input error!\n");
exit(0);
}
count=0;
h=h+30;
for(i=0;i<10;i++)
{
if(a[i]<=h)
count++;
}
printf("%d\n",count);
return(1);
}
7.
题目标题:歌唱比赛选手成绩计算。
题目描述:
歌唱大赛选手成绩这样计算:去掉一个最高分,去掉一个最低分,将剩下分数的平均值作为选手的最后得分。现假设共有6位评委,都是按百分制打分,请编程计算选手的成绩。
提示:将6个评分存入score数组中。关键是求出其中的最大值max(即最高分)和最小值min(即最低分)。
输入描述:
依次输入6位评委的打分score1~score6,每个scorei都是double型,且满足0≤scorei≤100。
输出描述:
输出一行,表示该选手的最后得分。
样例输入:
78.8 92.3 87.6 94.8 85.8 94.8
样例输出:
90.125
#include
int main()
{
double score[6],max,min,sum;
int i;
double average;
max=1;
min=1;
for(i=0;i<6;i++)
{
scanf("%lf",&score[i]);
}
max=min=score[0];
for(i=1;i<6;i++)
{
if(score[i]
min=score[i];
if(score[i]>max)
max=score[i];
sum=sum+score[i];
}
average=(sum-max-min)/4;
printf("%lf\n",average);
return 1;
}
8.
题目标题:神秘的字符加、解密技术。
题目描述:
插入式加密法是信息加密中一种简单的加密技术,其方法是在明文字符中插入一些无意义的字母来形成密文单词。例如,对于明文:China,在间隔为1的位置依次插入一个字母而形成密文:Coheifnia。因此,其解密过程与加密过程相反,即从密文中首字符开始取,每间隔1个位置依次取出字符,就得到原始的明文。请编程实现插入式加密法所对应的解密算法,将密文翻译成明文。
提示:定义两个字符数组ci和pl,分别存放密文字符串和明文字符串。解密过程即在字符串ci中,从下标0的字符(首字符)开始,将偶数下标的字符(’\0’之前的)依次取出赋值到字符数组pl中,最后即得到明文字符串。
输入描述:输入一行:密文字符串。
输出描述:输出有一行:翻译后的明文字符串。
样例输入:
Coheifnia
样例输出:
China
#include
int main()
{
char ci[101],pl[101];
int i=0,j=0;
gets(ci);
while(ci[i]!='\0')
{
if (i%2==0)
{
pl[j]=ci[i];
j++;
}
i++;
}
pl[j]='\0';
puts(pl);
return 0;
}
9.
题目标题:字符串大小写转换。
题目描述:
输入一个长度小于20的不含空格的字符串,然后对该字符串做如下处理:对字符串中的每个字符,如果是大写字母,将其转化为小写;如果是小写字母,将其转化为大写,最后将处理后的字符串输出。
输入描述:
输入一行:长度小于20的字符串。
输出描述:
输出一行:处理以后的字符串。
样例输入:
I Love C!
样例输出:
i lOVE c!
#include
int main()
{
char a[20];
int i;
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a' && a[i]<='z')
a[i]=a[i]-32;
else if(a[i]>='A' && a[i]<='Z')
a[i]=a[i]+32;
}
puts(a);
return(0);
}
10.
题目标题:打印极值点下标。
题目描述:
在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数,或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。
注意:数组中的第一个数(下标为0)只要和第二个数(下标为1)不相等,第一个数(下标为0)就是极值点;同理,数组中的最后一个数只要和倒数第二个数不相等,最后一个数也是极值点。
输入描述:
有2行输入:第一行是此数组的元素个数k(4
输出描述:
输出为1行:依次对应于数组的所有极值点下标值,下标值之间用空格分隔。
样例输入:
15
12 12 122 112 222 222 222 221 76 36 31 234 256 76 73
样例输出:
2 3 10 12 14
#include
#include
#include
main( )
{
const int N=100;
int times,a[N],n,i;
scanf("%d",&n);
for(i=0;i
scanf("%d",&a[i]);
for(i=1;i
{
printf("%d ",i);
else if(a[i]>a[i-1] && a[i]>a[i+1])
printf("%d ",i);
}
}
1. 普通参数
题目描述:输入日期的年份和月份,求该月有多少天。要求编写函数int daynum(int year,int month),求出以year为年份、以month为月份的某个月的天数。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
int main()
{
int daynum(int year,int month);
int y,m,d;
scanf("%d%d",&y,&m);
if(y<1900 || y>=3000 || m<1 || m>12)
{
printf("输入错误!\n");
return 0;
}
d=daynum(y,m);
printf("此月的天数为%d\n",d);
return 0;
}
int daynum(int year,int month)
{
int days;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days=31; break;
case 4:
case 6:
case 9:
case 11: days=30; break;
case 2: if(year%4==0&&year%100!=0 || year%400==0)
days=29;
else
days=28;
break;
}
return days;
}
2. 字符数组参数
题目描述:编写一个函数,用来求字符串s的任意子串。函数原型为
void SubString ( char s[ ] , int start , int len , char d[ ] ) ;
其中s是原字符串,d用来存放s中从第start个字符开始( 1≤start≤strlen(s) ),长度为len的子串。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
#include
int main( )
{
void SubString(char s[ ], int start, int len, char d[ ]);
char s[81],d[81];
int m,n;
gets(s); //输入一个字符串的值存放在字符数组s中,以回车结束
printf("从第m个字符开始(m≥1)取n个字符构成的子串。请依次输入m、n的值:");
scanf("%d%d",&m,&n);
if(m>strlen(s) || n>strlen(s) || m+n>strlen(s)+1)
{
printf("m、n值超过了范围!\n");
printf("m、n值超过了范围!\n");
return 0;
}
SubString(s,m,n,d);
puts(d);
return 0;
}
//从s中第start个字符开始取出长度为len的子串放入d中
void SubString(char s[ ], int start, int len, char d[ ])
{
int k,j;
for(j=0,k=start-1;j
d[j]=s[k];
d[len]='\0';
}
3. 嵌套调用
题目描述:验证哥德巴赫猜想:对任意输入的正整数n,验证6~n以内的偶数都可分解为两个素数(质数)之和。以下程序中,函数bool divide(int n)是用来将偶数n分解为两个质数的;若分解成功,则返回true;否则返回false。函数bool IsPrime(int m)是用来判断m是否为质数的;若是,则函数返回true;否则返回false。请在计算机上调试以下程序,补足其中的空格。
代码:
#include
int main()
{
int divide(int n);
int i,n;
scanf("%d",&n);
if(n<6)
{
printf("输入数据出错\n");
return 0;
}
for(i=6;i<=n;i+=2)
if(divide(i)==0) //对i进行分解,并判断分解是否成功
{
printf("猜想错误\n");
return 0;
}
return 0;
}
int divide(int n)
{
int IsPrime(int n);
int i,m;
for(i=3;i<=n/2;i++)
{
if(!IsPrime(i)) continue;
m=n-i;
if(IsPrime(m)) break; //若m是素数,则分解已成功,结束该循环
}
if(i>n/2) return 0;
printf("%d=%d+%d\n",n,i,m);
return 1;
}
int IsPrime(int m)
{
int i;
for(i=2;i
if(m%i==0) return 0;
return 1;
}
4. 全局变量
题目描述:编写一函数addup,统计字符串s中字母、数字、空格和其它字符的个数,并且用几个全局变量记录上述统计结果。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
int letter, digit, space, other; //全局变量
int main()
{
void addup(char s[ ]);
char str[101];
printf("输入字符串:\n");
gets(str);
addup(str);
printf("字母个数: %d,数字个数: %d,空格个数: %d,其他字符个数: %d\n",letter,digit,space,other);
return 0;
}
void addup(char s[ ])
{
int i;
letter=digit=space=other=0;
for(i=0;s[i]!='\0';i++)
if(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z') letter++;
else if(s[i]>='0' && s[i]<='9') digit++;
else if(s[i]==32) space++;
else other++;
}
5. 递归调用
题目描述:
用递归方法求n的阶乘n!,递归公式为:n!=1(n等于0或1),n!= n×(n-1)! (n大于1)
要求编写递归函数int fact(int n); 以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:#include
int main()
{
int fact(int n);
int n,f;
printf("请输入整数n(n≥0):");
scanf("%d",&n);
f=fact(n);
printf("%d!=%d\n",n,f);
return 0;
}
//求阶乘
int fact(int n)
{
int f;
if(n==0 || n==1) f=1;
else f=n*fact(n-1);
return f;
}
6.
题目标题:判断完数。
题目描述:
判断正整数n是否为完数。已知一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。此程序要求编写函数bool wanshu(int n),判断n是否为完数,若n是,则函数返回true;否则返回false。然后主函数通过该函数的返回值,在屏幕上输出判断结果。
输入描述:
输入一个正整数n。
输出描述:
若n是完数,则输出"yes";否则输出"no"。
样例输入:
28
样例输出:
yes
#include
int main()
{
bool wanshu(int n);
int n;
scanf("%d",&n);
if (wanshu(n))
printf("yes\n");
else
printf("no\n");
return(0);
}
bool wanshu(int n)
{
int i,sum;
sum=0;
for(i=1;i
{
if (n%i==0)
sum=sum+i;
}
return(sum==n);
}
7.
题目标题:伦敦奥运会倒计时。
题目描述:
假定现在已是2012年,请编写程序,计算2012年伦敦奥运会倒计时的天数并输出。已知伦敦奥运会的开幕日期是2012年7月27日。用户输入日期的范围必须是2012年1月1日— 2012年7月26日。要求程序中编写函数int CountDown(int year,int month,int day),来计算从用户输入的日期year-month-day到伦敦奥运会开幕日之间的倒数天数。
提示:所求天数= month这个月的总天数-day+(month+1到6月所有这些月份天数之和)+27。
输入描述:
用户输入的日期的格式必须是year month day。其中year应是2012,month必须满足1≤month≤7。输入的数据之间用空格隔开。
输出描述:
输出为一行“距离2012伦敦奥运会还有x天。”,其中x为求出的倒计时的天数。如果输入的数据不满足条件,输出“ERROR!”。
样例输入:
2012 2 5
样例输出:
距离2012伦敦奥运会还有173天。
#include
#include
int main()
{
int CountDown(int year,int month,int day);
int year,month,day;
scanf("%d%d%d",&year,&month,&day);
if (year!=2012 || month<1 || month>7 || day<1 || day>31)
{
printf("error!\n");
exit(1);
}
printf("距离2012伦敦奥运会还有%d天\n",CountDown(year,month,day));
return 0 ;
}
int CountDown(int year,int month,int day)
{
int d,m;
if(month==7) return 27-day;
switch(month)
{
case 1:
case 3:
case 5:
case 7: d=31-day; break;
case 4:
case 6: d=30-day; break;
case 2: d=29-day;
}
for(m=month+1;m<7;m++)
switch(m)
{
case 3:
case 5: d+=31; break;
case 4:
case 6: d+=30; break;
case 2: d+=29;
}
d+=27;
return d;
}
8.
题目标题:神奇的英文回文。
题目描述:
许多英语单词无论是顺读还是倒读,其词形完全一样,都是同一个单词,如dad(爸爸)、noon(中午)、level(水平)等,这样的词称为回文词。在最权威的《牛津英语大词典》里,最长的回文词是tattarrattat,是个象声词,表示敲门的声音。英语的回文句更有趣味(忽略其中的标点符号)。最著名的一句为:“Madam,I’m Adam.”(小姐,我是亚当。)据说,这是亚当在伊甸园里初见夏娃作自我介绍时说的话。
现要求编写一个函数bool huiwen(char *p),判断输入的一个单词是否为回文词。p是指向要输入的字符串的指针,如果是返回true,否则返回false。
输入描述:输入一个单词后回车。
输出描述:若该单词是回文词,则输出“yes”;否则输出“no”。
样例输入:
level
样例输出:
yes
#include
int main()
{
bool huiwen(char *p);
char s[100];
gets(s);
if (huiwen(s))
printf("yes\n");
else printf("no\n");
return 0;
}
bool huiwen(char *p)
{
int len=0;
while(p[len]) len++;
int i=0,j=len-1;
for(;i
if(p[i]!=p[j])
return 0;
return 1;
}
9.
题目标题:生成指定字符构成的字符串。
题目描述:
编写一个函数,用于生成一个由若干个指定字符构成的字符串,其原型为:
void mystr(char c,int n, char *p);其中,参数c是构造字符串的字符,n是字符串中字符的个数,p是生成的字符串的首地址。
要求:编写主函数,在主函数中进行字符和字符个数的输入,然后再调用mystr函数生成字符串,最后在主函数中将生成的字符串输出。
输入描述:
输入字符c和正整数n,之间用空格隔开。(正整数n的值不超过50)
输出描述:
输出为由n个字符c构成的字符串
样例输入:
# 4
样例输出:
####
#include
int main()
{
void mystr(char c,int n, char *p);
char s[50],c,*p;
int i,n;
printf("请输入字符字符和个数");
scanf("%c%d",&c,&n);
mystr(c,n,s);
puts(s);
return 0 ;
}
void mystr(char c,int n, char *p)
{
int i;
for(i=0;i
{
*p=c;
p++;
}
*p='\0';
}
10. 递归调用
题目标题:Fibonacci数列问题。
题目描述:
有一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生1对兔子,小兔子长到第3个月后每个月又生1对兔子。假设所有兔子都不死,问每个月兔子的总对数为多少?
提示:不满1个月的为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。每对老兔子每个月会生1对小兔子。因此,每个月的兔子总数依次为1,1,2,3,5,8,13,…。这就是Fibonacci数列。该数列的递归定义如下:f(n)= 1 (n等于1或2);f(n)= f(n-1)+ f(n-2) (n>2)
请编写递归函数int fib(int n),求出第n个月兔子的总对数。
输入描述:
输入一个正整数n,表示求第n个月兔子的总对数。
输出描述:
输出为一行“第n个月兔子的总对数为f”,f值为求出的数列第n项的值f(n)。
样例输入:
2
样例输出:
第2个月兔子的总对数为1
#include
#include
int main()
{
int fib(int n);
int n,ans;
scanf("%d",&n);
if (n<=0)
{
printf("input error!\n");
exit(0);
}
ans=fib(n);
printf("第%d个月兔子的总对数为%d\n",n,ans);
return 0;
}
int fib(int n)
{
if (n==1 || n==2)
return 1;
else return fib(n-1)+fib(n-2);
}
1. 指针数组
题目描述:从键盘任意输入一个整型表示的月份值,用指针数组编程输出该月份的英文表示,若输入的月份值不在1~12之间,则输出“Illegal month”。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
int main()
{
char *monthName[13]={"Illegal month",
"January","February","March","April","May","June",
"July","August","September","October","November","December"};
int m;
printf("输入一个月份值(整型表示):");
scanf("%d",&m);
if(__(1)__)
printf("%s\n",monthName[0]);
else
printf("%s\n",__(2)__);
return 0;
}
2. 二维数组作为函数参数
题目描述:编写一个函数,用来求出一个n×n阶矩阵的转置矩阵。函数原型为
void Transpose(int a[][N],int n);
以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
#include
#define N 100
int main()
{
void Transpose(int a[][N],int n);
int d[N][N];
int n,i,j;
scanf("%d",&n);
for(i=0;i
for(j=0;j
d[i][j]=(int)rand()%100;
printf("原来的矩阵为:\n");
for(i=0;i
{
for(j=0;j
printf("%4d",d[i][j]);
printf("\n");
}
Transpose(__(1)__,n);
printf("转置后的矩阵为:\n");
for(i=0;i
{
for(j=0;j
printf("%4d",d[i][j]);
printf("\n");
}
return 0;
}
void Transpose(int a[][N],int n)
{
void Swap(int *pa,int *pb);
int i,j;
for(i=0;i
for(j=0;j
Swap(__(2)__);
}
void Swap(int *pa,int *pb)
{
int t;
t=*pa;
__(3)__;
*pb=t;
}
3. 结构体
题目描述:定义一个复数MyComplex结构体类型,它包含实部real和虚部imag 两个个成员,并且可以进行复数的加减运算。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
struct MyComplex
{
float real,image;
};
void Display(struct MyComplex c) /* 输出复数 */
{
printf("%.2f",c.real);
if(c.image>0) printf("+%.2f",c.image);
else printf("-%.2f",__(1)__);
}
__(2)__ Add(struct MyComplex x,struct MyComplex y)
{
struct MyComplex z;
z.real=x.real+y.real;
z.image=x.image+y.image;
return __(3)__;
};
__(4)__ Sub(struct MyComplex x,struct MyComplex y)
{
struct MyComplex z;
z.real=x.real-y.real;
z.image=x.image-y.image;
return __(5)__;
};
int main()
{
struct MyComplex c1={1,2},c2={3,4},c3;
c3=Add(c1,c2);
printf("\n两个复数相加的结果为:");Display(c3);
c3=__(3)__;
printf("\n两个复数相减的结果为:");Display(c3);
return 0;
}
4. 结构体指针
题目描述:定义一个时钟结构体类型,它包含“时、分、秒”3个成员,然后编写一个时钟模拟显示程序。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
struct Clock
{
int second,minute,hour;
};
void update(struct Clock *pc)
{
pc->second++;
if(pc->second==60)
{
__(1)__;
pc->minute++;
}
if(__(2)__)
{
pc->minute=0;
pc->hour++;
}
if(pc->hour==24)
{
__(3)__;
}
}
void display(struct Clock *pc)
{
printf("%2d:%2d:%2d\n",pc->hour,pc->minute,pc->second);
}
void delay(struct Clock *pc)
{
int t;
for(t=0;t<100000000;t++); /* 用循环体为空语句的循环实现延时 */
}
int main()
{
int i;
struct Clock clock={0,0,0};
for(i=0;i<1000000;i++) /* 利用循环结构,控制时钟运行的时间 */
{
update(&clock); /* 更新时分秒显示值*/
display(&clock); /* 显示时分秒 */
delay(&clock); /* 模拟延迟时间为1秒 */
}
return 0;
}
5. 复制文件
题目描述:根据程序提示重键盘输入一个已存在的文本文件的完整文件名,再输入一个新文本文件的完整文件名,然后将已存在的文本文件中的内容全部复制到新文本文件中。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。
代码:
#include
#include
#include
int main()
{
char fRname[21],fWname[21];
char ch;
FILE *fpread,*fpwrite;
printf("请输入要读取的文本文件名称:");
gets(fRname);
if((fpread=fopen(fRname, __(1)__))==NULL)
{
printf("打开%s文件失败!\n",fRname);
exit(0);
}
printf("请输入要写入的文本文件名称:");
gets(fWname);
if((fpwrite=fopen(__(2)__,"w"))==NULL)
{
fclose(fpread);
printf("打开%s文件失败!\n",fWname);
exit(0);
}
while((ch=fgetc(fpread))!= __(3)__)
{
fputc(ch,fpwrite);
}
fclose(fpread);
fclose(fpwrite);
return 0;
}
6.
题目标题:星期几
0 |
Sunday |
1 |
Monday |
2 |
Tuesday |
3 |
Wednesday |
4 |
Thursday |
5 |
Friday |
6 |
Saturday |
题目描述:
任意输入英文的星期几,通过查找如有图所示的星期表,输出其对应的数字,若查到表尾,仍未找到,则输出错误提示信息“Error!”。
要求用指针数组实现。
7.
题目标题:m×n阶矩阵的转置。
题目描述:
在程序填空题2的基础上,按下面的函数原型编程计算并输出m×n阶矩阵的转置矩阵。其中m和n的值由用户从键盘输入。已知m和n的值都不超过10。
void Transpose(int a[][N],int at[][M],int m,int n);
其中a用来存放原来的m×n阶矩阵,at用来存放转置后的n×m阶矩阵。
8.
题目标题:分数的计算。
题目描述:
参考程序填空题3,定义一个表示分数的结构体,它包含表示“分子、分母、符号(正为1,负为-1)”的3个成员。按照以下主函数的功能来设计相关的函数,使程序能正确运行并得到要求的结果。
int main()
{
struct Fraction Add(struct Fraction x,struct Fraction y);
struct Fraction Sub(struct Fraction x,struct Fraction y);
struct Fraction f1={1,2,1},f2={3,4,1},f3; /* f1=1/2,f2=3/4 */
f3=Add(f1,f2);
printf("\n两个分数相加的结果为:");Display(f3); /* 计算结果显示为5/4 */
f3=Sub(f1,f2);
printf("\n两个分数相减的结果为:");Display(f3); /* 计算结果显示为-1/4 */
return 0;
}
9.
题目标题:日期结构体的设计。
题目描述:
参考程序填空题4,定义一个日期结构体,它包含表示“年、月、日”的3个成员。按照以下主函数的功能来设计相关的函数,使程序能正确运行并得到要求的结果。
int main()
{
struct Date date1;
int y,m,d;
scanf("%d%d%d",&y,&m,&d); /* 输入年月日值,并假设输入的日期是合法的 */
SetDate(&date1,y,m,d); /* 设置data1的年月日为y,m,d */
Display(date1); /* 按year-month-day的格式显示date1的年月日 */
AddOneday(&date1); /* 将date1的日期增加一天 */
Display(date1); /* 显示增加一天后的日期值 */
return 0;
}
样例输入:
2014 12 31
样例输出:
2014-12-31
2015- 1- 1
10.
题目标题:文件追加。
题目描述:
根据地是从键盘输入一个已存在的文本文件的完整文件名,再输入另一个已存在的文本文件的完整文件名,然后将第一个文本文件的内容追加到第二个文本文件的原内容之后。