C语言练习题

时间:2021-12-10 12:19:10

8编写一个程序,将字符串Str2中的全部字符复制到字符串Str1中。要求:不能使用strcpy函数。(12分)

#include<stdio.h>

#defineMAXLEN 20

 

//假设str2的长度不超过str1的长度

voidstrcopy(char *str1,char *str2)

{

inti=0,j=0;

while(str2[i])

str1[j++]= str2[i++];

str1[j]='\0';

}

 

intmain()

{

chara[MAXLEN];

charb[MAXLEN];

printf("输入字符串Str1:");

scanf("%s",a);

printf("输入字符串Str2:");

scanf("%s",b);

strcopy(a,b);

printf("Str1:%s",a);

 

return0;

}

 

 

 

 

 

 

 

 

 

 

 

93(20分)从键盘输入某班20个学生的成绩,统计不及格学生的人数。然后将这20个学生的成绩用选择排序法 来进行排序(以从低到高的顺序)。 

要求按如下函数原型进行编程,分别统计不及格学生的人数和排序功能。

int CountFail(int score[], int n); (6分)

    void SelectionSort(intscore[], int n);  (8分)

在main函数中调用以上函数,并输出结果。 (6分)

#include<stdio.h>

intCountFail(int score[], int n);

voidSelectionSort(int score[], int n);

 

intmain()

{

intgrades[20];

printf("请依次输入20个学生的成绩:\n");

for(inti=0;i<20;i++)

scanf("%d",&(grades[i]));

printf("不及格学生人数:%d\n",CountFail(grades,sizeof(grades)/sizeof(grades[0])));

SelectionSort(grades,sizeof(grades)/sizeof(grades[0]));

for(inti=0;i<sizeof(grades)/sizeof(grades[0]);i++)

printf("%d\t",grades[i]);

return0;

}

 

 

intCountFail(int score[], int n)

{

intcnt = 0,i;

for(i=0;i<n;i++)

if(score[i]<60)

cnt++;

returncnt;

}

 

 

voidSelectionSort(int score[], int n)

{

intmin,tmp,i,j;

for(i=0;i<n;i++){

min= i;

for(j=i+1;j<n;j++){

if(score[j]<score[min])

min= j;

}

tmp  = score[min];

score[min]= score[i];

score[i]= tmp;

}

}

 

10. (20分)利用结构体变量记录某公司每个职工的姓名、年龄、编号和性别。先根据用户的输入建立一个结构体数组来存放职工的信息,然后输出各个职工的信息:

(1)对职工的编号按升序进行排序,并将排序后的职工信息写入到文件employee.txt文件中;(10分)

(2)按职工编号检索职工信息,如果找到,则输出该职工相关信息,否则输出“Don’t find the corresponding message!”。(10分)
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

struct employee{

         charname[10];

         intage;

         intid;

         intsex;

};

 

 

void employee_sort(struct employeepersons[], int n)

{

         intmin;

         structemployee tmp;

         for(inti=0;i<n;i++){

                   min= i;

                   for(intj=i+1;j<n;j++){

                            if(persons[j].id<persons[min].id)

                                     min= j;

                   }

                  

                   structemployee tmp;

                   memcpy(&tmp,persons+min,sizeof(structemployee));

                   memcpy(persons+min,persons+i,sizeof(structemployee));

                   memcpy(persons+i,&tmp,sizeof(structemployee));

         }

         FILE*fp = fopen("employee.txt","a");   

         for(intk=0;k<n;k++){

                   fprintf(fp,"%s%d %d %d\n",persons[k].name,persons[k].age,persons[k].id,persons[k].sex);

         }       

         fclose(fp);

}

 

void employee_search(struct employeepersons[],int n,int id)

{

                   intflag = 1;

                   for(intk=0;k<n;k++)

                            if(persons[k].id==id){

                                     printf("%s%d %d %d\n",persons[k].name,persons[k].age,persons[k].id,persons[k].sex);                               

                                     flag= 0;

                            }

                   if(flag)

                            printf("Don’tfind the corresponding message!");

}

 

int main()

{

         intnumber;

         printf("输入员工数:");

         scanf("%d",&number);

         printf("输入每个员工的信息:姓名 年龄 编号 性别(1表示男0表示女)\n");

         structemployee *persons = (struct employee *)malloc(sizeof(struct employee)*number);

         for(inti=0;i<number;i++){

                   scanf("%s",&persons[i].name);

                   scanf("%d%d%d",&persons[i].age,&persons[i].id,&persons[i].sex);

         }

        

         employee_sort(persons,number);

        

         intid;

         printf("输入要查找的员工编号:");

         scanf("%d",&id);

         employee_search(persons,number,id);

        

        

         return0;

        

        

 

}