文档库 最新最全的文档下载
当前位置:文档库 › 浙江大学城市学院 C语言 上机代码

浙江大学城市学院 C语言 上机代码

浙江大学城市学院《程序设计2》上机代码

夏1周2

70011 简化的插入排序2

70012 求平均值5

70013 将数组中的数逆序存放6

70014 求最大值及其下标7

70015 交换最小值和最大值8

70016 选择法排序9

70017 在数组中查找指定的元素10

70021 求矩阵各行元素之和11

70022 矩阵运算12

70023 九九乘法表13

夏2周14

70024 判断上三角矩阵14

70025 算算看,这是第几天?15

70026 找鞍点(选作) 16

70031 将字符串逆序存放17

70032 查找字符18

70033 统计大写辅音字母19

70034 字符串替换20

70035 将十六进制字符串转换为十进制整数21

70036 将十进制字符串转换为十进制整数22

70052 统计字符出现次数23

夏3周24

10008 求1~100中能被6整除的所有整数的和24

20014 计算三门课程的平均成绩25

20016 计算x的平方25

20021 计算分段函数的值25

20022 计算摄氏温度26

70051 找最大值并交换27

80011 循环移动28

80012 在数组中查找指定元素29

80013 使用函数的选择法排序30

80014 报数32

夏4周35

10012 函数程序设计35

10024 计算最长的字符串长度36

10025 字符串的连接37

40017 求2/1+3/2+5/3+8/5+ (38)

80021 找最大的字符串39

80022 找最长字符串40

80023 使用函数删除字符串中的字符41

80024 使用函数实现字符串复制42

80025 判断回文字符串43

80026 分类统计字符个数44

夏5周45

10014 计算函数P(n,x) 45

10016 十进制转换二进制46

10017 递归函数程序设计求Fabonacci数列48

10019 改错题error10_1.cpp 49

10022 编程题50

10026 指定位置输出字符串50

10027 藏尾诗51

10028 改错题error11_2.cpp 52

40065 分解质因数53

40067 打印图案54

夏6周56

30062 输出21世纪所有闰年56

90001 调试示例error09_1.cpp 56

90002 时间换算57

90003 计算平均成绩58

90004 计算两个复数之积59

90005 查找书籍60

90006 通讯录排序61

90007 算算看,这是第几天?62

90008 使用函数实现时间换算63

90009 找出总分最高的学生64

其它练习65

20027计算旅途时间。65

20028数字加密66

教材习题3-4 (上机练习30009,统计学生成绩) 66

30061 出租车计费67

教材习题4-12(p77) 68

教材习题4-14(p77) 69

50051 数字金字塔(此题与40067打印图案的思路相似) 69

夏1周

70011 简化的插入排序

输入一个正整数repeat (0

输入一个正整数n(0

输入输出示例:括号内为说明

输入:

4 (repeat=4)

5 (数据的个数n=5)

1 2 4 5 7 (5个有序整数)

3 (待插入整数x=3)

4 (数据的个数n=4)

1 2 5 7 (4个有序整数)

-10 (待插入整数x=-10)

3 (数据的个数n=3)

1 2 4 (3个有序整数)

100 (待插入整数x=100)

5 (数据的个数n=5)

1 2 4 5 7 (5个有序整数)

4 (待插入整数x=4)

输出:

1 2 3 4 5 7

-10 1 2 5 7

1 2 4 100

1 2 4 4 5 7

参考解1:

#include

int main(void)

{

int i, n, x;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);

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

scanf("%d", &a[i]);

scanf("%d", &x);

for (i = n-1; i >= 0; i--)

{

if (x < a[i])

{

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

a[i] = x;

}

else

{

a[i+1] = x;

break;

}

}

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

printf("%d ", a[i]);

putchar('\n');

}

}

参考解2:

#include

int main(void)

{

int i, j, n, x;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);

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

scanf("%d", &a[i]);

scanf("%d", &x);

a[n]=x;

for(i=0;i

if(a[i]>a[n]){

j=a[i];

a[i]=a[n];

a[n]=j;

}

}

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

printf("%d ", a[i]);

putchar('\n');

}

}

参考解3:

#include

int main(void)

{

int i, j, n, x;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);

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

scanf("%d", &a[i]);

scanf("%d", &x);

if (x >= a[n-1]) a[n] = x;

else

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

if(x > a[i]) continue;

j = n - 1;

while(j >= i){

a[j+1] = a[j];

j--;

}

a[i] = x;

break;

}

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

printf("%d ", a[i]);

putchar('\n');

}

}

