C例题测试1

发布时间:2023年12月23日

1.下列对字符串的定义,错误的是(A )。

A)char str[5]=”China”;

B)char str[]=” China”;

C)char *str=” China”;

D)char str[]={‘C’,‘h’,‘i’,‘n’, ‘a’, ‘\0’};

A:“China”里面包含\0所以是6个字符,数组是5,所以错误

?2.判断字符串 s1 与字符串 s2 相等,应当使用:C 。

A) if (s1 = s2)

B) if (strcmp(s1, s2))

C) if (!strcmp(s1, s2))

D) if (strcmp(s1, s2) = 0

?if (!strcmp(s1, s2))?是C语言中的一段代码,用于比较两个字符串s1s2

  • strcmp?是一个标准库函数,用于比较两个字符串。
  • !?是逻辑非运算符,用于取反。

因此,if (!strcmp(s1, s2))?的意思是:如果?s1?和?s2?两个字符串相同,则执行后面的代码块。

这里的?!?用于反转?strcmp?的返回值。如果?strcmp(s1, s2)?返回0(表示两个字符串相同),那么?!strcmp(s1, s2)?的结果就是非0(真),从而执行if语句中的代码块。如果?strcmp(s1, s2)?返回非0(表示两个字符串不同),那么?!strcmp(s1, s2)?的结果就是0(假),不执行if语句中的代码块。

3.若有定义:int a[5]={1,2,3,4,5},*p=a;,则不能表示 a 数组元素的表达式是(C )。

A)*p

B)*a

C)a[5]

D)a[p-a]?

C:表示引用a数组中序号为5的元素

4.?下面程序运行后输出的结果是_____11___________

#include void main()

{ 
    int m=12; 
    if (m-->10)  //在使用m之后,使m值减一,值为11;
    printf("%d",m);  //输出11
    else printf("%d",m++);
}

5.下面程序运行后输出结果是:18

#include <stdio.h>
fun(int b[],int m,int n)
{
    int i,s=0;
    for(i=m;i<n;i++)
        s+=b[i];
    return 0;
}

void main()
{
    int x,a[]={1,2,3,4,5,6,7,8,9};
    x=fun(a,4,7);
    printf("%d\n",x);
}

/*
    m=4,n=7
    1.i=4,s=0+5=5    i=5
    2.i=5,s=5+b[5]=11  i=6
    3.i=6,s=11+b[6]=18 i=7
*/

6.下面程序运行后输出的结果是:9

void main()
{ int i=0,s=0;
    do{
        if(i%2){i++;continue;}
        i++;
        s+=i;
      }while(i<5);
    printf("%d\n",s);    
}


/*
    i=0 s=0 i=1
    i=1 s=1 i=2
    i=3 s=1+3=4 i=4
    i=5 s=4+5=9
*/

是奇数,则增加i并跳出循环其余部分,是偶数,则增加i,并加到s上

if(i%2){i++;continue ;}

如果变量i是奇数,那么增加i的值,并跳出当前循环的剩余部分

?7.以下程序运行后的输出结果是:30,20,10

#include <stdio.h>
void fun(int a,int b,int c)
{
    a=123;
    b=456;
    c=789;
}
void main()
{
    int x=10,y=20,z=30;
    fun(x,y,z);
    printf("%d %d %d\n",z,y,x);
}

函数内部改变参数的值时,只改变了参数的副本的值,而不是原始变量的值

在函数内部,使用指针来访问和修改变量的值?

8.?下面程序运行后输出的结果是:2,1

#include <stdio.h>
void main()
{
    int a,b,c=234;
    a=c/100%9;
    b=(-1)&&(1);
    printf("%d %d\n",a,b);
}

c=234

c/100%9? ? ? ? c/100等于2? ? ? ? 2%9余数为2

b=(-1)&&1? ? ? 在c语言中,非零值视为true,所以b为1?

9.?以下程序的输出结果是:24

#include <stdio.h>
void main()
{
    int a[3][3]={{1,2,3},{3,4,6},{5,6,7}},i.s=0;
    for(i=0;i<3;i++)
        s+=a[i][i]+a[i][3-i-1];
    printf("%d\n",s);
}

分析:

? ? ? ? i=0? ? ? ? a[0][0]=1? ? ? ? a[0][2]=3? ? ? ? s=4

