#include <stdio.h> #include <stdlib.h> #include<string.h> #define N 10 void fun(char c,char a[ ]) { int i; char min=0; a[min]=a[0]; for(i=1;a[i]!='\0';i++) { if(a[i]<a[min]) min=i; } a[min+1]=c; for(i=strlen(a);i>min+1;i--) a[i]=a[i-1]; } int main() { char a[100],c; scanf("%c%s",&c,a); fun(c,a); puts(a); system("pause"); return 0; }这个有什么错误吗
时间: 2023-06-18 15:04:44 浏览: 319
这个程序存在一些问题:
1. 在读取输入时,应该使用 `%s%c` 而不是 `%c%s`,因为 `%c` 会将空格和换行符也读入,而 `%s` 只会读取非空格和非换行符的字符。
2. 函数 `fun` 中的 `a[min]=a[0]` 是多余的,因为 `a[0]` 的值不会改变。
3. 在插入新字符时,应该先将字符串末尾的 '\0' 向后移动一位,然后再将新字符插入到指定位置。
下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
void fun(char c, char a[])
{
int i;
char min = 0;
for (i = 1; a[i] != '\0'; i++)
{
if (a[i] < a[min])
min = i;
}
for (i = strlen(a); i > min; i--)
{
a[i] = a[i-1];
}
a[min] = c;
}
int main()
{
char a[100], c;
scanf("%s%c", a, &c);
fun(c, a);
puts(a);
system("pause");
return 0;
}
```
相关问题
#include<stdio.h> #include<stdlib.h> #define N 100 void menu(void); void fun(void(*p)(void)); void fun1(void); void fun2(void); void fun3(void); void fun4(void); struct student{ int id; char name[10]; char gender[5]; float score; }; int count = 0; struct student stu[N]; int main(void) { int input_num; struct student stu[N]; while(1){ menu(); printf("请输入:"); scanf("%d",&input_num); if (1 == input_num || 2 == input_num || 3 == input_num || 4 == input_num || 5 == input_num) switch (input_num) { case 1: fun(fun1); break; case 2: fun(fun2); break; case 3: fun(fun3); break; // case 4: // fun(fun4); case 5: printf("感谢使用\n"); exit(0); break; } else printf("输入错误\n"); } return 0; } void fun1(void) { // char s[5]; printf("请输入学生信息(学号、姓名、性别、成绩\n"); //while(scanf("%s",s) != EOF){ scanf("%d%s%s%f",&stu[count].id,stu[count].name,stu[count].gender,&stu[count].score); count++; // } } void fun2(void) { int i; for(i=0;i<count;i++) printf("学号:%d 姓名:%s 性别:%s 成绩:%f\n",stu[i].id, stu[i].name, stu[i].gender, stu[i].score); } void fun3(void) { int seek_num,i; printf("请输入学号\n"); scanf("%d",&seek_num); for(i=0;i<count;i++) { if(stu[i].id == seek_num) printf("本次搜索学生的信息如下\n学号:%d 姓名:%s 性别:%s 成绩:%f\n",stu[i].id, stu[i].name, stu[i].gender, stu[i].score); } } void fun4(void) { int del_id,i=0; struct student * del_p = stu; struct student * new_p = stu; printf("请输入要删除的学生的学号"); scanf("%d",&del_id); while (i < count) { if(del_p->id == del_id) { del_p++; i++; } new_p->id = del_p->id; new_p->name = del_p->name; new_p->gender = del_p->gender; new_p->score = del_p->score; i++; del_p++; new_p++; } } void fun(void(*p)(void)) { p(); } void menu(void) { printf("|====================================|\n"); printf("| 学 生 管 理 系 统 |\n"); printf("|====================================|\n"); printf("| 1.录入学生信息 |\n"); printf("| 2.查询已录入学生信息 |\n"); printf("| 3.搜索学生信息 |\n"); printf("| 4.删除学生信息 |\n"); printf("| 5.退出程序 |\n"); printf("|====================================|\n"); }里面的name怎么改
可以使用strcpy函数将一个字符串复制到另一个字符串数组中。例如,在fun4函数中,将下面这句:
```
new_p->name = del_p->name;
```
改为:
```
strcpy(new_p->name, del_p->name);
```
这样就可以将del_p指向的结构体中的name数组的值复制到new_p指向的结构体中的name数组中。需要注意的是,strcpy函数需要包含头文件string.h。
大在考生文件夹下的给定程序modi175.c中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺宇找出前m(m$10/名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
好的,让我来解答这个问题。根据你提供的信息,函数fun的功能是对N名学生的学习成绩进行排序,找出前m(m$\leq$N/10)名学生,并将这些学生的数据存放在一个动态分配的连续存储区中,最后将存储区的首地址作为函数值返回。
具体实现过程如下:
1. 定义结构体Student,包含学生姓名name和学生成绩score两个成员。
2. 定义一个指针数组stu,用于存储N个学生的数据,每个元素都是一个指向结构体Student的指针。
3. 动态分配一个大小为m的结构体Student数组,用于存储前m名学生的数据。
4. 使用快排等排序算法,对N个学生的成绩按从高到低排序。
5. 将前m名学生的数据复制到动态分配的数组中。
6. 返回动态分配数组的首地址。
代码实现可以参考以下示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct {
char name[20];
int score;
} Student;
int cmp(const void *a, const void *b) {
return ((Student *)b)->score - ((Student *)a)->score;
}
int *fun(Student **stu, int n, int m) {
qsort(stu, n, sizeof(Student *), cmp);
Student *result = (Student *)malloc(m * sizeof(Student));
memcpy(result, *stu, m * sizeof(Student));
return (int *)result;
}
int main() {
Student *stu[N];
int n, m;
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入要找出的前几名学生:");
scanf("%d", &m);
printf("请依次输入每个学生的姓名和成绩:\n");
for (int i = 0; i < n; i++) {
stu[i] = (Student *)malloc(sizeof(Student));
scanf("%s%d", stu[i]->name, &stu[i]->score);
}
int *result = fun(stu, n, m);
printf("前%d名学生的成绩如下:\n", m);
for (int i = 0; i < m; i++) {
printf("%s %d\n", result[i].name, result[i].score);
}
free(result);
for (int i = 0; i < n; i++) {
free(stu[i]);
}
return 0;
}
```
阅读全文