我就喜欢这种干脆的,懒得动脑干脆有偿,可以,代码给你,免得别人说我们C版摸鱼的都是怂货
支付宝 15289802628
由于图片的题目出题者明显语文风格特别个性,理解困难,可能理解有偏差,如果需要修改再说
编译环境 win10 MinGW(gcc 3.4.5)
程序代码:
#include <stdio.h> //C标准库文件
#include <stdlib.h> //C标准库文件
#define name "老李" //此处填姓名
#define xuehao 12 //此处填学号
#define max 199 //随机数值数组上限
#define strn_max 5 //读取成绩输入的字符上限
//根据C99标准进行函数声明
int fun1(int n,int a[]);
int fun2(int n,int a[]);
int fun3(int n,int a[]);
int fun4(int n,int a[]);
int str_get(char * arr,int the_max);
int ascii_to_int(char cache[]);
//用作状态判定的全局变量
int state=0;
int main(void)
{
int std[max]={0};
std[0]=-1;
int xh=xuehao;
char ch=0;
printf("2011-2012 第二学期C语言上机考试试题\n班级——11网络1班\n姓名——%s\n学号——%d\n\n",name,xh);
//printf("请输入选项:\n1:fun1\n2:fun2\n3:fun3\n4:fun4\n");
while(ch!='q')
{
printf("请输入选项:\n\n1:随机生成成绩数据\n2:显示成绩数据\n3:查找数据\n4:显示随机生成数据的属性\nq:退出\n\n");
ch=getchar();
while(getchar()!='\n')
continue;
switch(ch)
{
case '1':
fun1(xh,std);
break;
case '2':
fun2(xh,std);
break;
case '3':
fun3(xh,std);
break;
case '4':
fun4(xh,std);
break;
case 'q':
return 0;
break;
default:
printf("未定义行为,请重新输入\n\n");
break;
}
}
return 0;
}
//fun1的功能是随机生成学号x3个整形数值并存入数组中,生成随机范围为0至100
int fun1(int n,int a[])
{
int cache=0;
int count=0;
cache=n*3;
if(cache>199)
{
printf("学号x3超出数据保存上限!\n\n");
return 1;
}
switch(state)
{
case 0:
state=1;
break;
case 1:
state=2;
printf("数组内已存在随机成绩数据!\n\n");
return 1;
break;
default:
printf("致命错误!\n\n");
return 1;
break;
}
while(count<(cache-1))
{
a[count]=(rand()%100);//本处程序重点,随机数生成函数rand()是C标准库stdio.h中的一个函数
count++;
}
a[count]=-1;
printf("数据已生成。\n\n");
return 0;
}
//fun2的功能是输出数组内的数据
int fun2(int n,int a[])
{
int count,line;
if(!state)
{
printf("数据为空,返回主菜单\n\n");
return 1;
}
printf("随机数据为:\n");
for(count=0,line=1;count<(max-1);count++)
{
if(a[count]<0)
break;
printf("%2d ",a[count]);
if((!((count+1)%5))&&(count))
printf("\n");
}
printf("\n\n");
return 0;
}
//fun3的功能是查找数组内自己的成绩并输出对应等级
int fun3(int n,int a[])
{
int count=0;
int cache=0;
int grades=0;
int the_state=0;
int round=0;
char * size[4]={"优秀","良好","合格","不合格"};
char gra_cache[strn_max]={0};
char * sig;
if(!state)
{
printf("数据为空,返回主菜单\n\n");
return 1;
}
printf("输入你的成绩\n\n");
////此处利用了自行编写的函数读取输入,避免VS编译不允许scanf()等不安全函数的问题
str_get(gra_cache,strn_max);
if((gra_cache[3])||((gra_cache[0]<'0')||(gra_cache[0]>'9')))//这里讲解一下,如果输入成绩的时候输入奇怪的东西就会停止该函数执行
{
printf("未定义行为,返回主菜单。\n\n");
return 1;
}
grades=ascii_to_int(gra_cache);
///////////
if(grades>100)
{
printf("你的分数不科学!\n\n");
return 1;
}
while(a[count]>=0)
{
if(cache>90)
sig=size[0];
else if(cache>80)
sig=size[1];
else if(cache>60)
sig=size[2];
else
sig=size[3];
if(a[count]==grades)
{
printf("%2d %3s ",a[count],sig);
round++;
the_state=1;
}
count++;
}
printf("共查找到%d个数据。\n",round);
if(!the_state)
printf("数据内没有你的成绩。\n");
printf("\n\n");
return 0;
}
//fun4的功能是输出数组的最大值、最小值以及所有数值的总和和平均值
int fun4(int n,int a[])
{
int the_max=0,the_min=0,sum=0;
float average=0;
int count=0;
if(!state)
{
printf("数据为空,返回主菜单\n\n");
return 1;
}
while(count<(max-1))
{
if(a[count]<0)
break;
if(a[count]>the_max)
the_max=a[count];
else if(a[count]<the_min)
the_min=a[count];
sum+=a[count];
count++;
}
average=(float)sum/count;
printf("最高:%d 最低:%d 总和:%d 平均值:%2.2f\n\n",the_max,the_min,sum,average);
return 0;
}
//针对可在VS以及MinGW都可正常编译无需替换而自行编写的读取输入函数
int str_get(char * arr,int the_max)
{
char * cache;
cache=arr;
int count=0;
for(count=0;count<the_max-1;count++)
{
*arr=getchar();
if((*arr)==('\0')||(*arr)==('\n'))
{
*arr='\0';
return count;
}
arr++;
}
*arr='\0';
return count;
}
//自行编写的将输入字符串转换为整数的函数
int ascii_to_int(char cache[])
{
int sum=0;
int count=0;
int base_of_sum=1;
int round_of_ten=0;
int round=0;
for(count=0;(0!=(cache[count]))&&(count<strn_max);count++)
round++;
for(count=0;(0!=(cache[count]))&&(count<strn_max);count++)
{
for(base_of_sum=1,round_of_ten=0;round_of_ten<round-1;round_of_ten++)
base_of_sum*=10;
sum+=((cache[count]-'0') * base_of_sum);
round--;
}
return sum;
}