70012 求平均值

输入一个正整数repeat (0

输入一个正整数n (1

输入

2 (repeat=2)

3 (n=3)

1 2 -6

5 (n=5)

12 2 5 4 0

输出

average = -1.00

average = 4.60

#include

int main(void)

{

int i, n, sum;

int repeat, ri;

int a[10];

double average;

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

scanf("%d", &a[i]);

sum=0;

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

sum+=a[i];

average=1.0*sum/n*1.0;

printf("average = %.2f\n", average);

}

}

70013 将数组中的数逆序存放

输入一个正整数repeat (0

输入一个正整数n (1

输入输出示例:括号内为说明

输入

2 (repeat=2)

4 (n=4)

10 8 1 2

5 (n=5)

1 2 5 4 0

输出

2 1 8 10

0 4 5 2 1

#include

int main(void)

{

int i, n, temp;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

scanf("%d", &a[i]);

i=0;

for(i=0;i

temp=a[i];

a[i]=a[n-1-i];

a[n-1-i]=temp;

}

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

printf("%d ", a[i]);

printf("\n");

}

}

70014 求最大值及其下标

输入一个正整数repeat (0

输入一个正整数n (1

输入输出示例:括号内为说明

输入

3 (repeat=3)

3 (n=3)

1 6 4

4 (n=4)

10 8 1 9

5 (n=5)

1 2 0 4 5

输出

max = 6, index = 1 (最大值6的下标是1)

max = 10, index = 0 (最大值10的下标是0)

max = 5, index = 4 (最大值5的下标是4)

#include

int main(void)

{

int i, index, n;

int ri, repeat;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

scanf("%d", &a[i]);

index=0;

a[index]=a[0];

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

if(a[index]

a[index]=a[i];

index=i;

}

}

printf("max = %d, index = %d\n", a[index], index);

}

}

70015 交换最小值和最大值

输入一个正整数repeat (0

输入一个正整数n (1

输入输出示例:括号内为说明

输入

3 (repeat=3)

5 (n=5)

8 2 5 1 4

4 (n=4)

1 5 6 7

5 (n=5)

5 4 3 2 1

输出

After swap: 1 2 5 4 8

After swap: 1 5 6 7

After swap: 1 4 3 2 5

#include

int main(void)

{

int i, index, n, t;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

scanf("%d", &a[i]);

index=0;

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

if(a[i]

index=i;

}

t=a[index];

a[index]=a[0];

a[0]=t;

index=0;

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

if(a[i]>a[index])

index=i;

}

t=a[index];

a[index]=a[n-1];

a[n-1]=t;

printf("After swap: ");

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

printf("%d ", a[i]);

printf("\n");

}

}

70016 选择法排序

输入一个正整数repeat (0

输入一个正整数n (1

输入

3 (repeat=3)

4 (n=4)

5 1 7 6

3 (n=3)

1 2 3

5 (n=5)

5 4 3 2 1

输出

After sorted: 7 6 5 1

After sorted: 3 2 1

After sorted: 5 4 3 2 1

#include

int main(void)

{

int i, index, k, n, temp;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

scanf("%d", &a[i]);

for(k=0;k

index=k;

for(i=k+1;i

if(a[i]>a[index])

index=i;

temp=a[index];

a[index]=a[k];

a[k]=temp;

}

printf("After sorted: ");

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

printf("%d ", a[i]);

printf("\n");

}

}

70017 在数组中查找指定的元素

输入一个正整数repeat (0

输入一个正整数n (1

输入输出示例:括号内为说明

输入:

2 (repeat=2)

6 (n=6)

1 3 5 7 9 5

5 (x=5)

4 (n=4)

1 3 5 7

2 (x=2)

输出:

5: a[2]

2: not found

#include

int main(void)

{

int flag, i, n, x;

int repeat, ri;

int a[10];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

flag=0;

scanf("%d", &n);

for(i = 0; i < n; i++) scanf("%d", &a[i]);

scanf("%d", &x);

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

if(x==a[i])

{

flag = 1;

break;

}

}

if(flag != 0) printf( "%d: a[%d]\n", x, i);

else printf( "%d: not found\n", x);

}

}

70021 求矩阵各行元素之和

输入2个正整数m 和n (1<=m<=6, 1<=n<=6),然后输入矩阵a(m 行n 列)中的元素,分别求出各行元素之和,并输出。

输出使用语句:printf("sum of row %d is %d\n", i, sum);

输入输出示例:括号内为说明

输入:

3 2 (m=3,n=2)

6 3

1 -8

3 12

输出:

sum of row 0 is 9

sum of row 1 is -7

sum of row 2 is 15

#include

int main(void)

{

int i, j, m, n, sum;

int a[6][6];

scanf("%d%d",&m,&n);

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

for(j = 0; j < n; j++)

scanf("%d", &a[i][j]);

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

sum=0;

for(j = 0; j < n; j++)

sum+=a[i][j];

printf("sum of row %d is %d\n", i, sum);

}

}

70022 矩阵运算

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0

读入1 个正整数n(1≤n≤6), 再读入n 阶方阵 a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入输出示例:括号内为说明

输入:

1 (repeat=1)

4 (n=4)

2 3 4 1

5 6 1 1

7 1 8 1

1 1 1 1

sum = 35 (2+3+4+5+6+7+8=35)

#include "stdio.h"

int main(void)

{

int i, j, n, sum;

int repeat, ri;

int a[6][6];

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

for(j = 0; j < n; j++)

scanf("%d", &a[i][j]);

sum=0;

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

for(j = 0; j < n; j++)

sum+=a[i][j];

}

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

sum-=a[i][n-i-1];

for(j =0; j

sum-=a[n-1][j];

for(i =0; i

sum-=a[i][n-1];

sum=sum+a[n-1][n-1];

printf("sum = %d\n", sum);

}

}

70023 九九乘法表

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0

输入一个正整数n(0

提示:将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。输入输出示例:括号内为说明

输入:

1 (repeat=1)

3 (n=3)

输出:

* 1 2 3

1 1

2 2 4

3 3 6 9

#include "stdio.h"

int main(void)

{

int i, j, n;

int a[10][10];

int repeat, ri;

scanf("%d",&repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

for(j = 0; j <= n; j++)

a[0][j]=j;

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

a[i][0]=i;

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

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

a[i][j]=i*j;

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

for(j = 0; j <= n; j++)

if(i == 0 && j == 0) printf("%-4c", '*');

else if(i == 0 || j <= i) printf("%-4d", a[i][j]);

printf("\n");

}

}

}

夏2周

70024 判断上三角矩阵

输入一个正整数repeat (0

输入1 个正整数n (1≤n≤6)和n 阶方阵 a 中的元素,如果a 是上三角矩阵, 输出"YES", 否则, 输出"NO"。上三角矩阵指主对角线以下的元素都为0的矩阵, 主对角线为从矩阵的左上角至右下角的连线。

输入输出示例:括号内为说明

输入:

2 (repeat=2)

3 (n=3)

1 2 3

0 4 5

0 0 6

2 (n=2)

1 0

-8 2

输出:

YES

NO

#include "stdio.h"

#include "math.h"

int main(void)

{

int flag, i, j, n;

int a[6][6];

int repeat, ri;

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

for(j = 0; j < n; j++)

scanf("%d", &a[i][j]);

flag=1;

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

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

if(a[i][j]!=0){

flag=0; break;

}

}

if (!flag) break;

}

if(flag != 0) printf("YES\n");

else printf("NO\n");

}

}

70025 算算看,这是第几天?

输入一个正整数repeat (0

输入日期(年、月、日),输出它是该年的第几天。

要求定义与调用函数day_of_year(year, month, day),计算并返回year(年)、month(月)和day(日)对应的是该年的第几天,函数形参year、month和day的类型是int,函数类型也是int。

输入输出示例:括号内为说明

输入:

2 (repeat=2)

1981 3 1 (1981年3月1日)

2000 3 1 (2000年3月1日)

输出:

days of year: 60 (1981年3月1日是该年的第60天)

days of year: 61 (2000年3月1日是该年的第61天)

#include "stdio.h"

int main(void)

{

int day, day_year, month, year;

int repeat, ri;

int day_of_year(int year, int month, int day);

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d%d%d", &year, &month, &day);

day_year=day_of_year(year,month,day);

printf("days of year: %d\n", day_year);

}

}

int day_of_year(int year, int month, int day)

{

int k,leap;

int a[2][31]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}

};

