第二次作业
6-7 删除字符串中数字字符
(1)算法
定义字符数组item,输入字符串给字符数组item。调用delnum函数,在delnum函数中定义循环变量i和j,使i和j等于0,用for循环表达式(s+i)!='\0',若(s+i)不是数字那就执行(s+j)=(s+i)j++,否则都不执行,最后i++,*(s+j)='\0'最后输出字符串item。
(2)流程图:
实验代码:
[](javascript:void(0)😉
void delnum(char *s)
{
char *a=s;
int i;
for(i=0;a[i]!='\0';i++){
if((a[i]<'0') ||( a[i]>'9'))
{
*s=a[i];
s++;
}
}
*s='\0';
}
[](javascript:void(0)😉
碰到问题及解决办法:
错误:编译出错
原因:if语句判断条件中字符没有加单引号
改正:数字字符一定要加单引号。
6-8 统计子串在母串出现的次数
(1)算法:
定义字符数组str[81]=asdasasdfgasdaszx67asdmklo,substr[4]=asd,定义整型n的值为函数fun,在fun函数中定义变量i和count,领i和count等于零,for循环判断条件(str+i)!='\0',如果(str+i)*(substr)成立,而且(str+i+1)(substr+1),(str+i+2)==*(substr+2)都成立,count++;否则都不执行,i++输出n;
实验代码:
[](javascript:void(0)😉
int fun(char *str,char *substr)
{
int i;
int n=0;
for(i=0;str[i]!='\0';i++){
if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
n++;
}
return n;
}
[](javascript:void(0)😉
3.没有问题:
6-9 字符串中除首尾字符外的其余字符按降序排列
(1)算法:
定义字符数组s[10],输入字符串给s[10],调用fun函数,在fun函数中对数组除了首尾元素外进行选择排序,并且从大到小排序,输出s字符串,
实验代码:
[](javascript:void(0)😉
int fun(char *s,int num)
{
int i,j,temp;
for(i=1;i<num-2;i++)
for(j=1;j<num-1-i;j++)
{
if(s[j]<s[j+1])
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
[](javascript:void(0)😉
3.3.没碰到问题:
C高级第二次PTA作业(2)
7-1 计算职工工资
(1)算法:
定义结构变量,结构体名为wage,结构体中成员为指针数组name[10]和浮点型数字base_pay,floating_wage,expend,net_payroll,主函数中定义整型变量N,i,读入一个数字给N。声明结构体变量名,结构体变量名是salary[N];领i=0,用for循环对结构体变量进行赋值,并求出结构体变量中的salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend领i=0,用for循环输出每一位职员姓名和实发工资并且输出salary[i].name,salary[i].net_payroll。
(2)流程图
2.实验代码:
[](javascript:void(0)😉
#include <stdio.h>
struct salary{
char name[10];
float basic;
float change;
float disbursement;
float real;
};
int main()
{
int n,i;
scanf("%d",&n);
struct salary a[n];
for(i=0;i<n;i++){
scanf("%s %f %f %f",a[i].name,&a[i].basic,&a[i].change,&a[i].disbursement);
}
for(i=0;i<n;i++){
a[i].real = a[i].basic + a[i].change - a[i].disbursement;
}
for(i=0;i<n;i++){
printf("%s %.2f\n",a[i].name,a[i].real);}
}
[](javascript:void(0)😉
3.碰到问题及解决办法:
错误:
原因:循环变量i的初值为1,条件为i<=N;使结构体变量数组越界
改正方法:i的初值为0,条件为i<N;
7-2 计算平均成绩
(1)算法:
定义体结构体名称information,在结构体变量中有字符数组num[6]和name[11],还有整型变量grade,主函数定义变量i和n,定义浮点型数average,整型数sum,average和sum初始值为0,读入一个给n。声明结构体变量名为数组information massage[n]。领i=0,用for循环条件为i<n,对结构体变量名information massage[i]赋值。求sum=sum+massage[i].grade,求average=um*1.0/n,最后输出average。领i=0,用for循环,判断条件是i<n,最后输出
2.实验代码:
[](javascript:void(0)😉
#include <stdio.h>
struct student{
char num[6];
char name[11];
int grade;
};
int main(){
int n, i,sum=0;
float average;
scanf("%d",&n);
struct student a[n];
for(i=0;i<n;i++){
scanf("%s %s %d",a[i].num,a[i].name,&a[i].grade);
}
for(i=0;i<n;i++){
sum+=a[i].grade;
}
average = sum/n;
printf("%.2f\n",average);
for(i=0;i<n;i++){
if(a[i].grade<average){
printf("%s %s\n",a[i].name,a[i].num);
}
}
}
[](javascript:void(0)😉
没有错误
C高级PTA作业(3)
6-1 按等级统计学生成绩
(1)算法:
定义结构体类型变量,名为student的结构体,结构体中包括整型num,字符数组name[20],字符型grade,整型score。定义结构体变量名是stu[10],*ptr。定义整型n,i,count,ptr=stu,读入一个数赋给n。另i=0,借助for循环对stu[i]进行赋值,条件是i<n。调用函数set_grade,将函数返回值赋给count。
在set_grade函数中,定义变量i,q,i,另q和i等于零,借助for循环p->score是否< 60,成立q++,否则都不执行,for循环判断p->score是什么等级,将等级赋给p->grade,返回q值,输出分数小于六十的人个数,输出每个人的学号,姓名和等级。
2实验代码:
[](javascript:void(0)😉
int set_grade( struct student *p, int n )
{
int cnt=0,i;
for(i=0;i<n;i++,p++)
{
if((p->score)>=85)
{
p->grade='A';
}
if((p->score)<85&&(p->score)>=70)
{
p->grade='B';
}
if((p->score)<=69&&(p->score)>=60)
{
p->grade='C';
}
if((p->score)<60)
{
p->grade='D';
cnt++;
}
}
return cnt;
}
[](javascript:void(0)😉
3.没有碰到问题:
6-2 结构体数组按总分排序
(1)算法:
定义结构体变量,名为的student结构体,结构体包括整型num,,浮点型数组score[3],字符数组name[15],,浮点型sum。在主函数上定义结构体变量stu[5],整型变量i,j,浮点型数字f,另i=0,借助for循环给结构体变量stu[5]赋值,调用函数calc,在函数calc中定义整型i=0,借助for循环求(p+i)->sum值,(p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2],调用函数sort,在sort函数中定义整型i,t,j,定义结构体变量temp,用选择排序法按总分从高到低进行排序,输出所有成员的学号,姓名,各科的分数,总分。
2.实验代码:
[](javascript:void(0)😉
void calc(struct student *p,int n)
{
int i;
for(i=0; i<n; i++)
{
(p+i)->sum = (p+i)->score[0] + (p+i)->score[1] +(p+i)->score[2];
}
}
void sort(struct student *p,int n)
{
struct student t;
int i,j;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-i-1; j++)
{
if((p+j) -> sum < (p+j+1) -> sum)//((p+j)->sum < (p+j+1)->sum)
{
t = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = t;
}
}
}
}
[](javascript:void(0)😉
3.碰到问题及解决办法:
1,停止运行
原因:在交换的时候由于马虎将代码打错了
修改方法:将temp=(p+i);(p+i)=(p+j);(p+j)=temp;改成temp=(p+i);(p+i)=(p+t);(p+t)=temp;