? ? ? ? i=1? ? ? ? a[1][1]=4? ? ? ? a[1][1]=4? ? ? ? s=12

? ? ? ? i=2? ? ? ? a[2][2]=7? ? ? ? a[2][0]=5? ? ? ? s=24?

10.下面的程序是对一维数组的 10 个元素中的前 5 个元素与后 5 个元素对换,即 a[0] 与 a[9]互换,a[1]与 a[8]互换,a[2]与 a[7]互换...请写出代码

#include <stdio.h>
void main()
{
     int a[10],i,t;
     printf("input the data:\n");
     for(i=0;i<10;i++) scanf("%d",&a[i]); //输入一组数据
     for(i=0;i<5;i++) //遍历数组前五个元素
        {
            t=a[i];   //a前五元素赋值给t
            a[i]=a[9-i];    //a后五元素赋值给a前五元素
            a[9-i]=t;       //t前五元素赋值给a后五个
        }
    for(i=0;i<10;i++)       //重新遍历数组
        printf("%6d",a[i]); //输出数组
}

第二个for循环

这个for循环用于交换数组中的元素。具体来说,
它交换了数组的前5个元素和后5个元素的位置。
例如,它会将第0个元素与第9个元素交换,第1个元素与第8个元素交换,
以此类推,直到第4个元素与第5个元素交换。
这里使用了中间变量t来实现交换。

11.以下函数把 b 字符串连接到 a 字符串的后面,并返回 a 中新字符串的长度。

#include <stdio.h>

int strcen(char a[], char b[]) {
	int num = 0, n = 0; 
  /*在函数strcen中,
 使用int num而不是char num是因为我们需要存储的是字符的索引位置,而不是字符本身。
 索引位置是一个整数,因此使用int类型更合适。
 而n用于遍历字符串b,它应该是一个整数类型的变量,以存储每个字符的索引。
 所以,使用char n是不正确的,应该使用int n。*/
	while (*(a + num) != '\0')num++; //找到a的末尾
	while (b[n])
	{	//遍历b
		*(a + num) = b[n]; //复制字符到a
		num++;	//移动到a的下一个位置
		n++;	//移动到b的下一个位置
	}
	*(a + num) = '\0';	//在a的末尾添加空字符
	return num;	//返回复制的字符数(不包含空字符)
}

int main()
{
	char a[100], b[100];
	printf("请输入字符串a:");
	scanf("%s", &a);
	printf("请输入字符串b:");
	scanf("%s", &b);
	int result = strcen(a, b);
	printf("复制后的字符串a为:%s\n", a);
	printf("复制后的字符数为:%d\n", result);
	return 0;
}

如果你在调用函数时没有使用& 符号,但仍然能够输出字符串,那么可能是因为你传递的实际上是一个字符数组,而不是一个字符指针。在这种情况下,你不需要使用& 符号,因为数组名本身就是指向数组第一个元素的指针。例如:
char a[100];
scanf("%s", a);
strcen(a, b);
在上面的代码中,a是一个字符数组,可以直接传递给strcen函数,而不需要使用& 符号。但是,如果你传递的是单个字符,那么就需要使用& 符号来获取该字符的地址。例如:

char c;
scanf("%c", &c);
strcen(&c, b);
在上面的代码中,c是一个字符变量,需要使用& 符号来获取其地址,并将其传递给strcen函数。
?

12?.输入一个字符串,统计其中英文字母、数字、空格以及其他字符的个数,并输出 统计结果。

#include <stdio.h>
void main()
{
    char str[80];
    int i,c=0,d=0,k=0,q=0;
    fget(str,sizeof(str),stdin);
    for(i=0;str[i]!='\0';i++)
        if(str[i]=='\n')
        {
            continue;
        }
        if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')c++;
        else if(str[i]>='0'&&str[i]<='9')d++;
        else if(str[i]==' ')k++;
        else q++;
        printf("Letter is %d\nDigit is %d\nSpace is %d\nOther is %d\n",c,d,k,q);
}

?stdin是标准输入,一般指键盘输入到缓冲区里的东西。

增加了一个条件判断if (str[i] == '\n'),用于检查当前字符是否为换行符。如果是换行符,我们使用continue语句跳过当前迭代,从而忽略换行符。这样就能确保换行符不会被计入“其他字符”的数量(q),从而得到正确的结果。*

?

文章来源:https://blog.csdn.net/nanshenchao/article/details/135172253
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。