《C语言程序设计》编程题总结试卷

1.计算总成绩和平均成绩

#include "stdio.h" 
int main()
{ int math,english,c;
  scanf("%d%d%d",&math,&english,&c);
  if (math>=0&&math<=100&&english>=0&&english<=100&&c>=0&&c<=100) 
      printf("%d %d",math+english+c,(math+english+c)/3);
  else printf("input error");
  return 0;
}

2.两数合并成一个整数

#include "stdio.h" 
int main()
{ int a,b,c; scanf("%d%d",&a,&b);
  if (a>=10&&a <=99&&b>=10&&b  <=99)
  { int i,j,k,l;
	i=a/10;
    j=a%10;
    k=b/10;
    l=b%10;
    printf("%d",i*100+j+k*10+l*1000);
  }else printf("input error");
   return 0;
}

3.求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积

#include "stdio.h" 
#define PI 3.14
int main()
{ double r,h,l,s,ss,qv,v;
  scanf("%lf%lf",&r,&h);
  if (r>0&&h>0){
   l=2*PI*r;
   s=PI*r*r;
   ss=4.0*PI*r*r;
   qv=4.0/3*PI*r*r*r;
   v=PI*r*r*h;
   printf("圆周长:%.2lf\n圆面积:%.2lf\n圆球表面积:%.2lf\n圆球体积:%.2lf\n圆柱体积:%.2lf\n",l,s,ss,qv,v);
}else printf("input error");
 return 0;
}

4.(1.0分)计算星座

#include "stdio.h"
 int main()
{
 int m,d,t;
 printf("");
scanf("%d%d",&m,&d); //输入月份和日期
t = m <7 ? 21 : 23; //7月前为21,7月后为23 if (d>=t) m++; // 在一个月的t号之后月份加一switch(m) {
case 2 : printf("宝瓶");break; case 3 : printf("双鱼");break; case 4 : printf("白羊");break; case 5 : printf("金牛");break; case 6 : printf("双子");break; case 7 : printf("巨蟹");break; case 8 : printf("狮子");break; case 9 : printf("处女");break; case 10 : printf("天秤");break; case 11 : printf("天蝎");break; case 12 : printf("人马");break;
default : printf("摩羯"); //13月,1月相同处理
}
return 0;
}

5.(1.0分)模拟简单计算器
答案

#include "stdio.h" #define PI 3.14
int main()
{
double a1,a2; char op;
scanf("%lf%c%lf",&a1,&op,&a2); switch(op){
case '+':printf("%lf",a1+a2);break; case '-':printf("%lf",a1-a2);break; case '*':printf("%lf",a1*a2);break; case '/':
if (a2!=0) printf("%lf",a1/a2); else printf("input error"); break;
default:printf("input error");
}
return 0;
}

6.(1.0分)求时刻时针和分针的夹角
答案
#include “stdio.h” #include “math.h” int main()
{ int h,m; double a;
scanf(“%d:%d”,&h,&m);
if (h>=0&&h <=12&&m>=0&&m <=59){

double a1,a2;//时针和分针以0点为起点走过的角度
a2=m1.0/60360; a1=h1.0/12360+m1.0/6030; a=fabs(a2-a1);
a=a>180?360-a:a;
printf(“%.2lf”,a);
}
else
printf(“input error”); return 0;
}

7.(1.0分)九九乘法表
答案
#include “stdio.h” int main()
{ int i,j;
for (i=1;i <=9;i++){ for (j=1;j <=i;j++)
printf(“%d*%d=%d “,j,i,j*i); printf(”\n”);
}
return 0;
}

8.(1.0分)整数部分的位数
答案
#include “stdio.h” int main()
{ double a; scanf(“%lf”,&a); int i,cnt=0;
i=a; while(i>0){
cnt++; i=i/10;
}
printf(“%d”,cnt); return 0;
}

9.(1.0分)近似值
答案
#include “stdio.h” #include “math.h” int main()
{
int s=1;
double pi=0,n=1,t=1; while (fabs(t)>1e-6)
pi=pi+t, n=n+2, s=-s, t=s/n; pi=pi*4;
printf(“%lf\n”,pi); return 0;
}

10.(1.0分)计算列表达式的值
答案
#include “stdio.h”

#include “math.h” int main()
{
double s=0,a;
for (int i=1;i <=15;i++){ scanf(“%lf”,&a);
s=sqrt(s)+a;
}
printf(“%.2lf”,sqrt(s)); return 0;
}

11.(1.0分)素数计算
答案
#include “stdio.h” #include “math.h” int main()
{
int s=0,cnt=0,f=1,i,j; for(i=800;i>=500;i–){
for(j=2;j<=sqrt(i);j++) if(i%j==0) break;
if(j>sqrt(i)){ cnt++; s=s+f*i; f=-f;
}
}
printf(“%d %d”,cnt,s); return 0;
}

12.(1.0分)素数计算
答案
#include “stdio.h” #include “math.h” int main()
{
int s=0,cnt=0,f=1,i,j; for (i=800;i>=500;i–){
for (j=2;j <=sqrt(i);j++) if (i%j==0) break;
if (j>sqrt(i)){ cnt++;
s=s+f*i; f=-f;
}
}
printf(“%d %d”,cnt,s); return 0;
}

13.(1.0分)显示金额
答案
#include “stdio.h” #include “math.h” int main()
{
double m;

scanf(“%lf”,&m);
int c100,c50,c10,c5,c2,c1,c01,c005,c001; c100=m/100;
c50=(m-c100100)/50; c10=(m-c100100-c5050)/10;
c5=(m-c100
100-c5050-c1010)/5; c2=(m-c100100-c5050-c1010-c55)/2;
c1=(m-c100100-c5050-c1010-c55-c22)/1; c01=(m-c100100-c5050-c1010-c55-c22-c1)/0.1;
c005=(m-c100100-c5050-c1010-c55-c22-c1-c010.1)/0.05;
c001=(m-c100100-c5050-c1010-c55-c22-c1-c010.1-c005*0.05)/0.01;
printf(“100元:%d 50元:%d 10元:%d 5元:%d 2元:%d 1元:%d 1角:%d 5分:%d 1分:%d”,c100,c50,c10,c5,c2,c1,c01,c005,c001); return 0;
}

14.(1.0分)求整数的任意次方
答案
#include “stdio.h” int main()
{
int x,a,mul=1; scanf(“%d%d”,&x,&a); for (int i=0;i<a;i++){
mul=x*mul%1000; //防止溢出,每次只取后3位进行累乘
}
printf(“%d”,mul); return 0;
}

15.(1.0分)埃及分数
答案
#include “stdio.h” int main()
{
long int a, b, c;
scanf(“%ld/%ld”, &a, &b); /输入分子a和分母b/ printf(“%ld/%ld=”, a, b);
while(1){
if(b%a) /若分子不能整除分母,则分解出一个分母为b/a+1的埃及分数/ c = b/a + 1;
else {/否则,输出化简后的真分数(埃及分数)/ c = b / a;
a = 1;
}
if(a1){ printf(“1/%ldn”, c); break; /a为1标志结束/
}
else
printf(“1/%ld+”, c);
a = a * c - b; /求出余数的分子/ b = b * c; /求出余数的分母/
if(a
3 && b%2==0){ /若余数分子为3,分母为偶数,输出最后两个埃及分数/ printf(“1/%ld+1/%ld\n”, b/2, b);
break;
}
}
return 0;
}

16.(1.0分)亲密数
答案
#include <stdio.h>

int main()
{
int i, j;
for (i = 1; i <= 3000; i++)
{
int b = 0, n = 0;
for (j = 1; j < i; j++) if (i % j == 0)
b += j;
for (j = 1; j < b; j++) if (b % j == 0)
n += j;
if (n == i && i < b) printf(“(%d,%d)”, i, b);
}

return 0;
}

17.(1.0分)三天打鱼两天晒网
答案
#include “stdio.h” int main()
{
int y,m,d,days=0; scanf(“%d/%d/%d”,&y,&m,&d);
days=365*(y-2000);//计算整年的天数
for (int i=2000;i <y;i++) //修正闰年的366天if((i%4000)||((i%100!=0)&&(i%40)))
days++;
for (int i=1;i <m;i++){ //计算整月的天数switch (i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=days+31;break; case 4:
case 6:
case 9:
case 11:
days=days+30;break; case 2:
days=days+28; if((y%4000)||((y%100!=0)&&(y%40))) days++;
break;
}
}
days=days+d; //计算当月已经过去的天数
if (days%51||days%52||days%5==3) printf(“fishing\n”);

else printf(“sleeping\n”);
return 0;
}

