算法笔记 codeup c/c++入门(2)

习题7-5 字符串逆序存放

题目描述 写一个函数将一个字符串按反序存放。在主函数中输入一个字符串,通过调用该函数,得到该字符串按反序存放后的字符串,并输出。 输入
一行字符串。 输出 输入字符串反序存放后的字符串。单独占一行。

#include<stdio.h>
#include<string.h>//使用字符串函数时头文件 
int str(char a[20],char b[20])//定义两个字符型数组 
{
	int i, j, k;
	j=strlen(a);//测试字符串长度; 
	i=0;
	k=j-1;
	while(i<j)
	{
		b[k]=a[i];//互换值; 
		i++;
		k--;
	}
	return 0;
	
}
int main()
{
	char c[20];
	char d[20];
	int i,l;
	scanf("%s",c); //另一种方式;如果输入的是字符串,则不需要加地址符,因为在c语言中数组名代表该数组的起始地址; 
	l=strlen(c);//测试字符串长度; 
	str(c,d);//调用函数; 
	for(i=0; i<l; i++)
	{
		
		printf("%c",d[i]);//输出数值; 
	}printf("\n");
	return 0;
}

习题7-7 复制字符串中的元音字母

题目描述
写一个函数,将一个字符串中的元音字母复制到另一个字符串中。在主函数中输入一个字符串,通过调用该函数,得到一个有该字符串中的元音字母组成的一个字符串,并输出。
输入 一个字符串(一行字符)。

输出 该字符串所有元音字母构成的字符串。行尾换行。

#include<stdio.h>
#include<string.h>
void TongJi(char s1[])
{
	int i,j,n=0;
	char s2[100];
	for(i=0,j=0;s1[i]!='\0';i++)
	{
		if((s1[i]=='a')||(s1[i]=='e')||(s1[i]=='i')||(s1[i]=='o')||(s1[i]=='u')||(s1[i]=='A')||(s1[i]=='E')||(s1[i]=='I')||(s1[i]=='O')||(s1[i]=='U'))
		{
			n++;
			s2[j]=s1[i];
			j++;
		}
	}
	s2[j]='\0';
	puts(s2);
}
 
int main()
{
	char s1[100];
	gets(s1);
	TongJi(s1);
	return 0;
}

B: C语言10.2

题目描述 输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。

输入 三个用空格隔开的整数a、b和c。

输出 按先大后小的顺序输出a、b和c,用空格隔开。 请注意行尾输出换行。

#include<stdio.h>
int main(){
    int a,b,c,temp;
    scanf("%d%d%d",&a,&b,&c);
    int* m=&a,* n=&b,* p=&c;
    if(*m>*n){temp=*n;*n=*m;*m=temp;}
    if(*m>*p){temp=*p;*p=*m;*m=temp;}
    if(*n>*p){temp=*p;*p=*n;*n=temp;}
    //注意使用指针把变量交换,指针必须是完整的格式“*+房间名”
    printf("%d %d %d\n",c,b,a);
    return 0;
}

C: C语言10.10

题目描述 给定字符串定义char *a = “I love China!”,读入整数n,输出在进行了a = a +
n这个赋值操作以后字符指针a对应的字符串。

输入 一个整数n,保证0<=n<13.

输出 输出进行了题目描述中赋值操作之后a对应的字符串。 请注意行尾输出换行。

#include<stdio.h>
#include<string.h>
int main(){
    char *a = "I love China!";
    int n;
    scanf("%d",&n);
        if(n >= 0 && n < 13){
            for(int i = n; i < strlen(a); i ++){
                printf("%c",a[i]);//把指针地址名写成数组形式
            }
            printf("\n");
          }
          return 0;
      }

问题 D: C语言10.15

题目描述 输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。

输入 3行,每行一个用字符串。保证每个字符串的长度不超过20。

输出 按从小到大的顺序输出这3个字符串,每个字符串一行。 请注意行尾输出换行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char** a,char** b)
{
    char* temp;
    temp= *a;
    *a= *b;
    *b=temp;
}
 
int main()
{
    char a[20],b[20],c[20];
    scanf("%s%s%s",a,b,c);
    char *p1=a,*p2=b,*p3=c;
    if(strcmp(p1,p2)>0) swap(&p1,&p2);
    if(strcmp(p1,p3)>0) swap(&p1,&p3);
    if(strcmp(p2,p3)>0) swap(&p2,&p3);
    printf("%s\n%s\n%s\n",p1,p2,p3);
    return 0;
}

