原创
格式控制不足位前补0
#include<stdio.h>
int main()
{
char c;
int t=0;
int flag=0;
int p;
for(p=0;p<3;p++)
{
c=getchar();
if(flag)printf("\n");
int i=c;
int j=i;
while(j)
{
j/=10;
t++;
}
switch(t)
{
case(3):{printf("%d ",i);break;}
case(2):{printf("0%d ",i);break;}
case(1):{printf("00%d ",i);}
}
j=i;
t=0;
while(j)
{
j/=8;
t++;
}
switch(t)
{
case(3):{printf("%o ",i);break;}
case(2):{printf("0%o ",i);break;}
case(1):{printf("00%o ",i);}
}
j=i;
t=0;
while(j)
{
j/=16;
t++;
}
switch(t)
{
case(3):{printf("%x",i);break;}
case(2):{printf("0%x",i);break;}
case(1):{printf("00%x",i);}
}
t=0;
flag=1;
}
}
菜鸡做法,因为不知道。
#include<stdio.h>
int main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%.3d %.3o %.3x\n",a,a,a);
printf("%.3d %.3o %.3x\n",b,b,b);
printf("%.3d %.3o %.3x\n",c,c,c);
}
想输出o和x直接输出即可。.3和%03意义相同。
第一次作业G题
scanf("%d")会自动识别整数,并且不会记录无意义的0,getchar将字符吃入。
#include<stdio.h>
int main()
{
int i,j,k;
getchar();
scanf("%d",&i);
getchar();
scanf("%d",&j);
getchar();
scanf("%d",&k);
printf("0086%d%d%d",i,j,k);
}
第二次实验很多都是输入输出,因为没看清题错的很惨
输出为这k个整数的平均值,保留3位小数。这种输出所除的数分母一定是变量啊。
不区分大小写的情况:
作业3 problem j
在键盘按下Y键时或者按下什么键时都是不区分大小写的。
或者是元音字母这种题(实验3 problem D)作业5 作业五 problem E,判断元音,同样不区分大小写 。
定义字符串可以用int a[]={枚举}//看枚举类型。
//对数字分解的再运算不一定要用数组储存
输出后两位,完全可以用%100的方法。
水仙花数
#include<stdio.h>
int is_daffodil(int n)
{
int i=n,j=0;
int a[3];
while(n)
{
a[j++]=n%10;
n/=10;
}
int ans=a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2];
if(ans==i&&j==3)return 1;
else return 0;
}
int main()
{
intn;
scanf("%d", &n);
printf("%s",
( is_daffodil(n) ? "Yes, it is a daffodil."
: "No, it is not a daffodil.")
);
return0;
}
K题一共多少天,C语言无算法只是考察逻辑能力的。再次验证题不会出错,只会是自己没想到。
如果这个人没有18岁生日就输出-1.
#include<stdio.h>
int ifrun(int n)
{
if((n%400==0)||((n%4==0)&&n%100!=0))return 1;
else
return 0;
}
int main()
{
int n,i,year,month,day,t,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d-%d-%d",&year,&month,&day);
if(month==2&&day==29)
{
printf("-1\n");
}
else
{
t=0;
if(month>=3)
for(y=year+1;y<=year+18;y++)
{
if(ifrun(y))
{
t=t+366;
}
else
{
t=t+365;
}
}
}
else if(month<=2)
{
for(y=year;y<=year+17;y++)
{
if(ifrun(y))
{
t=t+366;
}
else
{
t=t+365;
}
}
}
printf("%d\n",t);
}
}
}
18岁生日代表着过了18周年,如果生日是2月29日,那么没有18周岁生日。
作业六 求最大公约数和最小公倍数
其中辗转相除法
int gcd(int a,int b)
{
if(b==0)return a;
else
return gcd(b,a%b);
}
浮点型转化成整数,实现floor函数和ceil函数
#include<stdio.h>
int myFloor(double data)
{
int i;
i=(int)data;
if(data>=0)
{
return i;
}
else
{
if(i==data)return i;
return i-1;
}
}
int myCeil(double data)
{
int i;
i=(int)data;
if(data>0)
{
if(i==data)return i;
return i+1;
}
else
return i;
}
期末模拟转化大小写
#include<stdio.h>
#include<ctype.h>
char cnvchar(char c)
{
char aa=c;
if(aa>='a'&&aa<='z')
{
c=toupper(c);
}
if(aa>='A'&&aa<='Z')
{
c=tolower(c);
}
return c;
}
注意同一变量的变化。
输出精度问题之内存转换
#include<stdio.h>
int main()
{
unsigned long long int n;
double k;
double m,g;
scanf("%llu",&n);
k=n/1024.0;
printf("%lluK\n",(unsigned long long int)k);
m=k/1024.0;
printf("%.2lfM\n",m);
g=m/1024;
printf("%.2lfG\n",g);
}
斐波那契数列非递归求法。
int a=1,b=1,tmp;
int n;
scanf("%d",&n);
n=n-2;
while(n--)
{
tmp=a+b;
a=b;
b=tmp;
}
阶乘
int jie(int n)
{
if(n==1)return 1;
else
return n*jie(n-1);
}
组合数
#include<stdio.h>
int zuheshu(int n,int k)
{
if(n<k)return 0;
if(k==0)return 1;
if(n==0)return 0;
else
return zuheshu(n-1,k-1)+zuheshu(n-1,k);
}
转化进制问题,尤其是16进制和8进制2进制这样的关系,可以使用单个数转化。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[110];
int i,num;
while(gets(a)!=NULL){
for(i=0;i<strlen(a);i++)
{
if(isdigit(a[i]))
{
num=a[i]-'0';
}
if(isalpha(a[i]))
{
num=a[i]-'A'+10;
}
int c[10]={0},k=0;
while(num>=1)
{
c[k++]=num%2;
num/=2;
}
printf("%d%d%d%d",c[3],c[2],c[1],c[0]);
}
putchar('\n');
}
return 0;
}
矩阵行和列的对换
交换就用辅助变量
int t=a
a=b;
b=t;
正负下标可以在n%MAX*-1;
数组的下标不会拓展,题没看懂
递归判断是否回文
int IsPalindereme(char* str, size_t size)
{
if (size <= 1)
return true;
if (str[0] != str[size - 1])
return false;
return IsPalindereme(++str, size - 2);//在下标为0的基础上减1.
}
几分几点。模拟表的走动。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,a,b,c,i;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
else
{
a=0,b=0,c=0;
for(i=n;i>1;i--)
{
a++;
if(a==60)
{
a=0;
b++;
}
if(b==60)
{
b=0;
c++;
}
}
printf("%0.2d:%0.2d:%0.2d\n",c,b,a);
}
}
return 0;
}
字符串结束的标志,必须要以'\0'结尾。
注意gets函数和scanf("%s")函数把'\n'转化成了'\0'.
不用接续输入
查询字符串。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
char a[1000][110];
char b[110];
int main()
{
int n,i,j,k;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",a[i]);
}
while(scanf("%s",b)!=EOF){
int flag=0;
for(i=0;i<n;i++){
if(!strcmp(a[i],b)){
flag=1;
printf("Yes\n");
break;
}
}
if(flag==0)printf("No\n");
}
}
满足相等就为0.按字典序排序
空串判断方法:a[0]=='\0'
ifalnum判断字符变量c是否为字母或数字,若是则返回非零,否则返回零。
素数写法
int zhishu(int n)
{
int i;
if(n==2)return 1;
if(n==1||n%2==0)return 0;
for(i=2;i<=sqrt(n);i++){
if(n%i==0)return 0;
}
return 1;
}
遇到那种姓名带着数字属性的,就使用结构体。
无符号的可以使用环形判断溢出。
连分式不会
熟练pow函数x^ypow(x,y);
#include<stdio.h>
typedef enum
{
diamond, // 方块
club, // 梅花
spade, // 黑桃
heart // 红桃
} Cards; // 扑克牌的四种花色
typedef struct
{
int type; // 花色
int point; // 点数
} Poker;
int get_card(Poker *pk)
{
scanf("%c",&pk->type);
scanf("%d",&pk->point);
}
int card_cmp(Poker p1, Poker p2)
{
if(p1.point>p2.point)return 1;
if(p1.point<p2.point)return -1;
if(p1.point==p2.point){
if(p1.type>p2.type)return 1;
else if(p1.type<p2.type)return -1;
else return 0;
}
}
int main()
{
Poker tom, jack;
get_card(&tom);
get_card(&jack);
int result = card_cmp(tom, jack);
if(result > 0)
puts("Tom wins.");
结构体表示数组
typedef struct
{
int length;
int array[MAX_SIZE];
}ARR_TYPE;
int input_arr(ARR_TYPE *arr){
int N,i;
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&arr->array[i]);
}
arr->length=N;
}
if(result < 0)
puts("Jack wins.");
if(result == 0)
puts("Tie.");
}
释放空间
void release(double *p)
{
free(p);
}