18.(1.0分)捕鱼
答案
#include “stdio.h” int main()
{
int s1,s2,s3,s4,s5;
for (s5=16;;s5=s5+5){ int cnt=0;
s4=(s5-1)*4/5;
if ((s4-1)%50) { s3=(s4-1)*4/5;
cnt++;
}
else continue;
if ((s3-1)%5
0){ s2=(s3-1)*4/5;
cnt++;
} else continue;
if ((s2-1)%50) { s1=(s2-1)*4/5;
cnt++;
}
else continue;
if ((s1-1)%5
0) {
cnt++;
}
else continue; if (cnt==4) {
printf(“%d\n”,s5);
break;
}
}
return 0;
}

19.(1.0分)两面族
答案
#include “stdio.h” int main()
{
int s1,s2,s3,flag=0;//0-诚实族、1-说谎族和2-两面族 for (s1=0;s1 <=2;s1++){
for (s2=0;s2 <=2;s2++){ for (s3=0;s3 <=2;s3++){
int ss1=s1,ss2=s2,ss3=s3; if (ss10) ss2=0;
if ((ss1
1)&&(ss20)) ss3=1; if (ss30) ss2=1;
if(ss1!=ss2&&ss2!=ss3&&ss1!=ss3){ printf(“%d %d %d”,ss1,ss2,ss3);
flag=1; break;
}

}
if (flag1) break;
}
if (flag
1) break;
}
return 0;
}

