作业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; }
|