习题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;
}