20.(1.0分)SIN函数曲线
答案
#include “stdio.h” #include “math.h” int main(){
printf(“************************************************\n"); for (int i=0;i <=330;i=i+15){
double t=sin(2
3.1415926
i/360); printf(“sin(%3d)=%+.4lf”,i,t);
if (t>0){
for (int i=0;i <24;i++) printf(" “);
printf(”
");
for (int i=0;i <t
16;i++) printf(" “);
printf(”
");
}
if (t <0){
for (int i=0;i <24+t
16;i++) printf(" “);
printf(”
");
for (int i=0;i <-t
16-2;i++) printf(" “);
printf(”
“);
}
if (t==0) {
for (int i=0;i <24;i++) printf(” “);
printf(”
”);
}
printf(“\n”);

}
return 0;
}

21.(1.0分)计算函数
答案
#include “stdio.h” double fac(int n){ double mul=1;
for (int i=1;i <=n;i++) mul=mul*i;
return mul;
}
double cmk(int m, int k){ return fac(m)/fac(k)/fac(m-k);
}
int main()
{ int A,B; scanf(“%d%d”,&A,&B);

printf(“%.0lf”,cmk(A,B)); return 0;
}

22.(1.0分)x的n次方的函数
答案
#include “stdio.h” double f(int n,double x){
if (n==0) return 1;
else
return x*f(n-1,x);
}
int main()
{ int n;
double x; scanf(“%d%lf”,&n,&x); printf(“%.2lf”,f(n,x)); return 0;
}

23.(1.0分)求函数
答案
#include “stdio.h”
double power(double x,int n){ if (n==0)
return 1; else
return x*power(x,n-1);
}
int main()
{ int n;
double x; scanf(“%d%lf”,&n,&x); printf(“%.2lf”,power(x,n)); return 0;
}

24.(1.0分)求多项式
答案
#include “stdio.h” int p(int x,int n){
if (n0) return 1;
else
if (n
1) return x;
else
return (2*n-1)*p(x,n-1)-(n-1)*p(n-2,x)/n;
}
int main()
{ int n, x; scanf(“%d%d”,&n,&x);
printf(“%d”,p(x,n)); return 0;
}

25.(1.0分)【提高题】公历转换成农历
答案

#include <time.h> #include “stdio.h” #include “string.h”

unsigned int LunarCalendarDay;
unsigned int LunarCalendarTable[199] = //保存农历年信息
{
0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/1901-1910/
0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754,/1911-1920/
0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E,/1921-1930/
0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48,/1931-1940/
0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51,/1941-1950/
0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x6AD53C,/1951-1960/
0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46,/1961-1970/
0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50,/1971-1980/
0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0x093746,0x5497BB,/1981-1990/
0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645,/1991-2000/
0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E,/2001-2010/
0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC,0x052B50,0x0A9345,0x474AB9,/2011-2020/
0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43,/2021-2030/
0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C,/2031-2040/
0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA,0x06D24E,0x0ADA42,0x355B37,/2041-2050/
0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42,/2051-2060/
0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B,/2061-2070/
0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6,/2071-2080/
0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743,0x452738,0x0D264A,0x8E933E,/2081-2090/
0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 /2091-2099/
};
int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};//记录公历每个月之前的天数 int LunarCalendar(int year,int month,int day)
{
int Spring_NY,Sun_NY,StaticDayCount; int index,flag;
//Spring_NY 记录春节离当年元旦的天数。
//Sun_NY 记录公历日离当年元旦的天数。
if ( ((LunarCalendarTable[year-1901] & 0x0060) >> 5) == 1) Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1; else
Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1 + 31; Sun_NY = MonthAdd[month-1] + day - 1;
if ( (!(year % 4)) && (month > 2)) Sun_NY++;
//StaticDayCount记录大小月的天数 29 或30
//index 记录从哪个月开始来计算。
//flag 是用来对闰月的特殊处理。
//判断阳历日在春节前还是春节后
if (Sun_NY >= Spring_NY)//阳历日在春节后(含春节那天)
{
Sun_NY -= Spring_NY; month = 1;
index = 1;
flag = 0;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0) StaticDayCount = 29;
else
StaticDayCount = 30;
while (Sun_NY >= StaticDayCount)
{
Sun_NY -= StaticDayCount;

index++;
if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) )
{
flag = ~flag; if (flag == 0) month++;
}
else month++;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0) StaticDayCount=29;
else StaticDayCount=30;
}
day = Sun_NY + 1;
}
else //阳历日在春节前
{
Spring_NY -= Sun_NY; year–;
month = 12;
if ( ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) == 0) index = 12;
else
index = 13;
flag = 0;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0) StaticDayCount = 29;
else
StaticDayCount = 30;
while (Spring_NY > StaticDayCount)
{
Spring_NY -= StaticDayCount; index–;
if (flag == 0) month–;
if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20)) flag = ~flag;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0) StaticDayCount = 29;
else
StaticDayCount = 30;
}
day = StaticDayCount - Spring_NY + 1;
}
LunarCalendarDay |= day; LunarCalendarDay |= (month < < 6);
if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20)) return 1;
else return 0;
}
int main()
{
const char ChDay[] = {"",“初一”,“初二”,“初三”,“初四”,“初五”,
“初六”,“初七”,“初八”,“初九”,“初十”,
“十一”,“十二”,“十三”,“十四”,“十五”,
“十六”,“十七”,“十八”,“十九”,“二十”,
“廿一”,“廿二”,“廿三”,“廿四”,“廿五”,

“廿六”,“廿七”,“廿八”,“廿九”,“三十”
};
const char ChMonth[] = {"“,“正”,“二”,“三”,“四”,“五”,“六”,“七”,“八”,“九”,“十”,“十一”,“腊”}; struct tm * Local;
long t;
int year,month,day; char str[13] = “”; #if 0
t = time(NULL);
Local = localtime(&t);
year = Local->tm_year + 1900; month = Local->tm_mon + 1; day = Local-> tm_mday;
#else
year = 2013;
month = 2;
day = 10;
scanf(”%d-%d-%d", &year, &month, &day); #endif
if (LunarCalendar(year,month,day))
{
strcat(str,“闰”);
strcat(str,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);
}
else
strcat(str,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]); strcat(str,“月”);
strcat(str,ChDay[LunarCalendarDay & 0x3F]);
puts(str); getchar();
}

26.(1.0分)【提高题】找零金额
答案
#include “stdio.h”
void change(double m,double c){
int c50,c20,c10,c5,c2,c1,c05,c02,c01,c005,c002,c001;
double t=c-m; c50=t/50;
c20=(t-c5050)/20;
c10=(t-c50
50-c2020)/10; c5=(t-c5050-c2020-c1010)/5;
c2=(t-c5050-c2020-c1010-c55)/2; c1=(t-c5050-c2020-c1010-c55-c22)/1;
c05=(t-c50
50-c2020-c1010-c55-c22-c11)/0.5;
c02=(t-c50
50-c2020-c1010-c55-c22-c11-c050.5)/0.2;
c01=(t-c5050-c2020-c1010-c55-c22-c11-c050.5-c020.2)/0.1;
c005=(t-c5050-c2020-c1010-c55-c22-c11-c050.5-c020.2-c010.1)/0.05;
c002=(t-c50
50-c2020-c1010-c55-c22-c11-c050.5-c020.2-c010.1-c0050.05)/0.02;
c001=(t-c50
50-c2020-c1010-c55-c22-c11-c050.5-c020.2-c010.1-c0050.05-c0020.02)/0.01;
printf(“50元:%d\n20元:%d\n10元:%d\n5元:%d\n2元:%d\n1元:%d\n5角:%d\n2角:%d\n1角:%d\n5分:%d\n2分:%d\n1
分:%d\n”,c50,c20,c10,c5,c2,c1,c05,c02,c01,c005,c002,c001);

}

int main()
{
double m,c;

scanf(“%lf%lf”,&m,&c); change(m,c);
return 0;
}

27.(1.0分)左右循环移位
答案
#include “stdio.h” #include “math.h”
int move(int value,int n){ if (n>0){
int t1=value>>n;//高n补0,原高16-n位移至低16-n位
int temp=(pow(2,n)-1);//temp为低n为1,其余高位为0的数据 int t2=value&temp;//t2保存value的低n状态,高位置0
return (t2 < <16-n)+t1;//t2向左移位16-n,将value的低n位移至高n位,与t1相加,达到循环移位的效果
}
if (n <0){
int t1=value < <-n;//低-n补0,原低16+n位移至高16+n位
int temp=(pow(2,16)-pow(2,16+n));//temp为高n为1,其余低位为0的数据 int t2=value&temp;//t2保存value的高n状态,低位置0
return t1+(t2>>16+n);//t2向右移位16+n,将value的高n位移至低n位,与t1相加,达到循环移位的效果
}
return value;
}
int main()
{
int value,n; scanf(“%d%d”,&value,&n); printf(“%d”,move(value,n)); return 0;
}

28.(1.0分)输出矩阵各元素的值
答案
#include “stdio.h” int main()
{ int a[5][5]={{1},{2,1},{3,2,1},{4,3,2,1},{5,4,3,2,1}};
for(int i=0;i <5;i++){ for(int j=0;j <5;j++) printf(“%d “,a[i][j]);
printf(”\n”);
}
return 0;
}

29.(1.0分)统计字符的个数
答案
#include “stdio.h” #include “string.h” int main()
{ unsigned char a[3][81];
int cnt_upper=0,cnt_lower=0,cnt_chinese=0,cnt_digit=0,cnt_space=0,cnt_others=0; gets(a[0]);
gets(a[1]);
gets(a[2]);
for(int i=0;i ❤️;i++){
for(int j=0;j < strlen(a[i]);j++){
if (a[i][j]>=‘a’&&a[i][j] <=‘z’) cnt_lower++;
else if (a[i][j]>=‘A’&&a[i][j] <=‘Z’) cnt_upper++;

else if (a[i][j]>=‘0’&&a[i][j] <=‘9’) cnt_digit++; else if (a[i][j]==’ ') cnt_space++;
else if(a[i][j] < 128)cnt_others++;
}
for(int j=0;j < strlen(a[i]);j++){ if (a[i][j]>=128) {
cnt_chinese++, j+=2;
;
}
}

}

printf(“upper:%d\nlower:%d\nchinese:%d\ndigit:%d\nspace:%d\nothers:%d\n”,cnt_upper,cnt_lower,cnt_chinese,cnt_digit,cnt_space,cnt_others)

return 0;
}

30.(1.0分)处理字符串
答案
#include “stdio.h” #include “string.h” int main()
{ char s[100];
gets(s);
char temp[100][100]; int k=0,j=0;
for (int i=0;i <strlen(s);i++){
if (s[i]!=’ ‘&&s[i]!=’.‘&&s[i]!=’,‘) temp[k][j]=s[i],j++;
else {
temp[k][j]=’\0’,k++,j=0;
}

}
for (int j=k-1;j>=0;j–) printf("%s ",temp[j]); return 0;
}

31.(1.0分)计算A与B的交集
答案
#include “stdio.h” #include “string.h”
int search(int a[],int m,int x)//查找a数组中是否有元素x
{
for(int i=0;i <m;i++)
if (a[i]==x) return 1; return 0;
}
void sort(int a[],int m)//将a数组元素升序排列
{
int t;
for(int j=0 ; j <m-1 ; j++) //冒泡排序法 for(int i=0 ; i <m-1-j; i++) //一趟冒泡排序
if(a[i] > a[i+1]) //a[i]与a[i+1]比较 <升序 >降序t=a[i], a[i]=a[i+1], a[i+1]=t; //交换
}
int main()
{ int m,n;

scanf(“%d%d”,&m,&n);
int A[m],B[n],C[m];
for (int i=0;i <m;i++) scanf(“%d”,&A[i]);
for (int i=0;i <n;i++) scanf(“%d”,&B[i]); int l=0;
for (int i=0;i <n;i++)
if (search(A,m,B[i])==1) C[l]=B[i],l++; sort(C,l);
for (int i=0;i <l;i++) printf("%d ",C[i]); return 0;
}

32.(1.0分)正整数的乘积
答案
#include “stdio.h” #include “string.h”

//两个正大数相加
void add(char *num1,char *num2,int f,char sum){
int l1=strlen(num1),l2=strlen(num2); //两个数据的长度int t1=l1-1,t2=l2-1,c=0,k;
//从低位向高位计算每一个和的数字int h=l1>=l2?l1:l2;
int l=l1-l2>=0?l1-l2:l2-l1; for (k=h-1;k>=l;k–){
if (f1) {
sum[k]=((num1[t1]-‘0’)+(num2[t2]-‘0’)+c)%10+‘0’; //当前位数字
c=((num1[t1]-‘0’)+(num2[t2]-‘0’)+c)/10; //进位
}
if (f
-1){
int temp=(num1[t1]-‘0’)+f
(num2[t2]-‘0’)+c; if (temp>=0) sum[k]=temp+‘0’,c=0;
else sum[k]=temp+10+‘0’,c=-1;
}
t1–,t2–;
}
if (l1>l2){
while (t1>=0) {
int temp=num1[t1]-‘0’+c;
if (temp>=0) sum[k]=temp%10+‘0’,c=(num1[t1]-‘0’+c)/10; else sum[k]=temp+10+‘0’,c=-1;
t1–,k–;

}
}else{

}

while (t2>=0) {
int temp=num2[t2]-‘0’+c;
if (temp>=0) sum[k]=temp%10+‘0’,c=(num2[t2]-‘0’+c)/10; else sum[k]=temp+10+‘0’,c=-1;
t2–,k–;

}
//处理最高位的进位信息if (c!=0){
for (k=strlen(sum)-1;k>=0;k–) sum[k+1]=sum[k];
sum[0]=c+‘0’;
}
}

//两个大数相加
void addresult(char *n1,char *n2,char *s){ if (n1[0]!=‘-’&&n2[0]!=‘-’) add(n1,n2,1,s);
if (n1[0]‘-’&&n2[0]‘-’) {add(n1+1,n2+1,1,s+1);s[0]=‘-’;}
int l1=strlen(n1),l2=strlen(n2); if (n1[0]!=‘-’&&n2[0]‘-’){
if (l1>l2-1||(l1
l2-1&&strcmp(n1,n2+1)>=0)) add(n1,n2+1,-1,s);

else{

}
}

add(n2+1,n1,-1,s+1);s[0]=‘-’;

if (n1[0]‘-’&&n2[0]!=‘-’){
if (l1-1 <l2||(l1-1
l2&&strcmp(n1+1,n2) <=0)) add(n2,n1+1,-1,s);

else{

}
}
}

add(n1+1,n2,-1,s+1);s[0]=‘-’;

//两个正大数相乘
void mul(char *n1,char *n2,char *s){ for (int i=strlen(n2)-1;i>=0;i–){
char temp[103]={0};
for (int j=0;j <n2[i]-‘0’;j++) addresult(n1,temp,temp);
//乘即为加数1累加后移位相加,移位的效果需要用填充位char tianchong[102]={0};
for (int k=0;k <strlen(n2)-i-1;k++) tianchong[k]=‘0’;
strcat(temp,tianchong); addresult(s,temp,s);
}
if (strcmp(s,“”)0) strcpy(s,“0”); int f=0;
for (int l=0;l <strlen(s);l++) if (s[l]!=‘0’){f=1;break;}
if (f
0) strcpy(s,“0”);
}

int main()
{
char n1[102],n2[102],s[204]={0};
int f1=1,f2=1;//两个数据的符号位 scanf(“%s”,n1);
scanf(“%s”,n2);
if (n1[0]‘-’&&n2[0]‘-’) mul(n1+1,n2+1,s);
if (n1[0]!=‘-’&&n2[0]!=‘-’) mul(n1,n2,s);
if (n1[0]‘-’&&n2[0]!=‘-’) {mul(n1+1,n2,s+1);s[0]=‘-’;}
if (n1[0]!=‘-’&&n2[0]
‘-’) {mul(n1,n2+1,s+1);s[0]=‘-’;}
printf(“%s”,s); return 0;
}

33.(1.0分)循环数
答案
#include “stdio.h” int main()

{
int m,n,i,c,d,e,f;
int a[100];//计算出的每一位商
int b[100];//计算出的每一次余数,生成下一次的被除数scanf(“%d %d”,&m,&n);
printf(“%d.”,m/n);
a[0]=0;
b[0]=m;
for(i=1; ; i++)
{
m=b[i-1]*10;
b[i]=m%n;
a[i]=m/n; if(b[i]0) break; if(i>=2)
{
for(c=(i-1); c>=1; c–)//判断某次相除的余数和前边的余数相同,则认为出现循环
{
e=b[i];
f=b[c]; if(e
f) break;
}
if(c!=0)
{
break;
}
}
printf(“%d”,a[i]);
}
return 0;
}

34.(1.0分)距离坐标原点最远的点
答案
#include “stdio.h” #include “math.h” int main()
{ int n;
scanf(“%d”,&n);
double point[n][2],distance[n],maxDis=0; for (int i=0;i <n;i++){
scanf(“%lf%lf”,&point[i][0],&point[i][1]);
distance[i]=sqrt(point[i][0]*point[i][0]+point[i][1]*point[i][1]); if (maxDis <distance[i])maxDis=distance[i];
}
for (int i=0;i <n;i++)
if (maxDis==distance[i]) printf(“%.2lf,%.2lf\n”,point[i][0],point[i][1]); return 0;
}

35.(1.0分)将鱼和筐平分为三份
答案
#include “stdio.h” #include “math.h” int main()
{ int k[21][2]={2,-1,2,-1,2,-1,2,-1,2,-1,2,-1,2,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,0,-1,0,-1,0,-1,0,-1,0,-1,0,-1,0,-1};
//2,1,0分别表示筐是满的、半筐的和空的;-1表示这个筐还没有被分配,1,2,3分别表示这个筐被分配给第1,2,3个渔夫for (int i=1;i <=3;i++){

int cnt=0; double flag=0;
for (int j=0;j <21;j++){
if (k[j][0] <=7-flag&&k[j][1]-1&&cnt <7){
flag+=k[j][0],k[j][1]=i,cnt++;
}
if (flag
7&&cnt==7) break;
}
}
for (int i=0;i <21;i++) printf(“%d %d\n”,k[i][0],k[i][1]);
return 0;
}