问题 E: C语言10.16

题目描述
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。

输入 用空格隔开的10个整数。

输出 输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。 请注意行尾输出换行。


 
#include <stdio.h>
//-------------------------------------
int  max_proc(int *p)
{
    int  i;
    int  m, n;
    m = *p;
    n = 0;
    for (i = 1; i < 10; i++)
      if (m < *(p + i))  {m = *(p + i); n = i;}
    return  n;
}
//-------------------------------------
int  min_proc(int *p)
{
    int  i;
    int  m, n;
    m = *p;
    n = 0;
    for (i = 1; i < 10; i++)
      if (m > *(p + i))  {m = *(p + i); n = i;}
    return  n;
}
//-------------------------------------
void change(int p, int q, int *x)
{
    int  temp;
    temp = *(x + 0); *(x + 0) = *(x + q); *(x + q) = temp;
    temp = *(x + 9); *(x + 9) = *(x + p); *(x + p) = temp;
}
//-------------------------------------
int main()
{
    int aa[10] = {0};
    int i;
    int max, min;
 
    for (i = 0; i < 10; i++)   scanf("%d", &aa[i]);
    printf("\n");
 
    printf("befor:\n");
    for (i = 0; i < 10; i++)   printf("%d ", aa[i]);
    printf("\n");
 
    max = max_proc(aa);
    min = min_proc(aa);
    change(max, min, aa);
 
    printf("after:\n");
    for (i = 0; i < 10; i++)   printf("%d ", aa[i]);
    printf("\n");
 
//    printf("max = %d, min = %d\n", *max, *min);
 
    return 0;
}
//-------------------------------------

问题 A: C语言11.1

题目描述
完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。结构体可以定义成如下的格式:
struct person {
char name[20];
int count; }leader[3] = {“Li”, 0, “Zhang”, 0, “Fun”, 0};

输入 第一行有一个整数n,表示以下有n张选票信息将会输入。保证n不大于100。
以后的n行中,每一行包含一个人名,为选票的得票人。保证每一个人名都是Li,Zhang和Fun中的某一个。

输出 有三行,分别为Li,Zhang和Fun每人的得票数。格式为首先输出人名,其后输出一个冒号,最后输出候选人的得票数。
请注意行尾输出换行。

#include <stdio.h>
#include <string.h>
struct Person             //声明结构体
{
	char name[20];
	int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0};   //定义结构体数组并初值化
int main()
{
	int i,j,n;
	char leader_name[20];     //定义字符数组
	scanf("%d\n",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",leader_name);   //选民输入候选人名字
		for(j=0;j<3;j++)
		{
			if(strcmp(leader_name,leader[j].name)==0)    //如果名字对应,则该名字加1
				leader[j].count++;
		}
	}
	for(i=0;i<3;i++)
	{
		printf("%s:%d\n",leader[i].name,leader[i].count);
	}
	return 0;
}

问题 B: C语言11.2

题目描述
定义一个结构体student,存储学生的学号、名字、性别和年龄,读入每个学生的所有信息,保存在结构体中,并输出。结构体student的定义如下:
struct student {
int num;
char name[20];
char sex;
int age; }; 本题要求使用指向结构体数组的指针进行输入和输出。

输入 第一行有一个整数n,表示以下有n个学生的信息将会输入。保证n不大于20。
以后的n行中,每一行包含对应学生的学号、名字、性别和年龄,用空格隔开。保证每一个人名都不包含空格且长度不超过15,性别用M和F两个字符来表示。

输出 有n行,每行输出一个学生的学号、名字、性别和年龄,用空格隔开。 请注意行尾输出换行。

#include<stdio.h>
#include<string.h>
struct student {
    int num;
    char name[20];
    char sex;
    int age;
};

int main(){
    int n;
    scanf("%d", &n);
    student s[10];
    student* p = s;
    for (int i = 0; i < n; i++) {
//scanf("%d%s%c%d", &(p+i)->num, (p+i)->name, &(p+i)->sex, &(p+i)->age);
        scanf("%d", &s[i].num);
        scanf("%s ", s[i].name);//注意这里的空格
        scanf("%c", &s[i].sex);
        scanf("%d", &s[i].age);
    }
    for (int i = 0; i < n; i++) {
        printf("%d %s %c %d\n",(p+i)->num, (p+i)->name, (p+i)->sex, (p+i)->age);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44770248/article/details/89478162