指针,结构体(错题题目集)

1.

char s[ ] = "language", *p = s;

while( *p++ != 'u') {
    printf("%c", *p – 'a' + 'A');
}

A.LANGUAGE

B.ANGU

C.LANGU

D.LANG

解释:p指向字符串首地址,while判断p指向的字符是否为'u',如果是'u'则循环结束,然后将字符转换为大写字符
这里的一个关键问题是,while中* p++ != ‘u',是先判断 * p != 'u',然后p++,因此判断字符l!='u'后,p接着就指向了下一个字符'a',因此printf输出的是'A',当p指向字符'g'时,也不等于'u',然后p指向下一个字符'u',因此会输出'U'
最终输出的字符是"ANGU"

2.

对于以下结构定义,++p->str中的++加在()。

struct {
   int len; 
   char *str; 
} *p;

A.指针str

B.指针p

C.str指向的内容上

D.语法错误

解释:这里的->优先级高于++,所以++p->str 就相等于++(p->str),由于str是指向char类型的指针,所以++加在了指针strs 上。

3.对于以下结构定义,(*p)->str++中的++加在()。

struct { 
  int len; 
  char *str
} *p;

A.指针str

B.指针p

C.str指向的内容上

D.语法错误

解释:指针类型在调用其成员的时候才用-> 而*p已经是正常的结构体类型了,所以用.才对

4.

struct stu{
  int x; 
  int *y;
} *p;
int dt[4] = {10, 20, 30, 40};
struct stu a[4] = {50, &dt[0], 60, &dt[1], 70, &dt[2], 80, &dt[3]};

int main( )
{ 
   p=a;
   printf("%d,", ++p->x);
   printf("%d,", (++p)->x);
   printf("%d", ++(*p->y));
     
   return 0;
}

A.10,20,20

B.50,60,21

C.51,60,21

D.60,70,31

解释:先看第一个输出,++p->x,因为->的优先级高于++,所以先++(p->x)是访问的数组a中的第0个元素中的x,所以++p->x的值为51.

第二个输出:(++p)->x,()优先级高,所以p指向的地址a下移一位,即a[1],访问结构体a[1]中的成员x,即60.

第三个输出:++(*p->y),*p->y,此时的p指向的是a[1],访问结构体a[1]中的成员y,即20,但是还要++,最后结果为21。

5.

写出下面程序段的运行结果 10,41,70

struct table {
   int x, y;         
}a[4]={{10, 20}, {30, 40}, {50, 60}, {70, 80}};
struct table *p = a;

printf("%d,", p++->x);   /* 以下输出数据之间没有空格分隔 */
printf("%d,", ++p->y);
printf("%d", (a+3)->x);  

解释:第一个输出:因为->的优先级高,所以应写为:p->x输出,10,然后p++指向数组a的下一个元素

第二个输出:同理,p->y是40,++后的值是41.

第三个输出:a+3即a[3].x,为70.

6.程序填空题

先消除输入字符串s的前后空格,再判断其是否为“回文”(即字符串正读和倒读都是一样的),若是则输出YES,否则输出NO。

#include<stdio.h>
#include<string.h>
int main(void)
{
    char ch, s[80], *p, *q;
    int i, j, n;
    
    gets(s);
    p =s;
    while ( *p == ' '){
     p++;   //如果数组s的第一个字符是空格,则指针p向后移一位。
    }
    n = strlen(s);
    q = s+n-1;
    while ( *q == ' '){
     q--;   //指针q是指向的数组s的最后一个元素(不是‘\0’,因为n-1了),q--指向后面非空格的字符
    }
    while ( p<=q&& *p ==*q){
        p++;     //p与q分别从前往后,从后往前比较元素是否相等
        q--;
    }
    if ( p<q ){
        printf("NO\n");
    }else{
        printf("YES\n");
    }
    
        return 0;
}

7.函数insert()的功能是在一维数组 a 中将 x 插入到下标为 i(i>=0) 的元素前,如果 i>= 元素个数,则x插入到末尾。元素个数存放在指针 n 所指向的变量中,插入后元素个数加1。

#include <stdio.h>

void insert(int a[ ], int *n, int x, int i)
{
    int j;
        
    if (i<*n){
        for(j = *n-1;i<=j; j--){ //从后向前遍历数组,碰到要插入的下标后停止。
             a[j+1]= a[j];
        }
    }else{
        i = *n;
    }
    a[i]= x ;
    (*n)++;
}
    