36.(1.0分)素数
答案
#include “stdio.h” #include “math.h” int main()
{ int P[1000]={0},cnt=0;
for (int i=2;i <=1993;i++){ int j;
for (j=2;j <=sqrt(i);j++) if (i%j0) break;
if (j>sqrt(i)) P[cnt]=i,cnt++;
}
int flag=0;
for (int i=cnt-1;P[i]>1898;i–)
for (int j=0;P[i]-1898>=P[j];j++){
if (P[i]-1898
P[j]) {
flag++;
printf(“%d:%d %d\n”,flag,P[j],P[i]);
}
}
return 0;
}

37.(1.0分)八皇后问题
答案
#include “stdio.h”
#define N 8 /* 定义棋盘大bai小 /
int place(int k); /
判断某个位置是否可以放置皇后,可以返回1,不能返回0*/ void backtrack(int i);/* 回溯函数,搜素上一个皇后放置的其他可能性 /
int sum; /
记录解的个数 /
int x[N]; /
描述每一行的皇后位置,x[i]表示皇后i放在棋盘的第i行的第x[i]列 / int main()
{
backtrack(0);
printf(“共有%d种解法”,sum); return 0;
}
int place(int k)
{
/
测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击。 x[j] ==x[k] 时,两皇后在同一列上;abs(k - j) == abs(x[j] - x[k]) 时,两皇后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。*/
for (int j = 0; j < k; j ++)
if (abs(k - j) == abs(x[j] - x[k]) || (x[j] == x[k])) return 0; return 1;
}

void backtrack(int t)
{
/* t == N 时,算法搜索至叶结点,得到一个新的N皇后互不攻击的放置方案 */ if (t == N) sum++;
else
for (int i = 0; i < N; i ++) { x[t] = i;
if (place(t)) backtrack(t + 1);
}
}

38.(1.0分)【提高题】一元线性方程
答案
#include “stdio.h” int main(){
double x[11]={0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0},
y[11]={2.75,2.84,2.965,3.01,3.20,3.25,3.38,3.43,3.55,3.66,3.74};
double sumx=0,sumy=0,averx,avery; for (int i=0;i <11;i++)
sumx+=x[i],sumy+=y[i]; averx=sumx/11,avery=sumy/11; double sumxy=0,sumxx=0;
for (int i=0;i <11;i++) sumxx+=x[i]x[i],sumxy+=x[i]y[i];
double b=(sumxy-11
averx
avery)/(sumxx-11averxaverx); double a=avery-baverx;
printf(“一元线性方程:y=%.2lfx+%.2lf\n”,b,a); double q=0;
for (int i=0;i <11;i++) q=q+(x[i]-averx)
(x[i]-averx);
printf(“偏差平方和:%.2lf\n”,q); printf(“平均标准偏差:%.2lf\n”,q/11); double p=0;
for (int i=0;i <11;i++) p=p+(y[i]-avery)*(y[i]-avery);
printf(“回归平方和:%.2lf\n”,p);
double umax=(y[0]-avery),umin=(y[0]-avery),u=y[0]-avery; for (int i=1;i <11;i++){
umax=umax <(y[i]-avery)?(y[i]-avery):umax;
umin=umin>(y[i]-avery)?(y[i]-avery):umin; u=u+(y[i]-avery);
}
printf(“偏差最大值:%.2lf\n”,umax); printf(“偏差最小值:%.2lf\n”,umin); printf(“偏差平均值:%.2lf\n”,u); return 0;
}

39.(1.0分)【提高题】函数计算表达式
答案
#include “stdio.h” int main(){
char s[100]; scanf(“%s”,s);
int num[100],cnt_num=0; for (int i=0;i <strlen(s);i++){
if (s[i]>=‘0’&&s[i] <=‘9’){
num[cnt_num]=s[i]-‘0’; cnt_num++;

}else{

switch(s[i]){
case ‘+’:num[cnt_num-2]=num[cnt_num-1]+num[cnt_num-2]; cnt_num–;
break;
case ‘-’:num[cnt_num-2]=num[cnt_num-2]-num[cnt_num-1]; cnt_num–;

break;
case ‘*’:num[cnt_num-2]=num[cnt_num-1]*num[cnt_num-2]; cnt_num–;
break;
case ‘/’:num[cnt_num-2]=num[cnt_num-1]/num[cnt_num-2]; cnt_num–;
break;
}
}
}
printf(“%d”,num[cnt_num-1]); return 0;
}

40.(1.0分)约瑟夫问题
答案
#include “stdio.h” int main() {
int i, j, k = 1,a[31]; int s = 1;
for(i = 0; i < 31; i++) { a[i] = 0;
}
for( j=0;j < 15;j++){//总共要出队n次 for(k=0;k<9;k++){
if(s>30) { s=1;
}
++s;
if(a[s-1] == 1) {
k = k-1;
}
}
a[s-1]=1;//输出,记录已出队
}
for (i=1;i<31;i++)
{

if(i == 15) { printf(“%d:%d\n”, i, a[i]);
} else {
printf("%d:%d ", i, a[i]);
}
}
return 0;
}

41.(1.0分)一维实型数组
答案
#include “stdio.h”
void f(double A[],int n,double *max,double *min,double *aveg){
*aveg=*max=*min=A[0]; for (int i=1;i <n;i++){
*aveg=*aveg+A[i];
if (A[i]>*max) *max=A[i];
if (A[i] <*min) *min=A[i];
}
*aveg=*aveg/n;
}
int main()
{ int n;
scanf(“%d”,&n);
double A[n],max,min,aveg; for (int i=0;i <n;i++)
scanf(“%lf”,&A[i]);
f(A,n,&max,&min,&aveg); printf(“max:%.2lf\nmin:%.2lf\naveg:%.2lf\n”,max,min,aveg);
return 0;
}

42.(1.0分)元素之和
答案
#include “stdio.h” int main()
{ int A[5][3],(p)[3];
for (int i=0;i <5;i++) for (int j=0;j ❤️;j++)
scanf(“%d”,&A[i][j]);
p=A;
for (int i=0;i <5;i++){ int sum=0;
for (int j=0;j ❤️;j++) sum=
(*p+j)+sum;
printf(“row i:%d\n”,sum); p++;
}
return 0;
}

43.(1.0分)字符指针
答案
#include “stdio.h” #include “string.h” int main()
{ int i;
char a[10]={0},x,*p=a; gets§;
scanf(“%d”,&i); x=getchar();
for (p=a+strlen(a)-1;p>=a+i;p–)
*(p+1)=*p;
*p=x; puts(a); return 0;
}

44.(1.0分)找出最长的一个字符串
答案
#include “stdio.h” #include “string.h”

void search(char Q[][10],char **strmax,int num){ int l=strlen(*strmax);
for (int i=1;i <num;i++){ if (strlen(Q[i])>l){
l=strlen(Q[i]);
*strmax=Q[i];
}
}
}
int main()
{ char S[5][10],*p=S[0];
for(int i=0;i <5;i++) gets(S[i]);
search(S,&p,5); puts§;
return 0;
}

