成都信息工程学院C语言作业标准答案.docx
《成都信息工程学院C语言作业标准答案.docx》由会员分享,可在线阅读,更多相关《成都信息工程学院C语言作业标准答案.docx(153页珍藏版)》请在冰豆网上搜索。
![成都信息工程学院C语言作业标准答案.docx](https://file1.bdocx.com/fileroot1/2023-4/21/e2bb752c-ae88-44ef-b0ef-cd36c8b36eb8/e2bb752c-ae88-44ef-b0ef-cd36c8b36eb81.gif)
成都信息工程学院C语言作业标准答案
分类一
1.编写一程序P1-111.C实现以下功能
x(x只考虑整数int且必须定义为int、但F(x)完全可能超过int的表示范围)通过键盘输入(输入前给出提示Please input x:
),然后计算并在屏幕上输出函数值。
注意,图1中的括号不是<>而是(),编程可用素材:
printf("Please input x:
")...。
┌ -5x+27 (x<0)
F(x)= ├ 7909 (x=0)
└ 2x-1 (x>0)
程序的运行效果应类似地如图1所示,图1中的3是从键盘输入的内容。
#include
intmain(void)
{
intx;
doubley;
printf("Pleaseinputx:
");
scanf("%d",&x);
if(x>0)
{
y=(double)2*x-1;
}
else
{
if(x==0)
{
y=(double)7909;
}
else
{
y=(double)-5*x+27;
}
}
printf("\nF(%d)=%.0lf\n",x,y);
return0;
}
2.P1-113已知某银行整存整取存款不同期限的年息利率分别为:
3.15%期限一年,3.63%期限二年, 4.02%期限三年,4.69%期限五年,5.36%期限八年。
从键盘上输入存钱的本金(以元为单位,必须定义为int且应考虑金额很大的情况)和存款期限(只考虑1,2,3,5,8),求到期时能从银行得到的利息(以元为单位,应考虑有小数,不计复利)。
编程可用素材:
printf("\nPlease input benjin,cunqi:
")...、printf("\nlixi = ... yuan"...。
程序的运行效果应类似地如图1所示,图1中的10000,8是从键盘输入的内容。
#include
intmain(void)
{
intbenjin,cunqi;
doublelixi;
doublemoney;
printf("\nPleaseinputbenjin,cunqi:
");
scanf("%d,%d",&benjin,&cunqi);
money=benjin;
if(cunqi==1)
{
lixi=money*cunqi*3.15/100;
}
else
{
if(cunqi==2)
{
lixi=money*cunqi*3.63/100;
}
else
{
if(cunqi==3)
{
lixi=money*cunqi*4.02/100;
}
else
{
if(cunqi==5)
{
lixi=money*cunqi*4.69/100;
}
else
{
if(cunqi==8)
{
lixi=money*cunqi*5.36/100;
}
}
}
}
}
printf("\nlixi=%.2fyuan\n",lixi);
return0;
}
3.P1-114编写一个简单计算器程序,输入格式为:
data1 op data2。
其中data1和data2是参加运算的两个数(data1、data2必须定义为int,但二者相加可能超出int能表示的范围),op为运算符,它的取值只能是+、-、*、/、%。
程序的运行效果应类似地如图1、图2、图3、图4所示,图1中的3000 + 2000、图2中的3000 % 2000、图3中的3000 % 0和图4中的3000 / 0是从键盘输入的内容。
#include
intmain(void)
{
intdata1,data2;
doublejieguo;
charop;
printf("\nPleaseinputdata1opdata2:
");
scanf("%d%c%d",&data1,&op,&data2);
switch(op)
{
case'+':
jieguo=(double)data1+data2;
printf("\n%d%c%d=%.0f\n",data1,op,data2,jieguo);
break;
case'-':
jieguo=(double)data1-data2;
printf("\n%d%c%d=%.0f\n",data1,op,data2,jieguo);
break;
case'*':
jieguo=(double)data1*data2;
printf("\n%d%c%d=%.0f\n",data1,op,data2,jieguo);
break;
case'/':
if(data2!
=0)
{
jieguo=(double)data1/data2;
printf("\n%d%c%d=%.0f\n",data1,op,data2,jieguo);
break;
}
else
{
printf("\nError!
chushuwei0.\n");
break;
}
case'%':
if(data2!
=0)
{
jieguo=data1%data2;
printf("\n%d%c%d=%.0f\n",data1,op,data2,jieguo);
break;
}
else
{
printf("\nError!
chushuwei0.\n");
break;
}
default:
printf("\nError!
\n");
}
return0;
}
4.输入月份,打印2003年该月有几天。
当输入的月份超范围时,应显示“Invalid month input”。
程序的运行效果应类似地如图1和图2所示,图1中的4和图2中的13是从键盘输入的内容。
#include
intmain(void)
{
intmonth;
intday;
printf("\npleaseinputthemonthnumber:
");
scanf("%d",&month);
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
day=31;
printf("\n2003.%dhas%ddays.\n",month,day);
break;
case4:
case6:
case9:
case11:
day=30;
printf("\n2003.%dhas%ddays.\n",month,day);
break;
case2:
day=28;
printf("\n2003.%dhas%ddays.\n",month,day);
break;
default:
printf("\nInvalidmonthinput\n");
}
return0;
}
5.已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:
元):
profit≤1000 没有提成;
1000<profit≤2000 提成10%;
2000<profit≤5000 提成15%;
5000<profit≤10000 提成20%;
10000<profit 提成25%。
请根据输入的利润计算员工的薪水。
程序的运行效果应类似地如图1所示,图1中的2000是从键盘输入的内容。
#include
intmain(void)
{
intprofit;
doublesalary=500;
printf("\nInputprofit:
");
scanf("%d",&profit);
if(profit<=1000)
{
salary=500;
}
if(profit>1000&&profit<=2000)
{
salary=salary+profit*0.1;
}
if(profit>2000&&profit<=5000)
{
salary=salary+profit*0.15;
}
if(profit>5000&&profit<=10000)
{
salary=salary+profit*0.2;
}
if(profit>10000)
{
salary=salary+profit*0.25;
}
printf("salary=%.2f\n",salary);
return0;
}
[]6.编写一程序P7-708.C实现以下功能
输入一个三位正整数,然后逆序输出。
如输入123,则输出321。
程序的运行效果应类似地如图1所示,图1中的752是从键盘输入的内容。
#include
#include
/*intmain(void)
{
intnum,i;
charstr[4];
printf("Inputaninteger:
");
scanf("%d",&num);
itoa(num,str,10);
printf("Theresultis");
for(i=2;i>=0;i--)
{
printf("%c",str[i]);
}
printf("\n");
return0;
}*/
intmain(void)
{
intnum;
printf("Inputaninteger:
");
scanf("%d",&num);
printf("Theresultis");
do
{
printf("%d",num%10);
num=num/10;
}while(num);
printf("\n");
return0;
}
cf7.编写一程序P7-713.C实现以下功能
用scanf输入某年某月某日,判断这一天是这一年的第几天?
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
注:
判断年份是否为闰年的方法——为400的倍数为闰年,如2000年;若非100的倍数,而是4的倍数,为闰年,如1996年。
程序的运行效果应类似地如图1所示,图1中的2000-3-1是从键盘输入的内容。
#include
intmain(void)
{
intye,mo,da,sum=0,i;
intmday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Pleaseinput:
year-month-day\n");
scanf("%d-%d-%d",&ye,&mo,&da);
for(i=1;i{
sum=sum+mday[i];
}
if((ye%400==0||ye%100!
=0&&ye%4==0)&&mo>2)
{
sum++;
}
sum=sum+da;
printf("Itisthe%dthday.\n",sum);
return0;
}
8.P7-723.C输入三角形的三边长a、b、c(边长可以是小数),求三角形面积area,并输出。
如果输入的三边构不成三角形,应给出“data error”的信息提示。
注:
根据“海伦-秦九韶”公式,area=√p(p-a)(p-b)(p-c),其中p=(a+b+c)/2。
程序的运行效果应类似地如图1和图2所示,图1中的3,4,5和图2中的3,4,8是从键盘输入的内容。
#include
#include
intmain(void)
{
doubleaa,bb,cc,pp,ss,tt;
printf("\npleaseinputtriangesides:
");
scanf("%lf,%lf,%lf",&aa,&bb,&cc);
if((aa+bb>cc)&&(aa+cc>bb)&&(bb+cc>aa))
{
pp=(aa+bb+cc)/2;
tt=pp*(pp-aa)*(pp-bb)*(pp-cc);
ss=sqrt(tt);
printf("\narea=%.2lf\n",ss);
}
else
{
printf("\ndataerror\n");
}
return0;
}
9.7-731输出n行星号,每行5个*星号。
程序的运行效果应类似地如图1所示,图1中的4是从键盘输入的内容。
#include
intmain(void)
{
intnn,i;
printf("\npleaseinputn:
");
scanf("%d",&nn);
for(i=1;i<=nn;i++)
{
printf("*****\n");
}
return0;
}
10.编写一程序P7-736.C实现以下功能
从键盘上输入一个四位整数,计算各个位上的数字之和。
程序的运行效果应类似地如图1所示,图1中的1234是从键盘输入的内容。
#include
intmain(void)
{
intnum,sum=0;
printf("Inputanumberwith4-digit:
");
scanf("%d",&num);
do
{
sum=sum+num%10;
num=num/10;
}while(num);
printf("sum=%d\n",sum);
return0;
}
11.从键盘输入3个整数,输出绝对值最大的数。
程序的运行效果应类似地如图1所示,图1中的1,2,3是从键盘输入的内容。
#include
intab(intx);
intmain(void)
{
intnum[3],i,j;
printf("Input3numbers:
");
scanf("%d,%d,%d",&num[0],&num[1],&num[2]);
j=0;
for(i=1;i<3;i++)
{
if(ab(num[j]){
j=i;
}
}
printf("Thenumberwithmaximumabsolutevalueis%d.\n",num[j]);
return0;
}
intab(intx)
{
if(x>=0)
{
returnx;
}
return-x;
}
12.设某企业2006年的产值为5000万,计划以后每年的增长率为x(x从键盘输入,例如输入8.75表示8.75%),计算该企业的产值在哪年实现翻番以及翻番时的产值,然后输出(输出时以万为单位,应考虑有小数)。
程序的运行效果应类似地如图1所示,图1中的50是从键盘输入的内容。
#include
intmain(void)
{
floatchanzhi=5000,xx;
intyear=2006;
printf("\nPleaseinputx:
");
scanf("%f",&xx);
while(chanzhi<10000)
{
chanzhi=chanzhi*(1+xx/100);
year++;
}
printf("\nyear=%dnian,chanzhi=%.2f\n",year,chanzhi);
return0;
}
13.编写一程序P2-221.C实现以下功能
从键盘读入一个字符串(最多127个字符),检查该字符串是否是回文。
所谓回文即正向与反向的拼写都一样,例如:
adgda。
程序的运行效果应类似地如图1和图2所示,图1中的asdfghjhgfdsa和图2中的asdfghjhgfdsaa是从键盘输入的内容。
#include
#include
intmain(void)
{
inti,j,len;
charaa[128];
printf("\nPleaseinputstring:
");
gets(aa);
len=strlen(aa);
for(i=0,j=len-1;i{
if(aa[i]!
=aa[j])
{
break;
}
}
if(i>=j)
{
printf("\n%sshihuiwen.",aa);
}
else
{
printf("\n%sbushihuiwen.",aa);
}
return0;
}
14.用scanf输入10个整数(采用int数据类型),计算所有正数的和、负数的和以及10个数的和。
程序的运行效果应类似地如图1所示,图1中的4 6 20 -45 35 56 -23 -4 9 70是从键盘输入的内容。
#include
intmain(void)
{
intaa[10],i;
floatsum1=0,sum2=0,sum3=0;
printf("\nInput10integers.\n");
for(i=0;i<10;i++)
{
scanf("%d",&aa[i]);
}
for(i=0;i<10;i++)
{
if(aa[i]>0)
{
sum1=sum1+aa[i];
}
else
{
sum2=sum2+aa[i];
}
sum3=sum1+sum2;
}
printf("\nzhengshu=%.0f,fushu=%.0f,all=%.0f\n",sum1,sum2,sum3);
return0;
}
15.7-732编写一程序P7-732.C实现以下功能,输入3行3列的矩阵,输出所有元素的累加和。
程序的运行效果应类似地如图1所示,图1中的
1 2 3
4 5 6
7 8 9
是从键盘输入的内容。
#include
intmain(void)
{
inti,j,aa[3][3],sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&aa[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
sum=sum+aa[i][j];
}
}
printf("sum=%d",sum);
return0;
}
16.编写一程序P7-743.C实现以下功能
从键盘输入一串可带空格的字符串,按逆序输出该字符串。
注意,程序中不能使用库函数strrev或使用同名的变量、函数、单词。
程序的运行效果应类似地如图1所示,图1中的abc xyz是从键盘输入的内容。
#include
#include
intmain(void)
{
charaa[100],bb[100];
inti,j,len;
printf("Inputastring:
");
gets(aa);
len=strlen(aa);
bb[len]='\0';
for(i=0,j=len-1;i{
bb[j]=aa[i];
}
printf("Theresultis:
");
puts(bb);
return0;
}
17.从键盘输入一个一百分制成绩,如果不在0~100范围内,则要求重新输入数据,直到输入的数据在0~100范围内。
将输入的数据转换成等级‘A’,‘B’,‘C’,‘D’,‘E’。
90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分