在屏幕上输出短句:
Programming in C is fun!
#include<stdio.h>
int main(){
printf("Programming in C is fun!");
}
在屏幕上输出短句:
What is a computer?
#include<stdio.h>
int main(){
printf("What is a computer?");
}
在屏幕上输出一个倒三角形,如下列所示:
* * * *
* * *
* *
*
#include<stdio.h>
int main(){
printf("* * * *\n\
* * *\n\
* *\n\
*");
}
【问题描述】计算摄氏温度:输入华氏温度,输出对应的摄氏温度。计算公式如下:
150
【样例输出】
Celsius=65.56
#include<stdio.h>
int main(){
double f;
double c;
scanf("%lf", &f);
c = 5.00 * (f - 32) / 9;
printf("Celsius=%.2lf", c);
}
【问题描述】求给定序列$(1+1/2+1/3+……)$前$n$项的和:输入一个正整数$n$,计算序列$1+1/2+1/3+……$的前$n$项之和; 【输入形式】输入一个整数值,输出一个单精度浮点数。 【输出形式】输出n的值,前面包含字符串"$n=$";输出逗号"$,$";输出求和后的结果值,前面包含字符串"$sum=$",保留$7$位小数 【样例输入】
5
【样例输出】
n=5,sum=2.2833335
【补充说明】若结果为总是为1,请仔细思考有关数据类型运算规则的问题。同时思考,若使用双精度浮点输出,结果应该是多少?
#include<stdio.h>
int main(){
double sum = 1;
int n;
scanf("%d", &n);
printf("n=%d,", n);
for (int i = 1;i < n;i++){
sum = sum + 1 / (i + 1);
}
printf("sum=%.7f", sum);
}
【问题描述】阶梯电价:某电力公司执行“阶梯电价”,居民用电分为两个阶梯:月用电量$50$千瓦时(含$50$千瓦时)以内的,电价为$0.53$元/千瓦时,超过$50$千瓦时的,超出部分的用电量电价上调$0.05$元/每千瓦时。编写程序,输入用户的月用电量(千瓦时),计算并输出该用户应支付的电费(元)。 【输入形式】用电量(整数数据) 【输出形式】包含用电量及电费数据(浮点型数据,保留两位小数),可参考样例 【样例输入】
40
【样例输出】
kWh=40,pay=21.20
#include<stdio.h>
int main(){
int a;
double b;
scanf("%d", &a);
if (a <= 50){
b = a * 0.53;
}
else{
b = 50 * 0.53 + (a - 50) * 0.58;
}
printf("kWh=%d,pay=%.2f",a, b);
}
【问题描述】输入一个字母字符,如果是大写字母,将其转换成相应的小写字母,如果是小写字母,将其转换成及相应的大写字母 【样例输入】
a
【样例输出】
A
【样例说明】输入$A$ 输出$a$
#include<stdio.h>
#include<ctype.h>
int main(){
char ch=getchar();
if (isupper(ch)){
putchar(tolower(ch));
}else{
putchar(toupper(ch));
}
}
【问题描述】输入两个数$m$和$n$,输出他们的最大公约数和最小公倍数 【输入形式】下划线为输入内容,"$Inupt m,n:$"为提示信息,需跟换行符 Input m,n: 3 7 【输出形式】分别输出最大公约数和最小公倍数,以空格分隔 【样例输入】 Input m,n: 3 7 【样例输出】
1 21
#include<stdio.h>
int main(){
int m,n;
scandf("%d %d",&m,&n);
printf("%d %d",GCD(m,n),LCM(m,n));
}
int GCD(int a, int b) {
if(b) while((a %= b) && (b %= a));
return a + b;
}
int LCM(int a, int b) {
return a * b / GCD(a, b);
}
【问题描述】输入一组各类字符,以#号字符作为结尾,输出这组字符中所有的数字。 【输入形式】各类字符一组,以#号字符结束 【输出形式】字符中的数字,连续输出,中间没有间隔 【样例输入】
abc123edf4!2#
【样例输出】
12342
#include<stdio.h>
int main(){
char ch;
ch = getchar();
while (ch != '#'){
if (ch >= '0' && ch <= '9')
putchar(ch);
ch = getchar();
}
}
【问题描述】输入一个正整数n,再输入n个整数,输出其中最小的值。 【输入形式】先输入一个整数n,再根据n,输入n个数 【输出形式】输出最小值,形式:$min=?$ 【样例输入】
5
10 22 4 67 2
【样例输出】
min=2
int main()
{
int n;
int min,tmp;
scanf("%d", &n);
scanf("%d", &min);
for (int i = 1;i < n;i++){
if (tmp<=min){
min = tmp;
}
}
printf("min=%d", min);
}
【问题描述】输入一个整数,求该整数的位数以及各位数字之和。 【输入形式】一个整数 【输出形式】两个整数值,分别是输入整数的位数值及其各位数字之和的值,两个数之间用空格分隔。 【样例输入】
1237
【样例输出】
4 13
#include<stdio.h>
#include<string.h>
int main(){
char buf[10];
int sum=0;
scanf("%s", buf);
printf("%d ",strlen(buf));
for(int i = 0; i <strlen(buf); i++){
sum+=(int)(buf[i]-'0');
}
printf("%d",sum);
}
【问题描述】输入两个三位数$m$和$n(m<n)$,求出该区间内所有的水仙花数。 【输入形式】由小到大的两个三位整数 【输出形式】提示信息"$Narc No:$"及$0$或多个水仙花数,用空格分隔 【样例输入】
100 400
【样例输出】
Narc No:153 370 371
#include<stdio.h>
int main(){
int m,n,a,b,c,i;
scanf("%d %d",&m,&n);
printf("Narc No:");
for (i=m;i<=n;i++){
a=i/100;
b=(i%100)/10;
c=i%10;
if (i==a*a*a+b*b*b+c*c*c)
printf("%d ",i);
}
}
【问题描述】输入一个正整数$n(n<7)$;输出$n$行由大写字符$A$开始的,构成三角形字符阵列图形,具体参考样例。 【输入形式】一个整数$n$ 【输出形式】上三角字符阵列,其字符按由行到列的方式,依次按字母表顺序输出,字母之间有一个空格 【样例输入】
4
【样例输出】
A B C D
E F G
H I
J
#include<stdio.h>
int main(){
int n,i,j,m;
char ch='A';
scanf("%d",&n);
m=n;
for (j=0;j<m;j++){
for (i=0;i<n;i++){
printf("%-2c",ch++);
}
printf("\n");
n--;
}
}
【问题描述】输入一批正整数,以零或复数为结束标记,求其中所有奇数的和。要求定义和调用函数$even(n)$判断整数的奇偶性,当$n$为偶数时返回$1$,否则返回零。 根据程序中的提示,在对应位置编写相关函数及内容。
#include<stdio.h>
//在此处编写函数代码
int even(int n){
}
int main(){
int sum=0,x;
scanf("%d",&x);
while(x>0){
if(even(x)==0)
sum=sum+x;
scanf("%d",&x);
}
printf("sum=%d\n",sum);
return 0;
}
int even(int n){
if(n%2==0)
return 1;
else
return 0;
}
【问题描述】给定平面上任意两点坐标$(x1,y1)$和$(x2,y2)$,求这两点之间的距离(保留两位小数)。要求定义和调用函数$dist(x1,y1,x2,y2)$计算两点间的距离。 根据程序中的提示,在对应位置编写相关函数及内容。
#include<stdio.h>
#include<math.h>
//在此处编写dist函数
double dist(float x1,float y1,float x2,float y2){
}
int main(){
float xs,ys,xe,ye,d;
scanf("%f%f",&xs,&ys);
scanf("%f%f",&xe,&ye);
d=dist(xs,ys,xe,ye);
printf("Distance=%.2f",d);
return 0;
}
double dist(float x1,float y1,float x2,float y2){
double Distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return Distance;
}
【问题描述】输入两个正整数$m$和$n(m<=1,n<=500)$,统计并输出$m$和$n$之间的素数个数以及这些素数的和。注意:$1$不是素数,要求定义并调用函数$prime(m)$判断$m$是否为素数,当$m$为素数是返回$1$,否则返回$0$。根据程序中的提示,在对应位置编写相关函数及内容。
#include<stdio.h>
//在此处添加函数声明
int main(){
int m,n,ct=0,sum=0,i;
scanf("%d%d",&m,&n);
if(m<2) m=2;
for(i=m;i<=n;i++)
if(prime(i)){
ct++;
sum=sum+i;
}
printf("count=%d,sum=%d\n",ct,sum);
return 0;
}
int prime(int m){
//在此处编写函数
}
int prime(int m){
int i=2;
for(i;i<m;i++){
if(m%i==0)
break;
}
if(i==m)
return 1;
else
return 0;
}
【问题描述】输入一个整数$m$,再输入一个数字$n$,统计该整数中一共包含了几个数字$n$。输出统计结果。要求定义并调用函数$countdigit(number,digit)$,它的功能是统计整数$number$中数字$digit$的个数。根据程序中的提示,在对应位置编写相关函数及内容。
#include<stdio.h>
//根据题意,在此处编写函数代码
int countdigit(int number,int digit){
}
int main(){
int n,d,y;
scanf("%d%d",&n,&d);
y=countdigit(n,d);
printf("Number of digit %d:%d",d,y);
return 0;
}
int countdigit(int number,int digit){
int sum=0;
while(number!=0){
if(number%10==digit)
sum++;
number=number/10;
}
return sum;
}
【问题描述】输入精度e,用公式就$cos(x)$的近似值,精确到最后一项的绝对值小于$e$。 求$cos(x)$的公式:$cos(x)=x^0/0! -x^2/2!+x^/4!-x^6/6!+……$ 要求定义和调用函数$funcos(e,x)$求余弦函数的值。
#include<stdio.h>
#include<math.h>
//在此处编写要求的函数
double funcos(double e,double x){
}
int main(){
double e,x,rz;
scanf("%lf%lf",&e,&x);
rz=funcos(e,x);
printf("sum=%lf",rz);
return 0;
}
double funcos(double e,double x){
double cosx=0,i=0,k=0,a=1,j=1;
while(fabs(a)>=e) {
double b=1;
for (j=1;j<=i;j++)
b=b*j;
a=pow(x,i)*pow(-1,k++)/b;
cosx=cosx+a;
i=i+2;
}
return cosx;
}
【问题描述】输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。 【输入形式】输入一行字符。 【输出形式】输出各类字符串的个数。 【样例输入1】
Programming is fun!
【样例输出】
letter=16,blank=2,digit=0,other=1
【样例输入2】
13 is a luck digit
【样例输出】
letter=12,blank=4,digit=2,other=0
【样例说明】输入的数据之间以一个空格相隔。英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int main(){
char ch;
int letter=0,blank=0,digit=0,other=0;
while((ch=getchar())&&ch!='\n'){
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else if (ch>='0'&&ch<='9')
digit++;
else if (ch==' ')
blank++;
else
other++;
}
printf("letter=%d,blank=%d,digit=%d,other=%d",letter,blank,digit,other);
}
【问题描述】 输入$2$个正整数m和$n(m<1,n<=10 000)$,输出$m-n$ 之间所有的$Fibonacci$数。$Fibonacci$数列(第一项起):$1,1,2,3,5,8,13,21,$…。要求定义并调用函数$fib(n)$,它的功能是返回第$n$项$Fibonacci$ 数。例如,$fib(7)$的返回值是13。 【输入形式】从键盘输入$2$个整数$m$和$n$。 【输出形式】输出$m-n$之间所有的$Fibonacci$ 数。 【样例输入1】
Input m: 20
Input n: 100
【样例输出1】
21 34 55 89
【样例输入2】
Input m: 50
Input n: 300
【样例输出2】
55 89 144 233
【样例说明】 输入提示符后要加一个空格。例如$Input integers:$,其中:后要加一个且只能一个空格。输出数据之间有且仅有一个空格。英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int fib(int n);
int main()
{
int m,n;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
int i;
for(i=1;i<100;i++){
if(fib(i)>=m&&fib(i)<=n)
printf("%d ",fib(i));
}
return 0;
}
int fib(int n){
int i,x1=1,x2=1,x;
if(n == 1 || n == 2){
return 1;
}else{
for(i = 3; i <= n; i++){
x = x1+x2;
x1 = x2;
x2 = x;
}
return x;
}
}
【问题描述】输入$2$ 个正整数$m$ 和$n(m>=1,n>=1 000)$,输出$m -n$ 之间的所有完数,完数就是因子和与它本身相等的数。要求定义并调用函数$factorsum(number)$,它的功能是返回$number$ 的因子和。 例如,$factorsum(12)$的返回值是$16(1 +2 +3 +4 +6)$。 【输入输出样例1】 (加粗部分为键盘输入,其余部分为程序输出)
Input m: <u>1</u>
Input n: <u>100</u>
1 6 28 (输出格式控制符为:%5d)
【输入输出样例2】 (下划线部分为键盘输入,其余部分为程序输出)
Input m: <u>1</u>
Input n: <u>500</u>
1 6 28 496 (输出格式控制符为:%5d)
【样例说明】输入提示符后要加一个空格。例如"$Input m:$ ",其中":"后要加一个且只能一个空格。英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int factorsum(int a);
int main(){
int m,n;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
for(;m<=n;m++){
if(factorsum(m)!=0)
printf("%5d",factorsum(m));
}
}
int factorsum(int number){
if(number == 1)
return 1;
int i,sum = 0;
for(i = 1; i < number/2+1; i++){
if(number % i == 0)
sum+=i;
}
if(sum == number)
return sum;
return 0;
}
【问题描述】输入$2$ 个正整数$m$ 和$n(1<m,n<1000)$,输出$m-n$之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。要求定义并调用函数$is(number)$判断$number$的各位数字之立方和是否等于其自身。 【输入形式】输入$2$个正整数$m$ 和$n(1<m,n>1000)$ 【输入输出样例1】 (下划线部分表示输入)
Input m: <u>100</u>
Input n: <u>400</u>
153
370
371
【样例说明】 输入提示符后要加一个空格。例如$Input m:$ ,其中:后要加一个且只能一个空格。英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int is (int m,int n){
int a,b,c,i;
for (i=m;i<=n;i++){
a=i/100;
b=(i%100)/10;
c=i%10;
if (i==a*a*a+b*b*b+c*c*c)
printf("%d\n",i);
}
return 0;
}
int main(){
int m,n;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
is(m,n);
}
【问题描述】任何一个大于$6$的偶数均可表示为$2$个素数之和。例如$6=3+3,8=3+5$,...,$18=5+13$。将$6-100$之间的偶数都表示成$2$个素数之和,打印时一行打印5组。素数就是只能被1和自身整除的正整数,最小的素数是2。要求定义并调用函数$prime(m)$判断$m$是否为素数,当$m$为素数时返回$1$,否则返回$0$。 【输入形式】无输入 【输出形式】按从小到大、每组五行。每组的格式为:%4d=%2d+%2d, 等号和加号两侧无空格。
#include<stdio.h>
int prime(int m);
int main(){
for(int m=6;m<=100;m+=2) {
for(int i=3;i<=m/2;i++) {
if(prime(i)==1&&prime(m-i)==1){
printf("%4d=%2d+%2d",m,i,m-i);
if ((m-4)%10==0)
printf("\n");
break;
}
}
}
}
int prime(int m){
if(m==1)
return 0;
int i=2;
for(i;i<m;i++){
if(m%i==0)
break;
}
if(i==m)
return 1;
else
return 0;
}
【问题描述】输入2个正整数a和n,求a+aa+aaa+aa...a(n个a)之和。例如,输入2和3,输出246(2+22+222)。 【输入形式】从键盘输入正整数a和正整数n。 [输入输出样例1]】(下划线部分表示输入)
Input a, n:
8 5
s=98760
【样例说明】输入提示符后要加一个空格。其中":"后要加一个且只能一个空格。输出语句的"="两边无空格。英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
#include<math.h>
int fn(int a,int n){
int i=0,j=0,sum_1=0,sum_2=0;
for (j;j<n;j++){
sum_2=sum_2+a*pow(10,j);
sum_1=sum_1+sum_2;
}
return sum_1;
}
int main(){
int a,n;
printf("Input a, n: ");
scanf("%d%d",&a,&n);
printf("s=%d",fn(a,n));
}
【问题描述】已知一个整数数组大小为6,先输入6个有序数据。再输入一个正整数,将输入的整数放入到数组中,并使其依然保持有序(数组只存放6个元素,最大的数据会被舍弃) 【输入形式】
1 3 5 7 9 11
8
【输出形式】
1 3 5 7 8 9
#include<stdio.h>
int getArray(int a[]){
for(int i=0;i<6;i++)
scanf("%d",&a[i]);
return 0;
}
int putArray(int a[]){
for(int i=0;i<6;i++)
printf("%d ",a[i]);
return 0;
}
int main()
{
int t,i,j;
int a[7];
getArray(a);
scanf("%d",&a[6]);
if(a[6]>a[5]){
t=a[6];
a[5]=a[6];
a[5]=t;
}
else{
for(i=0;i<7;i++){
for(j=0;j<7;j++){
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
}
putArray(a);
}
【问题描述】输入一个正整数n(1<n<10),再输入n个整数,存入数组中,再将数组中的数,逆序存放并输出 【输入形式】先输入一个整数n,再输入n个整数,用空格间隔 【输出形式】输出n个整数,用空格间隔 【样例输入】
5
1 2 3 4 5
【样例输出】
5 4 3 2 1
#include<stdio.h>
int getArray(int a[],int n){
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
}
return 0;
}
int putArray(int a[],int n){
for(int i=n;i>0;i--) {
printf("%d ",a[i-1]);
}
return 0;
}
int main(){
int n,a[10];
scanf("%d",&n);
getArray(a,n);
putArray(a,n);
}
【问题描述】输入一个正整数n(1<n<10),再输入n个整数数放入数组a中;然后输入一个正整数m(1<m<10),再输入m个整数数放入数组b中,找出所有不属于这两个数组的共有元素并输出。 【输入形式】先输入一个正整数n后,输入n个整数,用空格分隔。再输入一个正整数m,再输入m个整数,用空格分隔。 【输出形式】一组整数,用空格分隔数据 【样例输入】
5
1 3 5 7 9
6
1 2 3 4 5 6
【样例输出】
7 9 2 4 6
#include<stdio.h>
int getArray(int a[],int n){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
return 0;
}
int main(){
int a[10],b[10],n,m,c[10],num=0,i,j;
scanf("%d",&n);getArray(a,n);
scanf("%d",&m);getArray(b,m);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(a[i]==b[j])break;
}
if(j==m){
c[num++]=a[i];
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++)
if(b[i]==a[j])break;
if(j==n){
c[num++]=b[i];
}
}
for(i=0;i<num;i++){
for(j=0;j<i;j++)
if(c[i]==c[j])break;
if(j==i)printf("%d ",c[i]);
}
}
【问题描述】输入10个数到数组中,对数组中的数按由小到大排序并输出 【输入形式】10个整数,用空格分隔 【输出形式】10个由小到大的整数,用空格分隔 【样例输入】
1 3 5 2 9 4 6 0 7 8
【样例输出】
0 1 2 3 4 5 6 7 8 9
#include<stdio.h>
int getArray(int a[],int n){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
return 0;
}
int putArray(int a[]){
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
int main(){
int a[10],i,j,t,n=10;
getArray(a,n);
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
putArray(a);
}
【问题描述】输入一个4×4的矩阵中的所有元素,设其最多只有一个鞍点,寻找该鞍点,如果有,则输出其下标及对应的值,若没有,则输出"NO"。鞍点是指二维数组中的一个元素,在该行上最大,在该列上最小。 【输入形式】输入16个整数,存放在一个4×4的二维数组中 【输出形式】若有鞍点,则输出其下标(两个整数)和对应的值,若无鞍点,则输出"NO"。 【样例输入】
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
【样例输出】
[2][1] 6
#include<stdio.h>
int getArray(int a[4][4]){
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
scanf("%d",&a[i][j]);
return 0;
}
int main(){
int a[4][4],i,j,k,jmax,count=0;
getArray(a);
for(i=0;i<4;i++){
int max=a[i][0];
for(j=0;j<4;j++){
if(a[i][j]>=max){
max=a[i][j];
jmax=j;
}
}
int flag=1;
for(k=0;k<4;k++){
if(a[k][jmax]<max){
flag=0;break;
}
}
if(flag){
printf("[%d][%d] %d",i,jmax,max);
count++;
}
}
if(count==0) printf("None");
}
【问题描述】螺旋方阵,是指对任意给定的n,将1到n×n的数字从左上角第一个格子开始,按顺时针螺旋方向顺序填入n×n的方阵里(向内螺旋)。输入一个正整数,输出螺旋方阵的外边内容(仅输出外边内容,有能力的同学可考虑输出整个螺旋方阵)。 【输入形式】一个正整数n(n小于等于6) 【输出形式】螺旋方阵外边。 【样例输入】
5
【样例输出】
1 2 3 4 5
16 0 0 0 6
15 0 0 0 7
14 0 0 0 8
13 12 11 10 9
【样例说明】输出每个整数占两个字符位,中间用空格隔开
#include<stdio.h>
int main()
{
static int map[100][100];
int n=0,k=0;
scanf("%d",&n);
//上面那行
for(int i=0;i<n;i++) {
map[0][i-1]=k++;
}
//右边那行
for(int i=0;i<n;i++) {
map[i][n-1]=k++;
}
//下面那行
for(int i=n;i>1;i--) {
map[n-1][i-2]=k++;
}
//左边那行
for(int i=n;i>2;i--) {
map[i-2][0]=k++;
}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
printf("%2d ",map[i][j]);
}
printf("\n");
}
}
【问题描述】输入一个字符,再输入一个以回车结束的字符串(少于80个字符)在字符串中查找该字符。 【输入形式】一个字符后,再输入一个字符串 【输出形式】一个整数,说明该字符在字符串中的位置,若无该字符,则显示"Not Found" 【样例输入】
m
programming
【样例输出】 7 【样例说明】查找并输出第一个字符的位置,位置从1开始计数。
#include <stdio.h>
int main()
{
char s[81];
char x=getchar();
getchar();
int i=0;
while((s[i]=getchar())!='\n')
i++;
s[i]='\0';
for(int i=0;s[i]!='\0';i++) {
if(x==s[i]){
printf("%d",i+1);
return 0;
}
}
printf("Not Found");
}
【问题描述】输入一个以'#'结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数的字符串,然后将其转化为十进制数后输出。如果过滤后字符串的首字符为'-',代表的是负数。 【输入形式】一个字符串 【输出形式】一个十进制整数 【样例输入】
+P-xf4+-1!#
【样例输出】
-3905
【样例说明】输入的内容,按十六进制数要求将数值(09,AE)和符号(在数值之前的'-')保留,得到-f41,转换为十进制后市-3905
【评分标准】
#include <stdio.h>
#include<stdlib.h>
int main()
{
char s[100],m[100],sym;
//输入字符串
int i=0;
while((s[i]=getchar())!='#')
i++;
s[i]='\0';
//提取符号 "+P-xf4+-1!#"--->"-"
for(int i=0;s[i]!='\0';i++) {
if(s[i]=='+'||s[i]=='-')
sym=s[i];
if((s[i]>='0'&&s[i]<='9')||(s[i]>='A'&&s[i]<='F')||(s[i]>='a'&&s[i]<='f'))
break;
}
//提取十六进制
int k=0;
for(int i=0;s[i]!='\0';i++) {
if((s[i]>='0'&&s[i]<='9')||(s[i]>='A'&&s[i]<='F')||(s[i]>='a'&&s[i]<='f'))
m[k++]=s[i];
}
m[k]='\0';
/*输出十六进制
for(i=0;m[i]!='\0';i++) {
putchar(m[i]);
}
printf("\n");
*/
//转换十进制 -3905
long number=0;
for(i=0;m[i]!='\0';i++){
if(m[i]>='0'&&m[i]<='9')
number=number*16+m[i]-'0';
else if(m[i]>='a'&&m[i]<='f')
number=number*16+m[i]-'a'+10;
else
number=number*16+m[i]-'A'+10;
}
if(sym=='+'||sym=='-')
printf("%c",sym);
printf("%ld",number);
}
【问题描述】输入一个正整数n(1<n≤10),再输入n个整数,输出最大值及其下标(设最大值唯一,下标从0 开始)。 【输入形式】从键盘输入一个正整数n和n个整数。 【输入输出样例1】(下划线部分表示输入)
Input n: 5
Input 5 integers: 1 2 5 4 0
max=5, index=2
【样例说明】 输入提示符后要加一个空格。例如Input n: ,其中:后要加一个且只能一个空格。 等号前后无空格,逗号后有一个空格。 英文字母区分大小写。必须严格按样例输入输出。
#include<stdio.h>
int getArray(int a[],int n){
printf("Input %d integers: ",n);
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
}
return 0;
}
int main()
{
int a[10],n,max=-100,index=0;
printf("Input n: ");
scanf("%d",&n);
getArray(a,n);
for(int i=0;i<n-1;i++) {
if(max<a[i])
max=a[i];
index=i;
}
printf("max=%d, index=%d",max,index-1);
}
【问题描述】拆分实数的整数和小数部分:要求自定义一个函数void splitfloat(float x,int *intpart,flaot *fracpart)。其中x是要被拆分的实数,intpart和fracpart分别是将实数拆分出来的整数和小数部分。通过定义的主函数,编写对应的splitflaot函数内容。 【样例输入】
12.4567
【样例输出】
The intpart is 12
The fracpart is 0.456700
#include<stdio.h>
#include<stdlib.h>
void splitFloat(float x,int *intpart,float *fracpart){
}
int main(){
float x,fp;
int ip;
scanf("%f",&x);
splitFloat(x,&ip,&fp);
printf("The intpart is %d\n",ip);
printf("The fracpart is %f\n",fp);
}
void splitFloat(float x,int *intpart,float *fracpart){
*intpart=abs(x);
*fracpart=x-abs(x);
}
【问题描述】定义函数void sort(int a[], int n),用选择法对数组a中的元素升序排序。主函数中输入n(n<=10)再输入n个数放入数组,调用函数排序后输出数组内容。 【样例输入】
6
1 5 -9 2 4 -6
【样例输出】
-9 -6 1 2 4 5
#include<stdio.h>
void sort(int a[], int n){
}
int main(){
int a[10],n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,n);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
void sort(int a[], int n){
int t;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
【问题描述】输入一个正整数n,再输入n个整数存入数组中,再输入一个整数x,在数组中查找x,如果找到则输出相应的下标,否则输出“Not found”。要求定义并调用函数search(list,n,x),其功能是在数组中查找元素x,若找到则返回相应下标,否则返回-1; 【样例输入】
3
1 2 -6
2
【样例输出】
1
#include<stdio.h>
void printArray(int a[],int n){
}
void setArray(int a[],int n){
}
int search(int list[],int n,int x){
}
int main(){
int a[10],n,r,x;
scanf("%d",&n);
setArray(a,n);
scanf("%d",&x);
r=search(a,n,x);
if(r>=0)
printf("%d\n",r);
else
printf("Not found\n");
}
void printArray(int a[],int n){
for(int i=0;i<n;i++)
printf("%2d ",a[i]);
printf("\n");
}
void setArray(int a[],int n){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
}
int search(int list[],int n,int x){
for(int i=0;i<n;i++) {
if(x==list[i])
return i;
}
return -1;
}
【问题描述】设计一个函数void f(char *p),对p指向的字符串进行逆序,要求函数不能定义任何数组、不能调用任何字符串处理函数。在主函数中输入字符串,调用f(),输出逆序后的字符串。 【样例输入】
abcd
【样例输出】
dcba
#include<stdio.h>
void f(char *p){
}
int main(){
char st[20];
scanf("%s",st);
f(st);
printf("%s",st);
}
void f(char *p){
char ch;
int i,k=0;
for(i=0;*(p+i)!='\0';i++)
k++;
for(i=0;i<k/2;i++){
ch=*(p+i);
*(p+i)=*(p+k-i-1);
*(p+k-i-1)=ch;
}
}
【问题描述】输入一个字符串t和正整数m,将字符串t中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。要求使用字符指针定义并调用函数strmcpy(s,t,m),其功能是将字符串t中的第m个字符开始的全部字符,复制到串s中。 【样例输入】
happy new year
7
【样例输出】
new year
#include<stdio.h>
void strmcpy(char *st,char *tt,int m){
}
int main(){
char st[20],tt[20],ch;
int i=0,m;
scanf("%c",&ch);
while(ch!='\n'){
tt[i++]=ch;
scanf("%c",&ch);
}
tt[i]='\0';
scanf("%d",&m);
strmcpy(st,tt,m);
printf("%s\n",st);
}
void strmcpy(char *st,char *tt,int m){
for(int i=0;*(tt+m+i-1)!='\0';i++) {
*(st+i)=*(tt+m+i-1);
}
}
【问题描述】输入5个字符串,输出其中最长的字符串。通过输入函数scanf("%s",sx)的形式输入字符串。 【输入形式】
li wang zhang jin xian
【输出形式】
zhang
#include<stdio.h>
#include<string.h>
int main()
{
char string[20],strr[20];
char *sx=string;
int max=0;
for(int i=0;i<5;i++) {
scanf("%s",sx);
if(strlen(sx)>max){
strcpy(strr,sx);
max=strlen(sx);
}
}
printf("%s",strr);
}
【问题描述】用结构体类型表示时间内容(时间以时分秒表示)输入一个时间数据,在输入一个秒数n(n<60),以h : m : s的形式输出过了n秒后的时间。(超过24点以0点开始) 【输入形式】输入的时间必须是以"时:分:秒"格式输入 【输出形式】同样以格式"时:分:秒"输出 【样例输入】
11:59:40
30
【样例输出】
12:0:10
#include<stdio.h>
struct Time {
int Hour;
int Minute;
int Second;
}time_1,time_2;
int main()
{
scanf("%d:%d:%d",&time_1.Hour,&time_1.Minute,&time_1.Second);
int n;
scanf("%d",&n);
if(n>=60||n<0)return 0;
if(time_1.Second+n>60){
time_2.Second=time_1.Second+n-60;
time_2.Minute=time_1.Minute+1;
}
else{
time_2.Second=time_1.Second+n;
}
if(time_2.Minute==60){
time_2.Minute=0;
time_2.Hour=time_1.Hour+1;
}
else{
time_2.Minute=time_1.Minute;
time_2.Hour=time_1.Hour;
}
if(time_2.Hour==24){
time_2.Hour=0;
}
printf("%d:%d:%d",time_2.Hour,time_2.Minute,time_2.Second);
}
【问题描述】建立一个学生的结构记录,包含学号、姓名和成绩,输入整数n(n<=10),再输入n个学时的基本信息,计算并输出他们的平均成绩。 【样例输入】
3
1 zhang 70
2 wang 80
3 qian 90
【样例输出】
80.00
#include<stdio.h>
struct student{
int Student_ID;
char name[20];
double Grade;
};
int main()
{
int n;
double Average=0,Sum=0;
scanf("%d",&n);
struct student s[n];
for(int i=0;i<n;i++)
scanf("%d%s%lf",&s[i].Student_ID,s[i].name,&s[i].Grade);
for(int i=0;i<n;i++) {
Sum+=s[i].Grade;
}
Average=Sum/n;
printf("%.2lf",Average);
}
【问题描述】从键盘输入n(n<=10),本书的名称和定价并存入结构体数组中,从中查找定价最高的和最低的数的名称及定价,并输出,价格输出保留2位小数。 【样例输入】
3
Programming_in_c 21.5
Programming_in_VB 18.5
Programming_in_Delphi 25.0
【样例输出】
18.50,Programming_in_VB
25.00,Programming_in_Delphi
#include<stdio.h>
#include<string.h>
struct Book{
char Book_Name[50];
double Price;
};
int main()
{
int n;
double max=-100,min=200;
char max_Name[50],min_Name[50];
scanf("%d",&n);
struct Book s[n];
for(int i=0;i<n;i++)
scanf("%s %lf",s[i].Book_Name,&s[i].Price);
//查找定价最高的书
for(int i=0;i<n;i++) {
if(s[i].Price>max){
max=s[i].Price;
strcpy(max_Name,s[i].Book_Name);
}
}
//查找定价最低的书
for(int i=0;i<n;i++) {
if(s[i].Price<min){
min=s[i].Price;
strcpy(min_Name,s[i].Book_Name);
}
}
//输出,价格输出保留2位小数
printf("%.2lf,%s\n",min,min_Name);
printf("%.2lf,%s\n",max,max_Name);
}
【问题描述】编写函数CompareRational(),比较两个有理数的大学,该函数的参数为两个有理数(结构体类型,包含分子分母两个整数),若第一个有理数小于第二个,返回一个负数;若相等,返回0;若第一个有理数大于第二个,则返回正数。以分数的形式输入两个有理数,输出比较结果。 【输入形式】两个有理数,分数形式,格式为:"分子/分母" 【输出形式】输入的两个有理数,中间用比较运算符连接表示其大小关系。有理数格式同上。 【样例输入】
1/2 3/4
【样例输出】
1/2<3/4
#include<stdio.h>
struct Number{
int a;
int b;
double value;
}x1,x2;
int CompareRational(struct Number x1,struct Number x2){
x1.value=1.000*x1.a/x1.b;
x2.value=1.000*x2.a/x2.b;
if(x1.value<x2.value)
return -1;
else if(x1.value==x2.value)
return 0;
else if(x1.value>x2.value)
return 1;
return 0;
}
int main()
{
int temp=0;
scanf("%d/%d%d/%d",&x1.a,&x1.b,&x2.a,&x2.b);
temp=CompareRational(x1,x2);
if(temp==-1)
printf("%d/%d<%d/%d",x1.a,x1.b,x2.a,x2.b);
else if(temp==0)
printf("%d/%d=%d/%d",x1.a,x1.b,x2.a,x2.b);
else if(temp==1)
printf("%d/%d>%d/%d",x1.a,x1.b,x2.a,x2.b);
}
【问题描述】输入一个整数n(0<n<=10),求1!+2!+3!+……+n!。定义并调用函数fact(n),计算n!,函数类型是double。 【输入形式】一个整数 【输出形式】一个浮点数,但不保留小数部分。 【样例输入】
3
【样例输出】
9
#include<stdio.h>
double fact(int x){
}
int main(){
int i,n;
double sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum=sum+fact(i);
printf("%.0lf",sum);
}
double fact(int x){
double result;
if(x==1||x==0)
result=1;
else
result=x*fact(x-1);
return result;
}
【问题描述】输入一个正整数n,输出其转换为二进制后的形式。要求定义并调用函数dectobin(n),其功能是输出n的二进制(在函数中输出)。 【输入形式】一个正整数 【输出形式】该正整数的二进制形式 【样例输入】
100
【样例输出】
1100100
#include<stdio.h>
void dectobin(int n){
}
int main(){
int x;
scanf("%d",&x);
dectobin(x);
}
void dectobin(int n){
if(n>1)
dectobin(n/2);
printf("%d",n%2);
}
【问题描述】输入一个正整数,编写两个递归函数,分别实现对其按位顺序、逆序输出。 【输入形式】一个正整数 【输出形式】先顺序输出该整数的每一位值,中间用空格分开;再逆序输出该整数的每一位值,中间用空格分开 【样例输入】
1024
【样例输出】
1 0 2 4
4 2 0 1
#include<stdio.h>
void posi(int n){
}
void nega(int n){
}
int main(){
int x;
scanf("%d",&x);
posi(x);
printf("\n");
nega(x);
}
void posi(int n){
if(n>9)
posi(n/10);
printf("%d ",n%10);
}
void nega(int n){
if(n>0){
printf("%d ",n%10);
nega(n/10);
}
}
【问题描述】递归计算函数Ack(m,n)的值,输入两个整数m和n(m和n均大于0 ),输出函数Ack的值。Ack(m,n)的定义为: 当m=0时,Ack(m,n)=n+1; 当n=0且m>0时,Ack(m,n)=Ack(m-1,1); 当n>0且m>0时,Ack(m,n)=Ack(m-1,Ack(m,n-1)); 【输入形式】两个整数m和n 【输出形式】函数的名称,具体参数和计算结果。 【样例输入】
2 3
【样例输出】
Ack(2,3)=9
int Ack(int m,int n){
if(m==0){
return ((n)+1);
}
if(n==0&&m>0){
return Ack(m-1,1);
}
if(n>0&&m>0){
return Ack(m-1,Ack(m,n-1));
}
return 0;
}
#include<stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("Ack(%d,%d)=%d",m,n,Ack(m,n));
}
【问题描述】输人若干个学生信息(包括学号、姓名和成绩),输人学号为0时输人结束,建立一个单向链表,再输人一个成绩值,将成绩大于等于该值的学生信息输出。试编写相应程序。 【样例输入】
1 zhang 78
2 wang 80
3 Li 75
4 zhao 85
0
80
【样例输出】
2 wang 80
4 zhao 85
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stud_node
{
int num;
char name[20];
int score;
struct stud_node *next;
};
struct stud_node * Create_Stu_Doc();/* 新建链表 */
void Print_Stu_Doc(struct stud_node * head);/* 遍历 */
int main()
{
int num,score;
char name[20];
int size=sizeof(struct stud_node);
struct stud_node *head, *tail, *p;
head=tail=NULL;
scanf("%d%s%d",&num,name,&score);
while(1)
{
p=(struct stud_node*)malloc(size);
if(p==NULL)break; /*小天才撸棒性*/
p->num=num;
strcpy(p->name,name);
p->score=score;
p->next=NULL;
if (head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d",&num);
if(num==0)break;
scanf("%s%d",name,&score);
}
Print_Stu_Doc(head);
}
/*遍历操作*/
void Print_Stu_Doc(struct stud_node * head)
{
struct stud_node *ptr;
int the_score;
scanf("%d",&the_score);
if (head==NULL){
printf("\nNo Records \n");
return;
}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
if(ptr->score>=the_score)
printf("%d %s %d \n",ptr->num,ptr->name,ptr->score);
}
【问题描述】输人若干个正整数(输人-1为结束标志),要求按输人数据的逆序建立一个链表,并输出。试编写相应程序。 【样例输入】
1 2 3 4 5 6 7 -1
【样例输出】
7 6 5 4 3 2 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Number
{
int num;
struct Number *next;
};
void Print_Num(struct Number * head);
int main()
{
int num;
int size=sizeof(struct Number);
struct Number *head, *p;
head=NULL;
scanf("%d",&num);
while (num>0)
{
p=(struct Number*)malloc(size);
if(p==NULL)break;
p->num=num;
p->next=head;
head=p;
scanf("%d",&num);
}
Print_Num(head);
}
void Print_Num(struct Number *head)
{
struct Number *p;
for(p=head;p!=NULL;p=p->next)
printf("%d ",p->num);
}
【问题描述】输人若干个正整数(输入-1 为结束标志),并建立个单向链表,将其中的偶数值结点删除后输出。试编写相应程序。 【样例输入】
1 2 3 4 5 6 7 -1
【样例输出】
1 3 5 7
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Number
{
int num;
struct Number *next;
};
struct Number * Delete_Num(struct Number *head); /* 删除 */
void Print_Num(struct Number * head); /* 遍历 */
int main()
{
int num;
int size=sizeof(struct Number);
struct Number *head, *tail, *p;
head=tail=NULL;
scanf("%d",&num);
while(num!=-1)
{
p=(struct Number*)malloc(size);
if(p==NULL)break; /*小天才撸棒性*/
p->num=num;
p->next=NULL;
if (head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d",&num);
}
Delete_Num(head);
Print_Num(head);
}
/*删除操作*/
struct Number*Delete_Num (struct Number * head)
{
struct Number *ptr1,*ptr2;
/*要被删除结点为表头结点*/
while (head!=NULL&&head->num%2==0){
ptr2=head;
head=head->next;
free(ptr2);
}
if(head==NULL) /*链表空*/
return NULL;
/*要被删除结点为非表头结点*/
ptr1=head;
ptr2=head->next; /*从表头的下一个结点搜索所有符合删除要求的结点*/
while (ptr2!=NULL){
if (ptr2->num%2==0){ /*ptr2锁指结点符合删除要求*/
ptr1->next=ptr2->next;
free(ptr2);
}
else
ptr1=ptr2; /*ptr1后移一个结点*/
ptr2=ptr1->next; /*ptr2指向ptr1的后一个结点*/
}
return head;
}
void Print_Num(struct Number * head)
{
struct Number *p;
for(p=head;p!=NULL;p=p->next)
printf("%d ",p->num);
}
【问题描述】输人若千个正整数(输人-1为结束标志)建立一个单向链表,再将链表逆置后输出,即表头置为表尾,表尾置为表头。试编写相应程序。 【样例输入】
1 2 3 4 5 6 -1
【样例输出】
6 5 4 3 2 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Number
{
int num;
struct Number *next;
};
void Print_Num(struct Number * head);
int main()
{
int num;
int size=sizeof(struct Number);
struct Number *head, *p;
head=NULL;
scanf("%d",&num);
while (num>0)
{
p=(struct Number*)malloc(size);
if(p==NULL)break;
p->num=num;
p->next=head;
head=p;
scanf("%d",&num);
}
Print_Num(head);
}
void Print_Num(struct Number *head)
{
struct Number *p;
for(p=head;p!=NULL;p=p->next)
printf("%d ",p->num);
}
【问题描述】将短句“Programming is fun!”写入文件f1.txt. 【输入形式】无 【输出形式】文件f1.txt,内容是:Programming is fun! 【样例输入】 【样例输出】
Programming is fun!
【样例说明】注意空格。 【评分标准】无
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
fp=fopen("f1.txt","w");
fprintf(fp,"Programming is fun!");
fclose(fp);
}
【问题描述】从键盘输入一行字符,写到文件f3.txt中。 【输入形式】键盘输入一行字符 【输出形式】文件f3.txt 【样例输入】
I love programming!
【样例输出】
文件f3.txt内容:I love programming!
【样例说明】请注意是一行字符。 【评分标准】无
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
fp=fopen("f3.txt","w");
char s[100];
int i=0;
while((s[i]=getchar())!='\n')
i++;
s[i]='\0';
fprintf(fp,"%s",s);
fclose(fp);
}
【问题描述】读lx12_3.txt文件,显示在屏幕上,如果有大写字母,则改成小写字母再输出,并统计行数。根据回车符统计文件的行数。 【输入形式】读文件 【输出形式】输出到屏幕 【样例输入】文件内容如
A
bC
【样例输出】
a
bc
line is 2
【样例说明】 【评分标准】
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int main()
{
FILE *fp;
int line=0;
char ch;
fp=fopen("lx12_3.txt","r");
while (!feof(fp))
{
ch=fgetc(fp);
if (ch!=EOF)
{
if (isupper(ch)) printf("%c", tolower(ch));
else if (islower(ch)) printf("%c",ch);
if (ch=='\n')
{
line++;
printf("\n");
}
}
}
printf("Line is %d",line);
fclose(fp);
}
【问题描述】 编写程序将一个指定文件中某一字符串替换为另一个字符串。要求:(1)被替换字符串若有多个,均要被替换;(2)指定的被替换字符串,大小写无关。 【输入形式】 给定文件名为filein.txt。从控制台输入两行字符串(不含空格,行末尾都有回车换行符),分别表示被替换的字符串和替换字符串。 【输出形式】 将替换后的结果输出到文件fileout.txt中。 【样例输入】 从控制台输入两行字符串:
in
out
文件filein.txt的内容为:
#include <stdio.h>
void main()
{
FILE * IN;
if((IN=fopen("in.txt","r"))==NULL)
{
printf("Can’t open in.txt!");
return;
}
fclose(IN);
}
【样例输出】 文件fileout.txt的内容应为:
#outclude <stdio.h>
void maout()
{
FILE * out;
if((out=fopen("out.txt","r"))==NULL)
{
prouttf("Can’t open out.txt!");
return;
}
fclose(out);
}
【样例说明】 输入的被替换字符串为in,替换字符串为out,即将文件filein.txt中的所有in字符串(包括iN、In、IN字符串)全部替换为out字符串,并输出保存到文件fileout.txt中。 【评分标准】 该题要求得到替换后的文件内容,共有5个测试点。上传C语言文件名为replace.c。
#include<stdio.h>
#include<string.h>
void str_replace(char *cp, int n, char *str);
char *Strstr(char *a,const char *b);
int main()
{
char string_1[10240],string_2[10],string_3[10];
scanf("%s",string_2);
scanf("%s",string_3);
int i=0;
char c;
char *p;
FILE *fp; //定义文件指针
fp=fopen("filein.txt","r+"); //打开文本文件进行读/写
while(!feof(fp)){
c=fgetc(fp);
string_1[i] = c;
i++;
}
string_1[i]='\0'; //将文本文件写入string_1
p=Strstr(string_1,string_2); //开始查找字符串
while(p){
str_replace(p,strlen(string_2),string_3); //每找到一个字符串,就替换
p=p+strlen(string_3);
p=Strstr(string_1,string_2);
}
string_1[strlen(string_1)-1]=0; //将字符串string_1末尾字符修改为结束符
FILE *fp_out;
fp_out=fopen("fileout.txt","w");
fprintf(fp_out,"%s",string_1); //将修改后的string_1写入文件
fclose(fp_out);
fclose(fp);
}
void str_replace(char *cp, int n, char *str)
{
int len_of_str;
char * tmp;
len_of_str=strlen(str);
//str3比str2短,往前移动
if(len_of_str<n){
tmp=cp+n;
while(*tmp){
*(tmp-(n-len_of_str))=*tmp; //n-len_of_str是移动的距离
tmp++;
}
*(tmp-(n-len_of_str))=*tmp; //move '\0'
}
else
//str3比str2长,往后移动
if(len_of_str>n){
tmp=cp;
while(*tmp)tmp++;
while(tmp>=cp+n){
*(tmp+(len_of_str-n))=*tmp;
tmp--;
}
}
strncpy(cp,str,len_of_str);
}
char *Strstr(char *a,const char *b)
{
int len_b=strlen(b);
while(*a)
{
if(strncasecmp(a,b,len_b)==0)
return a;
a++;
}
return NULL;
}
【问题描述】编写一程序,用于将文本文件test.txt中所有包含字符串 for 的行输出 【输入形式】文件 【输出形式】屏幕,包含字符串 for 的行输出 【样例输入】文件test.txt内容:
I love programming!
I love my country !
Thank you very much for your favor!
【样例输出】
The row including 'for' is :3
Thank you very much for your favor!
【样例说明】注意输出中的空格 【评分标准】无
#include <stdio.h>
#include <string.h>
int main(){
char str[200],str1[4]="for";
FILE *fp;
int i=0;
fp=fopen("test.txt","r");
while (fgets(str,200,fp)){
i++;
if(strstr(str,str1)){
printf("The row including 'for' is : %d\n",i);
printf("%s",str);
}
}
fclose(fp);
}
【问题描述】 输入一个正整数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);
}
}
【问题描述】两个集合的差集定义如下: 集合A、B的差集,由所有属于A但不属于B的元素构成。 输入两个集合A、B,每个集合中元素都是自然数。求集合A、B的差集。 【输入形式】 从标准输入先输入集合元素个数,然后在下一行输入集合中的自然数元素,以空格分隔。 其中,每个集合都不输入重复的元素。 【输出形式】 输出差运算后集合中的元素,以空格分隔。输出元素的顺序与原有集合A输入的顺序一致。 如果A、B的差集为空集,则不输出任何数值。 【样例输入】
4
2 8 3 4
4
6 1 4 9
【样例输出】
2 8 3
【样例说明】从标准输入接收集合的元素个数和每个元素,输出集合A、B的差集。 【评分标准】该题要求输出差运算后集合中的元素,共有5个测试点。上传C语言文件名为sets.c。
#include<stdio.h>
int getArray(int a[],int n);
int putArray(int a[],int n);
int main()
{
int n=0;
int m=0;
scanf("%d",&n);
int a[n]; //定义集合A
getArray(a,n);
scanf("%d",&m);
int b[m]; //定义集合B
getArray(b,m);
int i=0,j=0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
if (a[i]==b[j])
break;
if (j==m)
printf("%d ",a[i]);
}
}
int getArray(int a[],int n)
{
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
}
return 0;
}
【问题描述】孪生数定义: 如果 A 的约数(因数,包含1,但不包含A本身)之和等于 B , B 的约数(因数)之和等于 A , A 和 B 称为孪生数(A和B不相等)。试找出正整数 M 和 N 之间的孪生数。 【输入形式】从控制台输入两个正整数M和N(1<=M<N<=20000),中间用一个空格分隔。 【输出形式】 在标准输出上输出符合题目描述的M和N之间的全部孪生数对(包括M和N)。每行输出一对孪生数,用一个空格隔开,小的先输出;各行孪生数按照第一个数从小到大的顺序输出,一对孪生数只输出一次。 如果没有符合要求的孪生数对,则输出字符串“NONE”。 【输入样例1】
20 300
【输出样例1】
220 284
【输入样例2】
200 250
【输出样例2】
NONE
【样例说明】 样例1输入的区间为[20,300],其间有一对孪生数对,即:$220(1+2+4+5+10+11+20+22+44+55+110=284)$和$284(1+2+4+71+142=220)$。样例2输入的区间是$[200,250]$,其间没有孪生数对,所以输出字符串:$NONE$。 【评分标准】 该题要求输出区间中的所有孪生数对,共有5个测试点,提交程序文件名为example1.c或example1.cpp。
#include<stdio.h>
int main()
{
int a,b,c[20000]={0},flag=0;
scanf("%d%d",&a,&b);
for(int i=a;i<=b;i++)
{
int sum=0;
for(int j=1;j<i;j++)
if(i%j==0)sum+=j;
if(sum>a&&sum<b)
c[i]=sum;
}
for(int m=a;m<=b;m++)
{
if(m==c[c[m]]&&c[m]!='\0'&&c[m]!=m)
{
printf("%d %d \n",m,c[m]);
flag=1;
c[c[m]]=0;
}
}
if (flag==0)
printf("NONE");
return 0;
}