程序设计类课程教辅平台-C语言
1. (10分) 6-4-5 计算给定的日期是该年的第几天
题目描述
算算是第几天?给定一个日期,数据格式为YYYY-MM-DD,输出这个日期是该年的第几天。
输入描述
以YYYY-MM-DD形式输入一个日期
输出描述
直接输出是当年的第几天
样例输入1:
2018-9-11
样例输出1:
254
#include<stdio.h>
//using namespace std;
int i,y,m,d,ans;
int main()
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d-%d-%d",&y,&m,&d);
if ((!(y%400))||((!(y%4))&&(y%100)))
month[2]++;
for(i=1;i<m;++i)
ans+=month[i];
printf("%d",ans+d);
return 0;
}
2. (10分) 8-4-3 字符串的逆置
题目描述
编程实现字符串的逆置。输出逆置后的字符串
输入描述
一个字符串
输出描述
逆置后的字符串
样例输入1:
abcdefg
样例输出1:
gfedcba
#include<stdio.h>
char ch,chr[100];
int i,ct=1;
int main()
{
gets(chr);
ct=strlen(chr);
for(i=ct-1;i>=0;--i)
printf("%c",chr[i]);
return 0;
}
3. (10分) 8-4-1 十进制整数转换成十六进制
题目描述
编写程序,输入一个整型数,将其转换为十六进制,以字符串形式输出。(提示:可以定义char s[]=”0123456789ABCDEF”以帮助输出十六进制字符)。
输入描述
一个长整型数
输出描述
一个十六进制数
样例输入1:
175
样例输出1:
AF
样例输入2:
20160919
样例输出2:
133A197
#include<stdio.h>
char chr[100],ty[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int i,n,ct;
int main()
{
scanf("%d",&n);
do{
chr[++ct]=ty[n%16];
n/=16;
}while (n!=0);
for(i=ct;i>0;--i)
printf("%c",chr[i]);
return 0;
}
4. (10分) 6-4-3 构造指定的数列
题目描述
编写函数fun,求出a到b之内能被7或者11整除,但不能同时被7和11整除的所有正数,并将他们放在数组中,函数返回这些数的个数。编写main函数,输入a,b的值并调用函数进行运算。
输入描述
从键盘输入a,b的值(1<=a<=b<1000),用以下格式字符串输入a,b的值:
在C语言中使用:scanf(“%d%d”,&a,&b);
在Java语言中使用Scanner对象的nextInt()方法获取a,b的值。
输出描述
用以下格式字符串输出数组中的元素的值:”%d “(注意:%d后面有一个空格)
样例输入1:
1 20 <回车>
样例输出1:
7 11 14
样例输入2:
50 100 <回车>
样例输出2:
55 56 63 66 70 84 88 91 98 99
#include<stdio.h>
int res[100],ans,ct,i,a,b;
int fun(int a,int b)
{
for(i=a;i<=b;++i)
{
if ((((!(i%7)))||(!(i%11)))&&(i%77))
res[++ct]=i;
}
}
int main()
{
scanf("%d%d",&a,&b);
ans=fun(a,b);
for(i=1;i<=ct;++i)
printf("%d ",res[i]);
return 0;
}
5. (10分) 2-8 加密
题目描述
要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例,字母A后面第4个字母是E,用E代替A。因此,“China”应译为“Glmre”。请编写一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为‘C’,‘h’,‘i’,‘n’,‘a’,经过运算,使c1,c2,c3,c4,c5分别变为‘G’,‘l’,‘m’,‘r’,‘e’,并输出。
输入描述
无
输出描述
输出语句为:cout<<c1<<c2<<c3<<c4<<c5<<endl;
这难道不是C++吗?
样例输入1:
China
样例输出1:
Glmre
C语言
#include<stdio.h>
char c1,c2,c3,c4,c5;
int main()
{
scanf("%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5);printf("%c%c%c%c%c\n",c1+4,c2+4,c3+4,c4+4,4+c5);
return 0;
}
C++
#include<stdio.h>
char c1,c2,c3,c4,c5;
int main()
{
scanf("%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5);
cout<<c1+4<<c2+4<<c3+4<<c4+4<<c5+4<<endl;
return 0;
}
另外一个版本(不限长度) C
并且同时修复了超出问题
#include<stdio.h>
char str[20];
int i;
int main()
{
gets(str);
while (*(str+i)!=0)
{
putchar((*(str+i)-'a'+4)%26+'a');
++i;
}
return 0;
}
有些同学的题目是“以‘#’结束”
#include<stdio.h>
char str[20];
int i;
int main()
{
gets(str);
while (*(str+i)!='#')
{
putchar((*(str+i)-'a'+4)%26+'a');
++i;
}
return 0;
}
6. (10分) 3_17有规律的数列求和
题目描述
求Sn=a+aa+aaa+……+aa……aa(n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。
输入描述
依次输入整数n(个数),a(一位数)
输出描述
输出格式中要求设置Sn的精度为20(PS:实测精度要求请忽视)
样例输入1:
5 2
样例输出1:
n=5,a=2,Sn=24690
样例输入2:
11 9
样例输出2:
n=11,a=9,Sn=111111111099
#include<stdio.h>
long long a,n,ans,re;
int i;
int main()
{
scanf("%lld%lld",&n,&a);
for(i=1;i<=n;++i)
{
re*=10;
re+=a;
ans+=re;
}
printf("n=%lld,a=%lld,Sn=%lld",n,a,ans);
return 0;
}