- 删除字符串中数字字符:
设计思路:首先定义一个数组,然后写入数组,引用函数,输出。定义一个指针p并将s赋给p,用一个for循环遍历字符串,并在其中用一个if语句判断是否是数字,如果是 p++=*s ,循环过后将最后一个赋上‘\0’;
`
#include
void delnum(char *s);
int main ()
{ char item[80];
gets(item);
delnum(item);
printf("%s\n",item);
return 0;
}
void delnum(char *s)
{
char *p = s;
for(;*s;s++)
{
if ( *s >'9' || *s < '0' )
*p++=*s ;
}
*p='\0';
}
2 统计子串在母串出现的次数 1.设计思路:通过题目给出的字符串,使用双重for循环遍历数组,从循环中先找出相同的字符串,再判断出现次数。 代码:
#include
int fun(char str,char substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
int n;
n=fun(str,substr);
printf("n=%d\n",n);
return 0;
}
/* int fun(char *str,char *substr)
{
int n=0,i;
for(i = 0;*(str + i) != '\0';i++){
if(*(str + i) == 'a'&&*(str+i+1) == 's' && *(str + i + 2) == 'd'){
n++;
}
}
return n;
} */
int fun(char *str,char *substr)
{
int count = 0;
char *p=str,*ps= substr;
for(;*p != '\0';p++){
ps = substr;
if(*ps == *p){
while(*p == *ps){
if(*p == *ps){
p++;
ps++;
}else break;
}
}
if(*p == '\0'){
count ++;
}
}
return count;
}
3. 字符串中除首尾字符外的其余字符按降序排列 .设计思路: 先定义字符数组s,写入字符串,引用函数,输出排序后所得的字符串。用一个for循环表示循环的趟数,由于只需要排出排除首尾的顺序所以只需要循环num-3次,在此循环下再用一次循环进行排序,并且只需要排出从第二个到num-j-2个数的顺序。 实验代码:
include
int fun(char str,char substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
int n;
n=fun(str,substr);
printf("n=%d\n",n);
return 0;
}
/* int fun(char str,char substr)
{
int n=0,i;
for(i = 0;(str + i) != '\0';i++){
if((str + i) == 'a'&&(str+i+1) == 's' && (str + i + 2) == 'd'){
n++;
}
}
return n;
} */
int fun(char str,char substr)
{
int count = 0;
char p=str,ps= substr;
for(;p != '\0';p++){
ps = substr;
if(ps == p){
while(p == ps){
if(p == *ps){
p++;
ps++;
}else break;
}
}
if(*p == '\0'){
count ++;
}
}
return count;
}
`
输出学生成绩:
设计思路:
输入数字个数n,动态存储分配。用for语句进行输入数据,并计算和,for语句结束后计算出平均值。令最大,最小值等于第0个数,遍历所有数据,并在其中用两个if语句判断出最大值和最小值并记录。输出最大最小值和平均数。
实验代码:`include
int main()
{
int *p,i,sum = 0,max,min,n;
double avg;
scanf("%d",&n);
if((p=(int*)calloc(n,sizeof(int)))==NULL){
exit(1);
}
for(i=0;i max){
max = *(p+i);
}
if(*(p + i) < min){
min = *(p+i);
}
}
printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,(double)max,(double)min);
free(p);
}
5.计算职工工资 1.设计思路:首先定义结构体变量,然后输入,引用结构体变量,使用循环输出各项。 2.实验代码:
#include
typedef struct work
{
char name[100];
float base;
float fdgz;
float expend;
float sum;
}WORK;
int main()
{
WORK s[10000];
int n, i,j;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", &s[i].name);
scanf("%f", &s[i].base);
scanf("%f", &s[i].fdgz);
scanf("%f", &s[i].expend);
s[i].sum = (s[i].base + s[i].fdgz)-s[i].expend;
}
for (j = 0; j < n;j++)
{
printf("%s %.2f\n", s[j].name, s[j].sum);
}
return 0;
}
计算平均成绩:
设计思路:
定义一个结构体,并在其中定义学号num,姓名name,分数score。主函数中先输入整数n,引用结构体,用一个for循环输入学号,姓名,分数并计算出分数的和。计算出平均数。用一个for循环遍历数据,并用if语句判断当前分数是否低于平均数,如果是输出相应的姓名和学号。
实验代码: #includestruct student{
char num[6]; char name[10]; double grade;
}s[1000];
int main()
{
int n; scanf("%d\n",&n); int i; double sum=0; double average; for(i=0;i
s[j].grade) { printf("%s %s\n",s[j].name,s[j].num); } } return 0; }
`
7.按等级统计学生成绩
设计思路:先定义函数,引入变量,在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可。
2.实验代码: int set_grade( struct student *p, int n ){
}int count = 0, i; for(i = 0;i
score<60){ p->grade = 'D'; count++; } else if((p->score<70)&&(p->score>=60)){ p->grade = 'C'; } else if((p->score<85)&&(p->score>=70)){ p->grade = 'B'; } else{ p->grade = 'A'; } } return count;
`流程图:结构体数组按总分排序
设计思路:调用calc函数,使用循环进行计算。然后调用sort函数,使用for循环,在循环中用if语句判断,进而返回值。
实验代码:
`
void calc(struct student *p,int n)
{
int i=0;
for(i=0;i { } } void sort(struct student *p,int n) { int j=0,min=0; struct student a; for(j=0;j { } a=*(p+min); (p+min)=(p+n-1); *(p+n-1)=a; if(n>1) { } }(p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2];
if((p+j)->sum<(p+min)->sum)
{
min=j;
}
n--;
sort(p,n);
`
点评同学
1http://www.cnblogs.com/lhyyy/p/8711554.html
2http://www.cnblogs.com/shilcz/p/8696341.html
3http://www.cnblogs.com/DavidPark/p/8664273.html
总结:近2周的学习,让我在c语言的学习中有了很大进展,也获得了许多新知识,比如结构体struct,再比如如何使用已定义的变量类型定义变量,如何多变的使用指针等。现在我的思路还是不太好,并不能快速的理解和在脑内构成解题的程序,常常需要他人提醒,我还需要勤加联系