45.(1.0分)最长的子字符串
答案
#include “stdio.h” #include “string.h”
int search(char *cpSource,char ch){ int max=0,cnt=0;
for (int i=0;i <=strlen(cpSource);i++){ if (cpSource[i]==ch)
cnt++;

else{

}

if (cnt>max) max=cnt; cnt=0;

}
return max;
}
int main()
{ char S[100],ch; gets(S); ch=getchar();
int max=search(S,ch); for (int i=0;i <max;i++)
putchar(ch); return 0;
}

46.(1.0分)替换字符
答案
#include “stdio.h” #include “string.h”
void replace(char *str,char *fstr,char *rstr){ char dest[100]={0};
int flag=0,i,j,k;
for (i=0; i <strlen(str);i++){
for (j=i,k=0;fstr[k]str[j];k++,j++); if (fstr[k]‘\0’) {
flag=1 ;
}
if (flag==1){//找到一个源子串,用目的子串替换 strcat(dest,rstr);

i=i+k-1; flag=0;
}else{//没找到源子串,将源串中该部分字符复制到目的串 int l=strlen(dest);
dest[l]=str[i];
}
}
puts(dest); strcpy(str,dest);
}
int main()
{ char str[100],fstr[10],rstr[10]; gets(str);
gets(fstr); gets(rstr); replace(str,fstr,rstr); puts(str);
return 0;
}

47.(1.0分)约瑟夫问题
答案
#include “stdio.h” int main() {
int i, j, k = 1,a[31]; int s = 1;
for(i = 0; i < 31; i++) { a[i] = 0;
}
for( j=0;j < 15;j++){//总共要出队n次 for(k=0;k<9;k++){
if(s>30) { s=1;
}
++s;
if(a[s-1] == 1) {
k = k-1;
}
}
a[s-1]=1;//输出,记录已出队
}
for (i=1;i<31;i++)
{

if(i == 15) { printf(“%d:%d\n”, i, a[i]);
} else {
printf("%d:%d ", i, a[i]);
}
}
return 0;
}

48.(1.0分)工资明细
答案
#include “stdio.h” #include “string.h” struct PERSON { char name[10];

double bSalary; double cSalary; double pay;
} P[3]={“zhao”,240.00,420.00,45.00,“qian”,360.00,120.00,30.00,“sun”,560.00,0.0,180.00};
int main()
{
for(int i=0;i ❤️;i++) printf(“%s:%.2lf\n”,P[i].name,P[i].bSalary+P[i].cSalary-P[i].pay);
return 0;
}

49.(1.0分)输出总分最高的学生姓名
答案
#include “stdio.h” #include “string.h” struct STUDENT {
long sno;//学号(长整型)
char sname[10];//姓名(字符串) int sage;//年龄(整型)
double english,math,chinese,politics,physics,chemistry,computer;//英语、数学、语文、政治、物理、化学、计算机成绩(均为实型) double sum,aver;//总分(实型)、平均分(实型)
} S[10];
int main()
{
int maxPostion; double max=0;
for(int i=0;i <10;i++){ scanf(“%ld”,&S[i].sno);
scanf(“%s”,S[i].sname);
scanf(“%d”,&S[i].sage); scanf(“%lf%lf%lf%lf%lf%lf%lf”,&S[i].english,&S[i].math,&S[i].chinese,&S[i].politics,&S[i].physics,&S[i].chemistry,&S[i].computer); S[i].sum =S[i].english+S[i].math+S[i].chinese+S[i].politics+S[i].physics+S[i].chemistry+S[i].computer;
S[i].aver=S[i].sum/7;
if (max <S[i].sum){ max=S[i].sum; maxPostion=i;
}
}
printf(“%s”,S[maxPostion].sname); return 0;
}

50.(1.0分)复数运算
答案
#include “stdio.h” #include “string.h” typedef struct complex { double r; /* 实部 /
double i; /
虚部 */
} COMPLEX;
COMPLEX add(COMPLEX a,COMPLEX b){ COMPLEX t;
t.r=a.r+b.r;
t.i=a.i+b.i; return t;
}
COMPLEX sub(COMPLEX a,COMPLEX b){ COMPLEX t;
t.r=a.r-b.r;

t.i=a.i-b.i; return t;
}
COMPLEX mul(COMPLEX a,COMPLEX b){ COMPLEX t;
t.r=a.rb.r-a.ib.i; t.i=a.rb.i+a.ib.r;
return t;
}
COMPLEX div(COMPLEX a,COMPLEX b){ COMPLEX t;
t.r=(a.rb.r+a.ib.i)/(b.rb.r+b.ib.i);
t.i=(a.ib.r-a.rb.i)/(b.rb.r+b.ib.i); return t;
}
int main()
{
COMPLEX a,b,t;
scanf(“%lf%lf%lf%lf”,&a.r,&a.i,&b.r,&b.i); t=add(a,b);
printf(“sum is:%.2lf+%.2lfi\n”,t.r,t.i); t=sub(a,b);
printf(“difference is:%.2lf+%.2lfi\n”,t.r,t.i); t=mul(a,b);
printf(“product is:%.2lf+%.2lfi\n”,t.r,t.i); t=div(a,b);
printf(“quotient is:%.2lf+%.2lfi\n”,t.r,t.i); return 0;
}

51.(1.0分)头结点的单向链表
答案
#include “stdio.h” #include “stdlib.h” typedef int ElemType;
typedef struct tagLNode { //单链表结点类型ElemType data; //数据域
struct tagLNode *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型void CreateLinkF(LinkList *L)
{ //头插法创建单链表,调用input输入函数输入数据LinkList s;
*L=(LinkList)malloc(sizeof(LNode)); //创建头结点(*L)->next=NULL; //初始时为空表
int n; scanf(“%d”,&n); while (n!=0){
s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=n;
s->next=(*L)->next; //将s增加到开始结点之前(*L)->next=s; //头结点之后
scanf(“%d”,&n);
}
}
void ListTraverse(LinkList L)
{ //遍历L中的每个元素且调用函数visit访问它LinkList p=L->next; //p指向开始结点while(p!=NULL) { //若不是链尾继续
printf("%d ",p->data); //输出当前结点的数据域信息

p=p->next; //p指向直接后继结点
}
}

int main()
{
LinkList H; CreateLinkF(&H); ListTraverse(H); return 0;
}

52.(1.0分)链表的结点
答案
#include “stdio.h” #include “stdlib.h” typedef struct STUDENT{
long sno;
char name[10]; char gender; int age;
}ElemType;
typedef struct tagLNode { //单链表结点类型ElemType data; //数据域
struct tagLNode *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkF(LinkList *L,int n,void(input)(ElemType))
{ //头插法创建单链表,调用input输入函数输入数据LinkList s;
*L=(LinkList)malloc(sizeof(LNode)); //创建头结点(*L)->next=NULL; //初始时为空表
for (; n>0; n–) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点input(&s->data); //调用input输入数据域
s->next=(*L)->next; //将s增加到开始结点之前(*L)->next=s; //头结点之后
}
}

void input(ElemType *ep) //实现数据域元素输入的定制函数
{ //在函数中可以写更加复杂、任意形式、任意数目的输入
scanf(“%ld %s %c %d”,&ep->sno,ep->name,&ep->gender,&ep->age);
}

int LocateElem(LinkList L,long sno)
{
LinkList p=L; //p指向开始结点
while(p->next!=NULL) { //若不是链尾继续LinkList q;
q=p->next;
if(q->data.sno==sno) {
printf(“delete:%ld %s %c %d\n”,q->data.sno,q->data.name,q->data.gender,q->data.age); p->next=q->next;
break;
}
p=p->next; //指向直接后继结点
}
return 0; //关系不存在返回0

}

void ListTraverse(LinkList L)
{ //遍历L中的每个元素且调用函数visit访问它LinkList p=L->next; //p指向开始结点printf(“All students:\n”); while(p!=NULL) { //若不是链尾继续
printf(“%ld %s %c %\n”,p->data.sno,p->data.name,p->data.gender,p->data.age); p=p->next; //p指向直接后继结点
}
}

int main()
{
LinkList H; CreateLinkF(&H,5,input); long no; scanf(“%ld”,&no); LocateElem(H,no); ListTraverse(H);
return 0;
}

53.(1.0分)链表的逆序放置
答案
#include “stdio.h” #include “stdlib.h” #define N 4
char E[N];
typedef char ElemType;
typedef struct tagLNode { //单链表结点类型ElemType data; //数据域
struct tagLNode *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkF(LinkList *L)
{ //头插法创建单链表LinkList s;
*L=(LinkList)malloc(sizeof(LNode)); //创建头结点(*L)->next=NULL; //初始时为空表
int n=N,i=0; char c=‘a’;
for (; n>0; n–,c++,i++) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=E[i];
s->next=(*L)->next; //将s增加到开始结点之前(*L)->next=s; //头结点之后
}
}

