资讯详情

C语言习题:进制转化,打印日期,打印柱状图

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 

标签: omon安全继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司