C语言期中复习题

更新时间:2023-10-25 12:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

清华大学《计算机语言与程序设计》

秋季学期 模拟练习题1

测试说明:

1. 本上机编程,可参考各书面资料,所有练习题均采用键盘输入和屏幕输出,希望总

时间限制为120分钟。

2. 本题目为模拟训练题目,不是考试题目,仅供大家模拟训练自己的编程速度。

注意事项:

3. 请大家特别注意以下提示:

? 需要提交单一Word文档; ? Word文档以学号作为名称;

? Word文档中需按照顺序提供源程序与运行结果截图。

? 为防止程序被意外破坏,建议在E或者F盘中创建自己的编程目录,并做好备

份。

4. // 评分时将查看源程序,请遵守题目中给出的限制。

以下为上机编程练习题目:

0、自我介绍题(本题必做)

请在屏幕上输出你的学号和姓名,各占一行。

1、不定解方程(希望15分钟内完成)

编写程序,求出方程 2009=11x+19y+501z的所有正整数解。

输出格式要求:每行输出四组解,每组解之间保留一空格,每组解要用()括起来,每组解中各个解之间用逗号分隔,并且不同行、相同列的解要上下对齐。如下图示意(注,这不是方程的解)

2、正整数特殊排序(希望25分钟内完成)

有200个4位正整数。要求编写程序按每个数的后三位的大小进行降序排列,然后取出满足此条件的前20个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后把结果数组b输出到屏幕。

例:一个含有5个4位正整数数组,处理前为: 9012 5099 6012 7025 8088 处理后将5个数依次输出顺序为: 5099 8088 7025 6012 9012

要求使用如下的200个4位正整数:

8478,9782,2622,7840,8933,5163,5057,5820,6929,3882,9808,3508,9704,6034,5395,7560,

7720,8015,6070,7841,7148,5608,2103,4871,9560,1797,7625,4738,1041,3809,5717,4664, 7905,3164,1063,6934,5681,8869,2943,5914,3255,7478,6722,9625,1611,3063,8920,5996, 5245,6640,6783,5192,6145,1377,2216,8342,4821,3324,5304,4792,1906,1662,8362,5341, 3833,5514,2346,7967,8384,5799,7037,7123,8333,2531,6360,2193,6435,5743,9726,5645, 3355,8388,2430,3685,7188,5270,7860,2667,1246,3553,9999,2133,2043,4970,1435,5803, 4799,1951,5304,9705,3769,5425,3578,4919,1475,5297,4842,2437,8623,5473,2125,7298, 7866,2612,8684,6959,5710,8952,9076,7919,4042,6587,8590,5778,4524,1172,9130,2827, 8826,4059,9679,7734,4973,3532,7638,2205,4784,1960,6808,6469,9336,5573,6725,8789, 5083,2591,2199,2543,5550,3326,6734,5906,2138,1226,6173,8631,6062,7628,2773,2458, 8499,6279,5737,2756,9772,3447,5889,7231,6084,2633,5578,3985,6605,2835,9270,9612, 9334,3765,5545,3621,4189,9912,3540,5708,5325,6662,5525,5483,6009,5635,6990,5251, 6426,5050,2652,8899,6349,6347,4835,2907

#include void main() { 60,

7720,8015,6070,7841,7148,5608,2103,4871,9560,1797,7625,4738,1041,3809,5717,4664, 5245,6640,6783,5192,6145,1377,2216,8342,4821,3324,5304,4792,1906,1662,8362,5341, 3833,5514,2346,7967,8384,5799,7037,7123,8333,2531,6360,2193,6435,5743,9726,5645, 7905,3164,1063,6934,5681,8869,2943,5914,3255,7478,6722,9625,1611,3063,8920,5996,

int

a[200]={8478,9782,2622,7840,8933,5163,5057,5820,6929,3882,9808,3508,9704,6034,5395,75

}

3355,8388,2430,3685,7188,5270,7860,2667,1246,3553,9999,2133,2043,4970,1435,5803, 4799,1951,5304,9705,3769,5425,3578,4919,1475,5297,4842,2437,8623,5473,2125,7298, 7866,2612,8684,6959,5710,8952,9076,7919,4042,6587,8590,5778,4524,1172,9130,2827, 8826,4059,9679,7734,4973,3532,7638,2205,4784,1960,6808,6469,9336,5573,6725,8789, 5083,2591,2199,2543,5550,3326,6734,5906,2138,1226,6173,8631,6062,7628,2773,2458, 8499,6279,5737,2756,9772,3447,5889,7231,6084,2633,5578,3985,6605,2835,9270,9612, 9334,3765,5545,3621,4189,9912,3540,5708,5325,6662,5525,5483,6009,5635,6990,5251, 6426,5050,2652,8899,6349,6347,4835,2907}; int i,t,j;