void CreateLinkR(LinkList *L)
{ //尾插法创建单链表LinkList p,s;
p=*L=(LinkList)malloc(sizeof(LNode)); int n=N;
char c=‘a’;
for (; n>0; n–,c++) { //创建n个结点链表

s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=c;
s->next=(*L)->next; //将s增加到开始结点之前p->next=s, p=s;
}
p->next=NULL; //尾结点
}

void ListSave(LinkList L)
{ //遍历L中的每个元素,并将其节点数据按顺序存在数组中LinkList p=L->next; //p指向开始结点
int i=0;
while(p!=NULL) { //若不是链尾继续E[i]=p->data;
p=p->next; //p指向直接后继结点i++;
}
}

void ListTraverse(LinkList L)
{ //遍历L中的每个元素
LinkList p=L->next; //p指向开始结点int i=0;
while(p!=NULL) { //若不是链尾继续printf(“%c”,p->data);
p=p->next; //p指向直接后继结点i++;
}
}

int main()
{
LinkList H; CreateLinkR(&H); ListSave(H); CreateLinkF(&H); ListTraverse(H); return 0;
}

54.(1.0分)实现单向链表
答案
#include “stdio.h” #include “stdlib.h” typedef char datatype; struct node {
datatype data; struct node *next;
};
typedef struct node LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkR(LinkList *L,int n)
{ //尾插法创建单链表LinkList p,s;
p=*L=(LinkList)malloc(sizeof(LNode)); //创建头结点for (; n>0; n–) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=getchar(); //调用input输入数据域p->next=s, p=s; //将s插入到当前链表末尾

}
p->next=NULL; //尾结点
}

void ListTraverse(LinkList L)
{ //遍历L中的每个元素if (L==NULL) {
printf(“null\n”); return;
}
LinkList p=L->next; //p指向开始结点while(p!=NULL) { //若不是链尾继续putchar(p->data);
p=p->next; //p指向直接后继结点
}
}
void DestroyList(LinkList *L) //销毁单链表L
{
LinkList q,p=*L;//p指向头结点 while(p!=NULL) { //若不是链尾继续q=p->next; //指向直接后继结点free§; //释放结点存储空间
p=q; //直接后继结点
}
*L=NULL;//置为空表
}

int main()
{
LinkList H; int n;
scanf(“%d”,&n); CreateLinkR(&H,n); printf(“The content of list:”); ListTraverse(H); DestroyList(&H);
printf(“\nThe content of list:”); ListTraverse(H);
return 0;
}

55.(1.0分)实现链表的反转
答案
#include “stdio.h” #include “stdlib.h” #define N 5
int E[N];
typedef int ElemType;
typedef struct linka { //单链表结点类型int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkF(LinkList *L)
{ //头插法创建单链表LinkList s;
*L=(LinkList)malloc(sizeof(LNode)); //创建头结点(*L)->next=NULL; //初始时为空表
int n=N,i=0;

for (; n>0; n–,i++) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=E[i];
s->next=(*L)->next; //将s增加到开始结点之前(*L)->next=s; //头结点之后
}
}

void CreateLinkR(LinkList *L)
{ //尾插法创建单链表LinkList p,s;
p=*L=(LinkList)malloc(sizeof(LNode)); int n=N;
int c=1;
for (; n>0; n–,c++) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=c;
s->next=(*L)->next; //将s增加到开始结点之前p->next=s, p=s;
}
p->next=NULL; //尾结点
}

void ListSave(LinkList L)
{ //遍历L中的每个元素,并将其节点数据按顺序存在数组中LinkList p=L->next; //p指向开始结点
int i=0;
while(p!=NULL) { //若不是链尾继续E[i]=p->data;
p=p->next; //p指向直接后继结点i++;
}
}

void ListTraverse(LinkList L)
{ //遍历L中的每个元素
LinkList p=L->next; //p指向开始结点int i=0;
while(p!=NULL) { //若不是链尾继续printf("%d ",p->data);
p=p->next; //p指向直接后继结点i++;
}
}

int main()
{
LinkList H; CreateLinkR(&H); ListSave(H); CreateLinkF(&H); ListTraverse(H); return 0;
}

56.(1.0分)判断一个链表是否存在环
答案
#include “stdio.h” #include “stdlib.h”

#define N 5 int E[N];
typedef int ElemType;
typedef struct linka { //单链表结点类型int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkR(LinkList *L)
{ //尾插法创建单链表LinkList p,s;
p=*L=(LinkList)malloc(sizeof(LNode)); int n=N;
int c=1;
for (; n>0; n–,c++) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=c;
s->next=(*L)->next; //将s增加到开始结点之前p->next=s, p=s;
}
p->next=(*L)->next; //制造环
}

void Search(LinkList L)
{ //查找链表中是否存在环
LinkList p1=L,p2=L->next; //p1,P2指向开始结点while(p2!=NULL) { //若不是链尾继续
if(p1==p2) {
printf(“yes”); return;
}
p1=p1->next;
if (p2->next) p2=p2->next->next; else p2=NULL;
}
printf(“no”);
}

int main()
{
LinkList H; CreateLinkR(&H); Search(H); return 0;
}

57.(1.0分)将两个链表连接在一起
答案
#include “stdio.h” #include “stdlib.h” typedef int ElemType;
typedef struct linka { //单链表结点类型int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkR(LinkList *L,int n,int A[])
{ //尾插法创建单链表,调用input输入函数输入数据LinkList p,s;

p=*L=(LinkList)malloc(sizeof(LNode)); //创建头结点for (; n>0; n–) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=A[n-1]; //调用input输入数据域
p->next=s, p=s; //将s插入到当前链表末尾
}
p->next=NULL; //尾结点
}

void ListCat(LinkList *L1,LinkList *L2){ LinkList p,s;
p=(*L1)->next;
while (p->next!=NULL) p=p->next;//p指向L1链表的尾结点 s=(*L2)->next;
while (s!=NULL){ p->next=s; p=p->next;
s=s->next;
}
p->next=NULL;
}

void ListTraverse(LinkList L)
{ //遍历L中的每个元素
LinkList p=L->next; //p指向开始结点while(p!=NULL) { //若不是链尾继续
printf("%d ",p->data); //调用函数visit()访问结点p=p->next; //p指向直接后继结点
}
}

int main()
{
LinkList H1,H2;
int A[5]={1,2,3,4,5};
int B[6]={6,7,8,9,10,11};
CreateLinkR(&H1,5,A); CreateLinkR(&H2,6,B); ListCat(&H1,&H2); ListTraverse(H1); return 0;
}

58.(1.0分)找出单向链表的中间结点
答案
#include “stdio.h” #include “stdlib.h” #define N 5
int E[N];
typedef int ElemType;
typedef struct linka { //单链表结点类型int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkR(LinkList *L)
{ //尾插法创建单链表LinkList p,s;

p=*L=(LinkList)malloc(sizeof(LNode)); int n=N;
int c=1;
for (; n>0; n–,c++) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=c;
s->next=(*L)->next; //将s增加到开始结点之前p->next=s, p=s;
}
p->next=NULL;
}

void Search(LinkList L)
{ //查找链表中是否存在环
LinkList p1=L->next,p2=L->next; //p1,P2指向开始结点int cnt=0;
while(p2!=NULL) { //若不是链尾继续if (p2->next) {
p1=p1->next; p2=p2->next->next; cnt=cnt+2;
}
else {
cnt++; p2=NULL;
}
}
printf(“cnt:%d\n”,cnt); printf(“Mid:%d\n”,p1->data);
}

int main()
{
LinkList H; CreateLinkR(&H); Search(H); return 0;
}

59.(1.0分)结点插入到表中
答案
#include “stdio.h” #include “stdlib.h” typedef int ElemType;
typedef struct linka { //单链表结点类型int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型

void CreateLinkR(LinkList *L,int n,int A[])
{ //尾插法创建单链表,调用input输入函数输入数据LinkList p,s; p=*L=(LinkList)malloc(sizeof(LNode)); //创建头结点for (; n>0; n–) { //创建n个结点链表s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=A[n-1]; //调用input输入数据域
p->next=s, p=s; //将s插入到当前链表末尾
}
p->next=NULL; //尾结点

}
int ListInsert(LinkList *L,int e)
{ //在链表中按照顺序插入元素e
LinkList s,p=*L,r=(*L)->next; //p指向头结点
while(p!=NULL &&r!=NULL&&r->data <e) { //寻找插入位置p=p->next; //p指向直接后继结点
r=r->next;
}
if(p==NULL) return 0; //i值不合法返回假(0) else{
s=(LinkList)malloc(sizeof(LNode)); //创建新结点s->data=e;
s->next=p->next, p->next=s; //结点插入算法
}
return 1; //操作成功返回真(1)
}

void ListTraverse(LinkList L)
{ //遍历L中的每个元素
LinkList p=L->next; //p指向开始结点while(p!=NULL) { //若不是链尾继续
printf("%d ",p->data); //调用函数visit()访问结点p=p->next; //p指向直接后继结点
}
}

