1.大小写转换
1°题目链接
2°思路
多组输入 要用循环实现 EOF为文件结束标志
大写转小写 相当于大写字母对应的ASCII码值加32就是小写字母的ASCII码值
注意最后回车的时候 回车也算字符 要用getchar()去处理回车
3°实现
#include<stdio.h>
int main()
{
int ch = 0;//整型
while ((ch = getchar()) != EOF)//end of file--文件结束标志 一个文件的末尾
{
printf("%c\n", (ch + 32));
getchar();//\n处理
}
return 0;//ctrl z 结束程序
}
//getchar() 接受字符 输入缓冲区(\n把A送入缓冲区) 键盘
// A\n两个字符 只读一个字符
// 先拿A 再拿\n 等于\n也会打印
4°运行结果
2.字符金字塔
1°题目链接
2°思路
第一行打印4个空格 一个1 一个空格
第二行打印3个空格 一个1 一个空格 一个1 一个空格
可以看成两部分
前面的空格为第一部分
后面的1和空格为第二部分
第一部分
循环4次 3次 2次 1次 0次
第二部分
循环1次 2次 3次 4次 5次
首先5行要循环5次 我们定义i=0开始循环
在内部的第一部分我们定义j=0开始循环 j<5-i-1
(第一次i=0 循环4次 随后循环次数不断减1 因为i会不断++)
在内部的第二部分j=0开始 j<=i即可
(第一次j=0 i=0循环1次 随后循环次数不断加1 因为i会不断++)
最后打印完换行
3°实现
#include <stdio.h>
int main()
{
char ch = 0;
scanf("%c", &ch);
int i = 0;
for (i = 0; i < 5; i++)
{
//处理一行
//空格
int j = 0;
for (j = 0; j < 5 - i - 1; j++)
{
printf(" ");
}
//数字
for (j = 0; j <= i; j++)
{
printf("%c ", ch);
}
printf("\n");
}
return 0;
}
4°运行结果
3.出生日期输入输出
1°题目链接
2°思路
关键在于输入2之后 怎么输出02
备注中写道:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0
3°实现
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int date = 0;
scanf("%4d%2d%2d", &year, &month, &date);//%4d就是读取4位整数
printf("year=%d\n", year);
printf("month=%02d\n", month);//输出不够2位时,左边拿0填充
printf("date=%02d\n", date);
return 0;
}
4°运行结果
4.2的n次方
1°题目链接
2°思路
通过<<操作符
按二进制位移动
移动一位就相当于×2
从1开始往走移动n位
多组输入加上循环就可以实现
3°实现
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
printf("%d\n", 1 << n);//1的二进制向左移动n位
}
return 0;
}
4°运行结果
5.变种水仙花数
1°题目链接
2°思路
要得到所有的拆分情况
比如说1234
1234/10=123 1234%10=4
1234/100=12 1234%100=34
1234/1000=1 1234%1000=234
除10和模10
再把除数×10写出循环就可以了
四位数除数最大1000
五位数除数最大10000
用一个变量存起来
最后加上判断条件打印就可以了
3°实现
#include <stdio.h>
int main()
{
int i = 0;
for (i = 10000; i <= 99999; i++)
{
int j = 0;
int sum = 0;
for (j = 10; j <= 10000; j *= 10)
{
sum += (i / j) * (i % j);
}
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
4°运行结果
#1C OJ练习一#完