1.从键盘上输入字符,将小写字母转换为大写字母。ctl z” 结束
#include <stdio.h> int main() {
char c; int ret; while (scanf("%c", &c) != EOF) {
if (c != '\n') {
printf("%c", c - 32); } else {
printf("\n"); } } return 0; }
二、从键盘上输入字符,(1)分别统计字母、数字、其它字符的数量, (2)以柱状图的形式打印统计字母、数字和其他字符的数量(柱从高到低)。
5 ***** ***** 3 ***** ***** 2 ***** ***** ***** ***** ***** ***** alp num oth
#include <stdio.h> #include <ctype.h>
#include <math.h>
int main() {
char c;
int i = 0, j = 0, k = 0,v = 0, max; //i,j,k分别表示字母、数字、和其他字符的数量
int h1, h2, h3;
int flag1 = 0, flag2 = 0, flag3 = 0; //指示标志,0表示没有打印最上面的数字,1表示已经打印了数字
while (scanf("%c", &c) != EOF) {
if (isalpha(c)) {
i++;
}
else if (isdigit(c)) {
j++;
}
else {
k++;
}
}
k--;
printf("字符 = %d,数字 = %d,其他字符 = %d\n", i, j, k);
max = (i > j) ? ((i > k) ? i : k) : ((j > k) ? j : k); //判断三个数中的最大值
h1 = abs(i - max); //距离差值
h2 = abs(j - max);
h3 = abs(k - max);
//开始打印
//打印最上面的数字
if (h1 == 0){
printf(" %d ", i);
flag1 = 1;
}
else{
printf(" ");
}
printf("\t");
if (h2 == 0){
printf(" %d ", j);
flag2 = 1;
}
else{
printf(" ");
}
printf("\t");
if (h3 == 0){
printf(" %d ", k);
flag3 = 1;
}
else{
printf(" ");
}
printf("\n");
//开始循环,总共有 max 遍
for (v = 1; v <= max; v++){
//针对alp的打印
if (flag1){
printf("*****");
}
else{
h1--;
if (h1 == 0){
//表示要打印数字了
printf(" %d ", i);
flag1 = 1;
}
else{
printf(" ");
}
}
printf("\t");
//针对num的打印
if (flag2) {
printf("*****");
}
else {
h2--;
if (h2 == 0) {
//表示要打印数字了
printf(" %d ", j);
flag2 = 1;
}
else {
printf(" ");
}
}
printf("\t");
//针对oth的打印
if (flag3) {
printf("*****");
}
else {
h3--;
if (h3 == 0) {
//表示要打印数字了
printf(" %d ", k);
flag3 = 1;
}
else {
printf(" ");
}
}
//打印完一行就换行
printf("\n");
}
printf(" alp \t");
printf(" num \t");
printf(" oth \t");
printf("\n");
return 0;
}
3、 进制转换 (1)将十进制数转换成二进制数。输入十进制数输出对应的二进制数 (2)将二进制转换成十进制数。输入二进制数输出对应的十进制数 (3)将十进制数转换成十六进制数。输入十进制数输出对应的十六进制数 (4)将十六进制数转换成十进制数。输入十六进制数输出对应的十进制数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 32
#define M 33
void change_ten_two(int num){
int arr[N] = {
0};
int i;
for(i = 0; i < N; i++){
arr[i] = num % 2;
num = num >> 2;
if (num == 0) {
break;
}
}
for (; i >= 0; i--) {
printf("%d", arr[i]);
if (i % 4 == 0) {
printf(" ");
}
}
printf("\n");
}
void change_two_ten(int n) {
int num = 0, i = 0, remainder;
while (n != 0) {
remainder = n % 10;
n = n / 10;
num = num + remainder * pow(2, i);
i++;
}
printf("%d\n", num);
}
void change_two_ten_A(char *str) {
char c;
int num = 0, j = 0;
for (int i = 31; i >= 0; i--) {
printf("%c", c);
if (i % 4 == 0) {
printf(" ");
}
}
printf("\n");
for (int i = 0; i < 32; i++) {
j = str[i] - '0';
num = num + j * pow(2, i);
}
printf("%d\n", num);
}
void change_ten_sixteen(int num) {
int arr[N];
int i;
for (i = 0; i < N; i++) {
arr[i] = num % 16;
num = num / 16;
if (num == 0) {
break;
}
}
for (; i >= 0; i--) {
switch (arr[i]) {
case 10: printf("A"); break;
case 11: printf("B"); break;
case 12: printf("C"); break;
case 13: printf("D"); break;
case 14: printf("E"); break;
case 15: printf("F"); break;
default: printf("%d", arr[i]);
}
}
printf("\n");
}
int main(){
int num;
char str[M] = {
0};
//while (rewind(stdin), scanf("%d", &num) != EOF){
// change_ten_two(num);
// change_two_ten(num);
// change_ten_sixteen(num);
//}
while (rewind(stdin), gets(str) != NULL) {
change_two_ten_A(num);
}
printf("\n");
return 0;
}
#include<stdio.h> //十六进制转十进制,用字符数组存储十六进制字符
int main(){
char* p, s[10];
int n = 0, m = 0;
p = s;
gets(p);
while (*p != '\0'){
if (*p <= 9) {
m = *p - '0';
}
else {
switch (*p) {
case 'A':m = 10; break;
case 'B':m = 11; break;
case 'C':m = 12; break;
case 'D':m = 13; break;
case 'E':m = 14; break;
case 'F':m = 15; break;
default:break;
}
}
n = n * 16 + m;
p++;
}
printf("%d", n);
return 0;
}
4、统计一个整数对应的二进制数的1的个数。输入一个整数(可正可负), 输出该整数的二进制包含1的个数, “ctl+ z” 结束。
void count_one(int num)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((num >> i) & 1) == 1)
{
count++;
}
}
printf("%d\n", count);
}
int main() {
int num;
while (rewind(stdin), scanf("%d", &num) != EOF) {
count_one(num);
}
printf("\n");
return 0;
}
第五题: (1)输入年月日,输出该日期是当年的第几天。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year, mon, day, total, i;
int date[] = {
31,28,31,30,31,30,31,31,30,31,30,31 };
while (scanf("%d%d%d", &year, &mon, &day) != EOF)
{
total = 0;
for (i = 0; i < mon - 1; i++)
{
total += date[i];
}
total += day;
if (mon > 2)
{
total += (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
printf("%4d-%02d-%02d is %dth days\n", year, mon, day, total);
}
return 0;
}
(2)输入两个日期(年 月 日 年 月 日), 输出这两个日期之间差多少天。 公式:sum = delt(year1 year2) - dayofyear(date1) + dayofyear(date2)
#include <stdio.h>
int main() {
int i = 0, total = 0, j =0;
int year1, mon1, day1, total1 = 0;
int year2, mon2, day2, total2 = 0;
int date[] = {
31,28,31,30,31,30,31,31,30,31,30,31 };
scanf("%d%d%d", &year1, &mon1, &day1);
for (i = 0; i < mon1 - 1; i++)
{
total1 += date[i];
}
total1 += day1;
if (mon1 > 2)
{
total1 += (year1 % 4 == 0 && year1 % 100 != 0 || year1 % 400 == 0);
}
printf("%4d-%02d-%02d is %dth days\n", year1, mon1, day1, total1);
scanf("%d%d%d", &year2, &mon2, &day2);
for (i = 0; i < mon2 - 1; i++)
{
total2 += date[i];
}
total2 += day2;
if (mon2 > 2)
{
total2 += (year2 % 4 == 0 && year2 % 100 != 0 || year2 % 400 == 0);
}
printf("%4d-%02d-%02d is %dth days\n", year2, mon2, day2, total2);
if (year1 > year2) {
for (j = year2; j < year1; j++) {
if (j % 4 == 0 && j % 100 != 0 || j % 400 == 0) {
total += 366;
}
else {
total += 365;
}
}
total += total2 - total1;
}
else if