for (i=0;i<=198;i++)

if((a[i]00)<(a[i+1]00)) { }

else if((a[i]00)==(a[i+1]00)) { }

for(i=0;i<=19;i++)

printf(\printf(\

if(a[i]>a[i+1])

t=a[i]; t=a[i]; a[i]=a[i+1]; a[i+1]=t;

for (j=1;j<=199;j++)

{

a[i]=a[i+1]; a[i+1]=t; }

3、用户登录模拟编程(希望30分钟内完成)

已知使用 conio.h 中的函数 getch()可以返回键盘

假设用户名与登录密码存储在字符串常量UserName 与 PassWord中,并且值分别为字符串 “student”和 ”iamtiger” 。请编写程序实现用户登录验证用的字符。户名与密码的功能(假设二者的长度均不超过20个字符)。

a) 从键盘输入用户名时,要求回显用户名,用户按Enter键后,用户名输入完成,进入密

码输入步骤;

b) 从键盘输入密码时,要求屏幕不能显示密码,而以字符’*’回显相应的密码字符,用户

按Enter键后,密码输入完成,进入验证步骤;

c) 验证用户输入的用户名、密码与程序设置的用户名和密码是否一致,若一致则显示登录

成功,否则要求用户重新输入用户名与登录密码;

d) 用户名与登录密码输入的次数不能超过三次,若超过三次则显示登录错误,并退出程序。

程序运行输出的一个屏幕示意。

#include #include #include void main() {

int i=1,k,s;

