练习题源代码21——25

21.实数取整
(Description已知一个字符串表示一个实数(不超过100位) ,请输出其整数部分,且输出不含前导0,但如果该整数为0,则输出0)
Description已知一个字符串表示一个实数(不超过100位) ,请输出其整数部分,且输出不含前导0,但如果该整数为0,则输出0。
Input一个实数(不超过100位)
Output
该实数的整数部分
Sample Input
00123.45
Sample Output
123

在这里插入代码片
#include<stdio.h>
#include<string.h>
void dd(char *x,int y);
int main(void) {
 char a[100];
 int b,c,n = 0;
 gets(a);
 b = strlen(a);
 if(b == 1) {
  printf("%c",a[0]);
 } else {
  for(c = b -1; c >= 0; c--) {
   if(a[c] != '0'&&a[c] != '-') {
    n = 1;
    break;
   }
  }
  if(n == 1) {
   dd(a,b);
  } else {
   printf("0");
  }
 }
 return 0;
}
void dd(char *x,int y) {
 int i,a,b,c,n,m = 0;
 if(x[0] == '-') {
  n = 1;
 } else {
  n = 0;
 }
 for(i = n; i < y; i++) { //-000.123
  if(x[i] != '.') {
   if(x[i] != '0'&&x[i] != '.') {
    m = 1;
    break;
   }
  } else {
   printf("0");
   return;
  }
 }
 if(n == 1) {
  printf("-");
 }
 for(i = n; i < y; i++) {
  if(x[i] > '0'&&x[i] <= '9') {
   break;
  }
 }
 for(a = i; a < y; a++) {
  if(x[a] == '.') {
   break;
  } else {
   printf("%c",x[a]);
  }
 }
}

22.账单处理
Description
每到月末,superbin就会对这个月的支出账单进行整理和统计。如今电脑已经普及大学校园,所以superbin想让电脑帮忙做这件事情。聪明的你就为superbin编一个程序来完成这件事情吧。
Input第一行是整数n (n<100)。然后是n行的账单信息,每一行由事物的名字name和对应的花费c组成,长度不超过200。中间会有一个或多个空格,而每一行的开头和结尾没有空格。 0.0 < c < 1000.0。
Output输出总的花费,小数点后保留一位数字。
Sample Input
3
Apple 2.3
Buy clothes for girl friend 260.5
Go to cinema 30
Sample Output
292.8

在这里插入代码片
#include<stdio.h>
#include<string.h>
void js(char x[][200],int y);
int main(void) {
 int n,i;
 scanf("%d",&n);
 getchar();
 char a[n][200];
 for(i = 0; i < n; i++) {
  gets(*(a+i));
 }
 js(a,n);
 return 0;
}
void js(char x[][200],int y) {
 int i,a,b,n,g[y],f,d[y],m,j,r,o;
 double sum[y],sum2 =0.0;//这里定义sum2,就是为了防止后面计算时造成 char 溢出。
 for(i = 0; i < y; i++) {
  sum[i] = 0.0;
 }
 for(i = 0; i < y; i++) {
  a = strlen(*(x + i));
  if(x[i][a - 2] == '.') {
   x[i][a - 1] = x[i][a - 1] - 48;
   sum2 = x[i][a - 1];
   sum[i] = sum2 * 1.0 / 10;
   for(b = 0; b < a - 1; b++) {
    if((x[i][b] >= '0')&&(x[i][b] <= '9')) {
     g[i] = b;
     break;
    }
   }
   for(m = g[i]; m < a - 2; m++) {
    x[i][m] = x[i][m] - 48;
    j = a - m - 3;
    sum2 = x[i][m];
    while(j--) {
     sum2 = sum2 * 10;
    }
    sum[i] = sum[i] + sum2;
   }
  } else {
   for(b = 0; b < a - 1; b++) {
    if((x[i][b] >= '0')&&(x[i][b] <= '9')) {
     g[i] = b;
     break;
    }
   }
   for(m = g[i]; m < a - 1; m++) {
    x[i][m] = x[i][m] - 48;
    sum2 = x[i][m];
    j = a - m - 1;
    while(j--) {
     sum2 = sum2 * 10;
    }
    sum[i] = sum[i] + sum2;
   }
  }
 }
 double sum1 = 0;
 for(i = 0; i < y; i++) {
  sum1 = sum1 + sum[i];
 }
 printf("%.1f",sum1);
}

