大学M O O C哈工大C语言程序设计精髓第六周
编程题答案
Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】
下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出?Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。
目前程序存在错误,请将其修改正确。
并按照下面给出的运行示例检查程序。
#include<>
#include <>
int main()
{
char score[100];
int flag = 0, i, s;
char grade;
printf("Please input score:\n");
while (1)
{
flag=0;
scanf("%s", score);
for (i = 0; i < strlen(score); i++)
{
if (score[i] >= '0' && score[i] <= '9')
{
continue;
}
else
{
flag = 1;
break;
}
}
s = atoi(score);
if (s < 0 || s > 100 || flag == 1)
{
printf("Input error!\n");
printf("Please input score:\n");
continue;
}
else{
break;
}
}
s = atoi(score);
if (s >= 90)
{
grade = 'A';
}
else if (s >= 80)
{
grade = 'B';
}
else if (s >= 70)
{
grade = 'C';
}
else if (s >= 60)
{
grade = 'D';
}
else
{
grade = 'E';
}
printf("grade: %c\n", grade);
return 0;
}
编程计算a+aa+aaa+…+aa…a(n个a)的值(4分)
题目内容:
编程计算a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。
例如,当n=4,a=2,表示计算2+22+222+2222的值。
#include<>
#include<>
int main()
{
int n,a,i,j;
double p=0,q=0;
printf("Input a,n:\n");
scanf( "%d,%d",&a,&n);
for(i=1;i<=n;i++)
{
for(j=0,p=0;j<i;j++)
{
p=p+a*pow(10,j);
}
q=p+q;
}
printf("sum=%.0f\n",q);
return 0;
}
搬砖问题(4分)
题目内容:
n块砖(?27<n<=77?),36人搬,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人请用穷举法编程求解,n的值要求从键盘输入。
输出结果按照男人数量升序给出(见下面示例3)。
#include ""
main()
{
int a, b, c;
long n, i, t, s = 0;
printf("Input n(27<n<=77):\n");
scanf("%d", &n);
for (a = 0; 4 * a <= n; a++)
for (b = 0; 4 * a + 3 * b <= n; b++)
for (c = 0; 4 * a + 3 * b + c / 2 <= n; c += 2)
if (4 * a + 3 * b + c / 2 == n && c%2 == 0 && a+b+c==36)
{
printf("men=%d,women=%d,children=%d\n", a, b, c);
}
}
编程输出某年某月有多少天(考虑到闰年)。
(5分)
题目内容:
从键盘输入一个年份和月份,输出该月有多少天(考虑闰年),用switch语句编程。
#include<>
int main()
{int year,month,day;
printf("Input year,month:\n");
scanf("%d,%d",&year,&month);
switch(month)
{
case 1: day=31;break;
case 2: day=28;break;
case 3: day=31;break;
case 4: day=30;break;
case 5: day=31;break;
case 6: day=30;break;
case 7: day=31;break;
case 8: day=31;break;
case 9: day=30;break;
case 10: day=31;break;
case 11: day=30;break;
case 12: day=31;break;
default:day=-1;printf("Input error!\n");
}
if((year%4==0&&year%100!=0||year%400==0)&&month==2) day=29; if (day!=-1)
printf("%d days\n",day);
return 0;
}。