C语言 DLUT 作业六
这次感觉有点难
1、鞍点
#include<stdio.h>
#define row 2
#define line 3
int main()
{
int i,j,a[row][line],m=0,n=0,max=0,min=0,temp=0,k;
printf("输入二维数组:\n");
for(i=0;i<row;i++)
{ for(j=0;j<line;j++)
scanf("%d",&a[i][j]);
}
/*找出各行最大值*/
for(i=0;i<row;i++)
{ for(j=0;j<line;j++)
if(a[i][m]<a[i][j])
{
m=j;
a[i][m]=a[i][j];
}
max=a[i][m];
min=a[0][m];
for(k=0;k<row;k++)
if(a[k][m]<min)
{
min=a[k][m];
n=k;
}
if(max==min)
{
temp=1;
printf("鞍点为:a[%d][%d]=%d",n,m,a[n][m]);
break;
}
}
if(temp==0)
printf("该二维数组不存在鞍点!");
return 0;
}
2、成绩
/* 一个学习小组有3个人,每个人有5门课的考试成绩,输出每门课的平均成绩。
若每个课程有不同的学分,计算每人的加权平均分与平均学分绩点GPA成绩。
平均学分绩点是将分数换算为绩点,之后按学分加权平均分方法计算。90以上算4分,80到90算3分,70到80算2分,60到70算1分,60以下0分。平均学分绩点一般3.7分以上为优秀,3.5分左右为良好,2.5分左右为中等,1分为及格
平均学分绩点=∑(课程学分×成绩绩点)/∑课程学分=各门课程学分绩点和/各门课程学分数和*/
#include<stdio.h>
#define s1
int main()
{
char c[]={"甲\t乙\t丙\t各科平均成绩"};
int i,j,k=0,a[5][3],b[5]={1,2,3,4,5};
float score[5][4],avergrade[3],sum=0,total=0;
printf("输入成绩:\n");
for(i=0;i<5;i++)
for(j=0;j<3;j++)
scanf("%f",&score[i][j]);
puts(c);
for(i=0;i<5;i++)
{
sum=0;
for(j=0;j<3;j++)
{
sum+=score[i][j];
printf("%.1f\t",score[i][j]);
}
printf("%.1f\n",sum/3.0);
}
for(i=0;i<5;i++)
{ for(j=0;j<3;j++)
{
if(score[i][j]>90&&score[i][j]<=100)
a[i][j]=4;
else if(score[i][j]>80&&score[i][j]<=90)
a[i][j]=3;
else if(score[i][j]>70&&score[i][j]<=80)
a[i][j]=2;
else if(score[i][j]>60&&score[i][j]<=70)
a[i][j]=1;
else
a[i][j]=0;
}
}
for(i=0;i<3;i++)
{
total=0;
k=0;
for(j=0;j<5;j++)
{
total+=a[j][i]*b[k++];
}
printf("%.1f\t",total/(1+2+3+4+5));
}
}
3、大数求和
//大数求和问题。
#include<stdio.h>
#include<string.h>
int main()
{
char ch1[1000]={'0'},ch2[1000]={'0'},c;
int i,j,n,in1[1000]={0},in2[1000]={0},max,len1,len2,result[1000]={0},m=0;
printf("输入两个大数:\n");
gets(ch1);
// c=getchar();
gets(ch2);
len1=strlen(ch1);
len2=strlen(ch2);
max=len1>len2?len1:len2;
for(i=0,j=len1-1;j>=0;i++,j--)
{
in1[i]=ch1[j]-'0';
}
for(i=0,j=len2-1;j>=0;i++,j--)
{
in2[i]=ch2[j]-'0';
}
printf("求和结果为:\n");
for(i=0;i<max;i++)
{
result[i]=in1[i]+in2[i];
if(result[i]>9)
{
result[i+1]++;
result[i]-=10;
}
}
if(result[max]>0)
max++;
for(i=max-1;i>=0;i--)
{
printf("%d",result[i]);
}
return 0;
}
4、二进制转换
/*输入一个不超过40亿的正整数,将其转换为二进制字符串输出*/
#include<stdio.h>
int main()
{
long int n;
int a[100],i=0,j=0;
printf("输入一个不超过四亿的正整数\n");
scanf("%d",&n);
while(n!=0)
{
a[i++]=n%2;
n=n/2;
j++;
}
printf("转化为二进制数为:\n");
for(i=j-1;i>=0;i--)
{
printf("%d",a[i]);
}
return 0;
}
5、二维数组奇偶数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i,j[40],p[20][2],k=0,m=0,n=0,q=0,x=0;
srand(time(NULL));
printf("原随机数组:\n");
for(i=0;i<40;i++)
{
j[i]=-1;
// printf("%d",j[i]);
}
for(i=0;i<20;i++)
{ for(k=0;k<2;k++)
{
p[i][k]=-1;
}
}
for(i=0;i<=19;i++)
{
j[i]=rand()%10+0;
printf("%d\t",j[i]);
}
k=0;
q=0;
for(i=0;i<40;i++)
{
if(j[i]%2==0&&j[i]!=-1)
{
p[k++][0]=j[i];
n+=1;
}
if(j[i]%2==1&&j[i]!=-1)
{
p[q++][1]=j[i];
// printf("\n%d",p[q][1]);
m+=1;
}
}
/* for(i=0;i<20;i++)
{
for(k=0;k<2;k++)
{
printf("%d\t",p[i][k]);
}
printf("\n");
}*/
printf("\n偶数:\t奇数:\n");
for(i=0;i<20;i++)
{
/*for(x=0;x<2;x++)
{
if(p[i][x]!=-1)
{printf("%d\t",p[i][x]);}
}*/
if((p[i][0]!=-1)&&(p[i][1]!=-1))
{printf("%d\t%d",p[i][0],p[i][1]);}
else if((p[i][0]==-1)&&(p[i][1]!=-1))
{printf(" \t%d",p[i][1]);}
else if((p[i][0]!=-1)&&(p[i][1]==-1))
{printf("%d\t ",p[i][0]);}
else
{printf(" \t ");}
printf("\n");
}
printf("\n偶数总数为%d\n奇数总数为%d",n,m);
return 0;
}
6、字符排序
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,n;
char ch[1000],temp;
gets(ch);
n=strlen(ch);
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
k=i;
if(ch[k]>ch[j])
{
k=j;
}
temp=ch[k];
ch[k]=ch[i];
ch[i]=temp;
}
}
for(i=0;i<n;i++)
{
printf("%c",ch[i]);
}
return 0;
}
7、杨辉三角前十行
#include<stdio.h>
int main()
{
int i,j,n[10][10];
for(i=0;i<10;i++)
{ for(j=0;j<=i;j++)
{
if(j==0||j==i)
{
n[i][j]=1;
}
}
}
for(i=2;i<10;i++)
{ for(j=1;j<i;j++)
n[i][j]=n[i-1][j-1]+n[i-1][j];
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%d\t",n[i][j]);
}
printf("\n");
}
return 0;
}
8、矩阵加法乘法和转置
#include<stdio.h>
#define row 3
#define line 3
#define p 3
int main()
{
int a[row][line],b[row][line],c[p][row],i,j,sum=0,k;
/* printf("输入初始二维数组:\n");
for(i=0;i<row;i++)
for(j=0;j<line;j++)
{
scanf("%d",&a[i][j]);
}
printf("转置后数组为:\n");
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
a[i][j]=a[j][i];
printf("%d\t",a[i][j]);
}
printf("\n");
}*/
/* printf("输入两个同阶二维数组:\n");
for(i=0;i<row;i++)
for(j=0;j<line;j++)
{
scanf("%d",&a[i][j]);
}
for(i=0;i<row;i++)
for(j=0;j<line;j++)
{
scanf("%d",&b[i][j]);
}
printf("进行加法后得:\n");
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
{
printf("%d\t",a[i][j]+b[i][j]);
}
printf("\n");
}*/
/* printf("输入行等于另一个列的两个二维数组:\n");
for(i=0;i<row;i++)
for(j=0;j<p;j++)
{
scanf("%d",&a[i][j]);
}
for(i=0;i<p;i++)
for(j=0;j<line;j++)
{
scanf("%d",&c[i][j]);
}
for(i=0;i<row;i++)
{
sum=0;
for(j=0;j<p;j++)
{
sum+=a[i][j]*c[j][i];
}
for(k=0;k<line;k++)
b[i][k]=sum;
}
for(i=0;i<row;i++)
{
for(k=0;k<line;k++)
{
printf("%d\t",b[i][k]);
}
printf("\n");
}*/
return 0;
}
9、英文文章
/*读入一段英文文章,统计其中的英文字符数以及单词数并输出。
单词和单词的间隔是由以下标点符号形成的:空格、tab、回车换行、逗号、句号、问号、括号、双引号和冒号。
单引号(表示缩写的‘)和连字号(-)视做单词的一部分,所以“he’s”是一个单词,
输入数据中不会出现两个连续的连字号。 */
#include<stdio.h>
int main()
{
char ch[10000],c,n;
int i=0,j=0,num=0,word=0;
gets(ch);
for(i=0;(c=ch[i])!='\0';i++)
{
/* if(ch[i]>=32 && ch[i]<=47 && ch[i+1]>=32 && ch[i+1]<=47)
{
num--;
}
if(ch[i]>=58 && ch[i]<=64 && ch[i+1]>=58 && ch[i+1]<=64)
{
num--;
}*/
if(c==' '||c==' '||c=='\n'||c==','||c=='.'||c=='?'||c=='('||c=='\"'||c==':')
{word=0;
/* n=ch[i+1];
if(n==' '||n==' '||n=='\n'||n==','||n=='.'||n=='?'||n=='('||n=='\"'||n==':')
{word=1;}*/
}
if(word==0)
{word=1;
num+=1;}
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||c=='\''||c=='-')
{word=1;
j++;}
if(c==' '||c=='\n'||c==','||c=='.'||c=='?'||c=='('||c=='\"'||c==':'||c=='\''||c=='-')
{j++;}
}
printf("有%d个单词\n有%d个英文字符",num,j);
return 0;
}
10、邮箱
/*注册大工邮箱
有效的邮箱有户名名ID不少于6个并不多于12个字符,必须由大写字母、小写字母与数字组合而成,并且不能和已有ID冲突。
输入1个字符串,检测是否是有效ID,如果有效则存储起来,若无效则输出提示并继续尝试注册。例如,
输入Linlin247, 输出“注册成功”
输入tian9,linlin, 123455, 输出“无效用户名”
输入 Linlin247, 输出“该用户名已注册”
请完成3个有效ID的注册,并输出所有有效的完整邮箱,例如
Linlin247@dlut.edu.cn
linlinTian12@dlut.edu.cn
ssDUT123@dlut.edu.cn*/
#include<stdio.h>
#include<string.h>
int main()
{
char c[12],e[12],f[12];
int i,j,n,flag=0,num=0,a=0,b=0,d=0,p,q,x,y;
do
{
printf("请输入用户名ID:\n");
if(num==0)
{
gets(c);
n=strlen(c);
}
if(num==1)
{
gets(e);
n=strlen(e);
p=strcmp(c,e);
}
if(num==2)
{
gets(f);
n=strlen(f);
q=strcmp(c,f);
x=strcmp(e,f);
}
if(n<6||n>12)
{
printf("无效用户名\n");
flag=1;
}
for(i=0;i<n;i++)
{
if(c[i]<'0'||(c[i]>'9'&&c[i]<'A')||(c[i]>'Z'&&c[i]<'a')||c[i]>'z')
{
printf("无效用户名\n");
flag=1;
}
}
for(i=0;i<n;i++)
{
if(c[i]>='0'&&c[i]<='9')
a++;
if(c[i]>='a'&&c[i]<='z')
b++;
if(c[i]>='A'&&c[i]<='Z')
d++;
}
if(a==0||b==0||d==0)
{
printf("无效用户名\n");
flag=1;
}
if(num==1&&p==0)
{
printf("该用户名已注册\n");
flag=1;
}
if((num==2)&&(q==0||x==0))
{
printf("该用户名已注册\n");
flag=1;
}
if(flag==0)
{
for(i=0;i<n;i++)
{printf("%c",c[i]);}
printf("@dlut.edu.cn\n");
printf("注册成功\n");
num++;
}
}while(num<3);
return 0;
}
11、邮箱修正
/*注册大工邮箱
有效的邮箱有户名名ID不少于6个并不多于12个字符,必须由大写字母、小写字母与数字组合而成,并且不能和已有ID冲突。
输入1个字符串,检测是否是有效ID,如果有效则存储起来,若无效则输出提示并继续尝试注册。例如,
输入Linlin247, 输出“注册成功”
输入tian9,linlin, 123455, 输出“无效用户名”
输入 Linlin247, 输出“该用户名已注册”
请完成3个有效ID的注册,并输出所有有效的完整邮箱,例如
Linlin247@dlut.edu.cn
linlinTian12@dlut.edu.cn
ssDUT123@dlut.edu.cn*/
#include<stdio.h>
#include<string.h>
int main()
{
char c[12], e[12], f[12];
int i, n;
int flag, a, b, d, p, q, x;
int num = 0;
do {
a = 0;
b = 0;
d = 0;
flag = 0;
printf("请输入用户名ID:\n");
if (num == 0) {
gets(c);
n = strlen(c);
// 判断是不是包含三类元素
for (i = 0; i < n; i++) {
if (c[i] >= '0' && c[i] <= '9')
a++;
if (c[i] >= 'a' && c[i] <= 'z')
b++;
if (c[i] >= 'A' && c[i] <= 'Z')
d++;
}
// 判断是不是合法字符
for (i = 0; i < n; i++)
{
if (c[i] < '0' || (c[i] > '9' && c[i] < 'A') ||(c[i] > 'Z' && c[i] < 'a') || c[i] > 'z')
{
flag = 1;
}
}
} else if (num == 1) {
gets(e);
n = strlen(e);
p = strcmp(c, e);
// 判断是不是包含三类元素
for (i = 0; i < n; i++) {
if (e[i] >= '0' && e[i] <= '9') a++;
if (e[i] >= 'a' && e[i] <= 'z') b++;
if (e[i] >= 'A' && e[i] <= 'Z') d++;
}
// 判断是不是合法字符
for (i = 0; i < n; i++) {
if (e[i] < '0' || (e[i] > '9' && e[i] < 'A') ||
(e[i] > 'Z' && e[i] < 'a') || e[i] > 'z') {
flag = 1;
}
}
} else if (num == 2) {
gets(f);
n = strlen(f);
q = strcmp(c, f);
x = strcmp(e, f);
// 判断是不是包含三类元素
for (i = 0; i < n; i++) {
if (f[i] >= '0' && f[i] <= '9') a++;
if (f[i] >= 'a' && f[i] <= 'z') b++;
if (f[i] >= 'A' && f[i] <= 'Z') d++;
}
// 判断是不是合法字符
for (i = 0; i < n; i++) {
if (f[i] < '0' || (f[i] > '9' && f[i] < 'A') ||
(f[i] > 'Z' && f[i] < 'a') || f[i] > 'z') {
flag = 1;
}
}
}
if (n < 6 || n > 12) { // 字符长度不对
printf("无效用户名\n");
continue;
}
if (a == 0 || b == 0 || d == 0) { // 没有至少包含三类字符
printf("无效用户名\n");
continue;
}
if (flag == 1) { // 字符不合法
printf("无效用户名\n");
continue;
}
if (num == 1 && p == 0) { // 被注册
printf("该用户名已注册\n");
continue;
}
if ((num == 2) && (q == 0 || x == 0)) { // 被注册
printf("该用户名已注册\n");
continue;
}
// 注册成功//
for (i = 0; i < n; i++) {
printf("%c", c[i]);
}
printf("@dlut.edu.cn\n");
printf("注册成功\n");
num++;
} while (num < 3);
return 0;
}