Day07:C语言学习作业

下列对 C 语言字符数组的描述中错误的是 ( ) 

A. 字符数组可以存放字符串

B. 字符数组中的字符串可以整体输入、输出

C. 不可以用关系运算符对字符数组中的字符串进行比较

D. 可以在赋值语句中通过赋值运算符 "=" 对字符数组整体赋值

答案:D

分析:字符数组可以存放字符串,且能通过%s和puts()直接整体输出,当创建好数组后,不能通过赋值运算符直接赋值,不能通过运算符比较,可以通过函数比较大小长度


下列描述中不正确的是( )

A.字符型数组中可以存放字符串

B.可以对字符型数组进行整体输入、输出

C.可以对整型数组进行整体输入、输出

D.不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值

答案:C

分析:字符数组可以存放字符串,且能通过%s和puts()直接整体输出,当创建好数组后,不能通过赋值运算符直接赋值,整数型数组不能整体输出


下列代码片段执行的结果是:

char szTest[] = "ABCDEF";

strncpy(szTest, szTest, 4);

printf("%s", szTest);

        A.ABCD           B. ABCDE                  C. ABCDEF                D. 以上都不对

答案:C

分析:strncoy函数是将前n个值赋给另一个数组,目标数组和操作数组是一个,所以结果还是原数组


以下对字符数组test 赋值方式错误的是( )

A. char test[10]; strcpy(test, "test");

B. char test[10]; test="test";

C. char test[]={'t', 'e', 's', 't’};

D. char test[10]={'t', 'e', 's', ‘t’};

答案:B

分析:A通过函数赋值过去,B创建完字符数组后,不能赋值,C以单字符形式插入,D以单字符形式插入


以下语句不能正确赋值的是( )

A. char *s = "China";

B. char s3[20] = "China";

C. char s2[]={'C', 'h', 'i', 'n', 'a'};

D. char s1[10]; s1="China";

答案:D

分析:A是以指针形式创建,B在创建时可以直接赋值,C以单字符赋值,D创建完数组容器后不能单独赋值


以下程序运行后输出结果是( ) (题目有些许问题,凑合看吧,懒得改了)

main()

{

    char ch[2][5] = {"693", "825"}, p[2][5];

    int i, j, s = 0;

    for(i=0;i<2;i++) p[i]=ch[i];

   

    for(i=0;i<2;i++)

            for(j=0;p[i][j]>='0' && p[i][j]<='9';j+=2)

                s=10*s+p[i][j]-'0';

    printf("%d\n", s);

}

        A.6385   B. 33        C. 693825        D. 22

 答案:A

分析:第一个for循环是将ch数组的值,赋给p数组,第二个for循环是遍历数组行,第二个for循环内嵌套的循环是为了保证字符在 '0' 到 '9' 之间,然后每隔一个字符取一个字符,将其以组合成一个数字


为了比较两个字符串s1和s2是否相等,应当使用( )

A. if(s1 = s2)                                         B. if(s1==s2)

C. if(strcmp(&s1, &s2)==0)                  D. if(strcmp(s1, s2)==0)

答案:D

分析:字符串比大小不能直接用等于号,所以AB错了,C:&s1是s1字符串的地址,输出错误,D是对的


编写一个程序。输入一个字符串,将其逆序后输出? 

//创建字符数组,并通过键盘键入一串字符串
char arr[20];
printf("Enter a string!\n");
gets(arr);

//创建交换容器
int temp;

//再数组头和尾端插旗子,交换旗子位置的值,因为strlen计算出来的值包括了'\0'所以需要减一
int i = 0,j = strlen(arr) - 1;

//当开头的旗子一直再结尾的旗子左边,就交换
while (i < j){
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    i++,j--;
}

//输出数组值
printf("%s\n",arr);

编写一个程序。负责将一个字符串拷贝到另一个字符串,不调用 C++/C 的字符串库函数。

//创建初始字符串数组,并从键盘输入
char arr1[20];
printf("Enter a string!\n");
gets(arr1);

//创建目标数组
char arr2[20];

//创建旗子,交换两个数组中旗帜对应地址的值
int i = 0;

//在遍历到'\0'前会一直交换值
while (arr1[i] != '\0'){
    arr2[i] = arr1[i];
    i++;
}

//手动给字符串结尾
arr2[i] = '\0';

//输出字符串
printf("%s\n",arr2);

编写一个程序。不使用字符串连接函数strcat,实现两个字符串的链接  

//创建初始字符串数组,并从键盘输入
char arr1[20];
printf("Enter a string arr1!\n");
gets(arr1);

//创建数组二并键入需要添加的字符串
char arr2[20];
printf("Enter a string arr2!\n");
gets(arr2);

//创建arr1数组的标记i,arr2数组的标记2
int i = 0,j = 0;

//遍历数组arr1
while (1){

    //当arr1数组的值是'\0'的时候,进入尾插循环
    if(arr1[i] == '\0'){

        //进行尾插,需要把'\0'都给插入进去
        //所以当标记i还是'\0'的时候还需要进行一次插入
        //所以插入完后,上一个位置会是'\0',判断i的上一个位置是'\0'就退出循环
        while (arr1[i - 1] != '\0'){
            arr1[i] = arr2[j];
            j++,i++;
        }

        //然后在跳出遍历数组arr1
        break;
    }
    i++;
}

//打印数组
printf("%s",arr1);

编写一个程序。请实现输入一个字符串,这个字符串字符串包含一个或多个数字,把这些数字字符转换为整数,如果字符串参数包含了非数字字符,置零,不必担心算数溢出

输入:123abc456

输出:printf(“%d\n” , num);  num=123000456 

//创建数组,并通过键盘键入
char arr[10];
printf("Enter a string!\n");
gets(arr);

//创建结果容器
int result;

//创建数组标记i
int i = 0;

//当 i 的位置上的值不是'\0'时,不停便利数组
while (arr[i] != '\0'){

    //当值不在数字字符范围内时,将其变成 '0' 字符
    if(arr[i] < 48 || arr[i] > 58){
        arr[i] = '0';
    }

    //用累加的方法,计算结果,数字字符转数字,可以使用字符减'0'字符即可
    result = result * 10 + (arr[i] - '0');
    i++;
}

//输出结果
printf("%d",result);

编写一个程序。实现输入N个字符串,输出这N个字符串中的最大字符串和最长字符串,可以调用字符串处理函数。

//创建字符串个数容器,并通过键盘键入
int N;
printf("How many string do you want to make?\n");
scanf("%d",&N);

//吸收回车字符
getchar();

//创建N行二维数组,通过循环键入字符串
char arr[N][100];
for (int i = 0; i < N; ++i) {
    printf("%d string:\n",i + 1);
    gets(arr[i]);
}

//创建最大长度数组容器,最大字符数组容器
char max_length[100];
char max_array[100];

//将两个数组初始化为arr[0]
strcpy(max_length,arr[0]);
strcpy(max_array,arr[0]);

//遍历每个字符串
for (int i = 1; i < N; ++i) {

    //当最大长度字符串数组没有arr[i]长度长时,记录arr[i]的值
    if(strlen(max_length) < strlen(arr[i])){
        strcpy(max_length,arr[i]);
    }

    //当最大字符串数组没有arr[i]大时,记录arr[i]的值
    if(strcmp(arr[i],max_array) > 1){
        strcpy(max_array,arr[i]);
    }
}

//输出记录的值
printf("MaxLength : %s MaxArray : %s",max_length,max_array);

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值