int main()
{
    int a[100], x, i, n;
        
    scanf("%d", &n);
    for(i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    scanf("%d%d", &x, &i);
    insert(a, &n, x, i);
    for(i = 0; i < n; i++){
        printf("%d " , a[i]);
    }
    printf("\n");
        
    return 0;
}

8. 只要将多个指针作为函数的参数,函数就一定会返回多个值。F

解释:函数是否会返回多个值依据题目需要是否返回。

9.

#include <stdio.h>
int main()
{
char sa[ ] = "array";
char *s = NULL ;
scanf("%s",s);
printf("%s\n ", s); 

return 0;

一开始字符指针指向了空,如果要输入字符来对字符来对s进行赋值,是不能进行的。

10.

6-1 两个字符串穿插 (5 分)

本题要实现的程序功能是:
  ①从键盘上先后读入两个不超过32个字符的字符串,存储在字符数组str1和str2中。②将字符串str2插入字符串str1中,在屏幕上输出新生成的str1。

函数接口定义:

void conj(char *s1, char *s2);

 裁判测试程序样例:


#include <stdio.h>
#include <string.h>

#define N 32

void conj(char *s1, char *s2);

int main(void)
{
    char str1[N * 2], str2[N];

    gets(str1);
    
    gets(str2);

    conj(str1, str2);
    
    printf("After conj string1:%s\n", str1);

    return 0;
}

/* 请在这里填写答案 */

 

输入样例:

在这里给出一组输入。例如:

123456789
abcdefghijklmn

输出样例:

在这里给出相应的输出。例如:

After conj string1:1a2b3c4d5e6f7g8h9ijklmn

 代码如下:

void conj(char *s1, char *s2)
{
int i=0,j=0,k=0;
int l1=strlen(s1);
int l2=strlen(s2);
char s[100];
while((i<l1)&&(i<l2))
{
   s[k++]=s1[i++];
   s[k++]=s2[j++];
}
while(i<l1)
s[k++]=s1[i++];
while(j<l2)
s[k++]=s2[j++];
s[k]='\0';
strcpy(s1,s);
}

如果你有什么疑问,请在评论区下留言,多多支持哦

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: 可以使用以下代码实现: s = input().strip() # 去除前后空格 if s == s[::-1]: # 判断是否回文 print("yes") else: print("no") ### 回答2: 回文字符串是一种非常特殊的字符串,它的正序和序都是一样的。对于一个字符串s,首需要消除它的前后空格才能确定其真实的内容。这很容易做到,只需要使用strip()函数即可去除前后空格,这个函数会返回一个新的字符串,而不是改变现有的字符串。接着,可以通过将字符串s和它的逆序字符串s[::-1]进行比较,来判断是否回文字符串。如果两个字符串相等,则它是回文字符串,否则就不是。 具体实现如下: ```python s=input("请输入一个字符串:") s=s.strip() # 去除前后空格 if s==s[::-1]: # 判断是否回文字符串 print("yes") else: print("no") ``` 这段代码首通过input()函数获取一个字符串s,然后使用strip()函数去除字符串s的前后空格,将其赋值给s。接着,判断字符串s和它的逆序字符串s[::-1]是否相等。如果相等,说明字符串s是回文字符串,输出"yes";否则,说明字符串s不是回文字符串,输出"no"。 ### 回答3: 题目中提到了输入字符串s,这意味着我们需要从用户处获取一个字符串,可以使用input()函数实现这一步。接下来,我们需要将字符串s的前后空格去掉,去空格的方法有很多种,常见的有lstrip()、rstrip()和strip()。这里我们可以采用strip(),因为它能够同时去掉字符串开头和结尾上的空格。 首,我们可以使用if语句判断输入的字符串是否为空,如果为空,则直接输出no。否则,使用strip()函数去掉字符串的前后空格,并将结果保存到一个新的变量中。接着,我们需要判断字符串是否为“回文”。 判断字符串是否为“回文”,可以采用字符串反转的方法,在Python中,字符串反转可以使用[::-1]实现。反转字符串之后,与原字符串进行比较,如果相同,则说明该字符串是“回文”,否则不是。 因此,我们可以编写以下Python程序实现输入字符串s的前后空格消除和“回文判断: ```python # 获取输入字符串 s s = input("请输入字符串:") # 判断字符串是否为空 if not s: print("no") else: # 去掉字符串前后空格,赋值给新变量 ss ss = s.strip() # 判断 ss 是否回文 if ss == ss[::-1]: print("yes") else: print("no") ``` 以上就是一个简单的Python程序,可以实现输入字符串s的前后空格消除和“回文判断。在具体应用中,还需要考虑异常处理、优化程序等方面的问题,希望对于您编写更加完善的程序有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值