第一题
从终端获取一个字符串,并将该字符串中的数据倒置例如str中原来存储"abcde",要求代码运行完毕后存储的是"edcba
解析:将第一个与最后一个交换,第二个与倒数第二个交换
只循环前半段,奇数的最中间那个数不换,偶数都可以换
不需要管 ' \0 ' 因为 strlen 没有把 \0 算在内
#include <stdio.h>
int main(int argc, const char *argv[])
{
char arr1[100]={0};
gets(arr1); \\换行符结束
puts(arr1); \\自己会加一个换行符
int temp;
for(int i=0;i<strlen(arr1)/2;i++){
temp=arr1[i];
arr1[i]=arr1[strlen(arr1)-i-1];
arr1[strlen(arr1)-i-1]=temp;
}
printf("arr1=%s\n",arr1);
return 0;
}
运行结果:
第二题
从终端获取一个字符串str,再输入一个字符c,再输入一个插入位置n,要求将c插入到str中,且插入在n所指定的下标位置。例如: 输入 hello 在输入一个a 在输入一个1,则最后得到的结果为haello.
解析:重新定义一个字符串
1、位置n之前的 a[i]=b[i]
2、位置n的时候 b[i]=n 且 b[i+1]=a[i] 也就是说往后挤一个
3、位置n之后的 b[i+1]=a[i]
#include <stdio.h>
int main(int argc, const char *argv[])
{
char str1[100]={0};
char str2[100]={0};
char c;
int n;
printf("请输入一个字符串\n");
gets(str1);
printf("请输入一个字符\n");
scanf("%c",&c);
printf("请输入要插入的位置\n");
scanf("%d",&n);
for(int i=0;i<strlen(str1);i++){
if(n>i){
str2[i]=str1[i];
}else if(n==i){
str2[i]=c;
str2[i+1]=str1[i];
}else if(n<i){
str2[i+1]=str1[i];
}
}
strcpy(str1,str2);
printf("str1=%s\n",str1);
return 0;
}
运行结果:
第三题
改写strcmp,用自己的代码实现strcmp
解析:strcmp是比大小的函数,但是用的ASCII码的大小来比
并且是一位一位的比,从第一位开始,只要有一位比出来了就有结果
#include <stdio.h>
int main(int argc, const char *argv[])
{
char str1[10]="12345";
char str2[10]="127890";
int flag=0;
for(int i=0;i<strlen(str2);i++){
if(str1[i]>str2[i]){
flag=str1[i]-str2[i];
break;
}else if(str1[i]<str2[i]){
flag=str1[i]-str2[i];
break;
}
}
if(flag>0){
printf("str1>str2,flag=%d\n",flag);
}else if(flag==0){
printf("str1==str2,flag=%d\n",flag);
}else if(flag<0){
printf("str1<str2,flag=%d\n",flag);
}
return 0;
}
运行结果:
第四题
改写strcat,用自己的代码实现strcat
解析:strcat是拼接字符串的函数,结果 = 字符串1+字符串2
#include <stdio.h>
int main(int argc, const char *argv[])
{ char str1[20]="12345"; //脚标从0~4
char str2[20]="67890"; //如果要拼接 脚标从5~9
int j=0;
int length=strlen(str1)+strlen(str2); //总长度
for(int i=strlen(str1);i<length;i++){ //脚标i从str1结束的时候开始,一直加到总长度
printf("str1=%c,str2=%c\n",str1[i],str2[j]); //
str1[i]=str2[j];
j++;
}
str1[i]='\0'; //末尾补\0表示字符串
printf("str1=%s\n",str1);
return 0;
}
运行结果:
第五题
求二维数组的最大值,并输出相应的行号,和列号
解析:和一维数组一样,遍历寻找最大值
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr1[2][3]={0};
int max=arr1[0][0];
int a=0;
int b=0;
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
scanf("%d",&arr1[i][j]);
}
}
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
printf("%d ",arr1[i][j]);
if(max<arr1[i][j]){
max=arr1[i][j];
a=i;
b=j;
}
}
}
printf("max=%d,行号:%d,列号:%d\n",max,a,b);
return 0;
}
运行结果:
第六题
输出一个十行的杨辉三角
解析:先打印出三角形的形状
然后每个值 = 上一行的前一个 + 上一行的前两个
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr1[10][10]={0};
arr1[0][0]=1; //设置开始条件
for(int i=1;i<10;i++){
for(int j=0;j<=i;j++){ //必须是<=i因为要包括10
if(j==0){
arr1[i][j]=1; //将每一行的第0个单独处理
}else{
arr1[i][j]=arr1[i-1][j-1]+arr1[i-1][j];
}
}
}
for(int i=0;i<10;i++){
for(int j=0;j<=i;j++){ //必须是<=i因为要包括10
printf("%d\t",arr1[i][j]);
}
printf("\n");
}
return 0;
}
运行结果: