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 3void 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=0n(a[i]×xi) 在
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.1double 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
输出样例:
41int 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.77ElementType 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.00ElementType 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
输出样例:
846int 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 = 6int 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! = 120int 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
输出样例:
3int 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
输出样例:
1307674368000void 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.30ElementType 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 FOUNDint 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 分)
本题要求编写程序,按照规定格式输出表格。输入格式:
本题目没有输入。输出格式:
要求严格按照给出的格式输出下列表格:------------------------------------#include <stdio.h>
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
------------------------------------
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 6-9 (基础编程题)
- pta基础编程题目集 编程题
- PTA 基础编程题目集 函数题 4-1~4-13
- java面试基础120题及答案(无编程题)
- PTA-基础编程题目-5-35有理数的均值(c)
- POJ 算法基础 编程题#2: 滑雪
- Java基础编程题(API阶段测试)
- 腾讯2017暑期实习生编程题——算法基础-字符移位
- Web前端开发精品课HTML CSS JavaScript基础教程第四章课后编程题答案
- Web前端开发精品课HTML CSS JavaScript基础教程第五章课后编程题答案
- PTA_基础编程题目集:6-2 多项式求值
- Java基础编程题(7.31)
- 【Pta测试6.1】:基础编程题目集
- PTA基础编程 7-16 求符合给定条件的整数集
- java面试题及答案(122道基础题,19道编程题)
- JAVA基础编程题(1)
- Java PTA上机测试题目小结之编程题
- Web前端开发精品课HTML CSS JavaScript基础教程第十六章课后编程题答案
- [编程题] 算法基础-字符移位
- PTA 2-1 列出连通集【DFS+BFS基础】