int main()
{
LinkList H;
int A[9]={10,9, 8,6,5,4,3,2,1};
CreateLinkR(&H,9,A); int n; scanf(“%d”,&n); ListInsert(&H,n); ListTraverse(H); return 0;
}

60.(1.0分)两个超长正整数的加法
答案

include “stdio.h” # include “string.h” # include “stdlib.h” struct Node{

int no;
struct Node *next;
} *p1,*p2;
int f1=1,f2=1; void creat()
{
p1=(struct Node *)malloc(sizeof(struct Node)); p1->next=NULL;
p2=(struct Node *)malloc(sizeof(struct Node)); p2->next=NULL;
}
void insert(char *num1,char *num2)
{
struct Node *q,*p; p=p1;

for (int i=0;i <strlen(num1);i++){
q=(struct Node *)malloc(sizeof(struct Node)); q->no=num1[i]-48;
if (p->nextNULL){ q->next=NULL;
p->next=q;
}else{
q->next=p->next; p->next=q;
}
}
p=p2;
for (int i=0;i <strlen(num2);i++){
q=(struct Node *)malloc(sizeof(struct Node)); q->no=num2[i]-48;
if (p->next
NULL){ q->next=NULL;
p->next=q;
}else{
q->next=p->next; p->next=q;
}
}

}
void add()
{
struct Node *m,*n; int c=0;
m=p1; n=p2;
while (m->next!=NULL && n->next!=NULL) {
int t=((m->next->no)*f1+(n->next->no)*f2+c)%10; c=((m->next->no)*f1+(n->next->no)*f2+c)/10;
m->next->no=t; m=m->next; n=n->next;
}
while (n->next!=NULL) { struct Node *q;
q=(struct Node *)malloc(sizeof(struct Node)); q->no=n->no;
q->next=NULL; m->next=q; m=m->next; n=n->next;
}
}
void print(struct Node *s)
{
char dest[102]; struct Node *p; p=s;
int i=0;
while (p->next!=NULL) { p=p->next;
dest[i]=p->no+48; i++;
}

dest[i]=‘\0’;
for (i=strlen(dest)-1;i>=0;i–) printf(“%c”,dest[i]); printf(“\n”);
}
int main()
{
char num1[101],num2[101]; creat();
gets(num1); gets(num2);
if (num1[0]‘-’&&num2[0]‘-’){ insert(num1+1,num2+1);
f1=-1,f2=-1;
}
else{
if (num1[0]‘-’){
insert(num1+1,num2); f1=-1;
}
if (num2[0]
‘-’){
insert(num1,num2+1); f2=-1;
}
if (num1[0]!=‘-’&&num2[0]!=‘-’) insert(num1,num2);
}
add(); print(p1); return 0;
}

61.(1.0分)国际象棋的马踏遍棋盘的演示程序
答案
#include “stdio.h” int main(){
int a[9][9]={0},object[9][9]={0},step[9][3]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};
int i,j,k,x,y,z,m,n,min; for(i=1;i <=8;i++)
for(j=1;j <=8;j++)
a[i][j]=0; /* clear data in array / for(i=1;i <=8;i++)
for(j=1;j <=8;j++) for(k=1;k <=8;k++){
x=i;y=j; x=x+step[k][1];
y=y+step[k][2];
if(x>=1&&x <=8&&y>=1&&y <=8) a[i][j]++ ; /
initilize array /
} /
start col and row;*/ scanf(“%d,%d”,&m,&n); for(z=1;z <=64;z++){
min =10; object[m][n]=z;
a[m][n]=0;
for(k=1;k <=8;k++){ x=m+step[k][1];
y=n+step[k][2];
if(x>=1&&x <=8&&y>=1&&y <=8) if(a[x][y]!=0){

–a[x][y];
if(a[x][y] <min){
min=a[x][y]; i=x;
j=y;
}
}
}
m=i;n=j;
}
for(i=1;i <=8;i++){ for(j=1;j <=8;j++){
if(j<8) {
printf(“%2d “,object[i][j]);
} else { printf(”%2d”,object[i][j]);
}
}
printf(“\n”);
}
return 0;
}

62.(1.0分)Hello World!
答案
#include “stdio.h” int main()
{
printf(“\n"); printf(“Hello World!\n”); printf("”); return 0;
}

63.(1.0分)输出文本
答案
#include “stdio.h” int main()
{
printf(“This is a C program.\n”); return 0;
}

64.(1.0分)求两数之和
答案
#include “stdio.h” int main( )
{
int a,b;
scanf(“%d %d”,&a,&b);
printf(“%d\n”,a+b); return 0;
}

65.(1.0分)三数比较大小
答案
#include “stdio.h” int main()

{
int a,b,c,max;
scanf(“%d %d %d”,&a,&b,&c); max=a;
if(max<b) max=b; if(max<c) max=c;
printf(“%d\n”,max); return 0;
}

66.(1.0分)方程求解
答案
#include “stdio.h” int main()
{
int x, y; scanf(“%d”,&x); y=xx+2x-10; printf(“%d\n”,y);
}

67.(1.0分)求两数的和与差
答案
#include “stdio.h” int main()
{
int a, b,sum,dif; scanf(“%d %d”,&a,&b); sum=a+b;
dif=a-b;
printf(“%d %d\n”,sum,dif);
}

68.(1.0分)计算长方体体积
答案
#include “stdio.h” int main()
{
int a,b,c;
scanf(“%d %d %d”,&a,&b,&c);
printf(“%d”,abc);
}

69.(1.0分)交换变量的值
答案
#include “stdio.h” int main()
{
int a,b,temp; scanf(“%d %d”,&a,&b); temp=a;
a=b; b=temp;
printf(“%d %d”,a,b);
}

70.(1.0分)用*号输出字母C

答案
#include “stdio.h” int main()
{
printf(“\n"); printf("\n");
printf("
\n");
printf("
**”); return 0;
}

71.(1.0分)输出变量所占储存空间大小
答案
#include “stdio.h” int main()
{
printf(“%d %d %d %d %d %d\n”,sizeof(short),sizeof(int),sizeof(long),sizeof(float),sizeof(double),sizeof(char));
}

72.(1.0分)计算国民生产总值增长百分比
答案
#include “stdio.h” #include “math.h” int main()
{
float p,r,n; r=0.07; n=10;
p=pow(1+r,n); printf(“%f\n”,p); return 0;
}

73.(1.0分)计算多少个月能还清贷款
答案
#include “stdio.h” #include “math.h” int main()
{
float d=300000,p=6000,r=0.01,m; m=log10(p/(p-d*r))/log10(1+r); printf(“%.1f\n”,m);
return 0;
}

74.(1.0分)练习输入与输出函数
答案
#include “stdio.h” #include “math.h” int main()
{
int a,b; float x,y; char c1,c2;
scanf(“%d %d”,&a,&b);
scanf(“%f %f”,&x,&y);
scanf(" %c %c",&c1,&c2); printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c”,a,b,x,y,c1,c2); return 0;

}

75.(1.0分)练习输入与输出
答案
#include “stdio.h” #include “math.h” int main()
{
char c1,c2;

c1=getchar(); c2=getchar();
printf(“用putchar输出语句:”); putchar(c1);
putchar(c2); printf(“\n”);
printf(“用printf输出语句:”); printf(“%c%c\n”,c1,c2);
return 0;
}

76.(1.0分)分钟转换日期计算器
答案
#include “stdio.h” int main(void)
{
long int m,y,d,m1; scanf(“%ld”,&m); y=m/60/24/365;
d=(m-y3652460)/60/24; m1=m-y3652460-d6024; if(m1>0)
d++;
printf(“%ld年%ld天\n”,y,d);
}

77.(1.0分)计算将水从初始温度加热到最终温度所需的能量
答案
#include “stdio.h” int main()
{
int m,t1,t2; double q;
scanf(“%d %d %d”,&m,&t1,&t2); q=4184.0m(t2-t1); printf(“%.2f焦耳\n”,q);
}

78.(1.0分)根据体重计算可以喝汽水的罐数
答案
#include “stdio.h” int main()
{
double m; long g;
scanf(“%lf”,&m); g=m*1000/7/0.35;
printf(“喝%ld罐汽水可杀死你!”,g);
}
79.(1.0分)输出浮点数的符号、整数部分和小数部分
答案
#include “stdio.h” #include “math.h” int main()
{
double a; int b; double c;
scanf(“%lf”,&a); printf(“sign:%c\n”,a <0?‘-’: ‘+’); b=abs((int)a);
printf(“integral part:%d\n”,b); c=a>0? a-b:fabs((a+b)); printf(“decimal fraction part:%lf\n”,c);
}

80.(1.0分)计算并输出sin(x)、cos(x)、|x|、ex、xy的值
答案
#include “stdio.h” #include “math.h” int main()
{
double x,y; scanf(“%lf%lf”,&x,&y);
printf(“sin(x):%lf\n”,sin(3.1415938x/180)); printf(“cos(x):%lf\n”,cos(3.141593x/180)); printf(“|x|:%lf\n”,fabs(x));
printf(“e的x次方:%lf\n”,exp(x));
printf(“x的y次方:%lf\n”,pow(x,y));
}

81.(1.0分)计算三角形的面积
答案
#include “stdio.h” #include “math.h” int main()
{
int a,b,c; double s,t;
scanf(“%d %d %d”,&a,&b,&c); s=(a+b+c)/2.0;
t=sqrt(s*(s-a)(s-b)(s-c)); printf(“%lf\n”,t);
}

82.(1.0分)四舍五入
答案
#include “stdio.h” int main()
{
double x=100.453627; printf(“%.1lf\n”,x);
printf(“%.2lf\n”,x);
printf(“%.3lf\n”,x);
printf(“%.4lf\n”,x);
}

83.(1.0分)分解9位长整数
答案
#include “stdio.h” int main()
{
long a; scanf(“%ld”,&a); while(a>0)
{
printf("%d ",a%1000); a=a/1000;
}
}

84.(1.0分)Harris-Benedict等式
答案
#include “stdio.h” int main()
{
double height,weight,BMR; int age;
char s; double k;

scanf(“%lf %lf %d %c”,&height,&weight,&age,&s); if(s==‘F’)
BMR=655+(4.3weight2.2)+(4.7height0.39)-(4.7age); else
BMR=66+(6.3
weight2.2)+(12.9height0.39)-(6.8age); k=BMR/230;
printf(“您需要消耗%.2lf块巧克力。”,k);
}

85.(1.0分)华氏转换为摄氏
答案
#include “stdio.h” int main ( ) {
float f,c; scanf(“%f”,&f);
c=(5.0/9)*(f-32);
printf(“%.2f\n”,c); return 0;
}

