计算机科学-第8周 字符串和动态数组 题目及参考解答

《计算机科学》课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597


1、阅读程序

阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解指针的用法
(1)

#include<stdio.h>
int main()
{
    int i;
    for(i='A'; i<'I'; i++,i++)
        printf("%c",i+32);
    printf("\n");
    return 0;
}
你认为运行结果为:_________________
实际运行的结果为:_________________


(2)

#include<stdio.h>
int main()
{
    char ch;
    scanf("%c", &ch);
    while(ch!='\n')
    {
        printf("%c", ch-6);
        scanf("%c", &ch);
    }
    return 0;
}
你认为程序的功能为:_____________,实际运行程序进行体验。

(3)

#include<stdio.h>
#include<string.h>
int main()
{
    char *p1,*p2,str[50]="ABCDEFG";
    p1="abcd";
    p2="efgh";
    strcpy(str+1,p2+1);
    strcpy(str+3,p1+3);
    printf("%s",str);
    return 0;
}
你认为运行结果为:_________________
实际运行的结果为:_________________

(4)

#include <stdio.h>
int main( )
{
    char s[]="abcdefg";
    char *p;
    p=s;
    printf("ch=%c\n",*(p+5));
    return 0;
}
你认为运行结果为:_________________
实际运行的结果为:_________________


2、字符串加密程序

背景:小明让同学传纸条给小丽。小丽接到会心一笑,大家却不知所云。纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u。
(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己“翻译”,原信中每一个字符加密为其后的第4个字符。例,输入I love u,输出M$pszi$y。
参考解答:

#include<stdio.h>
int main()
{
    char s[80], t[80];
    int i;
    gets(s);
    for(i=0; s[i]!='\0'; i++)
    {
        t[i] = s[i]+4;
    }
    t[i] = '\0'; //此时i为?
    printf("%s\n", t);
    return 0;
}

(2)小丽请你写一个程序,在看小明的情书时,让程序帮着“解密”。因为有同学知道了他们俩人的“加密”手段,决定纸条由人传,加密数字(1-9)用两人约好的手势传,所以解密时,需要将加密数字作为程序输入。例,输入M$pszi$y(回车)4,输出I love u
参考解答:
#include<stdio.h>
int main()
{
    char s[80], t[80];
    int i, n;
    printf("输入待解密句子:");
    gets(s);
    printf("输入加密数字:");
    scanf("%d", &n);
    char *pt = t;
    for(i=0; *(s+i)!='\0'; i++,pt++)
    {
        *pt = s[i]-n;
    }
    *pt = '\0';
    printf("%s\n", t);
    return 0;
}

(3)小刚常帮着传纸条,想知道俩人的秘密,但不知道加密数字,于是写了一个程序,可以列出所有可能的情况。例,输入M$pszi$y,多行输出中必然有一行是I love u。你就是小刚,写出这个程序来吧。
参考解答:
#include<stdio.h>
int main()
{
    char s[80], t[80], *pt;
    int i, n;
    printf("输入待解密句子:");
    gets(s);
    for(n=1; n<9; n++)
    {
        pt = t;
        for(i=0; *(s+i)!='\0'; i++,pt++)
        {
            *pt = s[i]-n;
        }
        *pt = '\0';
        printf("%s\n", t);
    }
    return 0;
}

3、字符统计:分别统计字符串中大写、小写字母和数字字符的个数。

#include<stdio.h>
#include<string.h>
int main()
{
    char str[256], *ps;
    int upper=0, lower=0, digit = 0;
    gets(str);
    for ( ps = str; *ps != '\0'; ps++ )
    {
        if ( *ps >= 'A' && *ps <= 'Z' )
            upper++;
        else if  ( *ps >= 'a' && *ps <= 'z' )
            lower++;
        else if ( *ps >= '0' && *ps <= '9' )
            digit++;
    }
    printf("字符串: %s\n", str);
    printf("大写字母: %d\n", upper);
    printf("小写字母: %d\n", lower);
    printf("数字字符: %d\n", digit);
    return 0;
}


4、编程序。将动态数组中的元素进行排序
  编一个程序,输入某班某门课的成绩,进行排序后输出。成绩可能为小数。班级人数不定,要求采用动态数组完成。在下面代码基础上完成
#include<stdio.h>
#include<malloc.h>
int main()
{
    int count, i,j;
    float *pf;
    scanf("%d", &count);   //输入班级人数
    //分配空间,用动态数组存储全班同学成绩
     
    //输入同学们的成绩
     
    //排序


    //输出排序后的成绩


    free(pf);
    return 0;
}
参考解答:
#include<stdio.h>
#include<malloc.h>
int main()
{
    int count, i,j,r;
    float *pf, tmp;
    scanf("%d", &count);   //输入班级人数
    //分配空间,用动态数组存储全班同学成绩
    pf = (float*) malloc( sizeof(float) * count );
    //输入同学们的成绩
    for ( i = 0; i < count; i++ )
    {
        scanf("%f", pf+i);
    }
    //排序
    for(j=count-1; j>0; j--)  //冒泡法
    {
        for(r=0; r<j; r++)
        {
            if(*(pf+r)>*(pf+r+1)) //或pf[r]>pf[r+1],下面*(pf+r)类似
            {
                tmp = *(pf+r);
                *(pf+r) = *(pf+r+1);
                *(pf+r+1) = tmp;
            }
        }
    }
    //输出排序后的成绩
    for ( i = 0; i < count; i++ )
    {
        printf("%f\n", *(pf+i));
    }
    free(pf);
    return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值