leap=(year%4==0&&year0!=0||year@0==0);

for(k=1;k

day=day+a[leap][k];

return day;

}

70026 找鞍点(选作)

输入一个正整数repeat (0

输入1 个正整数n(1≤n≤6)和n 阶方阵 a 中的元素,假设方阵 a 最多有1个鞍点,如果找到 a 的鞍点, 就输出其下标, 否则,输出"NO"。鞍点的元素值在该行上最大, 在该列上最小。

输入输出示例:括号内为说明

输入:

2 (repeat=2)

4 (n=4)

1 7 4 1

4 8 3 6

1 6 1 2

0 7 8 9

2 (n=2)

1 7

4 1

输出:

a[2][1] = 6

NO

#include "stdio.h"

int main(void)

{

int flag, i, j, k, row, col, n;

int a[6][6];

int repeat, ri;

scanf("%d", &repeat);

for(ri = 1; ri <= repeat; ri++){

scanf("%d", &n);

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

for(j = 0; j < n; j++)

scanf("%d", &a[i][j]);

for(row=0;row

col=0;

for(j=1;j

if(a[row][j]>a[row][col])

col=j;

}

flag=1;

for(i=0;i

if(a[row][col]>a[i][col]) {

flag=0;

break;

}

}

if(flag) break;

}

if(flag != 0)

printf("a[%d][%d] = %d\n", row, col,a[row][col]);

else

printf("NO\n");

}

}

70031 将字符串逆序存放

输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。如"ABCD" 的逆序为"DCBA"。

输入输出示例:括号内为说明

输入:

Welcome to you!

输出:

!uoy ot emocleW

思路:

若输入:0 1 2 3 4 5

要输出5 4 3 2 1 0

即第k个字符的位置变换成:n-k-1。由于两个位置上的值是互换的,所以只要对其中的一半数据操作就可以了。

#include

int main(void)

{

int i, j, temp;

char str[80];

i = 0;

while((str[i] = getchar( )) != '\n')

i++;

str[i] = 0;

for (j=0;j

temp=str[i-j-1];

str[i-j-1]=str[j];

str[j]=temp;

}

for(i = 0; str[i] != 0; i++)

putchar(str[i]);

}

另解思路:教材p161

70032 查找字符

输入一个正整数repeat (0

输入一个字符,再输入一个以回车结束的字符串(少于80个字符),在字符串中查找该字符,如果找到,输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入输出示例:括号内为说明

输入:

2 (repeat=2)

m (字符'm')

programming (字符串"programming")

a (字符'a')

1234 (字符串"1234")

输出:

index = 7 ('m'在"programming"中对应的最大下标是7)

Not Found ("1234"中没有'a')

#include "stdio.h"

#define MAXLEN 80

int main(void)

{

char cc, ch;

char str[MAXLEN];

int count, flag, i, index;

int repeat, ri;

scanf("%d", &repeat);

getchar();

for(ri = 1; ri <= repeat; ri++){

cc = getchar();

getchar();

i = 0;

while((ch = getchar()) != '\n'){

str[i++] = ch;

}

str[i] = 0;

flag=0;

for(i=0;str[i] != '\0';i++){

if(str[i]==cc){

flag++;

index=i;

}

}

if(flag)

printf("index = %d\n", index);

else

printf("Not Found\n");

}

}

70033 统计大写辅音字母

输入一个正整数repeat (0

输入一个以回车结束的字符串(少于80个字符),统计并输出其中大写辅音字母的个数。大写辅音字母:除'A', 'E', 'I', 'O', 'U'以外的大写字母。

输入输出示例:括号内为说明

输入:

2 (repeat=2)

HELLO

group

输出:

count = 3 ("HELLO"中有3个大写辅音字母)

count = 0 ("group"中没有大写辅音字母)

#include "stdio.h"

#define MAXLEN 80

int main(void)

{

char ch;

char str[MAXLEN];

int count, i;

int repeat, ri;

scanf("%d", &repeat);

getchar();

for(ri = 1; ri <= repeat; ri++){

i = 0;

while((ch = getchar()) != '\n'){

str[i++]=ch;

}

str[i] = 0;

i=0;

count=0;

while(str[i]){

if(str[i]<='Z'&&str[i]>='A')

switch(str[i]){

case 'A':

case 'E':

case 'I':

case 'O':

case 'U': break;

default:

count++;

break;

}

i++;}

printf("count = %d\n", count);

}

}

70034 字符串替换

输入一个正整数repeat (0

输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串。

原字母对应字母

A Z

B Y

C X

D W

……

X C

Y B

Z A

输入输出示例:括号内为说明

输入:

2 (repeat=2)

A flag of USA

1+2=3

输出:

After replaced: Z flag of FHZ

After replaced: 1+2=3

思路:A-Z, B-Y, ... Z-A, 左右字符的ASCII值的和都是一样的,都为'A'+'Z', 设左字符为变量x, 右字符的ASCII值就是'A'+'Z'-x

#include "stdio.h"

相关文档
相关文档 最新文档