【问题描述】 输入一个正整数n,计算1-1/4+1/7-1/10+1/13-1/16+...的前n 项之和,输出时保留3位小数。 【输入形式】 从键盘输入一个正整数n。 [输入输出样例1] (下划线部分表示输入) Enter n:
3
sum=0.893
[输入输出样例2] (下划线部分表示输入) Enter n:
10
sum=0.819
【样例说明】 输入提示符后要加一个空格。其中":"后要加一个且只能一个空格。 输出语句的"="两边无空格。 英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int main()
{
int n=0,flag=1,d=1;
printf("Enter n: ");
scanf("%d",&n);
double sum=0.0,temp=0.0;
for (int i = 1; i <=n; i++)
{
temp=1.0*flag/d;
d+=3;
sum+=temp;
flag=-flag;
}
printf("sum=%.3lf",sum);
}
【问题描述】 编写一个程序,将用小数或整数形式输入的数据,转换成科学计数法的形式输出。输入的数据没有符号。输入数据全为有效数据,即若输入的数据为小数形式,则末尾不含数字0;并且若输入的数据大于1,则最高位数字不为0。 提示:以字符串形式保存相关数据。 【输入形式】 控制台输入一小数或整数,最后会有回车换行符,所有输入的字符数不会超过100。 【输出形式】 以科学计数法形式输出数据。输出的数据由以下几部分构成: 1.底数部分是一个小数或整数,若为小数,则小数点前后必有数字,而且都为有效数字。即:小数点前只有一位大于0的数字,小数点后的末尾数字不能为0。若为整数,则只有一位数字,不带小数点。 2.必有小写字母“e”。 3.指数部分是一个整数。若大于等于0,则不带符号;若小于0,则需要带负号“-”。且整数的最高位数字不为0。 【输入样例1】
0.000000000000002
【输出样例1】
2e-15
【输入样例2】
898456.23489651700659
【输出样例2】
8.9845623489651700659e5
【输入样例3】
367298599999090000000000000000000000000000
【输出样例3】
3.6729859999909e41
【样例说明】 以小数或整数形式输入数据,然后转换成相应的科学计数法形式输出。 【评分标准】 该题要求以科学计数法形式输出数据,提交程序文件名为notation.c。
#include<stdio.h>
#include<string.h>
void delDot(char number[]);
void delZero(char number[]);
void Print(char number[],int flag,int k);
int main()
{
char number[101];
scanf("%s",number);
char *num=number;
if (number[0]=='0'&&number[1]=='.')
{
int i=2,k=0,flag=0;
while (number[i]!='\0')
{
if (number[i]!='0')
{
flag=i;
if (number[i+1]!='\0')
{
Print(number,flag,k);
return 0;
}
}
k++; //统计指数
i++;
}
printf("%se-%d",(num+flag),k);
}
else if (number[1]=='.')
{
printf("%se0",number);
}
else
{
int i=1,k=0;
while (number[i]!='\0')
{
if (number[i]=='.')
{
delDot(number);
break;
}
k++;
i++;
}
if (number[i-1]=='0')
{
delZero(number);
}
printf("%c.%se%d",number[0],(num+1),k);
}
}
void delDot(char number[])
{
int n=0;
int m=strlen(number);
for (int i = 0; number[i]!='\0'; i++)
{
if (number[i]=='.')
{
for (int j = i; j < m; j++)
{
number[j]=number[j+1];
}
n++;i--;
}
}
number[m-n]='\0';
}
void delZero(char number[])
{
int i=strlen(number);
while(i>0)
{
if (number[i-1]=='0')
{
number[i-1]='\0';
}
else
{
return;
}
i--;
}
}
void Print(char number[],int flag,int k)
{
printf("%c.%se-%d",number[k+2],(number+flag+1),k+1);
}
【问题描述】编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
-
第一行是超长正整数A;
-
第二行是超长正整数B;
【输出形式】 输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求: 1、若结果大于0,则只输出结果数字,不输出正号;若结果为负,则输出负号;若结果为0,则只输出一个0。 2、除非结果为0,否则输出的结果的最高位不能为0,并且各位数字紧密输出。 【输入样例】
234098
134098703578230056
【输出样例】
134098703577995958
【样例说明】 进行两个正整数减法运算, 234098 - 134098703578230056 = -134098703577995958。 【评分标准】 该题要求输出超长整数减法结果,提交程序文件名为subtract.c或subtract.cpp。
【问题描述】 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。 这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。 国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米(volume)? (已知1立方米麦子约1.42e8粒) 总粒数为:
sum=1+2+22+23+…+263
函数pow(a,b)表示求a^b
double pow(double base, double exponent);
需要math.h头文件 【输入形式】 【输出形式】
volume: 1.299066e+011
#include<stdio.h>
#include<math.h>
int main()
{
double sum=1,k=0;
for (int i = 1; i <= 64; i++)
{
sum=sum+pow(2,k++);
}
double volume=sum/1.42e8;
int j = 0;
for (j = 0; volume>10 ; j++)
{
volume/=10;
}
printf("volume: %lfe+%d",volume,j);
}
【问题描述】 读入一个整数,统计并输出该数中2的个数。要求定义并调用函数countdigit(number,digit),它的功能是统计整数number 中数字digit 的个数。例如,countdigit(10090,0) 的返回值是3。 【输入形式】 输入一个整数 [输入输出样例1] (下划线部分表示输入) Enter an integer:
21252
Number of digit 2: 3
【样例说明】 输入提示符后要加一个空格。例如Enter an integer: ,其中:后要加一个且只能一个空格。 输出语句的:后要加一个且只能一个空格。 英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int countdigit(int number,int digit);
int main()
{
int number=0,digit=2,num=0;
scanf("%d",&number);
printf("Enter an integer: ");
num=countdigit(number,digit);
printf("Number of digit 2: %d",num);
}
int countdigit(int number,int digit)
{
int i=0;
int count=0;
while (number>0)
{
i=number%10;
if (i==2)
{
count++;
}
number/=10;
}
return count;
}
【问题描述】 输入一个正整数n(1 <n≤10),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。 【输入形式】 从键盘输入一个正整数n和n个整数。 [输入输出样例1] (下划线部分表示输入) Input n:
5
Input 5 integers:
8 2 5 1 4
After swapped: 1 2 5 4 8
(每个输出数据间有一个空格) 【样例说明】 输入提示符后要加一个空格。例如Input n: ,其中:后要加一个且只能一个空格。 英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
void getArray(int a[],int n);
void doSwap(int a[],int n);
int main()
{
int n=0;
printf("Input n: ");
scanf("%d",&n);
int a[n];
getArray(a,n);
printf("After swapped: ");
doSwap(a,n);
}
void getArray(int a[],int n)
{
printf("Input %d integers: ",n);
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
}
}
void doSwap(int a[],int n)
{
int min=100,max=-100;
int min_flag=0,max_flag=0;
for (int i = 0; i < n; i++)
{
if (max<=a[i])
{
max=a[i];
max_flag=i;
}
}
int t=0;
t=a[n-1];a[n-1]=a[max_flag];a[max_flag]=t;
for (int i = 0; i < n; i++)
{
if (min>=a[i])
{
min=a[i];
min_flag=i;
}
}
t=0;
t=a[0];a[0]=a[min_flag];a[min_flag]=t;
for (int i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
}
【问题描述】 将一笔钱(大于8分,小于1元,精确到分)换算成1分、2分和5分的硬币组合。输入金额,问有几种换算方法?要求每种硬币至少有一枚。 【输入形式】 从键盘输入一个正整数n。 [输入输出样例1] (下划线部分表示输入)
Input money: 10
count=2
【样例说明】 输入提示符后要加一个空格。其中:后要加一个且只能一个空格。 英文字母区分大小写。必须严格按样例输入输出。
#include <stdio.h>
int main()
{
int a,b,c;
int money,i;
printf("Input money:");
scanf("%d",&money);
i=0;
for (a=money/5;a>0;a--)
{
for (b=money/2; b>0; b--)
{
for (c=money; c>0; c--)
{
if (a*5+b*2+c==money)
i++;
}
}
}
printf(" count=%d\n",i);
}
【问题描述】编写一个程序实现两个一元多项式相加的运算。 【输入形式】从当前目录下的poly.in文件读入两行以空格分隔的整数,每一行代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式(n<50)的表示方法如下: an n an-1 n-1 …… a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入文件中只出现系数不为0的项。 【输出形式】将运算结果输出到当前目录下的poly.out文件中。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以空格分隔。在行的末尾输出一个回车符。 【输入文件】
54 8 2 6 7 3 25 1 78 0
43 7 4 2 8 1
【输出文件】
54 8 43 7 2 6 7 3 4 2 33 1 78 0
【样例说明】输入文件的两行分别代表了表达式$54x^8 +2x^6 +7x^3 +25x+78+43x^7 +4x^2 +8x$其和为$54x^8 +43x^7 +2x^6 +7x^3 +4x^2 +33x+78$ 【评分标准】结果正确则该测试点得满分,否则该测试点得0分。上传C语言文件名为 poly.c
【问题描述】输入一个正整数m和n,输出从m开始到n结束(包含m和n)的所有整数数字的和。 【输入形式】两个正整数,用空格分隔 【输出形式】两个正整数之间的整数数字的和,以“sum=?”的形式输出。 【样例输入】
1 100
【样例输出】
sum=5050
#include<stdio.h>
int main()
{
int m=0,n=0,sum=0;
scanf("%d",&m);
scanf("%d",&n);
for (; m <= n; m++)
{
sum+=m;
}
printf("sum=%d",sum);
}
【问题描述】 对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序。 【输入形式】 从键盘依次输入最多不超过50个学生的学生姓名和成绩: 第一行输入班级学生人数; 在单独行上输入空格隔开的学生姓名和成绩,其中学生成绩是整数。 【输出形式】 按学生成绩由高到低顺序输出学生姓名和成绩,每行输出一位学生的姓名和成绩,其中姓名(英文)占15位,成绩占5位,均按缺省方式对齐。成绩相同时按输入次序排序。 【输入样例】
4
aaa 50
bbb 70
ccc 65
ddd 90
【输出样例】
############ddd###90
############bbb###70
############ccc###65
############aaa###50
(注意:其中#号代表空格) 【样例说明】 输入了四个学生姓名和成绩,按成绩排序输出。 【评分标准】 按成绩顺序输出学生姓名和成绩,完全正确得50分,共五个测试点,每个测试点10分,提交程序名为c02.c。
#include<stdio.h>
struct Student
{
char name[20];
int score;
};
int main()
{
struct Student Excel[50];
int n=0;
scanf("%d",&n);
for (int i = 0; i < n; i++)
{
scanf("%s %d",Excel[i].name,&Excel[i].score);
}
struct Student t;
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(Excel[j].score<Excel[j+1].score){
t=Excel[j];
Excel[j]=Excel[j+1];
Excel[j+1]=t;
}
for (int i = 0; i < n; i++)
{
printf("%15s%5d\n",Excel[i].name,Excel[i].score);
}
}