C语言学习通作业
👩🔬题目
1.定义宏常量(const常量)来表示3.1415926;
2.定义变量x,并初始化值为2345;
3.定义变量y,赋值为3;
4.求x与y的和、差、积、商,并输出;
5.分离x的每个数字,并输出;
6.求x的平方根,并输出
#include <stdio.h>
#include <math.h>
int main()
{
const double pi = 3.1415926;
int x = 2345;
int y = 3;
int he, cha, ji;
int one, two, three, four;
double shang, ping;
he = (x + y);
cha = (x - y);
ji = (x * y);
shang =(double) x/y;
printf("x和y的和为:%d,差为:%d,积为:%d,商为:%lf\n", he, cha, ji, shang);
one = x / 1000; //求第一位
two = x / 100 % 10; //求第二位
three = x / 10 % 10; //求第三位
four = x % 10; //求第四位
// ‘/’就是取左边的数,‘%’就是取右边的数
printf("x的第一位为:%d\n",one);
printf("x的第二位为:%d\n", two);
printf("x的第三位为:%d\n", three);
printf("x的第四位为:%d\n", four);
x = (double)x;
ping = sqrt(x);
printf("x的平方根为:%lf\n", ping);
}
👩🔬题目
输入输出
输入12 34
输出1 2 34
#include <stdio.h>
int main()
{
char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c %c %d\n",a,b,c);
return 0;
}
输入1,2,34
输出1,2,34
#include <stdio.h>
int main()
{
char a,b;
int c;
scanf("%c,%c,%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
return 0;
}
输入1,2,34
输出‘1’,‘2’,34
#include <stdio.h>
int main()
{
char a,b;
int c;
scanf("%c,%c,%d",&a,&b,&c);
printf("\'%c\',\'%c\',%d\n",a,b,c);
return 0;
}
第一种输入方式:1,2,34↙(以逗号作为分隔符)
第二种输入方式:1 2 34↙(以空格作为分隔符)
第三种输入方式:1 2 34↙(以Tab键作为分隔符)
第四种输入方式:1↙
2↙
34↙(以回车符作为分隔符)
输出结果都为:‘1’,‘2’,34
#include <stdio.h>
int main()
{
char a,b;
int c;
scanf("%c%*1c%c%*1c%d",&a,&b,&c);
printf("\'%c\',\'%c\',%d\n",a,b,c);
return 0;
}
👩🔬题目
编程设计一个简单的计算器程序,要求根据用户从键盘输入如下形式的表达式: 操作数1 运算符op 操作数2 然后,计算并输出表达式的值 指定的运算符为: 加(+) 减(-) 乘(*) 除(/) 本实验程序是在上例基础上,增加如下要求:(1)如果要求程序能进行浮点数的算术运算,程序应该如何修改? 如何比较实型变量data2和常数0是否相等?(2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多空白符,那么程序如何修改?(3)(选作题)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:Do you want to continue(Y/N or y/n)?如果用户输入Y或y时,程序继续进行其它算术运算,否则程序才退出运行状态。那么,程序如何修改?
#include <stdio.h>
int main()
{
char op;
float data1;
float data2;
float data = 0;
char ch; //接收输入字符
do {
scanf("%f %c%f", &data1, &op, &data2);
switch (op)
{
case '+':
data = data1 + data2;
printf("%f%c%f=%f", data1, op, data2, data);
printf(" \n");
break;
case '-':
data = data1 - data2;
printf("%f%c%f=%f", data1, op, data2, data);
printf(" \n");
break;
case '*':
data = data1 * data2;
printf("%f%c%f=%f", data1, op, data2, data);
printf(" \n");
break;
case '/':
if (data2 == 0)
{
printf("输入错误,被除数不能等于0\n");
}
else
{
data = data1 / data2;
printf("%f%c%f=%f", data1, op, data2, data);
printf(" \n");
}
break;
default:
printf("输入错误");
break;
}
printf("Do you want to continue(Y/N or y/n)?\n");
scanf(" %c", &ch);
} while (ch == 'y' || ch == 'Y');
return 0;
}
👩🔬题目
猜数1:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”, 否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都是一样的,用标准库函数time()、srand()、rand()。
#include <stdio.h>
#include <stdlib.h> //srand、rand函数库
#include <time.h> //time时间库
int main()
{
char w;
do
{
int magic; //系统自动生成的数
int guess; //用户猜的数
int counter; //用户猜的次数
srand(time(NULL)); //使每次生成的数字不一样
magic = rand() % 100 + 1; //使生成的数在1-100之间
counter = 0;
do
{
printf("请输入你猜的数:");
scanf("%d",&guess);
counter++;
if (guess>magic)
{
printf("Wrong! Too big!\n");
}
else if (guess<magic)
{
printf("Wrong! Too small!\n");
}
else
{
printf("Right!\n");
}
} while (guess!=magic && counter<10);//猜对或猜数次数大于10次终止循环
printf("counter=%d\n", counter);
if (counter==10)
{
w='y';
printf("重新猜数\n");
}else{
printf("是否要继续猜数(y/n):\n");
scanf(" %c", &w);
}
} while (w!='n');
return 0;
}
👩🔬题目
求和1:输入一正整数n,用for语句实现输出1-n之间所有偶数和;用while语句实现输出1-n之间所有奇数和;用do…while 来实现1-n之间所有是5的倍数的和。
#include <stdio.h>
int main()
{
int n;
int sum = 0;
int sum_j = 0;
int sum_p = 0;
int i;
scanf("%d", &n);
for ( i = 1; i <= n; i++)
{
if (!(i%2))
{
sum = sum + i;
}
else
{
sum = sum;
}
}
printf("偶数和:%d\n", sum);
int j = 1;
while (j<=n)
{
sum_j += j;
j += 2;
}
printf("奇数和:%d\n", sum_j);
int p = 0;
do
{
sum_p += p;
p += 5;
} while (p<=n);
printf("5的倍数的和:%d",sum_p);
return 0;
}
👩🔬题目
通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”;要求编写如下三个函数:main():输入两个数,调用AddTest和PrintAddTest():完成学生给出的加法运算结果的判断。Print()两个函数:根据AddTest判断结果,完成Right!或Not correct! Try again!输出。
#include <stdio.h>
int AddTest(int n, int m, int s);
void Print(int w,int c);
int main()
{
int x, y; //用户输入的加数
int s_xy; //用户输入的和
int p; //判断是否计算正确的返回值
int n = 0; //用户的计算次数
printf("请输入两个数:\n");
scanf("%d %d", &x, &y);
do
{
n++;
printf("请输入%d+%d=\n", x, y);
scanf("%d", &s_xy);
p=AddTest(x, y, s_xy); //函数判断是否正确
Print(p,n); //提示用户结果
} while (p!=1 && n<3);
return 0;
}
int AddTest(int n, int m, int s)
{
int pre_s;
pre_s = n + m;
if (pre_s==s)
{
return 1;
}
else
return 0;
}
void Print(int w,int c)
{
if (w!=0 && c<3)
{
printf("Right!\n");
}
else if(w!=1 && c<3)
{
printf("Not correct! Try again!\n");
}else
{
printf("Not correct. You have tried three times! Test over!\n");
}
}
👩🔬题目
用递归方法求解f(x)=13+23+….+x^3
#include<stdio.h>
int fun(int a)
{
long int b=0;
if (a == 1)
return 1;
else{
b=b+a*a*a+fun(a-1);
}
return b;
}
int main()
{
int a, c;
printf("input a num:\n");
scanf("%d", &a);
c = fun(a);
printf("结果是:%d\n", c);
return 0;
}
👩🔬题目
程序6:编写程序,求出n1至n2自然数之和。要求使用递归方法。说明:n1和n2从键盘任意输入【输入形式】任意输入n1和n2的值【输出形式】输出n1至n2自然数之和
#include <stdio.h>
//求出n1至n2自然数之和
int fun(int n1,int n2);
int main() {
int x,y,w;
printf("请输入任意两个数:\n");
scanf("%d %d",&x,&y);
w=fun(x,y);
printf("%d到%d自然数之和是:%d",x,y,w);
return 0;
}
int fun(int n1,int n2)
{
if(n1==n2)
{
return n1;
}
else
{
return n1+fun(n1+1,n2);
}
}
👩🔬题目
使用函数的静态局部变量求1+2+3+…+n的和
#include <stdio.h>
#include <stdlib.h>
long Func(int n);
int main()
{
int i,n;
printf("INPUT n:");
scanf("%d",&n);
printf("%d至1的求和=%ld\n",n,Func(n));
return 0;
}
long Func(int n)
{
static long p=0; //静态局部变量
int i;
for(i=1;i<=n;i++)
{
p=p+i;
}
return p;
}
👩🔬题目
连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题目数量。
#include <stdio.h>
#include <stdlib.h> //srand、rand函数库
#include <time.h> //time时间库
int AddTest(int n, int m, int s); //判断是否计算正确
void Print(int w); //判断输出
int main()
{
int x, y; //用户输入的加数
int s_xy; //用户输入的和
int p; //判断是否计算正确的返回值
int n = 0; //用户的计算次数
int b=0; //计算正确的次数
do
{
srand(time(NULL)); //使每次生成的数字不一样
x = rand() % 10 + 1; //使生成的数在1-10之间
y = rand() % 10 + 1;
n++;
printf("请输入%d+%d=\n", x, y);
scanf("%d", &s_xy);
p=AddTest(x, y, s_xy); //函数判断是否正确
if(p!=0)
{
b=b+1;
}else
{
b=b;
}
Print(p); //提示用户结果
} while (n<10);
printf("总分为:%d\n",b*10);
printf("做错的题目数量为:%d\n",10-b);
return 0;
}
int AddTest(int n, int m, int s)
{
int pre_s;
pre_s = n + m;
if (pre_s==s)
{
return 1;
}
else
return 0;
}
void Print(int w)
{
if (w!=0)
{
printf("Right!\n");
}
else
{
printf("Not correct!\n");
}
}
👩🔬题目
【一维、二维数组初始化与输入输出】定义一维数组并初始化其值为:11 22 33 44 55,一行输出这个数组值,重新给数组键盘输入任意值并再次一行输出;定义二维数组(2行3列)并初始化其值为:11 22 33 44 55 66,2行3列输出这个数组值,重新给数组键盘输入任意值并再次2行3列输出;
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr_1[5] = {11,22,33,44,55 };
int i,j,q;
printf("数组1输出为:\n");
for ( i = 0; i < 5; i++)
{
printf("%d ",arr_1[i]);
}
printf("\n");
printf("请重新输入5位一维数组:\n");
for (j = 0; j < 5; j++)
scanf(" %d", &arr_1[j]);
printf("数组输出为:\n");
for (q = 0; q < 5; q++)
{
printf("%d ",arr_1[q]);
}
printf("\n");
printf("数组2输出为:\n");
int arr_2[2][3] = { 11,22,33,44,55,66 };
for ( i = 0; i < 2; i++)
{
for ( j = 0; j < 3; j++)
{
printf("%d ",arr_2[i][j]);
}
printf("\n");
}
printf("请重新输入6位二维数组:\n");
for ( i = 0; i < 2; i++)
{
for ( j = 0; j < 3; j++)
{
scanf(" %d",&arr_2[i][j]);
}
}
printf("数组2输出为:\n");
for ( i = 0; i < 2; i++)
{
for ( j = 0; j < 3; j++)
{
printf("%d ",arr_2[i][j]);
}
printf("\n");
}
}
👩🔬题目
【一维数组作为函数参数】定义shuru函数,实现main函数传递过来的一维数组数据的输入;定义shuchu函数,实现main函数传递过来的一维数组数据的输出;定义main函数,定义可以存放5个数据的一维数组a, 调用shuru函数,把a传递给shuru函数实现输入;调用shuchu函数,把a传递给shuru函数实现输出。
#include <stdio.h>
#include <stdlib.h>
int shuru(int b[2][3]);//定义shuru函数,实现main函数传递过来的二维数组数据的输入;
void shuchu(int b[2][3]);//定义shuchu函数,实现main函数传递过来的二维数组数据的输出;
//定义main函数,定义可以存放6个数据的2行3列二维数组b, 调用shuru函数,把b传递给shuru函数实现输入;调用shuchu函数,把b传递给shuru函数实现输出。
int main()
{
int b[2][3];
printf("请输入6位二维数组:\n");
shuchu(shuru(b));
}
int shuru(int b[2][3])
{
for ( int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf(" %d",&b[i][j]);
}
}
printf("数组输出为:\n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ",&b[i][j]);
}
printf("\n");
}
return b;
}
void shuchu(int b[2][3])
{
printf("数组输出为:\n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ",&b[i][j]);
}
printf("\n");
}
}
👩🔬题目
【二维数组作为函数参数】定义shuru函数,实现main函数传递过来的二维数组数据的输入;定义shuchu函数,实现main函数传递过来的二维数组数据的输出;定义main函数,定义可以存放6个数据的2行3列二维数组b, 调用shuru函数,把b传递给shuru函数实现输入;调用shuchu函数,把b传递给shuru函数实现输出。
#include <stdio.h>
#include <stdlib.h>
int shuru(int b[2][3]);//定义shuru函数,实现main函数传递过来的二维数组数据的输入;
void shuchu(int b[2][3]);//定义shuchu函数,实现main函数传递过来的二维数组数据的输出;
//定义main函数,定义可以存放6个数据的2行3列二维数组b, 调用shuru函数,把b传递给shuru函数实现输入;调用shuchu函数,把b传递给shuru函数实现输出。
int main()
{
int b[2][3];
printf("请输入6位二维数组:\n");
shuchu(shuru(b));
}
int shuru(int b[2][3])
{
for ( int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf(" %d",&b[i][j]);
}
}
return b;
}
void shuchu(int b[2][3])
{
printf("数组输出为:\n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
}
👩🔬题目
【一维数组编程练习】餐饮服务质量调查打分:有40个学生被邀请给自助餐厅的食品和服务质量打分(1~10等级),统计调查结果,并用打印如下形式的统计结果直方图
提示定义数组score存放打的分数定义数组count为计数器(count[0]不用)计算统计结果:设置一个循环,依次检查数组元素值score[i],是1则将数组元素count[1]加1,是2则将数组元素count[2]加1,依此类推 for (i=0; i<STUDENTS; i++) { count[score[i]] ++; }打印统计结果,设置一个循环,按count数组元素的值,打印相应个数的符号’’
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int score[40];
int count[11];
memset(count,0,sizeof(count));
int grade,i,q,j,n=0;
do {
printf("请输入打分结果(1-10分):\n");
scanf(" %d",&score[n]);
n++;
} while(n<40);
for(i=1;i<11;i++) {
for(q=0;q<40;q++)
{
if(score[q]==i)
{
count[score[q]]++;
}
}
}
printf("Grade Count Histogram\n");
for(j=1;j<11;j++)
{
printf("%d %d ",j,count[j]);
for(int i=0;i<count[j];i++) {
printf("*");
}
printf("\n");
}
return 0;
}
👩🔬题目
【二维数组编程练习】检验并打印魔方矩阵 :在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int shuru(int b[5][5]);
void shuchu(int b[5][5]);
int main()
{
int arr[5][5];
printf("请输入25位二维数组:\n");
shuchu(shuru(arr));
}
int shuru(int b[5][5])
{
for ( int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
scanf(" %d",&b[i][j]);
}
}
return b;
}
void shuchu(int b[5][5])
{
printf("数组输出为:\n");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
//判断
int m[5]; //每一行相加相等
memset(m,0,sizeof(m));
int n[5]; //每一列相加相等
memset(n,0,sizeof(n));
int z[2]; //对角线相加相等
memset(z,0,sizeof(z));
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
m[i]+=b[i][j];
n[i]+=b[j][i];
if(i==j)
{
z[0]+=b[i][i];
}
if(i+j==4)
{
z[1]+=b[i][j];
}
}
}
int result=0; //判断是否为魔方矩阵
for(int i=0;i<5;i++) {
for(int j=0;j<2;j++) {
if(m[i]!=n[i]||m[i]!=z[j]||n[i]!=z[j])
{
result=1;
}else{
result=2;
}
}
}
if(result==1)
{
printf("不是魔方矩阵");
}else
{
printf("是魔方矩阵");
}
}
👩🔬题目
【综合编程练习】一维数组和函数 ——学生成绩统计 :从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单;(3)统计各分数段的学生人数及所占的百分比; 提示:(1)用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。设置计数器count,当score[i]<60分时,计数器count计数一次,并打印num[i]和score[i]。(2)先计算全班平均分aver,当第i个学生的成绩score[i]>=aver时,打印num[i]和score[i]。(3)将成绩分为六个分数段,60分以下为第0段,6069为第1段,7079为第2段,8089为第3段,9099为第4段,100分为第5段,因此,成绩与分数段的对应关系为:各分数段的学生人数保存在数组stu中,用stu[i]存放第i段的学生人数。对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加1,即stu[i]++。
#include <stdio.h>
#define N 30
int shuru(int num[],int score[]); //输入学号成绩
int fail(int num[],int score[],int z); //统计不及格人数
int average(int num[],int score[],int z); //统计平均分
int partstu(int num[],int score[],int z); //分段统计
int main()
{
int num[N]={0}; //学号
int score[N]={0}; //成绩
int num_stu=shuru(num,score);
printf("不及格的学生为:\n");
fail(num,score,num_stu);
printf("统计平均分\n");
average(num,score,num_stu);
printf("分段统计 \n");
partstu(num,score,num_stu);
return 0;
}
int shuru(int num[],int score[])
{
int i = -1;
do {
i++;
printf("请输入学号和分数:\n");
scanf("%d %d",&num[i+1],&score[i+1]);
} while(num[i+1]>=0 && score[i+1]>=0 && i<=30);
return i;
}
int fail(int num[],int score[],int z)
{
int count=0; //不及格人数
printf("学号 分数\n");
for(int i=1;i<=z;i++) {
if(score[i]<60)
{
printf("%d %d\n",num[i],score[i]);
count++;
}
}
printf("不及格有%d人\n",count);
}
int average(int num[],int score[],int z)
{
int aver=0; //平均分
int sum=0;
for(int i=1;i<=z;i++) {
sum+=score[i];
}
aver=sum/z;
printf("平均分为:%d\n超过平均分的有:\n",aver);
printf("学号 分数\n");
for(int i=1;i<=z;i++) {
if(score[i]>aver)
{
printf("%d %d\n",num[i],score[i]);
}
}
}
int partstu(int num[],int score[],int z)
{
int stu[6]={0}; //分数段
for(int i=1;i<=z;i++) {
if(score[i]<60)
{
stu[0]++;
}
else if(score[i]<69)
{
stu[1]++;
}
else if(score[i]<69)
{
stu[1]++;
}
else if(score[i]<79)
{
stu[2]++;
}
else if(score[i]<89)
{
stu[3]++;
}
else if(score[i]<99)
{
stu[4]++;
}
else
{
stu[5]++;
}
}
//统计百分比
int sum_num=0;
float percent[6]={0};
for(int i=0;i<6;i++)
{
sum_num+=stu[i];
}
for(int i=0;i<6;i++)
{
percent[i]=(float)stu[i]/sum_num;
}
//结果输出
printf("各分数段人数 百分比\n");
for(int i=0;i<6;i++)
{
printf("%d %.2f%%\n",stu[i],percent[i]*100);
}
}
👩🔬题目
【简单排序练习】请对n个数据(如:41 22 55 6 3 78)进行排序。分别使用简单选择法及其改进方法、冒泡法及其改进方法(共4个方法)给出代码及运行结果
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//请对n个数据(如:41 22 55 6 3 78)进行排序。
//
//分别使用简单选择法及其改进方法、冒泡法及其改进方法(共4个方法)给出代码及运行结果
int selection(int a[],int n); //选择排序
int selection_pro(int a[],int n); //改进的选择排序
int bubble(int a[],int n); //冒泡排序
int bubble_pro(int a[],int n); //改进的冒泡排序
int shuru(int a[]); //数组输入
void shuchu(int a[]); //数组输出
int main()
{
int a[6]={0};
//改进的选择排序法
selection(a,6);
//改进的选择排序法
selection_pro(a,6);
//冒泡排序
bubble(a,6);
//改进的冒泡排序
bubble_pro(a,6);
}
int shuru(int a[])
{
printf("请输入6位一维数组:\n");
for ( int i = 0; i < 6; i++)
{
scanf(" %d",&a[i]);
}
return a;
}
void shuchu(int a[])
{
// printf("数组输出为:\n");
for (int i = 0; i < 6; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int selection(int a[],int n)
{
a=shuru(a);
//原始顺序输出
printf("原始矩阵顺序为: ");
shuchu(a);
int i,j,k,temp1;
for(int i=0;i<n-1;i++) {
k=i;
for(int j=i+1;j<n;j++) {
if(a[j]>a[k])
{
k=j;
}
}
if(a[k]!=a[i])
{
temp1=a[k];
a[k]=a[i];
a[i]=temp1;
}
}
printf("选择排序法输出为: ");
shuchu(a);
return 0;
}
int selection_pro(int a[],int n)
{
a=shuru(a);
//原始顺序输出
printf("原始矩阵顺序为: ");
shuchu(a);
int i,j,k,temp1,temp2,maxIndex,minIndex;
for(int i=0;i<n/2;i++) {
minIndex=i;
maxIndex=n-i-1;
for(int j=i;j<n-i;j++) {
if(a[j]<a[maxIndex])
{
maxIndex=j;
}
if(a[j]>a[minIndex])
{
minIndex=j;
}
}
if(maxIndex==i&&minIndex==n-i-1)
{
temp1=a[maxIndex];
a[maxIndex]=a[minIndex];
a[minIndex]=temp1;
}
else if(maxIndex==i)
{
temp1=a[maxIndex];
a[maxIndex]=a[n-i-1];
a[n-i-1]=temp1;
temp2=a[minIndex];
a[minIndex]=a[i];
a[i]=temp2;
}
else if(minIndex==n-i-1)
{
temp1=a[minIndex];
a[minIndex]=a[i];
a[i]=temp1;
temp2=a[maxIndex];
a[maxIndex]=a[n-i-1];
a[n-i-1]=temp2;
}
else
{
temp1=a[i];
a[i]=a[minIndex];
a[minIndex]=temp1;
temp2=a[maxIndex];
a[maxIndex]=a[n-i-1];
a[n-i-1]=temp2;
}
}
printf("改进的选择排序法输出为: ");
shuchu(a);
return 0;
}
int bubble(int a[],int n)
{
a=shuru(a);
//原始顺序输出
printf("原始矩阵顺序为: ");
shuchu(a);
int i,j,temp1;
for(int i=0;i<n-1;i++) {
for(int j=1;j<n-i;j++) {
if(a[j]>a[j-1])
{
temp1=a[j];
a[j]=a[j-1];
a[j-1]=temp1;
}
}
}
printf("冒泡排序法输出为: ");
shuchu(a);
return 0;
}
int bubble_pro(int a[],int n)
{
a=shuru(a);
//原始顺序输出
printf("原始矩阵顺序为: ");
shuchu(a);
int i,j,temp1,first=0,last=0;
for(int i=0;i<n-1;i++) {
first=last;
for(int j=n-1;j>first;j--) {
if(a[j]>a[j-1])
{
temp1=a[j];
a[j]=a[j-1];
a[j-1]=temp1;
last=j;
}
}
if(first==last)
{
break;
}
}
printf("改进的冒泡排序法输出为: ");
shuchu(a);
return 0;
}
👩🔬题目
【综合编程练习】二维数组、函数和常用算法 ——成绩排名次:某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数 提示:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。(1)用函数编程实现计算每个学生的总分;(2)用函数编程实现按总分由高到低对学生成绩排序,注意:排序时,一维数组sum元素的变化应连同二维数组score和一维数组num和aver一起变化;(3)用函数编程实现查找学号为k的学生在班级中的排名名次及相关成绩等信息,找不到时返回-1值。
#include<stdio.h>
#define StuCourse 3
#define Count 30
void InputStuIDScore(long StuNum[],int StuScore[][StuCourse],int StuAmount); //输入学生成绩
void GetSumAverage(int StuScore[][StuCourse],int StuAmount,int sum[],float aver[]);
void RankGrade(long StuNum[],int StuScore[][StuCourse],int StuAmount,int sum[],float aver[]);
void PrintStuInfo(long StuNum[],int StuScore[][StuCourse],int StuAmount,int sum[],float aver[]);
int SearchStuInfo(long StuNum[],int StuAmount,long StuID);
int main(){
int StuAmount=0,i,j,StuScore[Count][StuCourse],sum[Count],searchRes;
long StuNum[Count],StuID;
float aver[Count];
printf("Please enter the number of students:");
scanf("%d",&StuAmount);
printf("Please enter the student's score!\n");
InputStuIDScore(StuNum,StuScore,StuAmount);
GetSumAverage(StuScore,StuAmount,sum,aver);
printf("\nScore before ranking\n");
PrintStuInfo(StuNum,StuScore,StuAmount,sum,aver);
printf("\nAlready arranged score list!\n");
RankGrade(StuNum,StuScore,StuAmount,sum,aver);
PrintStuInfo(StuNum,StuScore,StuAmount,sum,aver);
printf("\nPlease enter the student number you want to find:\n");
scanf("%ld",&StuID);
searchRes=SearchStuInfo(StuNum,StuAmount,StuID);
printf("\nSearch Result!\n");
if(searchRes!=-1){
printf("StuID \t Math \t English \t Physics \t Sum \t Aver\n");
printf("%4ld\t %4d\t %4d\t %4d\t %4d\t %5.2f\n",StuNum[searchRes],StuScore[searchRes][0],StuScore[searchRes][1],
StuScore[searchRes][2],sum[searchRes],aver[searchRes]);
}
else{
printf("Not Find!\n");
}
return 0;
}
void InputStuIDScore(long StuNum[],int StuScore[][StuCourse],int StuAmount){
int i,j;
for(i=0;i<StuAmount;i++){
StuNum[i]=19132301+i;
for(j=0;j<StuCourse;j++){
scanf("%d",&StuScore[i][j]);
}
}
}
void GetSumAverage(int StuScore[][StuCourse],int StuAmount,int sum[],float aver[]){
int i,j;
for(i=0;i<StuAmount;i++){
sum[i]=0;
for(j=0;j<StuCourse;j++){
sum[i]+=StuScore[i][j];
}
aver[i]=1.0*sum[i]/(1.0*StuCourse);
}
}
void RankGrade(long StuNum[],int StuScore[][StuCourse],int StuAmount,int sum[],float aver[]){
int tempSum,tempAver,tempScore,i,j,k,index;
long tempNum;
for(i=0;i<StuAmount-1;i++){
index=i;
for(j=i+1;j<StuAmount;j++){
if(sum[j]>sum[index]){
index=j;
}
}
if(index!=i){
tempSum=sum[index];
sum[index]=sum[i];
sum[i]=tempSum;
tempNum=StuNum[index];
StuNum[index]=StuNum[i];
StuNum[i]=tempNum;
tempAver=aver[index];
aver[index]=aver[i];
aver[i]=tempAver;
for(k=0;k<StuCourse;k++){
tempScore=StuScore[index][k];
StuScore[index][k]=StuScore[i][k];
StuScore[i][k]=tempScore;
}
}
}
}
void PrintStuInfo(long StuNum[],int StuScore[][StuCourse],int StuAmount,int sum[],float aver[]){
int i,j;
printf("StuID \t Math \t English \t Physics \t Sum \t Aver\n");
for(i=0;i<StuAmount;i++){
printf("%4ld\t",StuNum[i]);
for(j=0;j<StuCourse;j++){
printf("%2d\t ",StuScore[i][j]);
}
printf("%5d\t %5.2f\n",sum[i],aver[i]);
}
}
int SearchStuInfo(long StuNum[],int StuAmount,long StuID){
int i;
for(i=0;i<StuAmount;i++){
if(StuNum[i]==StuID){
return i;
}
}
return -1;
}
👩🔬题目
【指针定义、初始化和引用】请用指针变量px实现对普通变量x的输入和输出。
#include <stdio.h>
int main()
{
int x;
int *px;
px=&x;
// 指针
printf("请输入x的值:\n");
scanf("%d",px);
printf("x为%d",*px);
}
👩🔬题目
【指针做函数参数-实现被调用函数的数据回传】请在main()函数中定义变量x, 赋值为100,并输出。请在函数hsp()中对main中变量x值修改为1000,输出。在main函数中再次输出变量x, 观察其结果值为多少,是否改变。(要求用指针做函数参数)
#include <stdio.h>
//【指针做函数参数-实现被调用函数的数据回传】
//
//请在main()函数中定义变量x, 赋值为100,并输出。
//
//请在函数hsp()中对main中变量x值修改为1000,输出。
//
//在main函数中再次输出变量x, 观察其结果值为多少,是否改变。
//(要求用指针做函数参数)
int hsp(int *x)
{
*x=1000;
printf("hsp函数中的x为%d\n",*x);
}
int main()
{
int x=100,i;
printf("x为%d\n",x);
hsp(&x);
printf("x为%d\n",x);
}
👩🔬题目
【指针简单应用】定义main()函数,实现两个数据输入和运算结果输出。调用yunsuan()函数完成对这两个数据的四种运算。定义yunsuan()函数,对main()函数传递过来的两个数据进行加、减、乘、除运算,结果返回给main()函数输出。(要求用指针参数完成结果数据返回给main(),不使用全局变量,不在yunsuan()函数完成输出)
#include <stdio.h>
//定义main()函数,实现两个数据输入和运算结果输出。调用yunsuan()函数完成对这两个数据的四种运算。
//定义yunsuan()函数,对main()函数传递过来的两个数据进行加、减、乘、除运算,结果返回给main()函数输出。
//(要求用指针参数完成结果数据返回给main(),不使用全局变量,不在yunsuan()函数完成输出)
int yunsuan(int x,int y,int *sum,int *jian,int *cheng,float *chu);
int main()
{
int x=0;int y=0;
int sum;
int jian;
int cheng;
float chu;
printf("请输入两个数:\n");
scanf(" %d %d",&x,&y);
yunsuan(x,y,&sum,&jian,&cheng,&chu);
printf("x与y:\n 和为:%d\n 差为:%d\n 积为:%d\n 商为%.3f\n",sum,jian,cheng,chu);
}
int yunsuan(int x,int y,int *sum,int *jian,int *cheng,float *chu)
{
*sum=x+y;
*jian=x-y;
*cheng=(x*y);
*chu=(x/(float) y);
}
👩🔬题目
【字符串定义、初始化、赋值和输入输出】请定义字符串指针ps , 对其初始化为“chushihua zifuchuan”, 并以单个字符形式循环输出;再通过键盘输入字符串“jianpanshuru zifuchuan”给字符串指针ps;并整体输出。
#include <stdio.h>
#include <string.h>
//请定义字符串指针ps , 对其初始化为“chushihua zifuchuan”, 并以单个字符形式循环输出;
//再通过键盘输入字符串“jianpanshuru zifuchuan”给字符串指针ps;并整体输出。
int main()
{
char *ps="chushihua zifuchuan";
for(int i=0;*(ps+i) != '\0';i++)
{
printf("%c ",*(ps+i));
}
printf("\n");
getchar( ); //读取换行
ps=(char *)malloc(sizeof(char)); // 动态申请空间
gets(ps);
printf("%s\n",ps);
free(ps); //释放空间
}
👩🔬题目
【指针指向的字符串处理、通过指针向函数传递字符串和返回字符串】请在main()中定义字符指针ps,键盘输入字符串“123 qw YOP#}”,输出后通过ps将该字符串传递给zfchs()处理,之后输出sfchs()返回的统计和转换结果。。请在zfchs()中统计数字、大小写字母和其他字符的个数,并将大小写字符相互转换,其他字符改为ASCII码表中该字符后面的字符
#include <stdio.h>
#include <string.h>
//请在main()中定义字符指针ps,键盘输入字符串“123 qw YOP#}”,
//输出后通过ps将该字符串传递给zfchs()处理,之后输出zfchs()返回的统计和转换结果。
//请在zfchs()中统计数字、大小写字母和其他字符的个数,并将大小写字符相互转换,
//其他字符改为ASCII码表中该字符后面的字符。
int zfchs(char *p,int *s_num,int *zx_num,int *zd_num,int *q_num);
int main()
{
char *ps;
int s_num=0;
int zd_num=0;
int zx_num=0;
int q_num=0;
ps=(char *)malloc(sizeof(char)); // 动态申请空间
gets(ps);
zfchs(ps,&s_num,&zx_num,&zd_num,&q_num);
printf("数字的个数为:%d\n大写字母的个数为:%d\n小写字母的个数为:%d\n其他字符的个数为:%d\n",s_num,zd_num,zx_num,q_num);
printf("转换后的字符串为:\n");
printf("%s\n",ps);
free(ps); //释放空间
return 0;
}
int zfchs(char *p,int *s_num,int *zx_num,int *zd_num,int *q_num)
{
for(int i=0;*(p+i) !='\0';i++)
{
if(*(p+i) <=57 && *(p+i)>=48) //数字判断
{
*s_num+=1;
}
else if(*(p+i) <=122 && *(p+i)>=97) //小写字母判断
{
*zx_num+=1;
*(p+i)=*(p+i)-32;
}
else if(*(p+i) <=90 && *(p+i)>=65) //大写字母判断
{
*zd_num+=1;
*(p+i)=*(p+i)+32;
}
else{
*q_num+=1;
*(p+i)=*(p+i)+1;
}
}
}
👩🔬题目
【指向一维数组的指针操作一维数组】main函数:输入5个数据保存到数组,将其传递给函数zz()函数,zz()处理完后,输出处理后的数组值。zz()函数:用指针对main传过来的数组进行排序(冒泡排序、简单选择排序)
#include <stdio.h>
//main函数:输入5个数据保存到数组,将其传递给函数zz()函数,zz()处理完后,输出处理后的数组值。
//zz()函数:用指针对main传过来的数组进行排序(冒泡排序、简单选择排序)
int zz(int *p);
int shuru(int *p); //数组输入
void shuchu(int *p); //数组输出
int main()
{
int a[5]={0};
int *p=&a;
shuru(p);
printf("数组输出为:\n");
shuchu(p);
zz(p);
return 0;
}
int shuru(int *p)
{
printf("请输入5位一维数组:\n");
for ( int i = 0; i < 5; i++)
{
scanf(" %d",p+i);
}
}
void shuchu(int *p)
{
for (int i = 0; i < 5; i++)
{
printf("%d ",*(p+i));
}
printf("\n");
}
int zz(int *p)
{
int i,j,temp1,*m=p;
for(int i=0;i<4;i++) {
for(int j=1;j<5-i;j++) {
if(*(m+j)>*(m+j-1))
{
temp1=*(m+j);
*(m+j)=*(m+j-1);
*(m+j-1)=temp1;
}
}
}
printf("冒泡排序法输出为: ");
shuchu(m);
int k,temp2;
for(int i=0;i<4;i++) {
k=i;
for(int j=i+1;j<5;j++) {
if(*(p+j)>*(p+k))
{
k=j;
}
}
if(*(p+k)!=*(p+i))
{
temp1=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp1;
}
}
printf("选择排序法输出为: ");
shuchu(p);
}
👩🔬题目
【指向二维数组的指针操作二维数组】main函数:定义并初始化3行3列9个数据为0,将其分别传递给zz21()函数、zz22()函数处理,之后输出他们的处理结果。zz21()函数:用指向二维数组的行指针操作数组元素,键盘输入3行3列9个数据,统计9个数据的和与平均值及大于平均数的个数,再将数组矩阵的对角线外的上三角元素全部改为0,输出该3行3列9个数据,并将求出的和、平均及大于平均的个数传递回main 函数输出;zz22()函数:用指向二维数组元素的指针操作数组元素,键盘输入3行3列9个数据,统计9个数据的最大值与最小值,再将数组矩阵的对角线外的下三角元素全部改为1,输出该3行3列9个数据,并将求出的最大最小值传递回main 函数输出;
#include <stdio.h>
//main函数:定义并初始化3行3列9个数据为0,将其分别传递给zz21()函数、zz22()函数处理,之后输出他们的处理结果。
//zz21()函数:
//用指向二维数组的行指针操作数组元素,键盘输入3行3列9个数据,
//统计9个数据的和与平均值及大于平均数的个数,再将数组矩阵的对角线外的上三角元素全部改为0,
//输出该3行3列9个数据,并将求出的和、平均及大于平均的个数传递回main 函数输出;
//zz22()函数:
//用指向二维数组元素的指针操作数组元素,键盘输入3行3列9个数据,
//统计9个数据的最大值与最小值,再将数组矩阵的对角线外的下三角元素全部改为1,输出该3行3列9个数据,并将求出的最大最小值传递回main 函数输出;
int zz21(int (*p)[3],int *sum,int *aver,int *max_aver);
int zz22(int *p,int *max,int *min);
int main()
{
int sum=0,aver=0,max_aver=0,max=0,min=0;
int a[3][3]={0};
zz21(a,&sum,&aver,&max_aver);
printf("9个数据的和为:%d\n平均值为:%d\n大于平均数的个数为:%d\n",sum,aver,max_aver);
zz22(&a[0][0],&max,&min);
printf("9个数据的最大值为:%d\n最小值为:%d\n",max,min);
return 0;
}
int zz21(int (*p)[3],int *sum,int *aver,int *max_aver)
{
int i,j,m=0;
printf("请输入9个数据:\n");
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
scanf(" %d",(*(p+i)+j));
*sum+=*(*(p+i)+j);
}
}
*aver=*sum/9;
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
if (*(*(p+i)+j)>*aver)
{
*max_aver=*max_aver+1;
}
if(i<2 && j>0 && i != j)
{
*(*(p+i)+j)=0;
}
printf(" %d",*(*(p+i)+j));
}
printf("\n");
}
}
int zz22(int *p,int *max,int *min)
{
int i,j;
printf("请输入9个数据:\n");
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
scanf(" %d",(p+3*i+j));
}
}
*max=*(p+3*0+0);
*min=*(p+3*2+2);
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
if(*(p+3*i+j)>*max)
{
*max=*(p+3*i+j);
}
if(*(p+3*i+j)<*min)
{
*min=*(p+3*i+j);
}
if(i>0 && j<2 && i != j)
{
*(p+3*i+j)=1;
}
printf(" %d",*(p+3*i+j));
}
printf("\n");
}
}
👩🔬题目
【指向多个字符串的字符指针数组】采用指针数组,对键盘输入的4个字符串进行排序并输出。
#include<stdio.h>
#include<string.h>
#define N 4 //字符串个数
#define M 80//字符串最大长度
int main()
{
char a[N][M];
char (*p)[M], (*k)[M],(*q)[M];//定义行指针
char b[M];//做容器,为交换做准备
printf("请输入%d个字符串:\n",N);
for(p=a;p<a+N;p++)
{
scanf("%s",p);//把字符串存到数组
}
printf("排序后:\n");
for(p=a;p<a+N;p++)//用选择排序法对字符串排序
{
k=p;
for(q=k+1;q<a+N;q++)
if(strcmp(k,q)>0)//按升序排
{
k=q;
strcpy(b,p);
strcpy(p,k);
strcpy(k,b);
}
}
for(p=a;p<a+N;p++)//输出排序后的数组
{
printf("%s\n",p);
}
return 0;
}
👩🔬题目
【结构体类型、变量定义与变量引用】定义教师结构体类型,包含:工号、姓名、性别、出生年月、工资;定义教师结构体变量teacher1,初始化相关信息并输出;定义教师结构体变量teacher2,键盘输入相关信息并输出。
#include <stdio.h>
//定义教师结构体类型,包含:工号、姓名、性别、出生年月、工资;
//定义教师结构体变量teacher1,初始化相关信息并输出;
//定义教师结构体变量teacher2,键盘输入相关信息并输出
typedef struct date
{
int year;
int month;
int day;
}DATE;
struct teacher
{
long id;
char name[5];
char sex;
DATE birthday;
float gz;
}teacher2;
int main()
{
struct teacher teacher1={19132305,"小红",'F',{1971,5,19},9000.0};
printf("%8d %8s %3c %6d/%02d%/%2d %.2f\n",
teacher1.id,
teacher1.name,
teacher1.sex,
teacher1.birthday.year,
teacher1.birthday.month,
teacher1.birthday.day,
teacher1.gz
);
printf("请输入新的教师信息\n");
scanf("%ld",&teacher2.id);
scanf("%s",&teacher2.name);
scanf(" %c",&teacher2.sex);
scanf("%d",&teacher2.birthday.year);
scanf("%d",&teacher2.birthday.month);
scanf("%d",&teacher2.birthday.day);
scanf("%f",&teacher2.gz);
printf("%8d %8s %3c %6d/%02d%/%2d %.2f\n",
teacher2.id,
teacher2.name,
teacher2.sex,
teacher2.birthday.year,
teacher2.birthday.month,
teacher2.birthday.day,
teacher2.gz
);
return 0;
}
👩🔬题目
【结构体数组】定义存放3个教师信息的结构体数组teacher(结构体类型包含:工号、姓名、性别、出生年月、工资);完成3个教师信息的键盘输入和屏幕输出;将3个教师信息按年龄从小到大排序输出。
#include <stdio.h>
//定义存放3个教师信息的结构体数组teacher(结构体类型包含:工号、姓名、性别、出生年月、工资);
//完成3个教师信息的键盘输入和屏幕输出;
//将3个教师信息按年龄从小到大排序输出
typedef struct date
{
int year;
int month;
int day;
}DATE;
struct teacher
{
long id;
char name[8];
char sex;
DATE birthday;
float gz;
}temp;
int main()
{
struct teacher teacher[3];
printf("请输入教师信息\n");
for(int i=0;i<3;i++) {
scanf("%ld",&teacher[i].id);
scanf("%s",teacher[i].name);
scanf(" %c",&teacher[i].sex);
scanf("%d",&teacher[i].birthday.year);
scanf("%d",&teacher[i].birthday.month);
scanf("%d",&teacher[i].birthday.day);
scanf("%f",&teacher[i].gz);
}
for(int i=0;i<3;i++) {
for(int j=2;j>0;j--)
{
if(teacher[i].birthday.year>teacher[j].birthday.year)
{
temp=teacher[i];
teacher[i]=teacher[j];
teacher[j]=temp;
}
}
}
printf("排序后输出:\n");
for(int i=0;i<3;i++) {
printf("%7d %8s %3c %6d/%02d%/%02d %.2f\n",
teacher[i].id,
teacher[i].name,
teacher[i].sex,
teacher[i].birthday.year,
teacher[i].birthday.month,
teacher[i].birthday.day,
teacher[i].gz
);
}
return 0;
}
👩🔬题目
【结构体指针】定义教师结构体类型,包含:工号、姓名、性别、出生年月、工资;采用指针的方法实现对一个教师信息的键盘输入和输出。采用指针的方法实现对存放教师信息的结构体数组进行键盘输入和输出;判断是否有同名老师。
#include <stdio.h>
#include<string.h>
//定义教师结构体类型,包含:工号、姓名、性别、出生年月、工资;
//采用指针的方法实现对一个教师信息的键盘输入和输出。
//采用指针的方法实现对存放教师信息的结构体数组进行键盘输入和输出;
//判断是否有同名老师。
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct teacher
{
long id;
char name[8];
char sex;
DATE birthday;
float gz;
}TEACHER;
int main()
{
TEACHER teacher1;
TEACHER *pl;
pl=&teacher1;
TEACHER teacher[3];
TEACHER *pt;
pt=teacher;
printf("请输入1位教师信息\n");
scanf("%ld",&pl->id);
scanf("%s",pl->name);
scanf(" %c",&pl->sex);
scanf("%d",&pl->birthday.year);
scanf("%d",&pl->birthday.month);
scanf("%d",&pl->birthday.day);
scanf("%f",&pl->gz);
printf("%7d %8s %3c %6d/%02d%/%02d %.2f\n",
pl->id,
pl->name,
pl->sex,
pl->birthday.year,
pl->birthday.month,
pl->birthday.day,
pl->gz
);
printf("请输入3位教师信息\n");
for(int i=0;i<3;i++) {
scanf("%ld",&(pt+i)->id);
scanf("%s",(pt+i)->name);
scanf(" %c",&(pt+i)->sex);
scanf("%d",&(pt+i)->birthday.year);
scanf("%d",&(pt+i)->birthday.month);
scanf("%d",&(pt+i)->birthday.day);
scanf("%f",&(pt+i)->gz);
}
int w=0;
for(int i=0;i<2;i++) {
for(int j=i+1;j<3;j++)
{
if(strcmp((pt+i)->name, (pt+j)->name) == 0)
{
w=1;
}
}
}
if(w==1)
{
printf("有同名\n");
}else{
printf("没有同名\n");
}
for(int i=0;i<3;i++) {
printf("%7d %8s %3c %6d/%02d%/%02d %.2f\n",
(pt+i)->id,
(pt+i)->name,
(pt+i)->sex,
(pt+i)->birthday.year,
(pt+i)->birthday.month,
(pt+i)->birthday.day,
(pt+i)->gz
);
}
return 0;
}
👩🔬题目
【结构体指针做函数参数】main函数定义结构体数组存储教师信息,调用in函数完成教师信息输入,调用out函数完成教师信息输出;要求in、out函数的形参采用结构体指针
#include <stdio.h>
#include<string.h>
//main函数定义结构体数组存储教师信息,调用in函数完成教师信息输入,调用out函数完成教师信息输出;
//要求in、out函数的形参采用结构体指针
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct teacher
{
long id;
char name[8];
char sex;
DATE birthday;
float gz;
}TEACHER;
void in(struct teacher *pt);
void out(struct teacher *p);
int main()
{
TEACHER teacher[3];
in(&teacher);
out(&teacher);
return 0;
}
void in(struct teacher *pt)
{
printf("请输入3位教师信息\n");
for(int i=0;i<3;i++) {
scanf("%ld",&(pt+i)->id);
scanf("%s",(pt+i)->name);
scanf(" %c",&(pt+i)->sex);
scanf("%d",&(pt+i)->birthday.year);
scanf("%d",&(pt+i)->birthday.month);
scanf("%d",&(pt+i)->birthday.day);
scanf("%f",&(pt+i)->gz);
}
}
void out(struct teacher *p)
{
printf("请输出3位教师信息\n");
for(int i=0;i<3;i++) {
printf("%7d %8s %3c %6d/%02d%/%02d %.2f\n",
(p+i)->id,
(p+i)->name,
(p+i)->sex,
(p+i)->birthday.year,
(p+i)->birthday.month,
(p+i)->birthday.day,
(p+i)->gz
);
}
}
👩🔬题目
【动态数组】main函数中定义指向教师的结构体数组指针p,调用create函数、in函数、out函数完成相应功能。create函数中创建动态结构体数组,并用形参指针p指向它,in函数完成对结构体数组中教师信息的输入,out函数完成对结构体数组中教师信息的输出。
#include <stdio.h>
#include <string.h>
//main函数中定义指向教师的结构体数组指针p,调用create函数、in函数、out函数完成相应功能。
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct teacher
{
long id;
char name[8];
char sex;
DATE birthday;
float gz;
}TEACHER;
int main()
{
TEACHER teacher[3];
TEACHER *p;
// p=teacher;
create(&p,3);
in(p);
out(p);
free(p);
return 0;
}
void create(struct teacher **pp,int n);//create函数中创建动态结构体数组,并用形参指针p指向它
void in(struct teacher *pt);//in函数完成对结构体数组中教师信息的输入
void out(struct teacher *p);//out函数完成对结构体数组中教师信息的输出。
void create(struct teacher **pp,int n)
{
// pp=(int*)malloc(sizeof(int)*n);
*pp=(TEACHER *)malloc(sizeof(TEACHER)*n); //(**p)
}
void in(struct teacher *pt)
{
printf("请输入3位教师信息\n");
for(int i=0;i<3;i++) {
scanf("%ld",&(pt+i)->id);
scanf("%s",(pt+i)->name);
scanf(" %c",&(pt+i)->sex);
scanf("%d",&(pt+i)->birthday.year);
scanf("%d",&(pt+i)->birthday.month);
scanf("%d",&(pt+i)->birthday.day);
scanf("%f",&(pt+i)->gz);
}
}
void out(struct teacher *p)
{
printf("请输出3位教师信息\n");
for(int i=0;i<3;i++) {
printf("%7d %8s %3c %6d/%02d%/%02d %.2f\n",
(p+i)->id,
(p+i)->name,
(p+i)->sex,
(p+i)->birthday.year,
(p+i)->birthday.month,
(p+i)->birthday.day,
(p+i)->gz
);
}
}
👩🔬题目
【静态结构体链表】定义3个教师结构体变量a,b,c,将他们连接成a->b->c 。用链表访问方式输入和输出3个教师信息 。
#include <stdio.h>
#include <string.h>
//定义3个教师结构体变量a,b,c,将他们连接成a->b->c 。用链表访问方式输入和输出3个教师信息 。
typedef struct teacher
{
long id;
char name[8];
struct teacher *next;
}TEACHER;
int main()
{
TEACHER a,b,c,*head;
printf("请输入三条教师信息:\n");
scanf("%ld %s",&a.id,a.name);
scanf(" %ld %s",&b.id,b.name);
scanf(" %ld %s",&c.id,c.name);
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
while(head !=NULL)
{
printf("%4d %s\n",head->id,head->name);
head=head->next;
}
return 0;
}
👩🔬题目
【动态结构体链表】用动态结构体链表来存放3个教师信息,并用链表访问方式输出3个教师信息 。
#include <stdio.h>
#include <string.h>
//用动态结构体链表来存放3个教师信息,并用链表访问方式输出3个教师信息 。
typedef struct teacher
{
long id;
char name[8];
struct teacher *next;
}TEACHER;
TEACHER *Build(TEACHER *head); //构建链表
int main()
{
int i = 0;
TEACHER *head = NULL; //链表头指针
while(i<3)
{
head = Build(head);
i++;
}
while(head !=NULL) //输出链表
{
printf("%4d %s\n",head->id,head->name);
head=head->next;
}
return 0;
}
TEACHER *Build(TEACHER *head)
{
TEACHER *p = NULL;
TEACHER *pr = head;
p = (TEACHER *)malloc(sizeof(TEACHER)); //让p指向新建节点
if (p == NULL)
{
printf("内存分配失败!\n");
exit(0);
}
if (head == NULL)
{
head = p;
}
else //若原链表为非空,则将新建节点添加到表尾
{
while (pr->next != NULL)
{
pr = pr->next; //让pr指向下一个节点
}
pr->next = p;
}
pr = p;
printf("请输入教师信息:");
scanf("%ld %s",&pr->id,pr->name); //输入节点数据
pr->next = NULL; //将新建节点置为表尾
return head; //返回添加节点后的链表的头节点指针
}
👩🔬题目
【结构体链表应用】采用结构体链表实现对教师(或图书、教室、汽车、药品、感冒、椅子、天气、花草、电器等任选一个,或自己设计一个)信息的输入、输出、查找、插入、删除等操作。要求:每个功能用函数实现,形参为结构体指针,由main调用
#include <stdio.h>
#include <string.h>
//采用结构体链表实现对教师信息的输入、输出、查找、插入、删除等操作。
//要求:每个功能用函数实现,形参为结构体指针,由main调用
typedef struct teacher //构建结构体
{
long id;
char name[8];
struct teacher *next;
}TEACHER;
TEACHER *Build(TEACHER *head,int N); //输入
TEACHER *Show(TEACHER *head); //输出
TEACHER *Insert(TEACHER *head); //插入
TEACHER *Delete(TEACHER *head,int N_id); //删除
TEACHER *Search(TEACHER *head,int N_id); //查找
TEACHER *Free(TEACHER *head); //释放内存
int main()
{
TEACHER *head = NULL; //链表头指针
int n,id,s_id,i_id;
char name;
printf("请输入需要输入的数据量:\n");
scanf("%d",&n);
head = Build(head,n);
Show(head);
printf("删除节点:\n");
printf("请输入需要删除的节点id:");
scanf("%d",&id);
Delete(head,id);
printf("删除后的节点信息为:\n");
Show(head);
printf("请输入需要查找的节点id:");
scanf("%d",&s_id);
Search(head,s_id);
Insert(head);
Show(head);
Free(head);
return 0;
}
TEACHER *Build(TEACHER *head,int N)
{
int i=0;
while(i<N)
{
TEACHER *p = NULL;
TEACHER *pr = head;
p = (TEACHER *)malloc(sizeof(TEACHER)); //让p指向新建节点
if (p == NULL)
{
printf("内存分配失败!\n");
exit(0);
}
if (head == NULL)
{
head = p;
}
else //若原链表为非空,则将新建节点添加到表尾
{
while (pr->next != NULL)
{
pr = pr->next; //让pr指向下一个节点
}
pr->next = p;
}
pr = p;
printf("请输入教师信息:");
scanf("%ld %s",&pr->id,pr->name); //输入节点数据
pr->next = NULL; //将新建节点置为表尾
i++;
}
return head; //返回添加节点后的链表的头节点指针
}
TEACHER *Show(TEACHER *head) //输出节点
{
while(head !=NULL)
{
printf("%4d %s\n",head->id,head->name);
head=head->next;
}
}
TEACHER *Delete(TEACHER *head,int N_id) //删除末尾节点
{
TEACHER *p = head, *pr = head;
if (head == NULL)
{
printf("链表为空!\n");
return(head);
}
while (N_id != p->id && p->next != NULL)
{
pr = p;
p = p->next;
}
if (N_id == p->id)
{
if (p == head)
{
head = p->next;
}
else
{
pr->next = p->next;
}
free(p);
}
else
{
printf("没有找到要删除的节点信息!\n");
}
return head;
}
TEACHER *Search(TEACHER *head,int N_id)
{
TEACHER *p = head, *pr = head;
if (head == NULL)
{
printf("链表为空!\n");
return(head);
}
while (N_id != p->id && p->next != NULL)
{
pr = p;
p = p->next;
}
if (N_id == p->id)
{
printf("找到啦,输出节点信息为:\n");
printf("%4d %s\n",p->id,p->name);
}
else
{
printf("没有找到节点信息!\n");
}
}
TEACHER *Insert(TEACHER *head)
{
TEACHER *pr = head, *p = head, *temp = NULL;
p = (TEACHER *)malloc(sizeof(TEACHER));
if (p == NULL)
{
printf("内存分配失败!!\n");
exit(0);
}
int N_id=0;
p->next = NULL;
printf("请输入需要插入的信息:");
scanf("%ld %s",&N_id,p->name);
p->id=N_id;
if (head == NULL)
{
head = p;
}
else
{
while (pr->id < N_id && pr->next != NULL)
{
temp = pr;
pr = pr->next;
}
if (pr->id >= N_id)
{
if (pr == head)
{
p->next = head;
head = p;
}
else
{
pr = temp;
p->next = pr->next;
pr->next = p;
}
}
else
{
pr->next = p;
}
}
return head;
}
TEACHER *Free(TEACHER *head)
{
TEACHER *p = head, *pr = NULL;
while (p != NULL)
{
pr = p;
p = p->next;
free(pr);
}
}
👩🔬题目
【结构体数组应用】采用结构体数组实现对教师(或图书、教室、汽车、药品、感冒、椅子、天气、花草、电器等任选一个,或自己设计一个)信息的输入、输出、查找、插入、删除等操作。要求:每个功能用函数实现,形参为结构体指针,由main调用
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define N 4
//采用结构体数组实现对教师信息的输入、输出、查找、插入、删除等操作。
//要求:每个功能用函数实现,形参为结构体指针,由main调用
typedef struct teacher //构建结构体
{
long id;
char name[8];
}TEACHER;
void Build(TEACHER *head,int *n); //输入
void Show(TEACHER *head,int *n); //输出
void Insert(TEACHER *head,int *n);//插入
void Delete(TEACHER *head,int *n,int N_id); //删除
void Search(TEACHER *head,int *n,int N_id); //查找
int main()
{
int *m=4;
int b,s,d;
TEACHER t[N];
Build(&t,&m);
printf("初始输入的信息为:\n");
Show(&t,&m);
printf("请输入需要插入的数据量:");
scanf("%d",&b);
for(int i=0;i<b;i++)
{
printf("b是%d",b);
Insert(&t,&m);
}
printf("请输入需要查找的id:");
scanf("%d",&s);
Search(&t,&m,s);
printf("请输入需要删除的id:");
scanf("%d",&d);
Delete(&t,&m,d);
printf("m为:%d",m);
printf("删除后的信息为:\n");
Show(&t,&m);
Insert(&t,&m);
printf("插入后的信息为:\n");
Show(&t,&m);
}
void Build(TEACHER *head,int *n)
{
printf("请输入教师信息:\n");
for(int i=0;i<*n;i++)
{
scanf("%ld %s",&head[i].id,head[i].name);
}
}
void Show(TEACHER *head,int *n)
{
for(int i=0;i<*n;i++)
{
printf("%ld %s\n",head[i].id,head[i].name);
}
}
void Insert(TEACHER *head,int *n)
{
printf("请输入需要插入的信息:");
scanf("%ld %s",&head[*n].id,head[*n].name);
*n=*n+1;
}
void Search(TEACHER *head,int *n,int N_id)
{
int q=0;
for(int i=0;i<*n;i++)
{
if(head[i].id==N_id)
{
q=1;
printf("找到啦,查找内容为:\n");
printf("%ld %s\n",head[i].id,head[i].name);
}
}
if(q==0)
{
printf("没有找到该信息!\n");
}
}
void Delete(TEACHER *head,int *n,int N_id)
{
int q=0;
for(int i=0;i<*n;i++)
{
if(head[i].id==N_id)
{
q=1;
for(int j=i;j<*n;j++)
{
head[j].id=head[j+1].id;
strcpy(head[j].name,head[j+1].name);
}
}
}
*n-=1;
if(q==0)
{
printf("没有找到该信息!\n");
}
}
👩🔬题目
分别用字符写、字符串写、格式化写和数据块写语句完成对d:\k\t.txt文件的写操作。再分别用字符读、字符串读、格式化读和数据块读语句完成对d:\k\t.txt文件的读操作并输出到屏幕上。
写文件:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//分别用字符写、字符串写、格式化写和数据块写语句完成对d:\k\t.txt文件的写操作。
//再分别用字符读、字符串读、格式化读和数据块读语句完成对d:\k\t.txt文件的读操作并输出到屏幕上。
int main()
{
FILE *fp,*rp;
int i;
//写操作
if((fp=fopen("D:\\k\\t.txt","w"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
fputc('h',fp); //字符写
char ch[20]="char";
fputs(ch,fp); //字符串写
int f=123;
fprintf(fp," %d ",f); //格式化写
char t[30];
for(int i=0;i<26;i++)
{
t[i]=(char)('z'-i);
}
fwrite(t,sizeof(char),26,fp); //数据块写
fclose(fp);
}
打开文件:
#include <stdio.h>
#include <stdlib.h>
//分别用字符写、字符串写、格式化写和数据块写语句完成对d:\k\t.txt文件的写操作。
//再分别用字符读、字符串读、格式化读和数据块读语句完成对d:\k\t.txt文件的读操作并输出到屏幕上。
int main(int argc,char** argv)
{
FILE *fp;
int i;
if((fp=fopen("D:\\k\\t.txt","r"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
printf("字符读:\n");
putchar(fgetc(fp));
char ch[20]={0};
fgets(ch,5,fp); //字符串读
printf("\n字符串读:\n");
printf("%s\n", ch);
int p=123;
fscanf(fp,"%d",&p); //格式化读
printf("格式化读:\n");
printf("%d\n", p);
char t[30];
int numread;
numread=fread(t,sizeof(char),26,fp); //数据块读
printf("格式化读:\n");
printf("读出数据块个数:%d\n",numread);
printf("读出的内容:%.26s\n",t);
fclose(fp);
}
👩🔬题目
【C++】用C++方法完成下列数据的输入和输出输入:1 A 3.14 ttttt输出格式:1 A 3.14 ttttt
#include <iostream>
using namespace std;
//输入:1 A 3.14 ttttt
//
//输出格式:
//1 A
//3.14 ttttt
int main()
{
int a;
char b;
float c;
string d;
cin>>a>>b>>c>>d;
cout<<a<<'\t'<<b<<'\n';
cout<<c<<'\t'<<d<<'\n';
return 0;
}
👩🔬题目
【C++】用C++方法,创建用户需求的存放n个整型数据的动态数组,对其排序并输出,格式如下:52 3 9 4 11 2 3 4 9 322 88 1111 22 88
#include <iostream>
using namespace std;
//用C++方法,创建用户需求的存放n个整型数据的动态数组,对其排序并输出,格式如下:
//5
//2 3 9 4 1
//1 2 3 4 9
//3
//22 88 11
//11 22 88
int main()
{
int n; //输入数组长度
cin>>n;
int *p; //声明一个指针
p=new int[n];
for(int i=0;i<n;i++) //输入
cin>>p[i];
int min,t; //排序
for (int i=0;i<n-1;i++)
{
t=i;
for(int j=i+1;j<n;j++)
{
if(p[j]<p[i])
{
t=j;
}
}
if(t != i)
{
min=p[i];
p[i]=p[t];
p[t]=min;
}
}
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
delete []p; //释放这个一维的动态数组,而不是释放指针p。用完以后要记得释放掉
return 0;
}
👩🔬题目
【C++】编写函数jisuan,完成main函数传递过来的两个数据求和与平均,并返回到main中进行输出。要求:形参采用引用方式。
#include <iostream>
using namespace std;
//编写函数jisuan,完成main函数传递过来的两个数据求和与平均,
//并返回到main中进行输出。要求:形参采用引用方式。
void jisuan(int x,int y,int& s,float& a);
int main()
{
int x,y,s=0;
float a=0;
cin>>x>>y;
jisuan(x,y,s,a);
cout<<"两数之和:"<<s<<'\n';
cout<<"平均值:"<<a<<'\n';
}
void jisuan(int x,int y,int& s,float& a)
{
s=x+y;
a=(float)s/2;
}