23.Fresher的烦恼
Fresher刚进大学,打字练习的还不够熟练,还总喜欢挑战盲打,那么麻烦来了。他总是把删除键打成“#”,也就是如果显示信息为abc#,其实Fresher真正想要输入的信息是ab,如果显示信息为a#表示Fresher没有信息要输入,这下你明白了吗?给你一串Fresher输入的字符,你能帮他处理为Fresher真正想要的结果吗?若无信息输入,输出“没有信息输入”(比如,Fresher输入一串“####”或者“a##”,就代表他什么都没有输入,惊喜不,意外不?)。
Input
一个字符串(长度小于100)
Output
正确的字符信息
Sample Input
abc#ghkjjm#xnSample Output
abghkjjxn


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void dd(char *x);
int main(void) {
 char d[100];
 gets(d);
 dd(d);
 return 0;
}
void dd(char *x) {
 int a,b,c[100] = {0},n,k,i;
 a = strlen(x);
 for(i = 0; i < a; i++) {
  k = i - 1;
  if(x[i] == '#') {
   c[i] = 1;
   c[i - 1] = 1;
   for(b = i + 1; b < a; b++) {
    if(x[b] == '#'&&x[b - 1] == '#') {
     k = k - 1;
     c[k] = 1;
     c[b] = 1;
    } else {
     i = b;
     break;
    }
   }
  }
 }
 int o = 0;
 for(i = 0; i < a; i++) {
  if(c[i] != 1) {
   o = 1;
   printf("%c",x[i]);
  }
 }
 if(o == 0) {
  printf("没有信息输入");
 }
}

24.%m.n在输出字符时的作用

在这里插入代码片
在这里插入代码片
#include <stdio.h>
#include<stdlib.h> 
int main(void)
{
 char a1[] = {'a','b','c','d'},b1[] = {'e','f','g','h'},s[200],s1[200];
 sprintf(s,"%6.3s\n%6.3s",a1,b1);
 sprintf(s1,"%-6.3s\n%-6.3s",a1,b1);//这里面  %m.n  ; n代表从a1 b1 里面提取出来的字符个数,然后进入s 
 //m代表 输出字符后,在显示器上的长度,记住是右缩进,;当m为负数时,为左缩进 
 printf("%s\n",s);
 printf("%s",s1);
 return 0;
}
***
**25.输入n个学生的成绩,求平均成绩、最高分、最高分的人数、最低分、最低分的人数。**

```c
在这里插入代码片
#include<stdio.h>
int nn(int *a,int b);
#define N 30   //改变这里的值,就可以更改 要计算的人数 。 
int main(void) {
 int i,n,a[N],sum = 0;
 for(i = 0; i < N; i++) {
  scanf("%d",&a[i]);
  sum = sum + a[i];
 }
 nn(a,sum);
 return 0;
}
int nn(int *a1,int b) {
 int i,d1,d,f = 1,g = 1,k,n;
 for(i = 0; i <N; i++) {
  for(d = 0; d < N - 1 - i; d++) {
   if(a1[d] >a1[d + 1]) {
    d1 = a1[d];
    a1[d] = a1[d + 1];
    a1[d + 1] = d1;
   }
  }
 }
 for(i = 0; i < N; i++) {
  if(a1[i] == a1[i + 1]) {
   f = f + 1;
  } else {
   break;
  }
 }
 for(i = N - 1; i >= 0; i--) {
  if(a1[i] == a1[i - 1]) {
   g = g + 1;
  } else {
   break;
  }
 }
 printf("%.2f\n%d\n%d\n%d\n%d\n",b * 1.00 / N,a1[N - 1],g,a1[0],f);
}

25.++x||y++&&z++ (x++||y++&&z++)的判断真假

在这里插入代码片
在这里插入代码片
#include<stdio.h>
int main(void) 
{
 int x(0),y(0),z(8),k; 
 k=x++||y++&&z++;
 //    这里运行的步骤是x为0,假,然后x+1,此时||的左边为假;
 //    y为0,假,然后y+1,此刻y++&&z++为假,z不做运算,原数输出;
 //    所以||两边都为假 ,则K= 0; 
 printf("%d %d %d",x,y,z);
 printf("\n%d",k);
 return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值