终于要进入前端专业课程的学习了,这个时候大家的起跑线都是一样的,不能再以基础不好作为借口了,攒足力气向前冲吧,FIGHTING!~
今天的考试总的来说难度适中,都是课堂上讲过的,但是其实在这次考试中我认为最难的不是解题,而是读题,老师给我们设置的考核非常的有意义,除了题目本身的难度外,更为关键的是有很多的陷阱,先入为主啦,读题马虎啦,观察不仔细啦,格式不严谨啦等等等等。这一点很好的告诉了我们,读题是非常重要的,而且在今后的学习和以后的工作中,分析问题永远是第一位,是重中之重,问题问的什么,都有哪些需求,最后到底要反馈什么东西,这些是我们必须要重视的一点。而不能拿着题目作业或者是需求,就开始盲目的狂敲代码。
---------------------------------------------------------唱山割喂------------------------------------------------------
这里是今天的两道机试题,题目本身不难,关键是读题要仔细,弄清楚要求和格式。
/*
请使用整形数组,正确接受从键盘输入的5个数字,完成升序排序后输出排序后的结果。
*/
#include<stdio.h>
void accept(int num[]) /*accept函数,因为需要接收数组,所以这里需要接参,设置形参*/
{
int i;
for(i=0;i<5;i++) /*5个数,5次循环接收*/
{
printf("请输入第%d个数字:",i+1); /*因为i从0计数,因此i+1才代表次序*/
scanf("%d",&num[i]); /*这里是整形数组不是字符串,因此要用取址符&*/
}
}
void sort(int num[]) /*sort函数,同上accept都需要接参*/
{
int i,j; /*冒泡排序需要2个变量*/
int tmp; /*以及一个tmp来作为"空瓶"*/
for(i=0;i<5;i++)
{
for(j=0;j<4-i;j++) /*这里的循环控制是一个根据i改变而跟着一起改变的变量4-i*/
{
if(num[j]>num[j+1]) /*冒泡排序*/
{
tmp=num[j];
num[j]=num[j+1];
num[j+1]=tmp;
}
}
}
}
void list(int num[]) /*list函数,虚幻输出,同样需要接参*/
{
int i;
for(i=0;i<5;i++)
{
printf("%d\t",num[i]); /*打印整形数组因此用%d*/
}
}
void main() /*主函数*/
{
int num[5]; /*子函数中都需要接收由主函数传递过去的数组,因此这里声明一个数组*/
accept(num); //直接调用定义好的3个函数。
sort(num);
list(num);
}
------------------------------------------------------二割----------------------------------------------------------
/*
书写两个函数,实现strlen(),strcmp()函数的功能。
*/
#include<stdio.h>
int strlen(char str[]) /*定义strlen函数,因为需要根据-1,0,1判断大小,因此需要返回值,返回值为整数故而int*/
{ /*同时,因为需要接收主函数中的字符串,所以设置形参以便接收*/
int length=0; /*数组长度为整形,因此声名一个整形变量并初始化*/
int i=0;
printf("请输入任意字符串:");
scanf("%s",str); /*在函数中完成输入,字符串的输入不加取址符*/
for(i=0;str[i]!=0;i++) /*只要字符串的某一位不为0,那么就没有结束,以此控制循环*/
{
length++; /*每循环以此也length就+1,以此记录长度*/
}
return length; /*将最终的值返回给strlen函数,这里的值就是字符串的长度*/
}
int strcmp(char str1[],char str2[]) /*strcmp函数,需要接收字符串,而且要比较,因此设置以逗号分隔的2个形参*/
{
int i,j;
for(i=0;str1[i]!=0&&str2[i]!=0;i++) /*只要2个字符串当前位置上的字符都不为0,即都没结束,则一直比较下去*/
{
if(str1[i]>str2[i]) /*在不超出字符串长度,也就是其中任意字符串尚未终结的时候,若字符分出大小,则以字符大小决定字符串大小*/
{
return 1; /*1代表大于*/
}
else if(str1[i]<str2[i])
{
return -1; /*-1表示小于*/
}
}
j = i; /*循环结束后依然没有返回值,说明在到达其中一个字符串最大长度时,2个字符串的字符都相等,因此这时候再比较长度*/
/*结束循环时i的值就是其中一个字符串的末位数,因此引入新变量j让j=i,以便和前面区分*/
if(str1[j]>str2[j]) /*在末位的时候,字符串的这一位是'\0',也就是0,因此,长度更长的字符串,当前数位肯定不为0,比0大*/
{ /*因此,当前数位更大的一个字符串,一定是长度更长的*/
return 1;
}
else if(str1[j]<str2[j])
{
return -1; /*根据长度判断大小返回1和-1*/
}
else if(str1[j]==str2[j])
{
return 0; /*先前的循环中已经确定2个字符串字符都相等,这时候如果末位0也相等,说明2个字符串都结束了,长度也相等*/
} /*因此返回0表示字符串相等*/
}
void main() /*主函数*/
{
char str[100]; /*声明一个字符串让上面的strlen接收,求取长度*/
printf("该字符串长度为%d\n",strlen(str)); /*调用strlen函数,返回值即为长度*/
char str1[100];
char str2[100]; /*声明2个字符串让strcmp接收,做比较*/
printf("请输入字符串1:");
scanf("%s",str1);
printf("请输入字符串2:");
scanf("%s",str2); /*先完成输入*/
if(strcmp(str1,str2)==1) /*然后直接调用定义好的strcmp函数来比较*/
{
printf("字符串1大于字符串2");
}
else if(strcmp(str1,str2)==-1)
{
printf("字符串1小于字符串2");
}
else
{
printf("字符串1等于字符串2"); /*根据strcmp函数的返回值来判断,1为大于,0为等于,-1为小于*/
}
printf("\n");
}