C程序设计课后练习题(1250/4)
下面是我写的书后的练习题是用vs2015实现的
代码有很多混乱的部分,,但是基本是可以实现的。
有些个别数学问题没有完成。
第一章
4.
例1
#include<stdio.h>
int main() {
printf("this is a C program.\n");
getchar();
return 0;
}
例2
#include<stdio.h>
int main() {
int a, b, sum;
a = 123;
b = 456;
sum = a + b;
printf("sum is %d\n", sum);
getchar();
return 0;
}
例3
#include<stdio.h>
#include<stdlib.h>
int most(int a, int b){
int c=0;
if (a > b){
c = a;
}
else
c = b;
return c;
}
int main(){
int a, b, c;
printf("请输入两个数字(a b):");
scanf_s("%d,%d", &a, &b);
c = most(a, b);
system("cls");
printf("c is %d", c);
return 0;
}
5.
#include<stdio.h>
int main(){
printf("***********************\nVery good!\n***********************\n");
return 0;
}
6.
#include<stdio.h>
#include<stdlib.h>
int most(int a, int b, int c){
if (a < b)
a = b;
if (a < c)
a = c;
return a;
}
int main(){
int a=0, b=0, c=0;
printf("请输入三个数字(用回车分隔):");
scanf("%d%d%d",&a,&b,&c);
c=most(a, b, c);
system("cls");
printf("most:%d", c);
return 0;
}
第二章
4.
(2)/*输入十个数,输入最大的*/
#include<stdio.h>
int main(){
int a[10] = {0};
int i = 0;
for (; i <10; i++){
printf("请输入的%d个输出:", i + 1);
scanf("%d",&a[i]);
if (a[0] < a[i]){
int u = 0;
u = a[0];
a[0] = a[i];
a[i] = u;
}
}
printf("最大:%d\n", a[0]);
return 0;
}
(3)/*有三个数,按大小顺序输出它们*/
#include<stdio.h>
void t(int* a, int* b){
int c;
c = *a;
*a = *b;
*b = c;
}
int main(){
int a[] = {66,99,101};
if (a[0] < a[1])
t(&a[0], &a[1]);
if (a[0] < a[2])
t(&a[0], &a[2]);
if (a[1] < a[2]);
t(&a[1], &a[2]);
for (int i = 0; i < 3; i++){
printf("第%d个数:%d\n", i + 1, a[i]);
}
return 0;
}
(4)/*求1+2+3+4+5+6+7+。。。+100*/
#include<stdio.h>
int main(){
int sum = 0;
for (int i = 1; i < 101; i++){
sum = sum + i;
}
printf("1+2+3+4+5+6+7+。。。+100=%d", sum);
return 0;
}
(5)/*判断一个数n能否被3和5同时整除*/
#include<stdio.h>
int main(){
int n = 37;
if (n%15 == 0)
printf("可以\n");
else
printf("不行\n");
return 0;
}
(6)/*将100到200之间的素数输出*/
#include<stdio.h>
#include<math.h>
int t(int a){
int i = 1;
int j = 1;
while (i<sqrt(a)){
i++;
if (a%i == 0){
j = 0;
break;
}
}
return j;
}
int main(){
for (int i = 100; i <= 200; i++){
if (t(i))
printf("%d\n",i);
}
return 0;
}
(7)/*求两个数n和m的最大公约数*/
#include<stdio.h>
//#include<math.h>
int main(){
int n = 228, m = 329;
int j = 1;
if (n < m){
int c = 0;
c = n;
n = m;
m = c;
}
for (int i=1; i <= n; i++){
if (n%i == 0 && m%i == 0)
j = i;
}
printf("最大公约数:%d\n", j);
return 0;
}
5/6./*求两个数n和m的最大公约数*/
#include<stdio.h>
int main(){
float sum = 0;
for (float i = 1,j=1; i <= 100; i++,j=j*(-1)){
sum = sum + 1 / i*j;
}
printf("sum=%f\n", sum);
return 0;
}/*求两个数n和m的最大公约数*/
#include<stdio.h>
int main(){
float sum = 0;
for (float i = 1,j=1; i <= 100; i++,j=j*(-1)){
sum = sum + 1 / i*j;
}
printf("sum=%f\n", sum);
return 0;
}
8.(1)/*1900-2000中闰年的年份*/
#include<stdio.h>
int main(){
for (int i = 1900; i <= 2000; i++){
if (((i % 4 == 0) && (i % 100 != 0) )|| ((i % 100 == 0) && (i % 400 == 0)))
printf("%i\n", i);
}
return 0;
}
(2)/*二次方程求根*/
#include<stdio.h>
#include<math.h>
int main(){
float a = 1.000, b = 6.000, c = 3.000;
if ((b*b - 4 * a*c) > 0)
printf("根为:%f、%f\n", (-b + (sqrt(b*b - 4 * a*c))) / 2 * a, (-b - (sqrt(b*b - 4 * a*c))) / 2 * a);
else if ((b*b - 4 * a*c) == 0)
printf("根为:%f\n", (-b + (sqrt(b*b - 4 * a*c))) / 2 * a);
else
printf("无根\n");
return 0;
}
(3)/*输入十个数,输出其中最大的数*/
#include<stdio.h>
int main(){
int a[10] = {0};
//输入
for (int i = 1; i <= 10; i++){
printf("请输入第%d个数:", i);
scanf_s("%d",&a[i-1]);
}
//排序(冒泡排序)
int x=0;
for (int i = 0; i < 10; i++){
for (int j =0; j < 10-i;j++){
if (a[j] < a[j+1]){
x = a[j];
a[j] = a[j + 1];
a[j + 1] = x;
}
}
}
//输出
printf("%d\n", a[0]);
return 0;
}
第三章
1./*计算一9%增长的国民生产总值,十年后是现在的多少倍*/
#include<stdio.h>
#include<math.h>
int main(){
float p = 0, r = 0.09, n = 10;
p = pow(1 + r, n);
printf("p=%f", p);
return 0;
}
2./*计算一9%增长的国民生产总值,十年后是现在的多少倍*/
#include<stdio.h>
#include<math.h>
int main(){
float p1=0.0414,p2=0.0468,p3=0.054,p5=0.0585,
p=0.0072,
plan1 = 0, plan2 = 0, plan3 = 0, plan4 = 0, plan5 = 0 ;
plan1 = 1000*(1 + p5 * 5);
plan2 = 1000 * (1 + p3 * 3)*(1 + p2 * 2);
plan3 = 1000 * (1 + p2 * 2)*(1 + p3 * 3);
plan4 = 1000 * pow((1 + p1), 5);
plan5 = 1000 * pow((1 + p), 4 * 5);
printf("plan1=%f\nplan2=%f\nplan3=%f\nplan4=%f\nplan5=%f\n", plan1, plan2, plan3, plan4, plan5 );
return 0;
}
3./*300000还6000,利息是1%要换几个月*/
#include<stdio.h>
#include<math.h>
int main(){
float m = 0, p = 6000, d = 300000, r = 0.01;
int mm = 0, mmm=0;
m = (log10(p) - log10(p - d*r)) / log10(1 + r);
mm = m * 100;
if (mm = mm % 10 > 4){
mmm = 1;
}
mm = m * 100 + mmm;
m = mm ;
m = m *0.01;//不知到为什么会出现许多莫名其妙的小数位
printf("m=%f\n", m );
return 0;
}
6./*China译成密码,分别用printf和scanf输出*/
#include<stdio.h>
int main(){
char c1 = 'C', c2 = 'h', c3 = 'i', c4 = 'n', c5 = 'a';
c1 = c1 + 4;
c2 = c2 + 4;
c3 = c3 + 4;
c4 = c4 + 4;
c5 = c5 + 4;
printf("%c%c%c%c%c\n", c1, c2, c3, c4, c5);
putchar(c1);
putchar(c2);
putchar(c3);
putchar(c4);
putchar(c5);
return 0;
}
7./*计算圆的各项数据*/
#include<stdio.h>
#include<math.h>
int main(){
double r = 1.5, h = 3, c = 0, cs = 0, vs = 0, cv = 0, vv = 0;
vs = pow(r, 2)*3.14 * 4;
printf("球体的表面积:%f\n", vs);
return 0;
}
8./*关于getchar*/
#include<stdio.h>
#include<math.h>
int main(){
int c1, c2;
c1=getchar();
c2=getchar();
printf("%c,%c\n%d,%d\n", c1, c2, c1, c2);
putchar(c1);
putchar(c2);
return 0;
}
第四章
6./*输入x,输出y,*/
#include<stdio.h>
#include<stdlib.h>
int main(){
int x = 0, y = 0;
printf("请输入x:");
scanf("%d", &x);
if (x < 1)
y = x;
else if (x >= 1 && x < 10)
y = 2 * x - 1;
else
y = 3*x - 11;
printf("y=%d\n", y);
return 0;
}
8./*输入成绩,输出成绩等级*/
#include<stdio.h>
int main(){
int a=0;
char b='A';
printf("请输入成绩:");
scanf_s("%d",&a);
if (a <= 100 && a >= 90)
b = 'A';
else if (a < 90 && a >= 80)
b = 'B';
else if (a < 80 && a >= 70)
b = 'C';
else if (a < 70 && a >= 60)
b = 'D';
else if (a < 60 && a >= 0)
b = 'E';
printf("%c", b);
return 0;
}
9./*输入一个不多于5位的正整数,给出对应的输出*/
#include<stdio.h>
int main(){
int a=0;
int b1 = 0,b2 = 0, b3 = 0, b4 = 0, b5 = 0;
printf("请输入一个不多于五位的整数:");
scanf_s("%d", &a);
//有几位数
if (a - 10000 >= 0)
printf("万\n");
else if (a - 1000 >= 0)
printf("千\n");
else if (a - 100 >= 0)
printf("百\n");
else if (a - 10 >= 0)
printf("十\n");
else
printf("个\n");
//各位数的值
b1 = (a / 10000)%10;
b2 = (a / 1000)%10;
b3 = (a / 100)%10;
b4 = (a / 10)%10;
b5 = (a / 1)%10;
printf("个:%d十:%d百:%d千:%d万:%d",b1,b2,b3,b4,b5);
printf("\n");
//按逆序输出个位数字
if (b5+b4+b3+b2+b1!=0)
printf("%d",b5);
if (b4 + b3 + b2 + b1 != 0)
printf("%d", b4);
if (b3 + b2 + b1 != 0)
printf("%d", b3);
if (b2 + b1 != 0)
printf("%d", b2);
if (b1 != 0)
printf("%d", b1);
return 0;
}
10./*计算奖金*/
#include<stdio.h>
int main(){
float a = 0,b=0,sum=0;
printf("请输入利润:");
scanf_s("%f", &a);
if (a >0)
sum = a*0.1;
if (a > 100000)
sum = sum - (a - 100000)* 0.025;
if (a > 200000)
sum = sum - (a - 200000)*0.025;
if (a > 400000)
sum = sum - (a - 400000)* 0.02;
if (a > 600000)
sum = sum - (a - 600000)* 0.015;
if (a > 1000000)
sum = sum - (a - 1000000)* 0.005;
printf("sum=%10.2lf\n", sum);
return 0;
}
12./*输入一点判断其高度*/
#include<stdio.h>
#include<math.h>
int main(){
float x = 0, y = 0;
int h = 0;
printf("请输入x:");
scanf_s("%f", &x);
printf("请输入y:");
scanf_s("%f", &y);
if (sqrt((2 - x)*(2 - x) + (2 - y)*(2 - y) )<= 1
|| sqrt((-2 - x)*(-2 - x) + (2 - y)*(2 - y)) <= 1
|| sqrt((2 - x)*(2 - x) + (-2 - y)*(-2 - y)) <= 1
|| sqrt((-2 - x)*(-2 - x) + (-2 - y)*(-2 - y)) <= 1)
h = 10;
printf("h=%d\n",h);
return 0;
}
第五章
3./*输入两个整数求其最小公倍数和最大公约数*/
#include<stdio.h>
int main(){
int m = 0, n = 0;
int a = 6, b = 3;
printf("请输入第一个整数(较小):");
scanf_s("%d", &a);
printf("请输入第二个整数(较大):");
scanf_s("%d", &b);
for (int i = a; i >0; i--){
if ((a%i == 0) && (b%i == 0)){
n = i;
break;
}
}
m = (a / n)*b;
printf("最大公因子为:%d,最小公倍数为;%d\n", n, m);
return 0;
}
4./*输入一行字符串,统计之中英文字母、空格、数字和其他字符的个数*/
#include<stdio.h>
int main(){
char text[128] = { 0 };
int a = 0;//字母
int b = 0;//空格
int c = 0;//数字
int d = 0;//其它字符
printf("请输入:");
gets(text);
for (int i = 0; text[i] != 0; i++){
if ((text[i] <= 122 && text[i] >= 97) || (text[i] <= 90 && text[i] >= 65))
a = a + 1;
else if (text[i] == 32)
b = b + 1;
else if (text[i] <= 57 && text[i] >= 48)
c = c + 1;
else
d = d + 1;
}
printf("字母个数:%d,空格字数:%d,数字个数:%d,其它字符:%d\n", a, b, c, d);
return 0;
}
5./*求a+aa+aaa+aaaa+aaaaa+n个a*/
#include<stdio.h>
#include<math.h>
int main(){
int a = 3;
int n = 4;
int sum = 0;
for (int i = 0; i < n; i++){
sum = sum + a*pow(10, i)*(n-i);
}
printf("sum=%d\n", sum);
return 0;
}
6./*求1!+2!+3!+4!+。。。+20!*/
#include<stdio.h>
int main(){
int sum = 0;
for (int i = 1; i <= 9; i++){
int k = 1;
for (int j = 1; j <= i; j++){
k = k*j;
}
sum = sum + k;
}
printf("sum=%d\n", sum);
return 0;
}
7./*100Σk=1(k)+50Σk=1(k^2)+10Σk=1(1/k)*/
#include<stdio.h>
int main(){
float sum = 0;
for (int i = 0; i < 100; i++){
sum = sum + (i+1);
}
for (int i = 0; i < 50; i++){
sum = sum + (i + 1)*(i + 1);
}
for (float i = 0; i < 10; i++){
sum = sum + 1 / (i + 1);
}
printf("sum=%f\n", sum);
return 0;
}
8./*输出所有水仙花数*/
#include<stdio.h>
int main(){
for (int i = 1; i <= 9; i++){
for (int j = 0; j <= 9; j++){
for (int k = 0; k <= 9; k++){
if (i*i*i + j*j*j + k*k*k == i * 100 + j * 10 + k)
printf("%d%d%d\n", i, j, k);
}
}
}
return 0;
}
9./*输出1000以内的所有完数并输出其因子*/
#include<stdio.h>
int main(){
int sum = 0;
for (int i = 1; i <= 1000; i++){
sum = 0;
for (int j = 1; j < i; j++){
if (i%j == 0){
sum = sum + j;
}
}
if (sum == i){
printf("%d\n", i);
for (int j = 1; j < i; j++){
if (i%j == 0)
printf("因子:%d", j);
}
printf("\n");
}
}
return 0;
}
10./*输出1000以内的所有完数并输出其因子*/
#include<stdio.h>
int main(){
float sum = 0;
// float c[21];
//c[0] = 1;
//c[1] = 2;
float a = 1, b = 2,c=0;
/*for (int i = 2; i <= 21; i++){
c[i] = c[i - 1] + c[i - 2];
}
for (int i = 1; i < 21; i++){
sum = sum + c[i] / c[i - 1];
}*/
for (int i = 0; i < 20; i++){
sum = sum + b / a;
c = a;
a = b;
b = c + b;
}
printf("sum=%lf\n", sum);
return 0;
}
11./*一个球每次弹一半(从100米开始),弹十次经过多少米,第十次反弹多高*/
#include<stdio.h>
int main(){
float l = 100;
float s = 0;
for (int i = 0; i < 9; i++){
s = s+l * 3 / 2;
l = l / 2;
}
printf("s=%f,s=%f\n", s, l);
return 0;
}
12./*吃了九次桃(每次*1/2+1),还剩一个桃,求没吃时多少桃子*/
#include<stdio.h>
int main(){
int sum = 1, a = 1;
for (int i = 0; i < 9; i++){
sum = (sum + 1) * 2;
}
printf("sum=%d\n", sum);
return 0;
}
13./*用迭代法算x=sqrt(a)*/
#include<stdio.h>
int main(){
float a = 2,x=0;
float n =1 , m = 0;
for (int i=1;i<10/*n - m > 0.1||n-m<-0.1*/;i++){//1.#INF0000 不知到怎么处理
x = m;
m = (n + a / n) / 2;
n = x;
}
printf("m=%f\n", m);
return 0;
}
14./*用牛顿迭代法求2x^3-4x^2+3x-6=0在1.5附近的根*/
#include<stdio.h>
#include<math.h>
int main(){
float x = 0, y = 0, y000=0,x1 = 1.5, x2 = 0;
y = 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
y000 = 6 * pow(x, 2) - 8 * x + 3 ;
for (int i = 0; i < 6; i++){
x = x1;
y = 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
y000 = 6 * pow(x, 2) - 8 * x + 3;
x1 = x - y / y000;
}
printf("x1=%f\n", x1);
return 0;
}
15./*用二分法求2x^3-4x^2+3x-6=0在(-10,10)之间的根*/
#include<stdio.h>
#include<math.h>
int main(){
float x = 0, yc = 0, ya = 0,yb=0;
float a = -10, b = 10,c=0;
for (int i=0;i<100;i++){
c = (a + b) / 2;
x = c;
yc = 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
x = a;
ya = 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
x = b;
yb = 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
if (yb*yc<0)
a = c;
else if (ya*yc<0)
b = c;
else
break;
}
printf("c=%f\n", c);
/*float x = 1.25,y=0;
y = 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;*/
return 0;
}
16./*输出以下图案*/
/*
*
***
*****
*******
*****
***
*
*/
#include<stdio.h>
int main(){
for (int i = 0; i < 4; i++){
for (int j = 0+i; j < 3; j++)
printf(" ");
for (int k = 0; k < 1+i*2; k++)
printf("*");
printf("\n");
}
for (int i = 0; i < 3; i++){
for (int j = 0; j < 1+i; j++)
printf(" ");
for (int k = 0; k < 5 - i * 2; k++)
printf("*");
printf("\n");
}
return 0;
}
17./*输出比赛名单*/
#include<stdio.h>
void sc(int a,int b,int c){
if (a != 1 && c != 1 && c != 3)
printf("a=%d,b=%d,c=%d\n", a, b, c);
}
int main(){
//int n[3] = { 1, 2, 3 };
int a = 1, b =2, c =3;
sc(a, b, c);
a = 1, b = 3, c = 2;
sc(a, b, c);
a = 2, b = 1, c = 3;
sc(a, b, c);
a = 2, b = 3, c = 1;
sc(a, b, c);
a = 3, b = 1, c = 2;
sc(a, b, c);
a = 3, b = 2, c = 1;
sc(a, b, c);
return 0;
}
第六章
1./*求100以内的素数*/
#include<stdio.h>
#include<math.h>
void xz(int a){
for (int i = 2; i <= sqrt(a); i++){
if (a%i == 0){
return;
}
}
printf("%d\n",a);
}
int main(){
for (int i = 2; i < 101; i++)
xz(i);
return 0;
}
3./*求一个3*3整型矩阵对角线元素之和*/
#include<stdio.h>
int main(){
int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int sum = 0;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (i == j)
sum = sum + a[i][j];
}
}
printf("sum=%d\n", sum);
return 0;
}
4./*有一个已排好序的数组,要求按顺序插入一个数*/
#include<stdio.h>
int main(){
int a[9] = { 9, 7, 5, 4, 3, 1 };
int b = 6,t=0;
for (int i = 0; i < 9; i++){
if (a[i] < b){
for (; i < 9; i++){
t = a[i];
a[i] = b;
b = t;
}
}
}
for (int i = 0; i < 9; i++){
printf("a[%d]=%d\n", i, a[i]);
}
return 0;
}
5./*将一个数组逆序后存放*/
#include<stdio.h>
int main(){
int a[10] = { 1, 2, 3, 4, 5, 6 };
for (int i = 0; i < 10; i++){
printf("a[%d]=%d\n", i, a[i]);
}
for (int i = 0; i < 10/2; i++){
int x = 0;
x = a[i];
a[i] = a[9 - i];
a[9 - i] = x;
}
for (int i = 0; i < 10; i++){
printf("a[%d]=%d\n", i, a[i]);
}
return 0;
}
6./*输出杨辉三角的前十行*/
#include<stdio.h>
int main(){
int a[10][10] = { 0 };
a[0][0] = 1;
a[1][0] = 1;
a[1][1] = 1;
//写入所有的‘1’
for (int i = 0; i < 10; i++){
a[i][0] = 1;
a[i][i] = 1;
}
//写入剩下的数
for (int i = 2; i < 10; i++){
for (int j = 1; j < i; j++){
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
//输出
for (int i = 0; i < 10; i++){
for (int j = 0; j <= i; j++){
printf("%d",a[i][j]);
}
printf("\n");
}
return 0;
}
7./*输出一个1-n^2的幻方,没解出来*/
#include<stdio.h>
int main(){
int n = 4;
int a[4][4];
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
a[i][j] = i * n + j +1;
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
printf("%3d", a[i][j]);
}
printf("\n");
}
//横
for (int i = 0; i < n; i++){
int sum = 0;
for (int j = 0 ; j < n; j++){
sum = sum + a[i][j];
}
printf("sum=%d\n", sum);
}
//竖
printf("000000000000000000\n");
for (int i = 0; i < n; i++){
int sum = 0;
for (int j = 0; j < n; j++){
sum = sum + a[j][i];
}
printf("sum=%d\n", sum);
}
//斜
printf("000000000000000000\n");
int sum = 0;
for (int i = 0; i < n; i++){
sum = sum + a[i][i];
}
printf("sum=%d\n", sum);
sum = 0;
for (int i = 0; i < n; i++){
sum = sum + a[i][3-i];
}
printf("sum=%d\n", sum);
return 0;
}
8./*找出一个二维数组的鞍点*/
#include<stdio.h>
int main(){
int a[6][6];
for (int i = 0; i < 6; i++){
for (int j = 0; j < 6; j++){
a[i][j] = i * 6 + j + 1;
}
}
for (int i = 0; i < 6; i++){
for (int j = 0; j < 6; j++){
printf("%5d",a[i][j]);
}
printf("\n");
}
//寻找
for (int i = 0; i < 6; i++){
int x = 0,s=1;
int n = -1, m = -1;
//寻找行最大
for (int j = 0; j < 6; j++){
if (a[i][j] > x){
x = a[i][j];
n = i, m = j;
}
}
//验证列最小
for (int j = 0; j < 6; j++){
if (a[n][m] >a[j][m]){
s = 0;
break;
}
}
if (s)
printf("鞍点a[%d][%d]=%d\n", n, m, a[n][m]);
}
return 0;
}
9./*有15个数按大小顺序存在一个数组中,输入一个数,用懵
折半查找出其位置,并输出其位置*/
#include<stdio.h>
int main(){
int a[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int b = 6,n=0,m=15,l=0;
for (n = 0,m=15; !((a[l] == b)||(n-m==0));l = n + (m - n) / 2){
if (a[l] < b)
n = l;
else
m = l;
}
if (a[l] == b)
printf("%d\n", l);
return 0;
}
12./*将一段字母加密,并输出原文及密码*/
#include<stdio.h>
int main(){
char a[10] = { 'a', 'b', 'c', 'x', 'y', 'z' };
char b[10] = { 0 };
for (int i = 0; a[i] != 0; i++){
if (a[i] <= 122 && a[i]>=97)
b[i] = 122-a[i]+97;
}
printf("a:%s\nb:%s\n", a, b);
return 0;
}
13./*把两个字符串连接起来*/
#include<stdio.h>
int main(){
char a[10] = "faeawfwae";
char b[10]="hyrcy";
char v[30] = { 0 };
int i;
for ( i= 0; a[i]!=0; i++){
v[i] = a[i];
}
for (int j = 0; b[j] != 0; j++,i++){
v[i] = b[j];
}
printf("v:%s", v);
return 0;
}
14./*计较两个字符串s1、s2*/
#include<stdio.h>
int main(){
char s1[10]="0";
char s2[10]="0";
gets(s1);
gets(s2);
int i = 0;
for (; s1[i] !=0&& s2[i]!=0;){
i++;
if (s1[i] != s2[i]){
printf("%d\n", s1[i] - s2[i]);
break;
}
}
if (s1[i] == 0 && s2[i] == 0)
printf("0\n");
else if (s1[i] != 0 && s2[i] == 0)
printf("%d\n", s1[i]);
else if (s1[i] == 0 && s2[i] != 0)
printf("%d\n", s2[i]);
return 0;
}
15./*复制一个字符串*/
#include<stdio.h>
int main(){
char s1[10] = "568794";
char s2[10];
int i = 0;
for (; s1[i] != 0; i++){
s2[i] = s1[i];
}
s2[i] = s1[i];
printf("s1:%s\ns2:%s\n", s1,s2);
return 0;
}
第七章
4./*3*3的二维整形数组转置*/
#include<stdio.h>
void turn(int a[3][3]){
int b[3][3];
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
b[j][i] = a[i][j];
}
}
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
a[i][j] =b[i][j];
}
}
}
int main(){
int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
turn(a);
return 0;
}
5./*反序输出输入的字符串*/
#include<stdio.h>
void turn(char s1[10]){
int i = 0;
char t=0;
for (; s1[i] != 0; i++);
for (int j = 0; i!=j&&(i-1)!=j; j++, i--){
t = s1[i-1];
s1[i-1] = s1[j];
s1[j] = t;
}
}
int main(){
char s1[10] = { 0 };
gets(s1);
printf("%s\n", s1);
turn(s1);
printf("逆序:%s\n", s1);
return 0;
}
7./*复制一个字符串的首字母到另一个字符串*/
#include<stdio.h>
void t(char s1[], char s2[]){
s1[0] = s2[0];
}
int main(){
char a[5] = { 1, 1, 1, 1, 1 };
char b[5] = { 2, 2, 2, 2, 2 };
t(a, b);
return 0;
}
8./*复制一个字符串的首字母到另一个字符串*/
#include<stdio.h>
void shuru(){
char s[5] = { 0 };
gets(s);
printf("%c %c %c %c\n", s[0], s[1], s[2], s[3]);
}
int main(){
shuru();
return 0;
}
9./*输入一个字符串,输出其中最长的*/
#include<stdio.h>
void find(char* a){
char* b=a;
int i,j,l=0;
for (i = 0; a[i] != 0; i++){
for (j=0;a[i+j]>=97&&a[i+j]<=122;j++){
}
if (j > 0){
l = j;
b = a[i];
}
i = i + j;
}
i = i - j - 1;
while (a[i] >= 97 && a[i] <= 122){
putchar(a[i]);
i++;
}
}
int main(){
char text[128] = { 0 };
gets(text);
find(text);
return 0;
}
13./*求n阶勒让德多项式的值*/
#include<stdio.h>
int x = 6;
double p(double i){
if (i == 0){
return 1;
}
else if (i == 1){
return x;
}
else
return (2 * i - 1)*x - p(i - 1) - (i - 1)*p(i - 2) / 2;
}
int main(){
int i = 3;//i为第几n
printf("p[%d]=%f\n", i, p(i));
return 0;
}
14.。。。未完成
16./*16进制转换成10进制*/
#include<stdio.h>
void sl(int a){
printf("%X\n",a);
}
int main(){
int a = 0;
scanf_s("%d",&a);
sl(a);
return 0;
}
17./*输入一个数字,将其转换成字符串输出*/
#include<stdio.h>
void sl(int c){
char a[10];
char w;
for (int i = 0; i < 9 &&c != 0; i++,a[i]=c){
w= c % 10;
a[i] = w+48;
c = c / 10;
}
printf("%s\n", a);
}
int main(){
int a = 654;
scanf("%d", &a);
sl(a);
return 0;
}
18./*给出年月日,计算这是第几天*/
#include<stdio.h>
void sl(int a[3]){
int b,c;
if (a[0] %4== 0 && (a[1] % 100) != 0){
c = 29;
}
if (a[0] % 400==0)
c = 29;
else
c = 28;
if (a[1] == 1)
b = a[2];
else if (a[1] == 2)
b = 31 + a[2];
else if (a[1] == 3)
b = 31 +c+ a[2];
else if (a[1] == 4)
b = 31 +c+31 +a[2];
else if (a[1] == 5)
b = 31 + c + 31 + 30+a[2];
else if (a[1] == 6)
b = 31 + c + 31 + 30 +31+a[2];
else if (a[1] == 7)
b = 31 + c + 31 + 30 + 31 + 30+a[2];
else if (a[1] == 8)
b = 31 + c + 31 + 30 + 31 + 30 +31+ a[2];
else if (a[1] == 9)
b = 31 + c + 31 + 30 + 31 + 30 + 31 + 31+a[2];
else if (a[1] == 10)
b = 31 + c + 31 + 30 + 31 + 30 + 31 + 31 +30+ a[2];
else if (a[1] == 11)
b = 31 + c + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31+a[2];
else if (a[1] == 12)
b = 31 + c + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30+a[2];
printf("这是这年的第%d天\n",b);
}
int main(){
int a[3];
printf("请输入年:");
scanf_s("%d",&a[0]);
printf("请输入月:");
scanf_s("%d", &a[1]);
printf("请输入日:");
scanf_s("%d", &a[2]);
sl(a);
return 0;
}
第八章
1./*输入3个整数,按从小到大的顺序输出*/
#include<stdio.h>
void swap(int* p1,int* p2){
int n;
n = *p2;
*p2 = *p1;
*p1 = n;
}
int main(){
int* p1,* p2,* p3;
int n1, n2, n3;
printf("请输入n%d:",1);
scanf_s("%d", &n1);
printf("请输入n%d:",2);
scanf_s("%d", &n2);
printf("请输入n%d:",3);
scanf_s("%d", &n3);
p1 = &n1;
p2 = &n2;
p3 = &n3;
//比较
if (p1 > p2)
swap(p1, p2);
if (p1 > p3)
swap(p1, p3);
if (p2 > p3)
swap(p2, p3);
printf("p1:%d\np2:%d\np3:%d\n", *p1, *p2, *p3);
return 0;
}
2./*输入三个字符串,按从小到大的顺序输出*/
#include<stdio.h>
void swap (char a[], char b[]){
char c[10];
strcpy(c, a);
strcpy(a, b);
strcpy(b, c);
}
int main(){
char str1[10], str2[10], str3[10];
printf("请输入字符串:");
gets(str1);
printf("请输入字符串:");
gets(str2);
printf("请输入字符串:");
gets(str3);
//比较
if (strcmp(str1,str2)>0)
swap(str1, str2);
if (strcmp(str1, str3)>0)
swap(str1, str3);
if (strcmp(str2, str3)>0)
swap(str2, str3);
printf("%s\n%s\n%s\n", str1, str2, str3);
return 0;
}
3./*输入十个数,最小的和第
一个换,最的和最后一个换*/
#include<stdio.h>
int main(){
int a[10];
int* p1,* p2;
int s;
/*
a[0] = 2;
a[1] = 7;
a[2] = 9;
a[3] = 2;
a[4] = 12;
a[5] = 6;
a[6] = 7;
a[7] = 99;
a[8] = 1;
a[9] = 5;
*/
//输入
for (int i = 0; i < 10; i++){
printf("a[%d]:", i+1);
scanf_s("%d", &a[i]);
}
//找到最小的
p1 = a;
for (int i = 0; i < 10; i++){
if (*p1 > a[i])
p1 = &a[i];
}
s = *p1;
*p1 = a[0];
a[0] = s;
//找到最大的
p2 = a;
for (int i = 0; i < 10; i++){
if (*p2 < a[i])
p2 = &a[i];
}
s = *p2;
*p2 = a[9];
a[9] = s;
for (int i = 0; i < 10;i++ ){
printf("%d\n", a[i]);
}
getchar();
return 0;
}
4./*有n个整数,使数向后移m个位置,
在最后m个数放在前m个位置*/
#include<stdio.h>
int main() {
int n = 10, m = 3;
int a[100], b[100];
int* p1 = a, *p2 = b;
//输入数字
for (int i = 0; i < n; i++) {
a[i] = i + 1;
}
//a移入b
for (int i = 0; i < n; i++) {
b[i] = a[i];
}
//后移1
for (int i = m; i < n; i++,p2++) {
a[i] = *p2;
}
//后移2
for (int i = 0; i < m; i++, p2++) {
a[i] = *p2;
}
//输出
for (int i = 0; i < n; i++) {
printf("%d\n", *(p1 + i));
}
return 0;
}
5./*n个人围成一个圈,报数三的出列
输出剩下的*/
#include<stdio.h>
int main() {
int a[100];
int n = 7, m = 0, *p = a;
for (int i = 0; i < n; i++) {
a[i] = i + 1;
}
for (; m != n;m++,printf("m=%d,*p=%d\n",m,*(p-1)),*(p-1)=0) {
//printf("m=%d\n", m );
for (int i = 0; i < 3; ) {
if (p == a + n)
p = a;
else if (*p == 0)
p++;
else
p++, i++;
}
}
return 0;
}
6./*输入一个字符串,输出其长度*/
#include<stdio.h>
#include<stdlib.h>
int main() {
char a[100],* p;
p = a;
gets_s(a);
for (int i = 0; *p != 0; p++, i++, printf("i=%d\n", i));
return 0;
}
7./*输入一个字符串,输出其长度*/
#include<stdio.h>
#include<stdlib.h>
int main() {
char a[100],* p;
p = a;
gets_s(a);
for (int i = 0; *p != 0; p++, i++, printf("i=%d", i));
return 0;
}
8./*输入一段文字,输出其大写字母、小写字母、
空格、数字、及其他字符各是多少*/
#include<stdio.h>
int main() {
char a[100];
char* p = a;
int n = 0, m = 0, k = 0, s = 0, q = 0;
gets_s(a);
//printf("*p=%d,'*p'=%d\n", *p, '*p');
while (*p != 0) {
if (*p >= 65 && *p <= 90)
n++;
else if (*p >= 97 && *p <= 122)
m++;
else if (*p == 32 )
k++;
else if (*p >= 48 && *p <= 57)
s++;
else
q++;
p++;
}
printf("小写字母:%d\n大写字母:%d\n空格:%d\n数字:%d\n其他字符:%d\n", n, m, k, s, q);
return 0;
}
9./*写一个函数将一个3*3的矩阵转置*/
#include<stdio.h>
void gg(int* p) {
int b[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
b[i][j] = *(p+i+j*3);
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
*(p+i*3+j) = b[i][j];
}
}
}
int main() {
int a[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = i * 3 +1+ j;
}
}
gg(&a[0][0]);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
10/*在一个5*5的矩阵中调整--
1.最大在中间;2.最小在左上;3.次小在右上;4.再次小在左下;5.再再次小在右下*/
#include<stdio.h>
void change(int* p) {
int* t = p, l = 0;
int* t1 = p, *t2 = p, *t3 = p, *t4 = p;
//1.
for (int i = 0; i < 25; i++, p++) {
if (*t < *p)t = p;
}
p = p - 25;
printf("*t=%d\n", *t);
//2.
for (int i = 0; i < 25; i++, p++) {
if (*t1 > *p)t1 = p;
}
p = p - 25;
printf("*t1=%d\n", *t1);
//3.
for (int i = 0; i < 25; i++, p++) {
if (t2 == t1) {
t2++;
continue;
}
if (*t2 > *p)
*t2 = *p;
}
p = p - 25;
printf("*t2=%d\n", *t2);
//4.
for (int i = 0; i < 25; i++, p++) {
if (t3 == t1) {
t3++;
continue;
}
if (t3 == t2) {
t3++;
continue;
}
if (*t3 > *p)
*t3 = *p;
}
p = p - 25;
printf("*t3=%d\n", *t3);
//5.
for (int i = 0; i < 25; i++, p++) {
if (t4 == t1) {
t4++;
continue;
}
if (t4 == t2) {
t4++;
continue;
}
if (t4 == t3) {
t4++;
continue;
}
if (*t4 > *p)
*t4 = *p;
}
p = p - 25;
printf("*t4=%d\n", *t4);
//交换
l = *t;
*t = *(p + 12);
*(p + 12) = l;
l = *t1;
*t1 = *(p);
*(p) = l;
l = *t2;
*t2 = *(p + 4);
*(p + 4) = l;
l = *t3;
*t3 = *(p + 20);
*(p + 20) = l;
l = *t4;
*t4 = *(p + 24);
*(p + 24) = l;
}
int main() {
int a[5][5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
a[i][j] = i * 5 + j;
}
}
//输出
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
//运算
change(&a[0][0]);
//输出
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
11./*在主函数输入10个等长的字符串,用子函数将其排序,并在主函数输出*/
#include<stdio.h>
void swap(char* p1,char* p2) {
char t;
for(int i=0;i<2;i++,p1++,p2++){
if (*p1 > *p2){
p1 = p1 - i;
p2 = p2 - i;
for (int i = 0; i < 2; i++, p1++, p2++) {
t = *p1;
*p1 = *p2;
*p2 = t;
}
break;
}
}
}
void s(char* p) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 9-i; j++) {
swap((p + j*3), (p + j*3 + 3));
}
}
}
int main() {
char a[10][3] = {"op","mn","qr","st" ,"ab","cd","ef","gh","ij","kl" };
s(&a[0][0]);
return 0;
}
12./*在主函数输入10个不等长的字符串,用子函数将其排序,并在主函数输出*/
#include<stdio.h>
#include<string.h>
void swap(char* p1, char* p2) {
char a[10];
if (strcmp(p1, p2) < 0) {
strcpy(a, p1);
strcpy(p1, p2);
strcpy(p2, a);
}
}
void s(char* p) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 9 - i; j++) {
swap((p + j * 10), (p + j * 10 + 10));
}
}
}
int main() {
char a[10][10] = { "b","a","j","d" ,"aob","aobh","z","y","x","w" };
//swap(&a[0][0], &a[1][0]);
s(&a[0][0]);
return 0;
}
14./*输入几个数按逆序输出*/
#include<stdio.h>
int main() {
int n[9] = { 1,23,45,67,89,2 };
int m = 6;
int* p = n;
int t;
for (int i = 0; i < m/2; i++) {
t = *(p+i);
*(p+i)= *(p + m-1 - i) ;
*(p + m-1 - i) = t;
}
//输出
for (int i = 0; i < m ; i++) {
printf("%d\n", n[i]);
}
return 0;
}
15./*四个学生考了五门课--
求第一门课的平均分
找出两门可不及格的学生并输出其学号及平均分
找出平均分在90分以上的学生*/
#include<stdio.h>
//求第一门课的平均分
void gya(char* p) {
printf("平均分:%d\n", (*p+*(p+1)+ *(p+2)+*(p+3))/4);
}
//找出两门可不及格的学生并输出其学号及平均分
int find(char* p) {
int i = 0;
if (*(p) < 60)i++;
if (*(p+4) < 60)i++;
if (*(p+8) < 60)i++;
if (*(p+12) < 60)i++;
if (*(p+16) < 60)i++;
return i;
}
void found(char* p) {
int k = 0;
for (int i = 0; i < 4; i++) {
k = find(p + i);
if (k >= 2)
printf("%d\n\t平均分:%d\n",i,(*(p+i)+ *(p + i+4)+ *(p + i+8)+ *(p + i+12)+ *(p + i+16))/5);
}
}
//找出平均分在90分以上的学生
void bob(char* p) {
int k = 0;
for (int i = 0; i < 4; i++) {
k = ((*(p + i) + *(p + i + 4) + *(p + i + 8) + *(p + i + 12) + *(p + i + 16)) / 5);
if(k>=90)
printf("%d\n\t平均分:%d\n", i, (*(p + i) + *(p + i + 4) + *(p + i + 8) + *(p + i + 12) + *(p + i + 16)) / 5);
}
}
int main() {
char a[5][4] = { 0 };
for(int i=0;i<20;i++){
a[i/4][i%4] = 89;
}
a[0][0] = 100;
a[1][3] = 0;
a[1][2] = 9;
a[2][2] = 9;
gya(&a[0][0]);
found(&a[0][0]);
bob(&a[0][0]);
return 0;
}
16./*有一个由数字和非数字组成的字符串,将其中的数字记录到数组中并输出*/
#include<stdio.h>
#include<math.h>
//记录一个数字
char* record(char* p1,int* p2) {
int i = 0,k=0;
int a[128] = { 0 };
for (; *p1 <= 57 && *p1 >= 48; i++,p1++) {
a[i] = *p1-48;
}
//i = i - 1;
for (int j=0; j<i; j++) {
k = k+a[j] *pow(10,i-j-1);
}
*p2 = k;
return p1 ;
}
int main() {
char a[128],*p;
int c[128] = { 0 };
p = a;
gets_s(a);
for (int i=0; *p != 0;) {
if (*p <= 57 && *p >= 48){
p = record(p, &c[i]);
i++;
}
else
p++;
}
//输出
for (int i = 0; c[i]!=0; i++) {
printf("c[%d]:%d\n", i, c[i]);
}
return 0;
}
17./*写一个strcmp*/
#include<stdio.h>
int boy(char* p1, char* p2) {
for (int i = 0;*p1!=0&&*p2!=0; i++) {
if (*p1 == *p2){
p1++, p2++;
continue;
}
else if (*p1 > *p2)
return 1;
else
return -1;
}
return 0;
}
int main() {
char a[128]="a", b[128]="a";
printf("%d\n", boy(a,b));
return 0;
}
18./*输入月份,输出名字*/
#include<stdio.h>
int main() {
int i=0;
char a[12][32] = { 0 };
a[0][0] = 'a';
a[0][1] = 'a';
a[1][0] = 'b';
a[1][1] = 'b';
a[2][0] = 'c';
a[2][1] = 'c';
a[3][0] = 'd';
a[3][1] = 'd';
a[4][0] = 'e';
a[4][1] = 'e';
a[5][0] = 'f';
a[5][1] = 'f';
a[6][0] = 'g';
a[6][1] = 'g';
a[7][0] = 'h';
a[7][1] = 'h';
a[8][0] = 'j';
a[8][1] = 'j';
a[9][0] = 'k';
a[9][1] = 'k';
a[10][0] = 'l';
a[10][1] = 'l';
a[11][0] = 'm';
a[11][1] = 'm';
printf("请输入月份:");
scanf_s("%d", &i);
i = i - 1;
printf("%s\n", &a[i][0]);
return 0;
}
20./*用指针的方法对五个字符串排序并输出*/
#include<stdio.h>
#include<string.h>
int main() {
char* p[5],* w;
char a[32] = "dfasa";
char b[32] = "da";
char c[32] = "d";
char d[32] = "sa";
char e[32] = "a";
p[0] = a,p[1] = b, p[2] = c, p[3] = d, p[4] = e ;
/* for (int i = 0; i < 5; i++) {
for(int j=0;j<5-i;j++){
swap(p[j], p[j + 1]);
}
}
*/
for(int j = 0;j<5;j++){
for(int i=0;i<4-j;i++){
if (strcmp(p[i], p[i+1]) > 0) {
w = p[i];
p[i] = p[i+1];
p[i+1] = w;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%s\n", p[i]);
}
return 0;
}
21./*将n个整数输入并输出*/
#include<stdio.h>
int main() {
int n = 128;
int a[128] = { 0 };
int* p = a;
/*for (int i = 0; i < n; i++) {
scanf_s("%d", &a[i]);
if (a[i] == 'q') {
break;
}
}
for (int i = 0; i < n; i++) {
printf("%d\n", a[i]);
if (a[i] == 'q' || a[i] == 0) {
break;
}
}*/
for (int i = 0; i < n; i++) {
a[i] = i;
}
//排序
for(int j=0;j<128;j++){
for(int i=0;i<127-j;i++){
if (*(p+i) < *(p+i + 1)) {
int m = 0;
m = *(p+i);
*(p+i) = *(p+i + 1);
*(p+i + 1) = m;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d\n", a[i]);
}
return 0;
}
第九章
1./*定义一个结构体,其中包含年,月,日,输出其实该年的第几天*/
#include<stdio.h>
struct a {
int year;
int mouth;
int day;
};
int main() {
a b /*= { 2019,7,31 }*/;
int number = 0,n=0;
printf("请输入年月日:年,月,日");
scanf_s("%d %d %d", &b.year, &b.mouth, &b.day);
if (b.year % 400 == 0) n = 1;
else if (b.year % 100 == 0) n = 0;
else if (b.year % 4 == 0) n = 1;
else n = 0;
if (b.mouth == 1) number = number + b.day;
else if (b.mouth == 2) number = number + b.day + 31 ;
else if (b.mouth == 3) number = number + b.day + 31 + 28 + n;
else if (b.mouth == 4) number = number + b.day + 31 + 28 + n + 31 ;
else if (b.mouth == 5) number = number + b.day + 31 + 28 + n + 31 + 30 ;
else if (b.mouth == 6) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 ;
else if (b.mouth == 7) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 + 30 ;
else if (b.mouth == 8) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 + 30 + 31 ;
else if (b.mouth == 9) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 + 30 + 31 + 31 ;
else if (b.mouth == 10) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 + 30 + 31 + 31 + 30 ;
else if (b.mouth == 11) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 ;
else if (b.mouth == 12) number = number + b.day + 31 + 28 + n + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 ;
//输出
printf("这是该年的%d天\n",number);
return 0;
}
3./*有五名学生,每个学生有三个数据,输出他们*/
#include<stdio.h>
struct a {
char num[6];
char name[8];
int score[4];
};
void print(a c[]) {
for (int i = 0; i < 5; i++) {
printf("%s,%s,%d\n", c[i].num,c[i].name,c[i].score );
}
}
int main() {
a b[5];
b[0] = { "hhh","jjj",77 };
b[1] = { "hhh","jjj",77 };
b[2] = { "hhh","jjj",77 };
b[3] = { "hhh","jjj",77 };
b[4] = { "hhh","jjj",77 };
print(b);
return 0;
}
4./*有五名学生,每个学生有三个数据,输出他们*/
#include<stdio.h>
#include<string.h>
struct student{
char a[8];
int b;
int c;
};
void print(student* a) {
for (int i = 0; i<5; i++) {
printf("%s\n", a[i].a);
}
for (int i = 0; i < 5; i++) {
printf("%d\n", a[i].b);
}
for (int i = 0; i < 5; i++) {
printf("%d\n", a[i].c);
}
}
void input(student* a) {
for (int i = 0; i<5; i++) {
printf("请输入a[%d]:",i+1);
gets_s(a[i].a);
}
for (int i = 0; i<5; i++) {
printf("请输入b%d:", i+1);
//fflush(stdin); //这里搞不太懂,输入缓冲区在哪里
scanf_s("%d", &a[i].b);
}
for (int i = 0; i < 5; i++) {
printf("c%d:", i+1);
scanf_s("%d", &a[i].c);
}
}
int main() {
student hao[5];
//gets_s(hao[1].a);
//scanf_s("%d", &hao[1].b);
input(hao);
print(hao);
return 0;
}
5./*有十名学生,姓名、学号、三课成绩,
输出三个平均分和最高分学生的信息*/
#include<stdio.h>
#include<string.h>
struct student{
char a[8];
char b[16];
int c[3];
int ave;
};
void input(student* a) {
for (int i = 0; i<10; i++) {
if(i!=0)getchar();
printf("请输入姓名[%d]:",i+1);
gets_s(a[i].a);
printf("请输入学号%d:", i + 1);
gets_s(a[i].b);
for (int j = 0; j < 3; j++) {
printf("%s,c%d:", &a[i].a,j + 1);
scanf_s("%d", &a[i].c[j]);
}
}
}
int main() {
student hao[10];
input(hao);
//计算输出
for (int i = 0,o=0; i<3; i++,o = 0) {
for(int j=0;j<10;j++){
o = o + hao[j].c[i];
}
//scanf_s("%d", hao[j].v);
printf("%d\n", o/10);
}
for (int i = 0, o = 0; i<10; i++, o = 0) {
for (int j = 0; j<3; j++) {
o = o + hao[i].c[j];
}
hao[i].ave = o / 3;
printf("%d\n", o / 3);
}
//找到最强的同学
student* p1,*p2;
p1 = hao;
p2 = hao;
p2++;
for (int i = 0; i < 10; i++,p2++) {
if (p1->ave < p2->ave)p1 = p2;
}
printf("%s,%s,%d,%d,%d,%d", p1->a, p1->b, p1->c[0], p1->c[1], p1->c[2], p1->ave);
return 0;
}
6./*十三个人站成一圈,报三出列,剩谁
(用链表实现)*/
#include<stdio.h>
#infine N 5 //完全不懂为什么不能用宏定义
struct student {
int a;
student* p;
};
int main() {
student hao[13];
//定义
for (int i = 0; i < 13; i++) {
hao[i].a = i+1;
hao[i].p = &hao[i + 1];
if (i == 12) {
hao[i].a = i + 1;
hao[i].p = &hao[0];
}
}
//出列
student *p1;
p1 = &hao[0];
for (; p1->p != p1; printf("%d\n", p1->a),p1 = p1->p->p) { //这里出现了问题,完全不懂是为什么
p1->p->p = p1->p->p->p;
}
printf("%d\n", p1->a);
return 0;
}
9./*写一个动态链表实现
建立、输出、删除、插入*/
#include<stdio.h>
#include<stdlib.h>
struct student {
int a;
student* p;
};
//建立
student* jianli() {
student* a;
a = (student*)malloc(sizeof(student));
a->a = 0;
a->p = (student*)malloc(sizeof(student));
a->p->a = 1;
a->p->p = 0;
a->p->p = (student*)malloc(sizeof(student));
a->p->p->a = 2;
a->p->p->p = 0;
return a;
}
//输出
void shuchu(student* a) {
for (; a->p != 0; a = a->p) {
printf("%d\n", a->a);
}
printf("%d\n", a->a);
}
//删除
void shachu(student* a, int i) {
student* a1;
for (; a->p != 0;a=a->p) {
if (a->p->a == i) {
a1= a->p->p;
free(a->p);
a->p = a1;
break;
}
}
}
//插入
void input(student* a, int i) {
student* m;
for (;a->p!=0; a=a->p) {
if(a->p->a > i){
continue;
}
else{
m = (student*)malloc(sizeof(student));
m->a = i;
m->p=a->p;
a->p = m;
break;
}
}
}
int main() {
student* a;
a = jianli();
input(a, 6);
input(a, 7);
input(a, 8);
input(a, 9);
input(a, 7);
input(a, 11);
input(a, 12);
shachu(a, 7);
shachu(a,7);
shuchu(a);
return 0;
}
10./*有a,b两个链表,学号、成绩将其合并,并按升序排列*/
#include<stdio.h>
#include<stdlib.h>
struct student {
int a;
int a1;
char b[16];
student* p;
};
//建立
student* jianli() {
student* a;
a = (student*)malloc(sizeof(student));
a->a = 0;
a->p = (student*)malloc(sizeof(student));
a->p->a = 1;
a->p->p = 0;
a->p->p = (student*)malloc(sizeof(student));
a->p->p->a = 2;
a->p->p->p = 0;
return a;
}
//输出
void shuchu(student* a) {
for (; a->p != 0; a = a->p) {
printf("%d\n", a->a);
}
printf("%d\n", a->a);
}
//删除
void shanchu(student* a, int i) {
student* a1;
for (; a->p != 0;a=a->p) {
if (a->p->a == i) {
a1= a->p->p;
free(a->p);
a->p = a1;
break;
}
}
}
//插入
void input(student* a, int i) {
student* m;
for (;a->p!=0; a=a->p) {
if(a->p->a > i){
continue;
}
else{
m = (student*)malloc(sizeof(student));
m->a = i;
m->p=a->p;
a->p = m;
break;
}
}
}
//a-b
student* qutong(student* a,student* b) {
return a;
}
//a+b
student* hebing(student* a, student* b) {
student* c;
c = (student*)malloc(sizeof(student));
c->a = 0;
for (;b != 0;b=b->p) {
input(a, b->a);
}
c = a;
return c;
}
int main() {
student* a;
student* b;
student* ab;
a = jianli();
shanchu(a, 1);
b = jianli();
shanchu(b, 1);
printf("a:\n");
shuchu(a);
printf("b:\n");
shuchu(b);
input(a, 1);
input(a, 2);
input(a, 4);
input(a, 5);
input(a, 6);
input(a, 7);
input(b, 4);
input(b, 66);
input(b, 67);
input(b, 78);
printf("a:\n");
shuchu(a);
printf("b:\n");
shuchu(b);
ab = hebing(a, b);
printf("ab\n");
shuchu(ab);
return 0;
}
11./*有a,b两个链表,学号、成绩a-b*/
#include<stdio.h>
#include<stdlib.h>
struct student {
int a;
int a1;
char b[16];
student* p;
};
//建立
student* jianli() {
student* a;
a = (student*)malloc(sizeof(student));
a->a = 0;
a->p = (student*)malloc(sizeof(student));
a->p->a = 1;
a->p->p = 0;
a->p->p = (student*)malloc(sizeof(student));
a->p->p->a = 2;
a->p->p->p = 0;
return a;
}
//输出
void shuchu(student* a) {
for (; a->p != 0; a = a->p) {
printf("%d\n", a->a);
}
printf("%d\n", a->a);
}
//删除
void shanchu(student* a, int i) {
student* a1;
for (; a->p != 0;a=a->p) {
if (a->p->a == i) {
a1= a->p->p;
free(a->p);
a->p = a1;
break;
}
}
}
//插入
void input(student* a, int i) {
student* m;
for (;a->p!=0; a=a->p) {
if(a->p->a > i){
continue;
}
else{
m = (student*)malloc(sizeof(student));
m->a = i;
m->p=a->p;
a->p = m;
break;
}
}
}
//a-b
student* qutong(student* a,student* b) {
student* c,* a1,* b1;
a1 = a;
b1 = b;
c = (student*)malloc(sizeof(student));
c->a = 0;
//shanchu(a, b->p->a);
for (; b != 0; b = b->p) {
for (a1=a; a1 != 0;a1=a1->p) {
if (b->a == a1->a){
//printf("%d\n",b->a);
shanchu(a, b->a);
break;
}
}
}
c = a;
return c;
}
//a+b
student* hebing(student* a, student* b) {
student* c;
c = (student*)malloc(sizeof(student));
c->a = 0;
for (;b != 0;b=b->p) {
input(a, b->a);
}
c = a;
return c;
}
int main() {
student* a;
student* b;
student* ab;
a = jianli();
shanchu(a, 1);
b = jianli();
shanchu(b, 1);
printf("a:\n");
shuchu(a);
printf("b:\n");
shuchu(b);
input(a, 1);
input(a, 2);
input(a, 4);
input(a, 5);
input(a, 6);
input(a, 7);
input(a, 78);
input(b, 4);
input(b, 66);
input(b, 67);
input(b, 78);
printf("a:\n");
shuchu(a);
printf("b:\n");
shuchu(b);
printf("ab\n");
ab = qutong(a, b);
shuchu(ab);
return 0;
}
第十章
3./*输入一个字符串,小写字母变大写字母
输出至test文件中,以!结束*/
#include<stdio.h>
#include<stdlib.h>
//小写字母变大写字母
void change(char* str) {
for (int i = 0; i < 128 && str[i] != 0; i++) {
if (str[i] <= 122 && str[i] >= 97) {
str[i] = str[i] - 32;
}
}
}
int main() {
char str[128];
//输入
gets_s(str);
//
change(str);
printf("%s\n", str);
FILE* fp;
//1
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text.txt", "w");
//2
if(fp == NULL){
printf("文件打开失败\n");
return -1;
}
//3
fprintf(fp, "%s!", str);
//4
fclose(fp);
return 0;
}
4./*有a、b两个文件各存一行文字
将其合并排序然后存入c中*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//交换两个元素
void change(char* a, char* b) {
char c;
c = *a;
*a = *b;
*b = c;
}
//合并
void hebing(char* a, char*b,char* c) {
//叠加
char* d;
d = a;
int i = 0;
for (; a[i]!=0; i++) {
c[i] = a[i];
}
for(int j=0;b[j]!=0;j++,i++){
c[i] = b[j];
}
//排序
for (int k = i; k !=0; k--) {
for (int o = 0; o < k-1; o++) {
if(c[o]> c[o + 1])change(&c[o], &c[o + 1]);
}
}
}
int main() {
char str1[128] = { 0 };
char str2[128] = { 0 };
char str3[256] = { 0 };
FILE* fp1;
FILE* fp2;
//1
fp1 = fopen("C:\\Users\\didi\\Desktop\\function\\text\\a.txt", "r");
fp2 = fopen("C:\\Users\\didi\\Desktop\\function\\text\\b.txt", "r");
//2
if (fp1 == NULL) {
printf("文件打开失败\n");
return -1;
}
if (fp2 == NULL) {
printf("文件打开失败\n");
return -2;
}
//3
fgets(str1, 100, fp1);
fgets(str2, 100, fp2);
//4
fclose(fp1);
fclose(fp2);
hebing(str1, str2, str3);
printf("%s\n", str1);
printf("%s\n", str3);
return 0;
}
5./*有5名同学三门成绩,计算平均分,将数据输出至磁盘文件"study"中*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
char a[16];
int b[3];
int ave;
};
int main() {
student boy[5];
for (int i = 0; i < 5; i++) {
strcpy(boy[i].a, "u");
boy[i].b[0] = i*i;
boy[i].b[1] = i+i;
boy[i].b[2] = i+7;
boy[i].ave = (boy[i].b[0] + boy[i].b[1] + boy[i].b[2]) / 3;
}
FILE* fp;
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\study.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
for (int i = 0; i < 5; i++) {
fprintf(fp, "%c,%d,%d,%d---%d\n", boy[i].a[0], boy[i].b[0], boy[i].b[1], boy[i].b[2],boy[i].ave);
}
fclose(fp);
return 0;
}
6./*有5名同学三门成绩、平均分,将数据输从磁盘文件"study"中读取,
排序后存入stu-sort中*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
char a[16];
int b[3];
int ave;
student* p;
};
void change(student* a, student* b) {
if(a->ave < b->ave){
student* c;
c = (student *)malloc(sizeof(student));
c->b[0] = a->b[0];
c->b[1] = a->b[1];
c->b[2] = a->b[2];
c->ave = a->ave;
a->b[0] = b->b[0];
a->b[1] = b->b[1];
a->b[2] = b->b[2];
a->ave = b->ave;
b->b[0] = c->b[0];
b->b[1] = c->b[1];
b->b[2] = c->b[2];
b->ave = c->ave;
free(c);
}
}
int main() {
student boy[5];
//读取
FILE* fp;
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\study.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
for (int i = 0; i < 5; i++) {
fscanf(fp, "%c,%d,%d,%d---%d\n", &boy[i].a[0], &boy[i].b[0], &boy[i].b[1], &boy[i].b[2],&boy[i].ave);
}
fclose(fp);
//排序
for (int i = 4; i >-1; i--) {
for (int j = 0; j < i; j++) {
change(&boy[j], &boy[j+1]);
}
}
//输出
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\stu-sort.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
for (int i = 0; i < 5; i++) {
fprintf(fp, "%c,%d,%d,%d---%d\n", boy[i].a[0], boy[i].b[0], boy[i].b[1], boy[i].b[2], boy[i].ave);
}
fclose(fp);
return 0;
}
7./*有5名同学三门成绩、平均分,将数据输从磁盘文件"study"中读取,
添加一条记录,存入到新的文件夹中*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
char a[16];
int b[3];
int ave;
student* p;
};
void change(student* a, student* b) {
if(a->ave < b->ave){
student* c;
c = (student *)malloc(sizeof(student));
c->b[0] = a->b[0];
c->b[1] = a->b[1];
c->b[2] = a->b[2];
c->ave = a->ave;
a->b[0] = b->b[0];
a->b[1] = b->b[1];
a->b[2] = b->b[2];
a->ave = b->ave;
b->b[0] = c->b[0];
b->b[1] = c->b[1];
b->b[2] = c->b[2];
b->ave = c->ave;
free(c);
}
}
int main() {
student boy[6];
//读取
FILE* fp;
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\study.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
for (int i = 0; i < 5; i++) {
fscanf(fp, "%c,%d,%d,%d---%d\n", &boy[i].a[0], &boy[i].b[0], &boy[i].b[1], &boy[i].b[2],&boy[i].ave);
}
fclose(fp);
//添加记录
boy[5].b[0] = 6;
boy[5].b[1] = 6;
boy[5].b[2] =6;
boy[5].ave = 6;
//排序
for (int i = 5; i >-1; i--) {
for (int j = 0; j < i; j++) {
change(&boy[j], &boy[j+1]);
}
}
//输出
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\xin.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
for (int i = 0; i < 6; i++) {
fprintf(fp, "%c,%d,%d,%d---%d\n", boy[i].a[0], boy[i].b[0], boy[i].b[1], boy[i].b[2], boy[i].ave);
}
fclose(fp);
return 0;
}
9./*新建一个employee的文件有姓名、职工号、性别、年龄、住址、工资
抽出工资,新建一个文件*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
char name[16];
int hao;
int mw;
int nianling;
char vvv[32];
int gongzi;
student* p;
};
void change(student* a, student* b) {
student* c;
c = (student *)malloc(sizeof(student));
free(c);
}
int main() {
student boy[10];
for (int i = 0; i < 10; i++) {
boy[i].hao = i + 1;
boy[i].gongzi = (i+1000)*i;
}
//新建文件xin
FILE* fp;
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\xin.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
for(int i=0;i<10;i++){
fprintf(fp, "%d,工资:%d\n", boy[i].hao, boy[i].gongzi);
}
fclose(fp);
return 0;
}
10./*新建一个employee的文件有姓名、职工号、性别、年龄、住址、工资
抽出工资"xin",新建一个文件
删除一条记录再存入文件xin1*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
char name[16];
int hao;
int mw;
int nianling;
char vvv[32];
int gongzi;
student* p;
};
void change(student* a, student* b) {
student* c;
c = (student *)malloc(sizeof(student));
free(c);
}
int main() {
student boy[10];
//读取
FILE* fp;
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\xin.txt", "r");
if (fp == NULL) {
printf("文件打开失败1\n");
return -1;
}
for(int i=0;i<10;i++){
fscanf(fp, "%d,工资:%d\n", &boy[i].hao, &boy[i].gongzi);
}
fclose(fp);
//删除记录
boy[3].hao = 0;
//存入新文件
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\xin1.txt", "w");
if (fp == NULL) {
printf("文件打开失败2\n");
return -2;
}
for (int i = 0; i<10; i++) {
if (boy[i].hao == 0)continue;
fprintf(fp, "%d,工资:%d\n", boy[i].hao, boy[i].gongzi);
}
fclose(fp);
return 0;
}
11./*输入多行字符串,,存入文件zzz中,
再读取后,将小写变为大写,然后显示出来*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//小写变大写
void change(char* a) {
for (int i = 0; i < 128; i++) {
if (*(a+i)>= 97 && *(a+i) <= 122)
*(a+i)= *(a+i)- 32;
if (*(a+i) == '/0')break;
}
}
int main() {
char a[6][128];
char b[128];
int i = 0;
for (; b[0] != 48 && i < 6; i++) {
gets_s(b);
strcpy(a[i], b);
}
printf("信信信\n");
//存入"zzz"文件
FILE* fp;
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\zzz.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return -1;
}
for (int i = 0; i<6; i++) {
fprintf(fp,"%s\n", a[i]);
if (a[i][0] == 48)break;
}
fclose(fp);
/*for (int i = 0;i<6;i++) {
printf("%s\n", a[i]);
if (a[i][0] == 48)break;
}*/
//读取"zzz"文件
char a1[6][128];
char b1[6][128];
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\zzz.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return -2;
}
for (int i = 0; i<6; i++) {
fgets(a1[i],128,fp);
if (a[i][0] == 48)break;
}
fclose(fp);
//小写变大写
for (int i = 0; i<6; i++) {
change(&a1[i][0]);
if (a1[i][0] == 48)break;
}
//存入到"zzz1"文件中
fp = fopen("C:\\Users\\didi\\Desktop\\function\\text\\zzz1.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return -3;
}
for (int i = 0; i<6; i++) {
fprintf(fp, "%s\n", a1[i]);
if (a1[i][0] == 48)break;
}
fclose(fp);
return 0;
}