求某一年的某一月有多少天输入一个字符串
首先先输入两个数字,一个年份一个月份
只要判断好 闰年就可以输出正确的月份对应的天数了
先用一行判断是否是闰年 ,是就输出真(1)不是就输出假(0)
这一段里我直接判断了闰年二月份和非闰年二月份的输出,这样什么年份剩下月份的输出就一样了
scanf("%d %d",&a,&b);
int is_double=(0 == a%400 || 0 ==a%4 && 0 != a%100);
if(b == 2 && a ==is_double){
printf("double year 29 day for 2 month");
return 0;
}
if(b == 2 && a != is_double){
printf("double year 28 day for 2 month");
return 0;
}
接下来不同的月份输出不同的天数用switch判断
switch (b){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 11:
printf("simply year 31 day for %d month",b);
break;
default:
printf("simply year 30 day for %d month",b);
break;
}
最后展示一下完整代码
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
int is_double=(0 == a%400 || 0 ==a%4 && 0 != a%100);
if(b == 2 && a ==is_double){
printf("double year 29 day for 2 month");
return 0;
}
if(b == 2 && a != is_double){
printf("double year 28 day for 2 month");
return 0;
}
switch (b){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 11:
printf("simply year 31 day for %d month",b);
break;
default:
printf("simply year 30 day for %d month",b);
break;
}
return 0;
}
当然有一个小问题就是月份的输入可以输入错误的值
统计英文字母、空格、数字和其它字符的个数
可以用scanf函数 不过这样可能判断不了空格有几个
所以用这个fgets函数
#include <stdio.h>
int main() {
char str[100];
printf("请输入一行文字:");
fgets(str, sizeof(str), stdin);
printf("您输入的文字是:%s\n", str);
return 0;
}
其中,stdin
表示标准输入流。fgets函数会将最大读取的字符数减1,以确保在用户输入的字符串末尾加上一个空字符\0
,以便让使用该字符串的任何代码知道它已经结束了。
取出数组里的每一个数进行判断 单个字符判断用的ASCII值的大小来进行判断。
ASCII表中,一共有128个字符(0到127),其中包括空格、标点符号、数字、大小写字母、控制字符等。这些字符在计算机内部都有对应的ASCII码。例如,大写字母A对应的ASCII码值为65,小写字母a对应的ASCII码值为97。数字0~9对应的ASCII码分别是48~57;
想看ascii就不具体展开了。有点多这个表
strlen函数要包含string的头文件
for(b=0;b<strlen(a);b++){
if(a[b] >= '0' && '9' >= a[b]){
c++;
continue;
}
else if(a[b] >= 'A' && 'z' >= a[b]){
d++;
continue;
}
else if(a[b] ==' '){
e++;
continue;
}
else{}
c d e 分别是对应字符的计数器,要改成for以外的变量要不然就没用 (for以内的局部变量就不能再退出之后输出正确的值了) 这里用了continue 确保每一次都可以跳到下一循环 不过用处不大
有四种类型要判断 最后一种就直接用总长度减去这三个就可以得到了。
}
printf("num %d\n",c);
printf("let %d\n",d);
printf("blank%d\n",e);
printf("other%d\n",strlen(a)-e-c-d);
return 0 ;
}
#include<stdio.h>
#include<string.h>
int main(){
char a[50];
int b=0,c=0,d=0,e=0;
printf("sentences(max<49):");
fgets(a,50,stdin);
for(b=0;b<strlen(a);b++){
if(a[b] >= '0' && '9' >= a[b]){
c++;
continue;
}
else if(a[b] >= 'A' && 'z' >= a[b]){
d++;
continue;
}
else if(a[b] ==' '){
e++;
continue;
}
else{}
}
printf("num %d\n",c);
printf("let %d\n",d);
printf("blank%d\n",e);
printf("other%d\n",strlen(a)-e-c-d);
return 0 ;
}
计算用1分钱、2分钱、5分钱组成1元钱的方式
这个确实比较难想 ,不过看了题解又觉得很简单这里就直接发答案了
#include <stdio.h>
int main() {
int a=1 ,b=2,c=5,sum =100,answer=0;
int a1=0, b1=0,c1=0;
for ( c1 = 0; c1 <= 20; c1++){
for ( b1 = 0; b1 <= 50; b1++){
for ( a1 = 0; a1 <= 100; a1++){
if (a1*a+b1*b+c1*c ==sum){
answer++;
}
}
}
}
printf("%d",answer);
return 0;
}
这里也可以吧所有的答案形式输出出来,这里值输出了次数,当然这题可以用别的解法(下次一定)