要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.
例如,字母"A"后面第4个字母是"E".“E"代替"A”。因此,“China"应译为"Glmre”。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
#include
int main()
{
char ch1,ch2,ch3,ch4,ch5;
scanf("%c",&ch1);
scanf("%c",&ch2);
scanf("%c",&ch3);
scanf("%c",&ch4);
scanf("%c",&ch5);
printf("%c%c%c%c%c",ch1+4,ch2+4,ch3+4,ch4+4,ch5+4);
return 0;
}
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
这个题目挺有意思的,我主要用了“斐波那契数列”的知识来解答的,但是发现了问题。
1、我用了函数递归来解题,导致时间超时,问题是由于每次解答一题要递归好几次。
2、题目中的 0
#include
#define N 55
int monther_cow[N];
void monther_cow2(int n);
int main()
{
int input[N];
monther_cow2(N);
int i = 0;
do
{
scanf("%d",&input[i]);
}while(input[i++] != 0);
for(int j = 0 ; j < i-1 ; j++)
{
if( input[j] < 4)
{
printf("%d\n",monther_cow[input[j]]);
}
else
{
printf("%d\n",monther_cow[input[j] - 1] + monther_cow[input[j] - 3] );
}
}
return 0;
}
void monther_cow2(int n)//记录的斐波那契数列中对应的规律到数列
{
int i;
for(i = 1 ; i <= n ; i++)
{
if( i < 4)
{
monther_cow[i] = i;
}
else
{
monther_cow[i] = monther_cow[i - 1] + monther_cow[i - 3];
}
}
}
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
#include
int main()
{
int letter = 0,number = 0,blank = 0,others = 0,c; //分别为字母、数字、空格、其他
while((c = getchar()) != '\n'){
if(c >= 'A' && c<='Z' || c >= 'a' && c <= 'z') //判断是否为字母
letter++;
else if(c >= '0' && c <= '9') //判断是都为数字
number++;
else if(c == ' ') //判断是否为空格
blank++;
else //其他
others++;
}
printf("%d %d %d %d\n",letter,number,blank,others);
return 0;
}
scanf()和gets()都可以用来从标准输入接收一个字符串,区别如下:
get()函数:
1)gets()从标准输入设备读取字符串,以回车结束读取,使用’\0’结尾,回车符’\n’被舍弃没有遗留在缓冲区。
2)可以用来输入带空格的字符串。
3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出。
scanf()函数:
1)scanf()以 空格 或 回车符 结束读取,空格 或 回车符 会遗留在缓冲区。
2)不能直接输入带空格的字符串。
注意:scanf()函数如何才能输入带空格的字符串。
scanf("%[^\n]", a); //%[]输入字符集, [^\n] 表示除了'\n'之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串。
#include
#include
#define MAX 256
int main()
{
char str[MAX];
//1 用gets函数接收从标准输入中输入的字符串
//gets(str);
//2 用scanf接收一个字符串,下列方式可以接收空格
scanf("%[^\n]", str);
int len = strlen(str);
int i;
int num = 0;
int abc = 0;
int space = 0;
int other = 0;
for (i = 0; i < len; i++)
{
if (str[i] <= '9' && str[i] >= '0')
num++;
else if (str[i] <= 'z' && str[i] >= 'a')
abc++;
else if (str[i] == ' ')
space++;
else
other++;
}
printf("%d %d %d %d\n", abc, num, space, other);
return 0;
}
题目描述
设圆半径r,圆柱高h 求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。 用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字**(四舍五入)**。请编程序。 PI=3.14
注意四舍五入,第一次做时被坑了。
#include
int main()
{
float r,h;
scanf("%f %f",&r,&h);
float C1,Sa,Sb,Va,Vb;
C1=float(int(3.14*(2*r)*100))/100;//可以不加float,但是我的编译器没通过
Sa=float(int(3.14*(r*r)*100))/100;
Sb=float(int(4*3.14*(r*r)*100))/100;
Va=float(int(1.333334*3.14*(r*r*r)*100))/100;
Vb=float(int(h*3.14*(r*r)*100))/100;
printf("C1=%0.2f\n",C1);
printf("Sa=%0.2f\n",Sa);
printf("Sb=%0.2f\n",Sb);
printf("Va=%0.2f\n",Va);
printf("Vb=%0.2f\n",Vb);
}
对比发现,学校的OJ真是,哎…一言难尽。
建议初学者使用这个
C语言网
https://www.dotcpp.com/oj/problemset.html
(全中文界面,比较友好。题目较易。讨论板块有许多优质题解。不过缺点是我们学校不认。。。)
其他著名高校OJ
POJ: poj.org
CodeForces: codeforces.com
HDUOJ: acm.hdu.edu.cn
VJudge: vjudge.net
ZOJ: acm.zju.edu.cn
UVA: uva.onlinejudge.org