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;
}