您的位置:首页 > 编程语言

PTA6-7 基础编程题(C)

2018-03-23 00:06 197 查看

https://pintia.cn/problem-sets/14/problems/738

6-1 简单输出整数(10 分)

本题要求实现一个函数,对给定的正整数
N
,打印从1到
N
的全部正整数。

函数接口定义:

void PrintN ( int N );
其中
N
是用户传入的参数。该函数必须将从1到
N
的全部正整数顺序打印出来,每个数字占1行。

裁判测试程序样例:

#include <stdio.h>

void PrintN ( int N );
int main ()
{
int N;

scanf("%d", &N);
PrintN( N );

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

3

输出样例:

1
2
3
void PrintN ( int N )
{ int i;
for (i=1;i<=N;i++)

printf("%d\n",i);}
***************************************************************************************************************

6-2 多项式求值(15 分)

本题要求实现一个函数,计算阶数为
n
,系数为
a[0]
 ... 
a
的多项式f(x)=∑​i=0​n​​(a[i]×x​i​​) 在
x
点的值。

函数接口定义:

double f( int n, double a[], double x );
其中
n
是多项式的阶数,
a[]
中存储系数,
x
是给定点。函数须返回多项式
f(x)
的值。

裁判测试程序样例:

#include <stdio.h>

#define MAXN 10

double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;

scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf(“%lf”, &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

2 1.1
1 2.5 -38.7

输出样例:

-43.1
double f( int n, double a[], double x )
{
int i;
double sum=0;
for (i=0;i<=n;i++)
{
sum+=a[i]*pow(x,i);
}
return sum;

}
***************************************************************************************************************

6-3 简单求和(10 分)

本题要求实现一个函数,求给定的
N
个整数的和。

函数接口定义:

int Sum ( int List[], int N );
其中给定整数存放在数组
List[]
中,正整数
N
是数组元素个数。该函数须返回
N
List[]
元素的和。

裁判测试程序样例:

#include <stdio.h>

#define MAXN 10

int Sum ( int List[], int N );
int main ()
{
int List[MAXN], N, i;

scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%d", &List[i]);
printf("%d\n", Sum(List, N));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

312 34 -5

输出样例:

41
int Sum ( int List[], int N )
{int i,sum=0;
  for(i=0;i<N;i++)
    sum+=List[i];
  return sum;
}
***************************************************************************************************************6-4 求自定类型元素的平均(10 分)
本题要求实现一个函数,求
N
个集合元素
S[]
的平均值,其中集合元素的类型为自定义的
ElementType

函数接口定义:

ElementType Average( ElementType S[], int N );
其中给定集合元素存放在数组
S[]
中,正整数
N
是数组元素个数。该函数须返回
N
S[]
元素的平均值,其值也必须是
ElementType
类型。

裁判测试程序样例:

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Average( ElementType S[], int N );
int main ()
{
ElementType S[MAXN];
int N, i;

scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &S[i]);
printf("%.2f\n", Average(S, N));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

312.3 34 -5

输出样例:

13.77
ElementType Average( ElementType S[], int N )
{int i;
float sum=0;
for(i=0;i<N;i++)
{sum+=S[i];}
return sum/N;

}
***************************************************************************************************************

6-5 求自定类型元素的最大值(10 分)

本题要求实现一个函数,求
N
个集合元素
S[]
中的最大值,其中集合元素的类型为自定义的
ElementType

函数接口定义:

ElementType Max( ElementType S[], int N );
其中给定集合元素存放在数组
S[]
中,正整数
N
是数组元素个数。该函数须返回
N
S[]
元素中的最大值,其值也必须是
ElementType
类型。

裁判测试程序样例:

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Max( ElementType S[], int N );
int main ()
{
ElementType S[MAXN];
int N, i;

scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &S[i]);
printf("%.2f\n", Max(S, N));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

312.3 34 -5

输出样例:

34.00
ElementType Max( ElementType S[], int N )
{int i,max=0;
 for(i=0;i<N;i++)
 {if(S[i]>S[max])
   max=i;
 }
 return S[max];

}
***************************************************************************************************************

6-6 求单链表结点的阶乘和(15 分)

本题要求实现一个函数,求单链表
L
结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在
int
范围内。

函数接口定义:

int FactorialSum( List L );
其中单链表
List
的定义如下:
typedef struct Node *PtrToNode;
struct Node {
int Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */
int FactorialSum( List L );
int main()
{
int N, i;
List L, p;

scanf("%d", &N);
L = NULL;
for ( i=0; i<N; i++ ) {
p = (List)malloc(sizeof(struct Node));
scanf("%d", &p->Data);
p->Next = L; L = p;
}
printf("%d\n", FactorialSum(L));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

35 3 6

输出样例:

846
int FactorialSum( List L )
{
int i,num,sum=0;
    while(L!=NULL)
    {  int current=1;
num = L->Data;
        for (i=1;i<=num;i++)
current*=i;
sum+=current;
L = L->Next;
    }
return sum;

}
***************************************************************************************************************

6-7 统计某类完全平方数(20 分)

本题要求实现一个函数,判断任一给定整数
N
是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。

函数接口定义:

int IsTheNumber ( const int N );
其中
N
是用户传入的参数。如果
N
满足条件,则该函数必须返回1,否则返回0。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>

int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;

scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

105 500

输出样例:

cnt = 6
int IsTheNumber ( const int N )
{
int i,j,k,x,b,a[20],count;
i=1;
count=0;
b=N;
x=sqrt(N);
if(pow(x,2)!=N)
return 0;
else
{while (b)
{a[i]=b%10;
b = b/10;
i++;
count++;}
for(i=1;i<=count;i++)
{for(j=i+1;j<=count;j++)
if(a[i]==a[j])
{return 1;
break;}}
return 0;}}
***************************************************************************************************************

6-8 简单阶乘计算(10 分)

本题要求实现一个计算非负整数阶乘的简单函数。

函数接口定义:

int Factorial( const int N );
其中
N
是用户传入的参数,其值不超过12。如果
N
是非负整数,则该函数必须返回
N
的阶乘,否则返回0。

裁判测试程序样例:

#include <stdio.h>

int Factorial( const int N );
int main()
{
int N, NF;

scanf("%d", &N);
NF = Factorial(N);
if (NF) printf("%d! = %d\n", N, NF);
else printf("Invalid input\n");

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

5

输出样例:

5! = 120
int Factorial( const int N )
{
if(N<0)
return 0;
else if(N==0)
return 1;
else
{
int i,res;
res=1;
for (i=1;i<=N;i++)
res*=i;
return res;
}
}
***************************************************************************************************************6-9 统计个位数字(15 分)
本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。

函数接口定义:

int Count_Digit ( const int N, const int D );
其中
N
D
都是用户传入的参数。
N
的值不超过
int
的范围;
D
是[0, 9]区间内的个位数。函数须返回
N
D
出现的次数。

裁判测试程序样例:

#include <stdio.h>

int Count_Digit ( const int N, const int D );
int main()
{
int N, D;

scanf("%d %d", &N, &D);
printf("%d\n", Count_Digit(N, D));
return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

-21252 2

输出样例:

3
int Count_Digit ( const int N, const int D )
{
if ((N == 0) && (D == 0))
return 1;
int a,count;
count = 0;
a=N;
if(a<0)
a=-a;
while(a)
{
if(D == (a%10))
{count++;}
a/=10;
}
return count;
}
***************************************************************************************************************

6-10 阶乘计算升级版(20 分)

本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:

void Print_Factorial ( const int N );
其中
N
是用户传入的参数,其值不超过1000。如果
N
是非负整数,则该函数必须在一行中打印出
N
!的值,否则打印“Invalid input”。

裁判测试程序样例:

#include <stdio.h>

void Print_Factorial ( const int N );
int main()
{
int N;

scanf("%d", &N);
Print_Factorial(N);
return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

15

输出样例:

1307674368000
void Print_Factorial ( const int N )
{
if(N==0)
printf("1");
else if(N>0 && N<=12)
{
int i;
long res=1;
for(i=1;i<=N;i++)
res*=i;
printf("%d",res);
}
else if(N>12&&N<=1000)
{
int Num[3000]={0};
int i,j,k,n;
k=1;//位数
n=0;//进位
Num[0]=1;
int temp;
for (i=2;i<=N;i++)
{
for (j=0;j<k;j++)
{
temp = Num[j]*i+n;
Num[j] = temp%10;
n = temp/10;
}
while(n!=0)
{
Num[k] = n%10;
k++;
n/=10;
}
}
for(i=k-1;i>=0;i--)
{
printf("%d",Num[i]);
}
}
else
printf("Invalid input");
}***************************************************************************************************************

6-11 求自定类型元素序列的中位数(25 分)

本题要求实现一个函数,求
N
个集合元素
A[]
的中位数,即序列中第⌊N/2+1⌋大的元素。其中集合元素的类型为自定义的
ElementType

函数接口定义:

ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组
A[]
中,正整数
N
是数组元素个数。该函数须返回
N
A[]
元素的中位数,其值也必须是
ElementType
类型。

裁判测试程序样例:

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;

scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &A[i]);
printf("%.2f\n", Median(A, N));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

312.3 34 -5

输出样例:

12.30
ElementType Median( ElementType A[], int N )
{
    int i,j,gap;
    for (gap=N>>1; gap; gap>>=1)
    {
        for (i=gap; i<N; ++i)
        {
            for (j=i-gap; j>=0&&A[j]>A[j+gap]; j-=gap)
            {
                ElementType temp=A[j];
                A[j]=A[j+gap];
                A[j+gap]=temp;
            }
        }
    }
    return A[N>>1];
}

***************************************************************************************************************

6-12 判断奇偶性(10 分)

本题要求实现判断给定整数奇偶性的函数。

函数接口定义:

int even( int n );
其中
n
是用户传入的整型参数。当
n
为偶数时,函数返回1;
n
为奇数时返回0。注意:0是偶数。

裁判测试程序样例:

#include <stdio.h>

int even( int n );
int main()
{
int n;

scanf("%d", &n);
if (even(n))
printf("%d is even.\n", n);
else
printf("%d is odd.\n", n);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

-6

输出样例1:

-6 is even.

输入样例2:

5

输出样例2:

5 is odd.
int even( int n )
{
if (2*(n/2) == n)
return 1;
else
return 0;
}
***************************************************************************************************************

6-13 折半查找(15 分)

给一个严格递增数列,函数int binSearch(SeqList T, KeyType k)用来二分地查找k在数列中的位置。

函数接口定义:

int  binSearch(SeqList T, KeyType k)
其中T是有序表,k是查找的值。

裁判测试程序样例:

#include <iostream>
using namespace std;

#define MAXLEN 50
typedef int KeyType;

typedef  struct
{ KeyType  key;
} elementType;

typedef  struct
{ elementType   data[MAXLEN+1];
int   len;
} SeqList;

void creat(SeqList &L)
{ int i;
cin>>L.len;
for(i=1;i<=L.len;i++)
cin>>L.data[i].key;
}

int  binSearch(SeqList T, KeyType k);

int main ()
{  SeqList L;  KeyType k;
creat(L);
cin>>k;
int pos=binSearch(L,k);
if(pos==0) cout<<"NOT FOUND"<<endl;
else cout<<pos<<endl;
return 0;
}

/* 请在这里填写答案 */

输入格式:

第一行输入一个整数n,表示有序表的元素个数,接下来一行n个数字,依次为表内元素值。 然后输入一个要查找的值。

输出格式:

输出这个值在表内的位置,如果没有找到,输出"NOT FOUND"。

输入样例:

51 3 5 7 9
7

输出样例:

4

输入样例:

51 3 5 7 9
10

输出样例:

NOT FOUND
int  binSearch(SeqList T, KeyType k)
{
int left,right,mid;
left = 1;
right = T.len;
while(left <= right)
{
mid=(left+right)/2;
if(k > T.data[mid].key)
left = mid+1;
else if(k < T.data[mid].key)
right = mid-1;
else
return mid;
}
return 0;
}
***************************************************************************************************************

7-1 厘米换算英尺英寸(15 分)

如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

输入格式:

输入在一行中给出1个正整数,单位是厘米。

输出格式:

在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。

输入样例:

170

输出样例:

5 6
#include <stdio.h>

int main()
{
int N;
scanf("%d",&N);
int foot=N/100.0/0.3048;
int inch=(N/100.0/0.3048-foot)*12;
printf("%d %d\n",foot,inch);
return 0;
}

***************************************************************************************************************

7-2 然后是几点(15 分)

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。

输入格式:

输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输出格式:

输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310
#include <stdio.h>

int main()
{
int N1,N2,i,j;
scanf("%d %d",&N1,&N2);
i=N1/100*60+N1%100+N2;
j=i/60*100+i%60;
printf("%d",j);
return 0;
}
***************************************************************************************************************

7-3 逆序的三位数(10 分)

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321
#include <stdio.h>

int main()
{
int N,i,j,k;
scanf("%d",&N);
i=N%10;
j=(N/10)%10;
k=N/100;
if(i==0)
{
if(j==0)
printf("%d",k);
else
printf("%d%d",j,k);
}
else
printf("%d%d%d",i,j,k);
return 0;
}
***************************************************************************************************************

7-4 BCD解密(10 分)

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

输出格式:

输出对应的十进制数。

输入样例:

18

输出样例:

12
#include <stdio.h>  
int main()  
{  
    int x;  
    int n, a;  
    scanf("%d", &x);  
    a = x % 16;  
    n = x / 16 * 10 + a;  
    printf("%d", n);  
    return 0;  
}  
***************************************************************************************************************

7-5 表格输出(5 分)

本题要求编写程序,按照规定格式输出表格。

输入格式:

本题目没有输入。

输出格式:

要求严格按照给出的格式输出下列表格:
------------------------------------
Province Area(km2) Pop.(10K)
------------------------------------
Anhui 139600.00 6461.00
Beijing 16410.54 1180.70
Chongqing 82400.00 3144.23Shanghai 6340.50 1360.26
Zhejiang 101800.00 4894.00
------------------------------------
#include <stdio.h>   
int main()  
{  
    printf("------------------------------------\n");  
    printf("Province      Area(km2)   Pop.(10K)\n");  
    printf("------------------------------------\n");  
    printf("Anhui         139600.00   6461.00\n");  
    printf("Beijing        16410.54   1180.70\n");  
    printf("Chongqing      82400.00   3144.23\n");  
    printf("Shanghai        6340.50   1360.26\n");  
    printf("Zhejiang      101800.00   4894.00\n");  
    printf("------------------------------------\n");  

    return 0;  
}  
***************************************************************************************************************

7-6 混合类型数据格式化输入(5 分)

本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

输入格式:

输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

输出格式:

在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

输入样例:

2.12 88 c 4.7

输出样例:

c 88 2.12 4.70
#include <stdio.h>

int main()
{
float a,d;
int b;
char c;
scanf("%f %d %c %f",&a,&b,&c,&d);
printf("%c %d %.2f %.2f",c,b,a,d);
return 0;
}
***************************************************************************************************************

7-7 12-24小时制(15 分)

编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

输入格式:

输入在一行中给出带有中间的
:
符号(半角的冒号)的24小时制的时间,如
12:34
表示12点34分。当小时或分钟数小于10时,均没有前导的零,如
5:6
表示5点零6分。提示:在
scanf
的格式字符串中加入
:
,让
scanf
来处理这个冒号。

输出格式:

在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串
AM
或表示下午的字符串
PM
。如
5:6 PM
表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的
12:00
就是12小时制的
12:0 PM
;而0点被认为是第二天的时间,所以是
0:0 AM

输入样例:

21:11

输出样例:

9:11 PM
#include <stdio.h>

int main()
{
int h,m;
scanf("%d:%d",&h,&m);
if (h>=12)
{
if (h==12)
printf("%d:%d PM",h,m);
else
{
h=h%12;
printf("%d:%d PM",h,m);
}
}
else
printf("%d:%d AM",h,m);
return 0;
}
***************************************************************************************************************

7-8 超速判断(10 分)

模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。

输入格式:

输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。

输出格式:

在一行中输出测速仪显示结果,格式为:
Speed: V - S
,其中
V
是车速,
S
或者是
Speeding
、或者是
OK

输入样例1:

40

输出样例1:

Speed: 40 - OK

输入样例2:

75

输出样例2:

Speed: 75 - Speeding
#include <stdio.h>

int main()
{
int v;
scanf("%d",&v);
if(v>60)
printf("Speed: %d - Speeding",v);
else
printf("Speed: %d - OK",v);
return 0;
}
***************************************************************************************************************

7-9 用天平找小球(10 分)

三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。

输入格式:

输入在一行中给出3个正整数,顺序对应球A、B、C的重量。

输出格式:

在一行中输出唯一的那个不一样的球。

输入样例:

1 1 2

输出样例:

C
#include <stdio.h>

int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a == b)
printf("C");
else if(a == c)
printf("B");
else
printf("A");
return 0;
}
***************************************************************************************************************

7-10 计算工资(15 分)

某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

输入格式:

输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。

输出格式:

在一行输出该员工的周薪,精确到小数点后2位。

输入样例1:

5 40

输出样例1:

2000.00

输入样例2:

3 50

输出样例2:

1650.00
#include <stdio.h>

int main()
{
int y,h;
float m;
scanf("%d %d",&y,&h);
if(y>=5)
{
if(h>40)
m=75*h-75*40+40*50;
else
m=50*h;
}
else
{
if(h>40)
m=45*h-45*40+40*30;
else
m=30*h;
}
printf("%.2f",m);
return 0;
}
***************************************************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PTA 基础编程