char s1[20],s2[20],c1[20]={\for (i=1;i<=3;i++) { s=1;

printf(\scanf(\printf(\

printf(\

else break; if (k==20) { s=0;

if (i!=3) printf(\}

if (s==0) continue; s2[k]='\\0'; printf(\

if (strlen(s2)!=8||strlen(s1)!=7) { }

s=0;

for(k=0;k<20;k++) if ((s2[k]=getch())!='\\r') printf(\

if (i!=3) printf(\

}

}

if (s==0) continue;

for (k=0;k<=6;k++) if (c1[k]!=s1[k]) { }

if (s==0) continue; { }

s=0; break; s=0; break;

if (i!=3) printf(\

for (k=0;k<=7;k++) if (c2[k]!=s2[k])

if (i!=3) printf(\

if (s==0) continue;

printf(\ break;

if (i==4) printf(\登陆错误\\n\

4、成绩排名(希望40分钟内完成)

期中考试快要结束了,老师需要进行年级成绩排名。排名的规则如下:

a) 以期中考试的平均成绩为排名依据(满分为100分);

b) 对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排名

为K+1;

c) 如果学生A和学生B的平均成绩相同,则他们的排名相同。

要求编写一个程序来实现排名和统计名次。

输入格式要求:第一行为一个整数N(1 < N < 200),表示学生的人数。随后有N行,每行有两个非负整数描述一个学生的信息,依次为学号和平均成绩。

输出格式要求:输出共有N行,按照名次从高到低每行输出一名学生的信息(若名次相同,则学号小的先输出),依次为:名次,学号,平均成绩,其间用一个空格隔开。

样例输入 5

1000 95 1001 100

1002 94 1006 95 1007 100

样例输出

1 Student-1001 100 1 Student-1007 100 3 Student-1000 95 3 Student-1006 95 5 Student-1002 94

#include void main() {

int a[100][2],n,i,j,t,s,k[100];

printf(\scanf(\for(i=0;i<=n-1;i++) {

for(j=0;j<=n-2;j++) {

if(a[j][1]

{ }

else if(a[j][1]==a[j+1][1]) { }

if(a[j][0]>a[j+1][0]) { t=a[j][0]; a[j][0]=a[j+1][0]; a[j+1][0]=t; s=a[j][1]; a[j][1]=a[j+1][1]; a[j+1][1]=s; } t=a[j][0]; a[j][0]=a[j+1][0]; a[j+1][0]=t; s=a[j][1]; a[j][1]=a[j+1][1]; a[j+1][1]=s;

scanf(\for(i=0;i<=n-1;i++)

}

}

}

k[0]=1;

for(i=1;i<=n-1;i++) { }

for(i=0;i<=n-1;i++)

printf(\ student-%d %d\\n\if(a[i][1]

k[i]=i+1; else k[i]=k[i-1];

// 以上为全部练习题目1,请大家测试一下自己的速度

清华大学《计算机语言与程序设计》

秋季学期 模拟练习题2

测试说明:

1. 本上机编程,可参考各书面资料,所有练习题均采用键盘输入和屏幕输出,希望总

时间限制为120分钟。

2. 本题目为模拟训练题目,不是考试题目,仅供大家模拟训练自己的编程速度。

注意事项:

3. 请大家特别注意以下提示:

? 需要提交单一Word文档; ? Word文档以学号作为名称;

? Word文档中需按照顺序提供源程序与运行结果截图。

? 为防止程序被意外破坏,建议在E或者F盘中创建自己的编程目录,并做好备

份。

4. // 评分时将查看源程序,请遵守题目中给出的限制。

以下为上机编程练习题目:

0、自我介绍题(本题必做)

请在屏幕上输出你的学号和姓名,各占一行。

1、不定解方程(希望15分钟内完成)

编写程序,找出1到1000之间,所有满足方程 x2?y3?z4的正整数解。 输出格式要求:每行输出四组解,每组解之间保留一空格,每组解要用()括起来,每组解中各个解之间用逗号分隔,并且不同行、相同列的解要上下对齐。如下图示意(注,这不是方程的解)

#include void main() {

int x,y,z,i=0;

for(x=1;x<=1000;x++) for(y=1;y<=1000;y++) for(z=1;z<=400;z++)

if(x*x+y*y*y==z*z*z*z)

{ printf(\ i++;

if (i%4==0) printf(\ } }

2、整数各位数字运算排序题(希望25分钟内完成)

已知200个四位正整数。请编写程序,其功能是:若一个四位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,以及十位数字上的值小于等于个位数字上的值,并且原四位数是偶数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中。最后把结果数组b输出到屏幕。

例:一个含有5个4位正整数数组,处理前为: 2109 4578 2156 2075 6788 处理后将2个数依次输出顺序为: 4578 6788

要求使用如下的200个4位正整数:

5990,2832,4964,8735,6891,3510,9132,1538,8200,8867,9795,2033,1358,2032,4999,9473, 5422,5983,1276,1258,1674,1374,9716,9042,6138,9142,2541,8949,4065,1309,2057,5916, 8121,5137,3938,5499,8843,8222,5996,7184,5972,2226,3600,8568,7141,1510,2950,2180, 2058,6080,3890,2069,9133,2855,9875,2075,1003,1686,7560,7004,1575,7901,6867,5819, 2518,1876,7611,9647,1523,6489,7988,6158,7316,3956,5026,1338,6149,5369,2822,1611, 8435,1430,8215,2316,5027,4014,3421,3066,2116,2821,1707,1714,1843,4293,4899,2490, 9246,9816,2014,3652,1402,8551,3420,5719,5120,5050,4288,1278,1694,8633,4663,3580,

4226,4674,9683,3360,3861,1156,7100,3886,5357,6796,3518,3590,4595,2030,3176,4281, 6815,9774,6748,1297,2320,5079,5395,6816,4025,4852,2547,3404,2152,3365,1243,3369, 8552,9108,9597,7640,9041,2393,9837,5567,6823,9051,3242,1152,3089,1392,3283,5631, 3490,4990,4124,2678,3181,1786,1737,1563,3813,7826,6834,9580,8731,3830,9423,8650, 1515,7380,7974,9676,2737,5269,9891,3533,6056,1841,3463,4537,6483,2930,7828,6211, 5216,1288,6791,6435,7257,2121,1831,2767 #include void main() { 3,

5422,5983,1276,1258,1674,1374,9716,9042,6138,9142,2541,8949,4065,1309,2057,5916, 8121,5137,3938,5499,8843,8222,5996,7184,5972,2226,3600,8568,7141,1510,2950,2180, 2058,6080,3890,2069,9133,2855,9875,2075,1003,1686,7560,7004,1575,7901,6867,5819, 2518,1876,7611,9647,1523,6489,7988,6158,7316,3956,5026,1338,6149,5369,2822,1611, 8435,1430,8215,2316,5027,4014,3421,3066,2116,2821,1707,1714,1843,4293,4899,2490, 9246,9816,2014,3652,1402,8551,3420,5719,5120,5050,4288,1278,1694,8633,4663,3580, 4226,4674,9683,3360,3861,1156,7100,3886,5357,6796,3518,3590,4595,2030,3176,4281, 6815,9774,6748,1297,2320,5079,5395,6816,4025,4852,2547,3404,2152,3365,1243,3369, 8552,9108,9597,7640,9041,2393,9837,5567,6823,9051,3242,1152,3089,1392,3283,5631, 3490,4990,4124,2678,3181,1786,1737,1563,3813,7826,6834,9580,8731,3830,9423,8650, 1515,7380,7974,9676,2737,5269,9891,3533,6056,1841,3463,4537,6483,2930,7828,6211, 5216,1288,6791,6435,7257,2121,1831,2767

},b[200];

int i,x,y,z,w,cnt=0,k=0,m,n,t; for(i=0;i<=199;i++) {

x=a[i]; y=(a[i]0-x)/10; z=(a[i]00-x-10*y)/100; w=(a[i]-x-10*y-100*z)/1000; if(w<=z&&z<=y&&y<=x&&(x%2==0)) { } }

for(m=0;m<=k-1;m++) {

for(n=0;n<=k-2;n++) {

if(b[n]>b[n+1]) b[k]=a[i]; k++; cnt+=1; int

a[200]={5990,2832,4964,8735,6891,3510,9132,1538,8200,8867,9795,2033,1358,2032,4999,947

}

}

}

{ }

t=b[n]; b[n]=b[n+1]; b[n+1]=t;

for(i=0;i<=k-1;i++)

printf(\printf(\

3、输入倒序处理(希望35分钟内完成)

编写程序实现将键盘输入的一行字符按单词倒排输出。如键盘输入“I love you”,屏幕显示“you love I”。 假设输入的字符串长度不超过100,单词之间以一个或多个空格间隔。

输入格式要求:

(1) 第一行输入字符串,按回车结束。 输出格式要求:

(2) 新起一行倒序输出字符串中的单词

#include #include void main() {

char s1[100][100]={'\\0'},s2[100]={'\\0'}; int i=1,j,k=0,t=0,m,n; gets(s2);

for(j=0;j<=strlen(s2)-1;j++) {

if (j!=0&&s2[j]==' ') {

if (s2[j-1]!=' ') { i++; k=0; }

}

//

}

} else

{ s1[i][k]=s2[j]; k++; }

printf(\for(j=i;j>=1;j--)

{ // printf(\ }

for (k=0;k<=strlen(s1[j])-1;k++) printf(\printf(\

printf(\

4、选票统计(希望40分钟内完成)

某村进行了村委员会的换届选举,共有10名候选人。选举结束后,需要对选举的结果进行统计。统计规则如下:

a) 一张选票最多可以选取10个委员;

b) 对于一位候选人,如果一共有K个候选人的有效选票比这位候选人高,则该候选

人的选举排名为K+1;

c) 若几位候选人得票相同,则他们的排名相同。

要求编写一个程序,用二维数组来实现候选人的排名。

输入格式要求:第一行为一个整数N(1 < N < 1000),表示投票的人数。随后有N行,每行代表一张选票。每行的长度都为10,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推:内容均为0或1,1表示此人被选中,0表示此人未被选中。

输出格式要求:输出共有10行,按照名次从高到低每行输出每一名候选人的得票信息(若名次相同,则编号小的先输出),依次为:名词,候选人编号,得票数,其间用一个空格隔开。

样例输入 6

1 0 0 0 1 1 1 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1

1 1 1 0 1 1 0 0 1 1

样例输出

1 candidate-5 5 2 candidate-1 4 2 candidate-6 4 2 candidate-9 4 2 candidate-10 4 6 candidate-7 3 6 candidate-8 3 8 candidate-2 2 8 candidate-3 2 8 candidate-4 2

#include void main() {

int a[1000][10],n,i,j,k=1,s[10],b[10][2],p[10],t,r; scanf(\for(i=0;i<=n-1;i++) { }

for(j=0;j<=9;j++) {

for(i=0;i<=n-1;i++) {

if(a[i][j]==1) for(j=0;j<=9;j++)

scanf(\

}

}

s[k]++;

k++;

for(i=0;i<=9;i++) { }

for(i=0;i<=9;i++) {

for(j=0;j<=8;j++) {

if(b[j][1]

t=b[j][1]; b[j][1]=b[j+1][1]; b[j+1][1]=t; r=b[j][0]; b[j][0]=b[j+1][0]; b[j+1][0]=r;

b[i][0]=i+1; b[i][1]=s[i];

}

}

}

} p[0]=1;

for(i=1;i<=9;i++) {

if(b[i][1]

p[i]=i+1;

else p[i]=p[i-1]; }

for(i=0;i<=9;i++)

printf(\ candinate-%d %d\\n\

// 以上为全部练习题目2,请大家测试一下自己的速度

本文来源:https://www.bwwdw.com/article/tpz2.html

Top