#include<stdio.h>
#include<string.h>
int main1() //判断一个数是否为素数
/*//这个程序是不对的,当输入99,453之类的数值时,会打印yes2和no两个答案
//因为我们在for循环内做了两步,才会出现这种错误情况
{
int m;
scanf(“%d”,&m);
int i;
if(m==2)
printf(“m yes1\n”);
else
{
for(i=2;i<m;i++)
{
if(m%i==0)
printf(“m no\n”);
break;
else
printf(“m yes2\n”)
}
}
return 0;
}
*/
//正确书写
{
int m;
int i;
scanf(“%d”,&m);
if(m==2)
{
printf(“m yes1\n”);
}
for(i=2;i<m;i++)
{
if(m%i==0)
{
printf(“m no\n”);
break;
}
else
{
if(m==i)
printf(“m yes2”);
}
return 0;
}
或者:
if(m==2)
{
printf(“m yes1\n”);
}
else
{
for(i=2;i<m;i++)
{
if(m%i==0)
break;
}
if(i==m)
{
printf(“m yes2\n”);
}
else
{
printf(“m no\n”);
}
}
int main2() //判断一个年是否为闰年
//闰年:能被四整除但不能被100整除 或能被400整除
{
int m;
scanf(“%d”,&m);
if((m%4==0&&m%100 != 0) || m%400==0)
//if((m%4==0 && !(m%100=0))|| m%400=0)
printf(“m yes%d”);
else
printf(“m no\n”);
return 0;
}
int main3() //测试数组的地址
{
int a[10];
printf(“a=%d,&a[0]=%d\n”,a,&a[0]);
printf(“a=%0x,&a[0]=%0x\n”,a,&a[0]);
printf(“a=%p,&a[0]=%p\n”,a,&a[0]);
return 0;
}
//由结果可知 a=&a[0] 也就是数组首地址等于数组首个元素的地址
int main4() //怎样从键盘输入一串字符串,给字符串数组赋值
{
char a[10];
scanf(“%s”,&a); //注意:输入字符串的长度不得大于我们定义字符串数组时的长度
printf(“%s\n”,a);
return 0;;
}
int main5() //puts():puts(字符数组) 功能是打印字符串,会自动换行
{
char str[]={“banzhang’\n’zuishuai”}; // ‘\n’在这里为转义字符,表换行的意思
puts(str); //用puts函数输出的字符串可以包含转义字符
printf(“%s\n”,str); //用%s格式输出字符串时,printf函数中写的是字符数组名(地址)
//而不是数组元素名(表示值)
return 0;
}
int main6() //strcat(): 将两字符串进行合并,合并后会得到一个值,是str1的地址
{
char str1[100]={“people\’s repulation of”}; //输出’ 要用转义字符 \’
char str2[]={“China”};
strcat(str1,str2); //合并要求str1足够大,否则会溢出
puts(str1)
return 0;
}
int main7() //输出一个以下图形的东西
/*
*
***
*****
*/
{
int i,j,k;
for(i=0;i<3;i++)
{
for(k=0;k<2-i;k++)
{
printf(" ");
}
for(j=0;j<2*i+1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
//小技巧:行i 空格‘ ‘k *j 先打印空格再打印* 根据他们与i的数学关系作为控制循环范//围的条件
int main8() //strncpy(str1,str2,n):复制str2的前n个字符到str1中
{
char str1[100]={“abcdefg”};
char str2[]={“China”};
//strcpy(str1,str2); //这个结果为China 因为把str2全部复制到str1中 也就是str2的\0 //也复制进来了
strncpy(str1,str2,2);
printf(“%s\n”,str1); //Chcdefg
//因为str2的长度大于n的长度 所以str2最后的\0并未复制进来
puts(abc\0def); //abc
return 0;
}
int main9() //strcmp 比较的是ASCII值
{
char str1={“China”};
char str2={“Korean”};
if(strcmp(str1,str2)>0)
{
printf(“1\n”);
strcpy(str1,str2,5);
printf(“%s\n”,str1);
}
if(strcmp(str1,str2)<0)
{
printf(“-1\n”);
strcpy(str2,str1);
printf(“%s\n”str2);
}
if(strcmp(str1,str2)==0)
{
printf(“0\n”);
}
return 0;
}
//结果为 -1 China 0
//这里有一个小bug 0 因为上一步将str1复制到str2中 包括\0 所以再往下执行则相等
//若想改变这种结果 可用switch...case进行尝试 这里不再进行书写
int main10() //比较字符数组所占的内存和长度
{
char a[]={“China”};
printf(“a=%d”,sizeof(a)); //所占内存为6
printf(“a=%d”,strlen(a)); //长度为5 //注意 是a 不是a[]
return 0;
}
int main11() //怎样调用函数
{
int c;
int a=1;
int b=2;
c=max1(a,b); //直接调用一个函数的结果,参数里没有&
return 0;
}
int max1(int *x,int *y) //*:后面放的是地址
//*x:这是一个值 *x=*x+2 改变的是地址上的值
{
if(x>y)
printf(“%d\n”,x);
if(x<y)
printf(“%d\n”,y);
return 0;
}
int main12() //调用的函数里面的值改变可以在main中体现
{
int a=2,b=4;
max2(&a,&b);
printf(“a=%d,b=%d\n”,a,b);
return 0;
}
int max2(int *x,int *y)
{
//x++; //在main中不会改变
//y++;
*x=*x+2; //用地址在main中才会改变
*y=*y+2;
return 0;
}
int change(int a[5][5]) //因为定义的是数组,所以传进来的也是数组
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
int main13()//在main中定义一个二维数组,并且调用一个函数,使其打印出如下图所示
/*
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
*/
{
int a[5][5]={{0}};
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j+1]=a[i][j]+1;
}
}
change(a);
return 0;
}