作业9

作业9-1

编写一个函数int add(int n),使用递归算法求1+2+3+…+n,在main函数中 输入n,调用add函数后并输出计算结果。

例如: 输入:10,输出:55

​ 输出:100,输出:5050

#include<stdio.h>

int add(int n){
if(n==1) return n;
else return add(n-1)+n;
}

int main(){
int n;
scanf("%d",&n);
printf("%d",add(n));
return 0;
}

作业9-2

编写一个函数void string_copy(char *f,char *t),功能是将f字符串得到t中, 在main函数中定义两个字符数组char x[100], y[100],输入x字符串,调用string_copy函 数将x字符串复制到y中,输出y字符串。

例如: 输入:12345,输出:12345

​ 输入:abcde,输出:abcde

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

void string_copy(char *f,char *t){
for(int i=0;f[i];i++){
t[i]=f[i];
}
t[i] ='\0';
printf("%s",f);
}

int main(){
char x[100],y[100];
gets(x);
string_copy(x,y);
return 0;
}

作业9-3

编写一个从小到大排序(选择法)函数void sort(char (*p)[10],int n),其中n为 整数个数。在main函数中输入n并输入n个国家英文名称,调用排序函数后输出。

例如: 输入:5 China France Britain Russia America

​ 输出:America Britain China France Russia

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

void sort(char (*p)[10],int n){
char temp[10];
int j,i;
for(i=0;i<n;i++){
int min=i;
for(j=i+1;j<n;j++){
if(strcmp(p[min],p[j])>0){
min=j;
}
}
if(min!=i){
strcpy(temp,p[i]);
strcpy(p[i],p[min]);
strcpy(p[min],temp);
}

}
}

int main(){
int n;
scanf("%d",&n);
char country[10][10];
for(int i=0;i<n;i++){
scanf("%s",country[i]);
}
sort(country,n);
for(int i=0;i<n;i++){
printf("%s ",country[i]);
}
return 0;

作业10

作业10-1

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个 数。

如有n=10个整数:1 2 3 4 5 6 7 8 9 10

若m=4,则后面4个数移到前面,如下:7 8 9 10 1 2 3 4 5 6

试编写一函数void move(int a[],int n,int m)实现以上功能,在main函数中输入n个数和m 的值,调用move函数后,输出调整后的n个数,每个数间用一个空格隔开。

例如: 输入:10

​ 1 2 3 4 5 6 7 8 9 10

​ 4

    输出:7 8 9 10 1 2 3 4 5 6
#include<stdio.h>

void move(int a[],int n,int m){
for(int i=0;i<m;i++){
int temp=a[n-1];
for(int j=n-1;i>0;j--)
a[j]=a[j-1];
a[0]=temp;
}

int main(){
int a[100],n,m;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&m);
move(a, n, m);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}

作业10-2(我做个蛋)

试编写一个摆花函数void flower(char f[][N],int n),函数的功能描述:同学们弄 来了不多于26种花,每种花有多盆。为使有限的鲜花摆放得更美观,同学们决定把花摆成 正方形图案,现在告诉你正方形的边长N(每盆花的直径为一个单位长,1<=N<=99,N为 奇数),请你编程输出花所排成正方形图案(用大写字母代表花)。我们把图案的中心称为第 1圈,中心向外依次是第2圈、第3圈……。中心是字母A,第2圈是字母B,第3圈是字母 C,……,第26圈是字母Z,第27圈又是字母A,第28圈又是字母B,……Z,A,B……。在 main函数中,输入n,调用flower函数后,输出图案,提醒:输出时每个字母前有一个空 格。

例如: 输入:15

H H H H H H H H H H H H H H H

H G G G G G G G G G G G G G H

H G F F F F F F F F F F F G H

H G F E E E E E E E E E F G H

H G F E D D D D D D D E F G H

H G F E D C C C C C D E F G H

H G F E D C B B B C D E F G H

H G F E D C B A B C D E F G H

H G F E D C B B B C D E F G H

H G F E D C C C C C D E F G H

H G F E D D D D D D D E F G H

H G F E E E E E E E E E F G H

H G F F F F F F F F F F F G H

H G G G G G G G G G G G G G H

H H H H H H H H H H H H H H H

#include <stdio.h>
#define N 99

void flower(char f[][N], int n) {
int mid = n/2;
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++) {
int dist = (i<mid?mid - i:i-mid)>(j<mid?mid-j:j-mid)?(i<mid?mid - i:i-mid):(j<mid?mid-j:j-mid);
f[i][j] ='A'+dist%26;
}
}
}

int main() {
int n;
char f[N][N];
scanf("%d",&n);
flower(f, n);
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++) {
printf(" %c",f[i][j]);
}
printf("\n");
}
return 0;
}

作业11

作业11-1

有n个学生,每个学生的数据包括姓名(10个字符)、出生日期(年-月-日), 编写程序,功能是在main函数中输入n个学生信息,调用void sort(struct student stu[],int n)函数(按姓名从小到大排序)排序以后仍在main()中输出排序后的n个学生信息。输出时 姓名和出生日期间用一个空格隔开,出生日期的输入输出格式为:yyyy-mm-dd。

例如: 输入:2

​ zhangsan

​ 2004-2-10

​ lisi

​ 2003-11-20

​ 输出:lisi 2003-11-20

​ zhangsan 2004-2-10

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

struct student {
char name[11];
char birthdate[11];
};

void sort(struct student stu[], int n) {
struct student temp;
for (int i=0; i<n-1;i++) {
for (int j=i+1; j<n;j++) {
if (strcmp(stu[i].name, stu[j].name) > 0) {
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}

int main() {
int n;
scanf("%d", &n);
struct student stu[n];
for (int i = 0; i < n; i++) {
scanf("%s", stu[i].name);
scanf("%s", stu[i].birthdate);
}
sort(stu, n);
for (int i=0; i<n;i++) {
printf("%s %s\n",stu[i].name, stu[i].birthdate);
}

return 0;
}

作业11-1

功能是使用尾插法创建一个带有头结点的链表并输出。要求:先 定义一个结构体,每个结点包含书号(10个字符)、书名(20个字符,不含空格)和价格 (float型)等信息;然后编写一函数struct book *CreateLink()用于创建指定个数(个数n由 键盘输入)的链表和函数void PrintLink(struct book *h)用于输出链表信息;最后在main中 调用CreateLink和PrintLink函数。输入输出时每个数据间用一个空格隔开,价格的小数保 留2位。例如: 输入:2

​ 00001 yuwen 18.20

​ 00002 shuxue 21.59

​ 输出:00001 yuwen 18.20

​ 00002 shuxue 21.59

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

struct book {
char book_id[11];
char book_name[21];
float price;
struct book *next;
};

struct book *CreateLink(int n) {
struct book *head=(struct book *)malloc(sizeof(struct book));
head->next = NULL;
struct book *tail=head;

for (int i=0; i<n;i++) {
struct book *new_node=(struct book *)malloc(sizeof(struct book));
scanf("%s %s %f",new_node->book_id,new_node->book_name,&new_node->price);
new_node->next=NULL;
tail->next=new_node;
tail=new_node;
}
return head;
}

void PrintLink(struct book *head) {
struct book *current=head->next;
while (current!=NULL) {
printf("%s %s %.2f\n",current->book_id,current->book_name,current->price);
current=current->next;
}
}

int main() {
int n;
scanf("%d",&n);
struct book *head=CreateLink(n);
PrintLink(head);
return 0;
}