【C语言】期末模拟一(2020西电期末考试真题)
一.数字个数统计1
#include <stdio.h>
int max(int x, int y) {
if (x >= y)
return x;
else
return y;
}
int main() {
int m, n, i;
scanf("%d %d", &m, &n);
int a = 0, b = 0, c = 0;
for (i = m; i <= n; i++) {
if (i % 2 == 0)
a++;
if (i % 2 != 0)
b++;
if (i % 3 == 0 && i % 7 != 0)
c++;
}
printf("%d %d %d\n", a, b, c);
int t, p;
t = max(a, b);
p = max(t, c);
printf("%d", p);
}
二.字符串处理2
#include <stdio.h>
#include <string.h>
int main() {
int i, l, count = 0;
char x;
scanf("%c", &x);
char m[100];
scanf("%s", &m);
l = strlen(m);
for (i = 0; i < l; i++) {
if (m[i] == x || m[i] == x - 'A' + 'a' || m[i] == x - 'a' + 'A')//不区分大小写
count++;
if (count == 2) {
printf("%c", m[i]);
break;
}
if (count == 1)
printf("%c", m[i]);
}
if (count == 0)
printf("NO");
}
三.矩阵转换
#include <stdio.h>
int main() {
int m, n;
int i, j;
scanf("%d %d", &m, &n);
int A[m][n], B[n][m], C[10][10] = {0};//对C数组初始化
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &A[i][j]);
}
}//输入A数组
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
B[j][i] = A[i][j];
}
}//得到转置矩阵
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
int k;
for (k = 0; k < n; k++)
C[i][j] += A[i][k] * B[k][j];
}
}//得到乘积矩阵
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
}
四.身份证号码校验(重难点)
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,j,sum=0,z;
scanf("%d",&n);
int flag=1;
char m[n][18];//无空格输入数字串,用char类型储存
int w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char M[11]={'1','0','X','9','8','7','6','5','4','3','2'};
for(i=0;i<n;i++)
scanf("%s",m[i]);//遍历n行,输入字符串
for(i=0;i<n;i++)
{
sum=0;//sum求和每次要置0
for(j=0;j<17;j++)
{
if(m[i][j]<'0'||m[i][j]>'9')//若前 17位不全为数字
break;
sum+=w[j]*(m[i][j]-'0');//注意字符和数字的关系
}
if(j<17)
{
for(j=0;j<18;j++)
printf("%c",m[i][j]);//输出错误号码串
printf("\n");
flag=0;//表示错误状态
}
else
{
z=sum%11;
if(M[z]!=m[i][17])//校验最后一位
{
for(j=0;j<18;j++)
printf("%c",m[i][j]);//输出错误号码串
printf("\n");
flag=0;//表示错误状态
}
}
}
if(flag)//如果flag非0
printf("All passed");//输出全部通过
return 0;
}
持续更新西电期末真题模拟练习
请勿转载