博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言习题:进制转化,打印日期,打印柱状图
阅读量:2433 次
发布时间:2019-05-10

本文共 13066 字,大约阅读时间需要 43 分钟。

1、从键盘上输入字符,将小写字母转换成大写字母。输入“ctl + z” 结束

#include 
int main() {
char c; int ret; while (scanf("%c", &c) != EOF) {
if (c != '\n') {
printf("%c", c - 32); } else {
printf("\n"); } } return 0;}

2、从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印(柱子从高到低)。例如

5***** *****     3*****   *****     2*****   *****   **********   *****   ***** alp     num     oth
#include 
#include
#include
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
#include
#include
#define N 32#define M 33void 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
//十六进制转十进制,用字符数组存储十六进制字符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 
#include
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 
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 (year1 == year2) {
if (total1 > total2) {
total = total1 - total2; } else {
total = total2 - total1; } } else {
for (j = year1; j <= year2; j++) {
if (j % 4 == 0 && j % 100 != 0 || j % 400 == 0) {
total += 366; } else {
total += 365; } } total += total1 - total2; } printf("两个日期间相差了:%d天", total); return 0;}

(3)输入一个日期,输出该日期是星期几。公式: a. delt % 7 b. (7 – delt % 7) % 7

#include 
int main() {
int i = 0, total = 0, j = 0, a = 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 }; printf("以星期天为基准,请先选定一个基准日期:\n"); 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("该日期是当年的第:%d天\n", total1); printf("请输入你想要查询的日期:\n"); 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("所查询的日期是当年的第:%d天\n", total2); //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 (year1 == year2) {
if (total1 > total2) {
total = total1 - total2; } else {
total = total2 - total1; } } else {
for (j = year1; j <= year2; j++) {
if (j % 4 == 0 && j % 100 != 0 || j % 400 == 0) {
total += 366; } else {
total += 365; } } total += total1 - total2; } printf("两个日期间相差了:%d天\n", total); if (year2 > year1) {
a = total % 7; } else if (year2 == year1) {
if (total2 > total1) {
a = total % 7; } else {
a = (7 - total % 7) % 7; } } else {
a = (7 - total % 7) % 7; } printf("你所查询的星期是:"); switch (a) {
case 0:printf("星期天"); break; case 1:printf("星期一"); break; case 2:printf("星期二"); break; case 3:printf("星期三"); break; case 4:printf("星期四"); break; case 5:printf("星期五"); break; case 6:printf("星期六"); break; } return 0;}

(4)输入 一个日期 和一个整数 n,输出从该日期起经过n天以后的日期。

-> date -> tomorrow of the date

/输入一个日期和一个整数 n,输出从该日期起经过n天以后的日期。#include 
struct DATA {
int year; int mon; int day;};//判断是否是闰年 int isleap(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 1; else return 0;}//计算N天后的日期 struct DATA cal_tomorrow(struct DATA, int num, int data[]);int main(){
int i = 0, total = 0, j = 0, a = 0; struct DATA mydata, my_return; int n; int date[] = {
31,28,31,30,31,30,31,31,30,31,30,31 }; printf("请输入一个日期:\n"); scanf("%d%d%d", &mydata.year, &mydata.mon, &mydata.day); printf("请输入天数:\n"); scanf("%d", &n); my_return = cal_tomorrow(mydata, n, date); printf("%4d-%02d-%02d\n", my_return.year, my_return.mon, my_return.day); return 0;}struct DATA cal_tomorrow(struct DATA mydata, int num, int data[]) {
int leap = isleap(mydata.day); int cnt = 0; while (cnt < num) {
if (num > 365 + isleap(mydata.year)) {
num = num - (365 + isleap(mydata.year)); mydata.year++; } cnt++; mydata.day++; if ((mydata.day == data[mydata.mon - 1] + isleap(mydata.year) && mydata.mon == 2) || (mydata.day == data[mydata.mon - 1])) {
if (mydata.mon == 12) {
mydata.year++; } mydata.mon = mydata.mon++ % 12; mydata.day = 1; } } return mydata;};

(5)输入一个年份,月份,输出该月份的日历。