86.(1.0分)计算存款利息
答案
#include “stdio.h” #include “stdio.h” int main( )
{
float r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
int p0=0; scanf(“%4d”, &p0); p1 = p0 * (1 + r1); p2 = p0 * (1 + r2);
p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(“p1=%f\np2=%f\np3=%f\n”,p1,p2,p3); return 0;

}

87.(1.0分)转化大写字母为小写字母
答案
#include “stdio.h” int main ( ) {
char c1,c2; c1=getchar(); c2=c1+32;
putchar(c2); return 0;
}

88.(1.0分)输出BOY三个字符
答案
#include “stdio.h” int main ( ) {
char a,b,c; a=‘B’;
b=‘O’;
c=‘Y’;
putchar(a); putchar(b); putchar©; return 0;
}

89.(1.0分)练习输入输出函数
答案
#include “stdio.h” int main ( ) {
char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar©; return 0;
}

90.(1.0分)比大小
答案
#include “stdio.h” int main()
{ int a,b,c,temp,max;
scanf(“%d %d %d”,&a,&b,&c); temp=(a>b)?a:b; max=(temp>c)?temp:c; printf(“%d\n”,max);
return 0;
}

91.(1.0分)求平方根
答案
#include “stdio.h” #include “math.h” int main()
{

int i,k; scanf(“%d”,&i); k=sqrt(i); printf(“%d”,k); return 0;
}

92.(1.0分)函数求解
答案
#include “stdio.h” int main() {
int x,y; scanf(“%d”,&x); if(x <1) {
y=x; printf(“y=x=%d\n”,y);
} else if(x <10) { y=2x-1;
printf("y=2
x-1=%d\n",y);
} else { y=3x-11;
printf("y=3
x-11=%d\n",y);
}
return 0;
}

93.(1.0分)函数求解
答案
#include “stdio.h” int main()
{
int x,y; scanf(“%d”,&x); y=0;
if(x>0) y=1;
else if(x <0) y=-1;
printf(“y=%d\n”,y); return 0;
}

94.(1.0分)计算成绩分数所在等级
答案
#include “stdio.h” int main()
{
float score; char grade;
scanf(“%f”,&score); switch((int)(score/10)) { case 10:
case 9: grade=‘A’; break; case 8: grade=‘B’; break; case 7:

grade=‘C’; break; case 6: grade=‘D’; break; case 5:
case 4:
case 3:
case 2:
case 1:
case 0: grade=‘E’;
}
printf("%c\n ",grade); return 0;
}

95.(1.0分)数字操作
答案
#include “stdio.h” #include “math.h” int main()
{
int num,indiv,ten,hundred,thousand,ten_thousand,place; scanf(“%d”,&num);
if (num>9999) place=5;
else if (num>999) place=4;
else if (num>99) place=3;
else if (num>9) place=2;
else place=1;
printf(“位数:%d\n”,place); printf(“每位数字为:”); ten_thousand=num/10000;
thousand=(int)(num-ten_thousand10000)/1000; hundred=(int)(num-ten_thousand10000-thousand1000)/100;
ten=(int)(num-ten_thousand
10000-thousand1000-hundred100)/10; indiv=(int)(num-ten_thousand10000-thousand1000-hundred100-ten10); switch(place) {
case 5: printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv); printf(“\n反序数字为:”);
printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand);
break; case 4:
printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv); printf(“\n反序数字为:”); printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand);
break; case 3:
printf(“%d,%d,%d”,hundred,ten,indiv); printf(“\n反序数字为:”); printf(“%d%d%d\n”,indiv,ten,hundred);
break; case 2:

printf(“%d,%d”,ten,indiv);
printf(“\n反序数字为:”); printf(“%d%d\n”,indiv,ten); break;
case 1: printf(“%d”,indiv);
printf(“\n反序数字为:”); printf(“%d\n”,indiv);
break;
}
return 0;
}

96.(1.0分)求应发奖金总数
答案
#include “stdio.h” int main()
{
int i;
double bonus,bon1,bon2,bon4,bon6,bon10; bon1=1000000.1;
bon2=bon1+100000
0.075; bon4=bon2+2000000.05; bon6=bon4+2000000.03; bon10=bon6+4000000.015;
scanf(“%d”,&i); if (i <=100000)
bonus=i
0.1;
else if (i <=200000) bonus=bon1+(i-100000)*0.075; else if (i <=400000) bonus=bon2+(i-200000)*0.05; else if (i <=600000) bonus=bon4+(i-400000)*0.03; else if (i <=1000000) bonus=bon6+(i-600000)*0.015; else
bonus=bon10+(i-1000000)*0.01; printf(“%.2f\n”,bonus);
return 0;
}

97.(1.0分)求应发奖金总数,保留两位小数
答案
#include “stdio.h” int main()
{
int i;
double bonus,bon1,bon2,bon4,bon6,bon10; bon1=1000000.1;
bon2=bon1+100000
0.075; bon4=bon2+2000000.05; bon6=bon4+2000000.03; bon10=bon6+4000000.015;
scanf(“%d”,&i); switch( i / 100000) {
case 0: bonus=i
0.1; break;

case 1:
bonus=bon1+(i-100000)*0.075; break;

case 2:
case 3:
bonus=bon2+(i-200000)*0.05; break;
case 4:
case 5:
bonus=bon4+(i-400000)*0.03; break;
case 6:
case 7:
case 8:
case 9:
bonus=bon6+(i-600000)*0.015; break;
default :
bonus=bon10+(i-1000000)*0.01;
}
printf(“%.2f\n”,bonus); return 0;
}

98.(1.0分)按序输出数字
答案
#include “stdio.h” int main()
{
int t,a,b,c,d;
scanf(“%d %d %d %d”,&a,&b,&c,&d); if (a>b) {
t=a; a=b; b=t;
}
if (a>c) { t=a; a=c; c=t;
}
if (a>d) { t=a; a=d; d=t;
}
if (b>c) { t=b; b=c; c=t;
}
if (b>d) { t=b; b=d; d=t;
}
if (c>d) {

t=c; c=d; d=t;
}
printf(“%d %d %d %d\n” ,a,b,c,d); return 0;
}

99.(1.0分)输入任意点坐标,求该点的建筑高度
答案
#include “stdio.h” int main()
{
int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
scanf(“%f%f”,&x,&y);
d1=(x-x4)(x-x4)+(y-y4)(y-y4);
d2=(x-x1)(x-x1)+(y-y1)(y-y1);
d3=(x-x2)(x-x2)+(y-y2)(y-y2);
d4=(x-x3)(x-x3)+(y-y3)(y-y3);
if (d1>1 && d2>1 && d3>1 && d4>1) h=0;
printf(“%d\n”,h); return 0;
}

100.(1.0分)求方程实根
答案
#include “stdio.h” #include “math.h” int main(void)
{
int a,b,c; double p,x1,x2;
scanf(“%d %d %d”,&a,&b,&c); p=1.0bb-4.0ac;
if(p>=0){
x1=(-b+sqrt§)/2/a; x2=(-b-sqrt§)/2/a;
printf(“实根为%.2lf,%.2lf”,x1,x2);
}
else
printf(“无实根!”);
}

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟-宇的个人博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值