C语言PTA平台习题与答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章作业1
①.本题要求编写程序,输出一个短句“Welcome to You!”
#include<stdio.h>
int main()
{
printf("Welcome to You!\n");
return 0;
}
②.本题要求编写程序,计算华氏温度100°F对应的摄氏温度。
计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。
fahr = 100, celsius = 计算所得摄氏温度的整数值
#include<stdio.h>
int main()
{
int fahr = 100;
int celsius = 5*(fahr-32)/9;
printf("fahr = 100,celsius = %d\n",celsius);
return 0;
}
第二章作业2
①求整数均值本题要求编写程序,计算4个整数的和与平均值。
题目保证输入与输出均在整型范围内。
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位
#include<stdio.h>
int main()
{
int a,b,c,d,Sum;
double Average;
scanf("%d %d %d %d",&a,&b,&c,&d);
Sum = a + b + c + d;
Average = (a + b + c + d)/4.0;
printf("Sum = %d,Average = %.1f\n",Sum,Average);
return 0;
}
②整数四则运算本题要求编写程序,计算2个正整数的和、差、积、商并输出。
题目保证输入和输出全部在整型范围内
输入在一行中给出2个正整数A和B。
在4行中按照格式“A 运算符B = 结果”顺序输出和、差、积、商。
#include<stdio.h>
int main() {
int a;
int b;
scanf("%d %d",&a,&b);
printf("%d + %d = %d\n",a,b,a+b);
printf("%d - %d = %d\n",a,b,a-b);
printf("%d * %d = %d\n",a,b,a*b);
printf("%d / %d = %d",a,b,a/b);
return 0;
}
③整数152的各位数字本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值
152 = 个位数字 + 十位数字*10 + 百位数字*100
#include<stdio.h>
int main()
{
int a=152/100;
int c=152%10;
int count=152%100;
int b=count/10;
printf("152 = %d + %d*10 + %d*100",c,b,a);
return 0;
}
第二章作业3
①求奇数分之一序列前N项和
计算序列1 + 1/3 + 1/5 + ... 的前N项之和
输入在一行中给出一个正整数N。
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。
题目保证计算结果不超过双精度范围
#include<stdio.h>
int main()
{
int n;
int i=1;
double s = 0;
scanf("%d",&n);
for (i=1;i<=n;i++)
{s+=1.0/(2*i-1);}
printf("sum = %.6f",s);
return 0 ;
}
②计算序列1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。
题目保证计算结果不超过双精度范围
#include<stdio.h>
int main()
{
int fm=1,N,b=1; double item,sum=0,i; scanf("%d",&N);
for(i=1.0;i<=N;i++) {
item=b*(i/fm);
sum=sum+item;
b=-b;
fm=fm+2;
}
printf("%.3f\n",sum); return 0;
}
③求平方根序列前N项和
计算平方根序列√1+√2+√3+⋯的前N项之和
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
double x,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
x = sqrt(i);
s = s+x;
}
printf("sum = %.2f\n",s);
return 0 ;
}
④特殊a串数列求和
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
#include<stdio.h>
#include<math.h>
int main()
{
int n,a,i,j;
double num=0,sum=0;
scanf("%d %d",&a,&n);
for(i=1;i<=n;i++)
{
{
int i,n,N;
int a=0,b=0;
scanf("%d",&n);
for (i = 0;i < n;i++)
{
scanf("%d",&N);
if(N % 2==0){a++;}
else{b++;}
}
printf("%d %d",b,a);
}
②A除以B定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果
在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(b>0)printf("%d/%d=%.2f",a,b,a*1.0/b);
else if(b<0)printf("%d/(%d)=%.2f",a,b,a*1.0/b);
else printf("%d/%d=Error",a);
return 0;
}
③高速公路超速处罚
在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。
其中x是超速的百分比,精确到整数。
110 100
Exceed 10%. Ticket 200
#include<stdio.h>
int main()
{
int a,b;
int x;
scanf("%d %d",&a,&b);
x = round(1.0*(a-b)/b*100);
if(x<10){printf("OK\n");}
else if (x<50){printf("Exceed %d%%. Ticket 200\n",x);}
else printf("Exceed %d%%. License Revoked\n",x);
return 0;
}
④输出三角形面积和周长
根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
注意:在一个三角形中,任意两边之和大于第三边。
三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
area = 面积; perimeter = 周长These sides do not correspond to a valid triangle
5 5 3
area = 7.15; perimeter = 13.00
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s;
double area,perimeter;
scanf("%lf %lf %lf",&a,&b,&c);
area=0;
perimeter=0;
if((a+b)>c&&(a+c)>b&&(b+c)>a){
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}else{
printf("These sides do not correspond to a valid triangle");
}
return 0;
}
⑤输出闰年
输入在一行中给出21世纪的某个截止年份。
逐行输出满足条件的所有闰年年份,即每个年份占一行。
输入若非21世纪的年份则输出"Invalid year!"。
若不存在任何闰年,则输出“None”。
闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除
#include<stdio.h>
int main()
{
int year, i, count=0;
scanf("%d", &year);
if(year<=2000||year>2100)
printf("Invalid year!\n");
else{
for(i=2001; i<=year; i++){
if(i%4==0&&i%100!=0||i%400==0){
printf("%d\n", i);
count++;
}
}
if(count==0)
printf("None\n");
}
return 0;
}
⑥逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。
注意:当输入的数字含有结尾的0时,输出不应带有前导的0。
比如输入700,输出应该是7。
#include<stdio.h>
int main()
{
int a, b, c, n;
scanf("%d",&a);
b=a/100;c=(a/10)%10;n=a%10;
if(n==0&&c==0) printf("%d",b);
if(n==0&&c!=0) printf("%d%d",c,b);
if(n!=0) printf("%d%d%d",n,c,b);
return 0;
}
第四章作业2
①.统计学生成绩
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
7
77 54 92 73 60 65 69
1 0
2
3 1
#include<stdio.h> int main()
{
int n, score;
int i;
int A, B, C, D, E;
A=B=C=D=E=0;
scanf("%d", &n);
for( i=1; i<=n; i++){
scanf("%d", &score);
if(score>=90)
A++;
else if(score>=80)
B++;
else if(score>=70)
C++;
else if(score>=60)
D++;
else
E++;
}
printf("%d %d %d %d %d", A, B, C, D, E);
return 0;
}
②计算油费。
(本题编程不完全对)现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。
为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
40 97 m
301.34
#include<stdio.h>
int main()
{
float r1,r2;
int a,b;
char c;
double s;
scanf("%d %d %c",&a,&b,&c);
switch(b)
{
case 90 : r1=6.95; break;
case 93 : r1=7.44; break;
case 97 : r1=7.93; break;
}
switch(c)
{
case 'm' : r2=0.95; break;
case 'e' : r2=0.97; break;
}
s=a*r1*r2;
printf("%.2lf",s);
return 0;
}
③分别是薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),单价分别对应为3.0元/公斤、2.5元/公斤、4.0元/公斤、3.5元/份。
首先在屏幕上显示以下菜单:
[1] crisps
[2] popcorn
[3] chocolate
[4] cola [0] exit
用户可以输入编号1~4查询对应食品的单价。
当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0
首先在屏幕上显示菜单。
然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留一位小数。
当用户连续查询次数超过5次、或主动输入0时,程序结束,显示“Thanks”。
1 7 0 2
[1] crisps
[2] popcorn
[3] chocolate
[4] cola
[0] exit
price = 3.0
price = 0.0
Thanks
【程序】
#include<stdio.h>
int main()
{
int i, a;
printf("[1] crisps\n"
"[2] popcorn\n"
"[3] chocolate\n"
"[4] cola\n"
"[0] exit\n");
for(i=1;i<=5;i++){
scanf("%d",&a);
if(a==0)
break;
else
switch(a){
case 1:
printf("price = 3.0\n");break;
case 2:
printf("price = 2.5\n");break;
case 3:
printf("price = 4.0\n");break;
case 4:
printf("price = 3.5\n");break;
default:
printf("price = 0.0\n");break;
}
}
printf("Thanks\n");
return 0;
}
④读入一个实数、一个操作符(仅限于+ - * /)、一个实数,求该表达式的值。
若除数为0,输出“The divisor is 0
#include<stdio.h>
int main()
{
int a, b;
char op;
double c;
scanf("%d %c %d",&a,&op,&b);
if(b==0)
switch(op){
case'+': c=a+b; printf("%.2f",c);break;
case'-': c=a-b; printf("%.2f",c);break;
case'*': c=a*b; printf("%.2f",c);break;
case'/': printf("The divisor is 0.");break;
}
else
switch(op){
case'+': c = a+b; printf("%.2f",c);break;
case'-': c = a-b; printf("%.2f",c);break;
case'*': c = a*b; printf("%.2f",c);break;
case'/': c = 1.0*a/b; printf("%.2f",c);break; } return 0;
}
第四章作业3
①.有重复,本题略
②对于给定的正整数N,求它的位数及其各位数字之和
321
3 6
#include<stdio.h>
int main()
{
int n,h,i = 0,sum = 0;
scanf("%d",&n);
do
{
h = n%10;
n/=10;
sum+=h;
i++;
}
while(n>0);
printf("%d %d",i,sum);
return 0 ;
}
③找出给定一系列整数中的最小值。
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
4 -2 -123 100 0
min = -123
#include<stdio.h>
int main()
{
int n,i,m,min;
scanf("%d",&n);
scanf("%d",&m);
min=m;
for(i=1;i<n;i++){
scanf("%d",&m);
if(min>m)
min=m;
}
printf("min = %d",min);
return 0;
}
④输入一个整数,输出每个数字对应的拼音。
当整数为负数时,先输出fu字。
十个数字对应的拼音如下:
0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu -600
fu liu ling ling
#include<stdio.h>
int main(void)
{
char c;
c=getchar();
while(c!='n'){
if(c=='-') printf("fu");
else if(c=='0') printf("ling");
else if(c=='1') printf("yi");
else if(c=='2') printf("er");
else if(c=='3') printf("san");
else if(c=='4') printf("si");
else if(c=='5') printf("wu");
else if(c=='6') printf("liu");
else if(c=='7') printf("qi");
else if(c=='8') printf("ba");
else if(c=='9') printf("jiu");
c=getchar();
if(c!='\n')
printf("");
}
return 0;
}
第五章作业1
⑤计算阶乘和
对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。
#include<stdio.h>
int main()
{
int i,j;
int n,sum=0;
int temp=1;
scanf("%d",&n);
for( i=1; i<=n; i++)
{
for( j=1;j<=i;j++)
temp *= j;
sum += temp;
temp = 1;
}
printf("%d",sum);
}
②判断素数
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。
2
11
111
Yes
No
#include<stdio.h>
#include<math.h>
int main()
{
int a, i;
long b;
int h;
int isprime;
scanf("%d",&a);
for(i=1;i<=a;i++){
isprime=1;
scanf("%ld",&b);
if(b<=1) isprime=0;
for(h=2;h<=sqrt(b);h++){
if(b%h==0){isprime=0;break;}
}
if(isprime==1) printf("Yes\n");
else printf("No\n");}
return 0;
}
③素数和
编程求100~200之间全部素数的和。
直接输出结果,没有任何附加格式字符。
#include<stdio.h>
int main()
{
int x;
int sum=0;
x=6;
for(x=100;x<200;x++){
int i;
int isPrime = 1;
for(i=2;i<x;i++){
if(x%i==0){
isPrime = 0;
break;
}
}
if(isPrime ==1){
sum+=x;
}
}
printf("%d",sum);
return 0;
}
④N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。
有几种买法呢?这就是N鸡问题。
在一行中输入一个正整数N。
(N<500)
在一行中输出两个整数c s,中间用一个空格隔开,表示N元钱买N只鸡共有 c 种买法,且所有买法的公鸡数量之和是 s。
#include<stdio.h>
int main()
{
int n,c=0,s=0;
int gong,mu,xiao;
scanf("%d",&n);
for(gong=0;gong<=n/5;gong++){
for(mu=0;mu<=n/3;mu++){
xiao=n-gong-mu;
if(gong*5+mu*3+xiao/3==n&&xiao%3==0){
c++;
s+=gong;
}
}
}
if(c==0)
printf("0 -1");
else
printf("%d %d",c,s);
return 0;
}
第五章作业2
①打印倒直角三角形图形
$$$$$
$$$$
$$$
$$
$
第一行图形符号前面有1个空格。
以倒直角三角形的格式输出5行由"$"符号构成的三角图形,每个"$"符号占固定1位,第一行第一个"$"符号前有1个空格。
#include <stdio.h>
main()
{
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
printf("");
for(j=1;j<=6-i;j++)
printf("$");
printf("\n");
}
}
②本题要求对任意给定的一位正整数N,输出从1*1到N*N的部分口诀表。
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
#include<stdio.h>
int main()
{
int i,j,N;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
for(j=1;j<i+1;j++)
{
printf("%d*%d=%-4d",j,i,j*i);
}
printf("\n");
}
}
③最大公约数和最小公倍数
输入在一行中给出两个正整数M和N
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
511 292
73 2044
#include<stdio.h> int main()
{
int a,b,c,m,n;
scanf("%d %d",&m,&n);
if(m<n)
{
c=m;
m=n;
n=c;
}
a=m;
b=n;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
printf("%d %d",a,m*n/a);
return 0;
}
④求平方与倒数序列的部分和
输入在一行中给出两个正整数m和n(m≤n)
#include<stdio.h>
#include<math.h>
int main()
{
int i, n, m;
double sum;
scanf("%d %d", &m, &n);
sum=0;
for(i=m; i<=n; i++){
sum=sum+pow(i,2)+1.0/i;
}
printf("sum = %.6f", sum);
return 0;
}
⑤求交错序列前N项和
计算交错序列1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和#include<stdio.h>
int main()
{
int fm=1,N,b=1;
double item,sum=0,i;
scanf("%d",&N);
for(i=1.0;i<=N;i++)
{
item=b*(i/fm);
sum=sum+item;
b=-b;
fm=fm+2;
}
printf("%.3f\n",sum);
return 0;
}
⑥近似求PI 本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。
scanf("%le", &eps);PI = 近似值
1E-5
PI = 3.14158
#include<stdio.h>
int main()
{
double eps,i,sum=1,a=1,b=1,c=1;
scanf("%le",&eps);
for(i=1;c>=eps;i++)
{
a=a*i;
b=b*(2*i+1);
c=1.0*a/b;
sum+=c;
}
printf("PI = %.5f",sum*2);
return 0;
}
第五章作业3 (复习课)①
按从小到大的顺序输出所有不超过2n−1的梅森数,每行一个如果完全没有,则输出“None”#include<stdio.h>
#include<math.h>
int main()
{
int i,n,j;
int b=0,t=0;
scanf("%d",&n);
if(n==1) printf("None");
for(j=2;j<=n;j++)
{
b=pow(2,j)-1;
for(i=2;i<b;i++)
{
if(b%i==0){t=1;break;
}
}
if(t==0)
printf("%d\n",b);
t=0;
}
return 0;
}
②一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半加一个。
到第N天早上想再吃时,见只剩下一个桃子了。
问:第一天共摘了多少个桃子?
#include<stdio.h>
int main()
{
int i,n;
int sum=1;
scanf("%d",&n);
for(i=1;i<n;i++)
{
sum=(sum+1)*2;
}
printf("%d",sum);
}
③皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。
问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
33 5
94.9 1.0
#include<stdio.h>
int main()
{
int n,i;
double a,h;
double l=0.0;
scanf("%lf %d",&a,&n);
l=1.0*a;
if(n!=0)
{
if(n==1){printf("%.1f %.1f",a,a/2.0);
}
else
{
for(i=1;i<n;i++)
{
a/=2.0;
l+=a*2;
h=a;
}
}
printf("%.1f %.1f",l,h/2.0);
}
else printf("0.0 0.0");
}
④假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。
遇等号”=”说明输入结束。
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
1+2*10-10/2=
10
# include<stdio.h>
int main()
{
int a,b,c,flag=0;
char ch;
scanf("%d",&a);
while((ch=getchar())!='=')
{
scanf("%d",&b);
if((ch=='/')&&(b==0))
{
flag=1;break;
}
switch(ch)
{
case '+': a=a+b;break;
case '-':a=a-b;break;
case '*':a=a*b;break;
case '/':a=a/b;break;
default :
flag=1;break;
}
if(flag) break;
}
if(flag)
{
printf("ERROR");
}
else
{
printf("%d",a);
}
return 0;
}
第六章作业1
①本题要求从输入的N个整数中查找给定的X。
如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”
5 7
3 5 7 1 9
2
#include<stdio.h>
int main()
{
int n,x,i;
int flag=0;
scanf("%d %d",&n,&x);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]==x)
{
printf("%d\n",i);
flag=1;
}
}
if(flag==0) printf("Not Found");
return 0;
}
②求最大值及其下标
找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)#include<stdio.h>
int main()
{
int n,i,j;
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
j=0;
for(i=1;i<n;i++)
if(a[i]>a[j])
j=i;
printf("%d %d",a[j],j);
return 0;
}
③输出数组元素
对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果。
10
5 1 7 14
6 36 4 28 50 100
-4 6 7
-8 30 -32
24 22 50
#include<stdio.h>
int main()
{
int n, i;
scanf("%d",&n);
int a[n];
int c[n-1];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}for(i=0;i<n-1;i++){
c[i]=a[i+1]-a[i];
}for(i=0;i<n-1;i++){
printf("%d",c[i]);
if((i+1)%3==0){
printf("\n");
}else if(i+2<n){
printf("");
}
}
return 0;
}
④求a[10]中素数平均值
输入10个正整数到a数组中,求a数组中素数的平均值。
#include<stdio.h>
int main()
{
int a[10];
int i, c=0,sum=0;
int l;
double h=0.0;
for(i=0;i<10;i++){
scanf("%d",&a[i]);
if(a[i]==1){a[i]=0;c++;}
for(l=2;l<a[i];l++){
if(a[i]%l==0){
a[i]=0;
c++;
}
}
sum+=a[i];
}
if(c==10){h=0;}
else h=1.0*sum/(10-c);
printf("%.2f",h);
}
测试值1 2 3 4 5 6 7 8 9 0
4.25
第六章作业2
①以矩阵的形式输出二维数组
本题要求编写程序,先对一个m×n的二维数组赋值,数组元素的值为其行下标和列下标之和,再按照矩阵的形式输出该二维数组。
3 4
0 1 2 3
1 2 3 4
2 3 4 5
#include<stdio.h>
int main()
{
int a[6][6];
int i, j;
int m, n;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
a[i][j]=i+j;
printf("%4d",a[i][j]);
}
printf("\n");
}
}
②求矩阵各行元素之和
求一个给定的m×n矩阵各行元素之和
输入第一行给出两个正整数m和n(1≤m,n≤6)。
随后m行,每行给出n个整数,其间以空格分隔。
3 2
6 3
1 -8
3 12
9
-7
15
#include <stdio.h>
int main(){
int n=0,m=0,i=0,j=0,b=0;
scanf("%d %d",&n,&m);
int a[n][m];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
b=b+a[i][j];
}
printf("%d\n",b);
b=0;
}
return 0;
}
③方阵左下三角元素的和
输入一个4×4数组,求一个4×4数组左下三角(包括主对角线)元素的和。
1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 7
46
#include<stdio.h>
int main()
{
int a[4][4];
int i, j;
int sum=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++){
for(j=0;j<i+1;j++){
sum+=a[i][j];
}
}
printf("%d",sum);
}
④将一个3×3矩阵转置(即行和列互换)
1 2 3 4 5 6 7 8 9
1 4 7
2 5 8
3 6 9
#include<stdio.h>
int main(void) {
int i,j,b;
int a[3][3];
for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
scanf("%d",&a[i][j]); } }
for(i=0; i<3; i++) { for(j=0; j<3; j++) { b=a[i][j]; a[i][j]=a[j][i]; a[j][i]=b; } }
for(i=0; i<3; i++) { for(j=0; j<3; j++) { printf("%4d",a[j][i]); }
printf("\n"); } return 0; }
第六章 作业3
①
#include<stdio.h> double fact (int n); int main (void) {
int i, n, m; double result;
scanf("%d %d", &m,&n); result=1;
for(i=0; i<=n; i++) {
result=fact(n)/(fact(m)*fact(n-m)); }
printf("result = %.0f", result); return 0; }
double fact (int n) { int i; double t; t=1;
for(i=1; i<=n; i++){
t=t*i;
} return t; } 2 7 result = 21
②要求调用函数f(n)计算n+(n+1)+…+(2n-1)
#include<stdio.h> double f(int n){ int b=0;int i;
for(i=n;i<=2*n-1;i++){ b+=i; } return b; }
int main(){ double sum=0; int i, n;
scanf("%d",&n); for(i=1;i<=n;i++){
sum+=1.0/f(i);} printf("sum = %.6f",sum); }
③求n 以内最大的k 个素数以及它们的和 素数1+素数2+…+素数k=总和值 1000 10
997+991+983+977+971+967+953+947+941+937=9664 #include<stdio.h> int f(int n){ int i;
int isprime=1; for(i=2;i<n-1;i++){ if(n%i==0){ isprime=0; break; } }
return isprime; }
int main(){
int i, sum=0,n,k,c=0; scanf("%d %d",&n,&k);
for(i=n;i>=2;i--){
if(f(i)){
if(i<2){break;}
if(k>0){
if(c!=0) printf("+");
printf("%d",i);
sum+=i;
k--;
c=1;}
}
}
printf("=%d",sum);
return 0;
}
第六章作业4
①
#include <stdio.h>
#include <math.h>
double funcos( double e, double x ){
double tmp1=1,tmp2=1,tmp3=1,sum=1;
int i,k;
k=-1;
for(i=2;tmp1>e;i+=2){
tmp2 = tmp2*x*x;
tmp3 = tmp3*i*(i-1);
sum = sum + k*tmp2/tmp3;
tmp1=tmp2/tmp3;
k=-k;
}
return sum;
}
②本题要求实现求Fabonacci数列项的函数。
所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
#include <stdio.h>
int fib( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", fib(n));
return 0;
}
int fib(int n)
{
int m=1,h=1,i=1;
int s;
if(n<=2)
return 1;
else
for(;i<=n-2;i++)
{
s=m+h;
m=h;
h=s;
}
return s;
}
③显示菱形输入: 5 $
$
$$$
$$$$$
$$$
$
#include<stdio.h>
void lin(int n,char ch)
{int i,j,k;
for(i=0;i<n/2;i++){
for(j=0;j<n/2-i;j++){
printf("");
}
for(k=0;k<2*i+1;k++){
printf("%c",ch);
}
printf("\n");
}
for(i=0;i<n/2+1;i++){
for(j=0;j<i;j++){
printf("");
}
for(k=0;k<n-2*i;k++){
printf("%c",ch);
}
printf("\n");
}
return;
}
int main(){ int n; char ch;
scanf("%d %c",&n,&ch); if(n<=0){
printf("None\n"); }else if(n%2==0){ printf("Error\n"); }else{ lin(n,ch); }
return 0; }
④
圆形体体积计算器
#include<stdio.h> #include<math.h> int main(){ int i,j,num;
double pi=3.1415926535,r,h; while(1){
printf("1-Ball\n2-Cylinder\n3-Cone\nother-Exit\nP lease enter your command:\n");
scanf("%d",&num); switch(num){
case 1:{
printf("Please enter the radius:\n"); scanf("%lf",&r);
printf("%.2lf\n",4.0/3*pi*pow(r,3)); break;}
case 2:{
printf("Please enter the radius and the height:\n"); scanf("%lf %lf",&r,&h);
printf("%.2lf\n",pi*pow(r,2)*h); break;}
case 3:{
printf("Please enter the radius and the height:\n");
scanf("%lf %lf",&r,&h);
printf("%.2lf\n",1.0/3*pi*pow(r,2)*h);
break;}
default:return 0;
}
}
return 0; }
第七章 作业1
①进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,
有时是5号选手得分,每次答对者得10分,最后结果如何呢?
第一行有十个整数,表示十位同学的初始分。
第二行一个整数n ,表示有n 道题竞赛。
接下去有n 行,每行有一个数字x ,x 表示本次可以加分的选手序号(每次答对者得10分
10 0 0 0 10 10 0 0 0 10 3 1 10 1
30 0 0 0 10 10 0 0 0 20
#include<stdio.h>
int main() {
int a[10],i; for(i=0;i<10;i++){ scanf("%d",&a[i]); } int n,k; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&k); a[k-1]=a[k-1]+10; }
for(i=0;i<9;i++){ printf("%d ",a[i]); }
printf("%d",a[9]); return 0; }
②找出含有10个元素一维数组中的最大值和最小值,并互换这两个数的位置
#include<stdio.h>
int main(){ int a[10]; int i, max,min; int h=0,j=0; for(i=0;i<10;i++){ scanf("%d ",&a[i]); }
max=a[0];min=a[0]; for(i=0;i<10;i++){
if(a[i]>max){max=a[i];h=i;} if(a[i]<min){min=a[i];j=i;} }
printf("max=%d,min=%d\n",max,min); a[h]=min;a[j]=max; for(i=0;i<10;i++){ printf("%5d",a[i]); } }
③查找满足条件的最后一个整数
将输入的n 个整数存入数组a 中,然后在数组a 中查找给定的x 。
如果数组a 中的元素与x 的值相同,输出满足条件的最后一个元素的下标(下标从0开始)
#include<stdio.h>
int main() {
int n, x, i, h; int ret=0; int a[100];
scanf("%d %d",&n,&x); for(i=0;i<n;i++){ scanf("%d",&a[i]); if(a[i]==x){h=i; ret++;} }
if(ret!=0){printf("%d",h);} else{printf("Not Found");} }
④将数组中的数逆序存放
将给定的n 个整数存入数组中,将数组中的这n 个数逆序存放,再按顺序输出数组中的元素。
#include<stdio.h> main() {
int a[10],b[10], i,j,n,count=0; scanf("%d",&n);
for (i = 0; i < n; i++) { scanf("%d",&a[i]);
}
for (j = n-1; j >= 0; j--) { b[count] = a[j]; count++;
}
printf("%d",b[0]); for (i = 1; i < n; i++) { printf(" %d", b[i]);
}
}
第七章 作业2
①二分查找法之过程 在给定的n 个升序排列的整数中查找x ,并输出查找过程中
每一步的中间结果。
如果数组a 中的元素与x 的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。
如果输入的n 个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。
#include<stdio.h> int main() {
int n,x,flag=0; int a[10];
int i,middle,ret,isprime=1; int right,left;
scanf("%d %d",&n,&x);
left=0;right=n-1;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++){
if(a[i+1]<=a[i]) flag=1;
}if(flag==0)
while(left<=right)
{
middle=(left+right)/2;
printf("[%d,%d][%d]\n",left,right,middle); if(a[middle]==x){
ret=middle;
isprime=0;
break;
}else if(a[middle]>x){
right=middle-1;
}else{
left=middle+1;
}
}
if(flag==1) printf("Invalid Value");
else if(isprime==1) printf("Not Found");
else printf("%d",ret);
}
②选择排序法
#include<stdio.h>
int main()
{
int i, index, k, n, temp;
int a[10];
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", &a[i]);
for(k=0; k<n-1; k++){
index=k;
for(i=k+1; i<n; i++)
if(a[i]>a[index])
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
printf("%d", a[0]);
for(i=1; i<n; i++)
printf(" %d", a[i]);
return 0;
}
③简化的插入排序
在一行内输出将X插入后仍然从小到大有序的整数序列,#include <stdio.h>
int main()
{
int n,i,j,x,a[11];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&x);
i=0;
while(a[i]<x&&i<n)
i++;
for (j=n-1;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=x;
for(i=0;i<n+1;i++)
printf("%d ",a[i]);
}
④有重复,本题略
2020.5.6MOJUNSON。