#define _CRT_SECURE_NO_WARNINGS#include 
int isleap(int year); //判断是否为闰年int month_day(int year, int month); //返回某月的天数int month_first_day_week(int year, int month); //返回某月的第一天是星期几void print_calendar(int year, int month); //打印某年某月日历int main() {
int year, month; scanf("%d %d", &year, &month); print_calendar(year, month); return 0;}int isleap(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 1; else return 0;}int month_day(int year, int month) {
switch (month) {
case 2: if (isleap(year)) {
return 29; } else {
return 28; } break; case 4: case 6: case 9: case 11: return 30; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break; default: break; }}int month_first_day_week(int year, int month) {
int week = 1; for (int i = 1900; i < year; i++) {
++week; // 365 % 7 = 1 if (isleap(i)) {
++week; } } for (int i = 1; i < month; i++) {
week += month_day(year, i); } week %= 7; return week;}void print_calendar(int year, int month) {
int days, day_week; int i = 1; int day = 1; printf("%4d-%02d\n", year, month); printf("Mon Tue Wed Thu Fri Sat sun\n\n"); days = month_day(year, month); day_week = month_first_day_week(year, month); if (day_week == 0) {
day_week = 7; } while (i < day_week) {
printf(" "); i++; } while (day <= days) {
printf("%-6d", day); day++; i = i % 7; if (i == 0) {
printf("\n\n"); } //i = i % 7; i++; } if (i != 0) {
printf("\n"); }}

(6)打印任意一年的日历

#define _CRT_SECURE_NO_WARNINGS#include 
int whatday(int year, int mon, int day){
int oyear = 1920; int omon = 1; int oday = 4; int days[] = {
0,31,28,31,30,31,30,31,31,30,31,30,31 }; int cnt = 0; while (oyear != year || omon != mon || oday != day) {
if (oyear % 4 == 0 && oyear % 100 != 0 || oyear % 400 == 0) {
days[2] = 29; } else {
days[2] = 28; } ++cnt; ++oday; if (oday > days[omon]) {
++omon; oday = 1; } if (omon > 12) {
++oyear; omon = 1; } } return cnt % 7;}int main(){
//int x = 4; //假设第一天星期四 int days[] = {
0,31,28,31,30,31,30,31,31,30,31,30,31 }; int year = 2004; int mon = 1; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days[2] = 29; } else {
days[2] = 28; } /*int day = 1; for (int j = 0; day <= days[mon]; ++j) { if (j < x) { printf(" "); } else { printf("%3d", day); ++day; } if (j % 7 == 6) { printf("\n"); } }*/ for (int mon = 1; mon <= 6; ++mon) {
printf(" %2d ", mon); printf("SUN MON TUE WED THU FRI SAT"); printf(" %2d ", mon +6); printf("SUN MON TUE WED THU FRI SAT\n"); int day1 = 1; int x1 = whatday(year, mon, 1); int day2 = 1; int x2 = whatday(year, mon + 6, 1); for (int j = 0,k = 0; day1 <= days[mon] || day2 <= days[mon+6];) {
while (1) {
if (j % 7 == 0) {
printf(" "); } if (j < x1 || day1 > days[mon]) {
printf(" "); ++j; } else {
printf("%4d", day1); ++day1; ++j; } if (j % 7 == 0) {
break; } } while(1) {
if (k % 7 == 0) {
printf(" "); } if (k < x2 || day2 > days[mon+6]) {
printf(" "); ++k; } else {
printf("%4d", day2); ++day2; ++k; } if (k % 7 == 0) {
printf("\n"); break; } } } }}

转载地址:http://htxmb.baihongyu.com/

你可能感兴趣的文章
无线宽带的先驱:GPRS技术全接触(转)
查看>>
爱达讯OM3万兆光纤解决方案(转)
查看>>
RedHat Linux7.2 上 Oracle 8i R2 (8.1.6) 企业版安装实例(转)
查看>>
IVR业务基础知识(转)
查看>>
保护自己的MIDlet程序之三:SNProtector(转)
查看>>
利用ASP存取各种常用类型数据库(3)(转)
查看>>
行家看用ASP上传文件(转)
查看>>
[XML学习笔记][3.3]通过JAXP使用XSLT(转)
查看>>
SQL Server 服务器安装剖析(转)
查看>>
DNTU无法查看远程计算机的进程列表(转)
查看>>
Alexa排名对新闻网站的参考作用(转)
查看>>
基于 Windows Mobile 2003 的 Pocket PC 为开发人员提供的新功能(转)
查看>>
中文转换成Unicode码函数(转)
查看>>
丘仕达工作前给大家的礼物(转)
查看>>
JBuilder2005 下 jsp2.0 初体验(转)
查看>>
电信网技术(转)
查看>>
在Tomcat 配置Oracle 及DB2中创建Connection Pool(转)
查看>>
CDMA的相关国际标准及制定(转)
查看>>
J2ME技术在手机开发领域的优势和不足(转)
查看>>
Java中的cookie管理方案(4)-与J2ME结合(转)
查看>>