实验五 数组及其应用进阶(二)

1.演示复习,引出实验任务

【例】己知一字符数组,数一数数组中大写字母的字符个数。

#include<stdio.h>

#define  n  40 

int  main()

{   char a[n];

       int i,b=0;

       printf("请输入%d个字符",n); 

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

scanf("%c",&a[i]);

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

if(a[i]>='A' && a[i]<='Z')

b++;

printf("数组中大写字母个数为%d\n",b);

return  0;

}

(1)C语言中没有字符串类型,也没有字符串变量,字符串是存放在字符型数组中的。

(2)用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符。

(3) for(i=0;i<n;i++)   

scanf("%c",&a[i]);

这个语句能不能用其他的语句来执行?

2.布置实验任务

用学号姓名班级在桌面上创建一个文件夹,做好的作业存放在这一个文件夹,所有作业内容完成后以文件夹上交。

【任务 1】请输入一个字符串,并原样输出这个字符串。

【任务2】己知一字符数组,数一数数组中大写字母的字符个数。

#include<stdio.h>

#define  n  40 

int  main()

{

       char a[n];

       int i,b=0;

       printf("请输入%d个字符",n); 

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

scanf("%c",&a[i]);

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

if(a[i]>='A' && a[i]<='Z')

b++;

printf( "数组中大写字母个数为%d\n",b);

return  0;

}

【任务3】己知一字符数组,将数组中的大写字母全部转换成小写字母。

#include<stdio.h>

#define  n  10

int main()

{

       char a[n];

       int i;

       printf("请输入%d个字符",n); 

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

              scanf("%c",&a[i]);

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

              if(a[i]>='A' && a[i]<='Z')

                     a[i]=a[i]+32;

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

              printf("%c",a[i]);

    return  0;

}

【任务4】将ss所指字符串中所有下标为奇数位上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4EFg",则应输出"aBc4EFg"。

#include<stdio.h>

int  main()

{

       int i;

       char ss[10];

       scanf("%s",ss);

       for(i=0;ss[i]!='\0';i++)

              if(ss[i]>='a' && ss[i]<='z' && i%2==1)

                     ss[i]=ss[i]-32;

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

    return  0;

}

选作题:

【任务5输入5个学生的学号和姓名,按学生的姓名由小到大顺序进行排序,学号顺序也随之调整。

#include<stdio.h>

#include<string.h>

int  main()

{   int num[5],temp;        //此处temp是交换元素的中间量

char name[5][20];      //注意存放姓名要用二级数组,自已思考

char temp2[20];       //此处temp2是交换一维数组的中间量

int i,j,k;

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

{  printf("请输入学号");

      scanf("%d",&num[i]);

      printf("请输入姓名");

      scanf(“%s”,name[i]);

} //注意两处scanf函数输入的区别

//按学号进行排序

printf("\n请按学号进行排序");

for(j=0;j<4;j++)          //冒泡排序

  for(k=0;k<4-j;k++)

        if(num[k]>num[k+1])

        {

temp=num[k];                //三段交换学号

           num[k]=num[k+1];

           num[k+1]=temp;

           strcpy(temp2,name[k]);         //三段交换姓名

           strcpy(name[k],name[k+1]);

           strcpy(name[k+1],temp2);

}

// 输出排序后的学号和姓名

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

printf("\n%5d%5s\n",num[i],name[i]);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值