博文

[054] 找出最长及最短字符串(2006-04-23 17:51:00)

摘要:<C程序设计> (夏宝岚)

练习字符串处理: 编写程序,由键盘输入若干字符串,输出最长及最短的字符串。

#include <stdio.h>
#include <string.h>
int main()
{
    char  InPut[1000];
    char OutMax[1000];
    char OutMin[1000];
    int len;
    int max = 0;
    int min = 1000;
    printf("InPut a string: ");
    gets(InPut);
    while ((len = strlen(InPut)) > 0)
    {   
        if (len > max)
        {
            max = len;
            strcpy(OutMax, InPut);
        }
        if (len < min)
      ......

阅读全文(4586) | 评论:0

[053] 字符串逆序输出(2006-04-23 15:27:00)

摘要:<C程序设计> (夏宝岚) 6.19 将键盘输入的字符串按逆序显示出来。

#include <stdio.h>
#include <string.h>
int main()
{
    char str[80];
    int i;
    printf("Input a string:  ");
    gets(str);
    printf("Reversal output: ");
    for (i = strlen(str)-1; i >= 0; i--)
        printf("%c", str[i]);
    printf("\n");
    return 0;
}

运行结果:
==================================================
Input a string:  abcdefghijklmn↙
Reversal output: nmlkjihgfedcba
==================================================

[补充] 2006.11.19  [074] 字符串逆序输出(递归) 。
......

阅读全文(5399) | 评论:2

[052] 常用的字符串处理函数(2006-04-23 14:35:00)

摘要:<C程序设计> (夏宝岚) 包含于 <string.h> 头文件中

<1> strlen 函数

形式: strlen (str);
功能: 计算并返回字符串str的长度(字符串结束标志'\0'不计入内)

例6.16 显示由键盘输入的字符串的长度。

#include <stdio.h>
#include <string.h>
int main()
{
    char str[80];
    printf("Input a string: ");
    gets(str);
    printf("%d\n", strlen(str));
    return 0;
}

运行结果:
===================================
Input a string: I love this game!↙
Lenth is 17
===================================

★ 关于gets()函数,MSDN中如下描述:
The gets function reads a line from the standard input stream stdin and stores it in buffer. The line consists of all characters up to and including the first newline character ('\n'). gets then replaces the newline character with a null character ('\0') before returning the line. In contrast, the fgets function retains the newline character.

 &nb......

阅读全文(4583) | 评论:0

[051] 字符数组中字符串的长度(2006-04-23 14:02:00)

摘要:《C程序设计》(夏宝岚)
6.13 检测存放在某字符数组中的字符串的长度。

#include <stdio.h>
int main()
{
    char str[] = "At last, we shall have revenge!";
    int i = 0;
    while (str[i] != '\0')
        i++;
    printf("Length is %d\n", i);
    return 0;
}

运行结果:
=========================
Length is 31
=========================

★ (P79)所谓字符串,就是用双引号括起来的字符序列。通常,字符串被存放在字符数组中。一个长度固定字符数组,可以存放不同长度的字符串。为了便于识别一个字符串的结尾,C语言约定,字符串的末尾以转义字符'\0'作为结束标记。有了字字符串的结束标记,程序就可以通过判断'\0'来检测字符串是否结束,而不必依赖字符数组的长度。引进了字符串的概念,就可以直接使用字符串常量对字符数组赋初值。......

阅读全文(4227) | 评论:1

【006】多位数码管动态显示 [51](2006-04-16 16:04:00)

摘要:实验目的:数码管动态显示多位数字。
实验参考:笨笨工作室 实验五、多位数码动态显示。(查看原文)
实验板: FB51A(查看)。 该实验用到实验板的资源电路图如下:
其中P0口是段码,低电平有效。P2口是位码,高电平有效。P2.0口控制第1个数码管,一直到P2.7口控制第8个。该板的段码表如下: ┌─────┬────────────────┬────┐
ㄧ          ㄧ P0.*:  7  6  5  4  3  2  1  0  ㄧ P0口值 ㄧ
ㄧ 十进制数 ㄧ  段 :  d dp  e  c  g  b  f  a  ㄧ 即段码 ㄧ
├─────┼────────────────┼────┤
ㄧ    0     ㄧ        0  1  0  0  1  0  0  0  ㄧ  48H   ㄧ
ㄧ    1     ㄧ        1  1  1  0  1  0  1  1  ㄧ  ebH   ㄧ
ㄧ    2     ㄧ        0  1  0  1  0  0  1  0  ㄧ  52H   ㄧ
ㄧ    3     ㄧ        0  1  1  0  0  0......

阅读全文(23488) | 评论:20

【005】数码管显示数字 [51](2006-04-09 22:08:00)

摘要:实验目的:数码管显示数字。
实验参考:笨笨工作室 实验四、用数码管显示数字。(查看原文)
实验板: FB51A(查看)。

该实验用到实验板的资源电路图如下:

其中P0口是段码,低电平有效。P2口是位码,高电平有效。P2.0口控制第1个数码管,一直到P2.7口控制第8个。该板的段码表如下:

┌─────┬────────────────┬────┐
ㄧ          ㄧ P0.*:  7  6  5  4  3  2  1  0  ㄧ P0口值 ㄧ
ㄧ 十进制数 ㄧ  段 :  d dp  e  c  g  b  f  a  ㄧ 即段码 ㄧ
├─────┼────────────────┼────┤
ㄧ    0     ㄧ        0  1  0  0  1  0  0  0  ㄧ  48H   ㄧ
ㄧ    1     ㄧ        1  1  1  0  1  0  1  1  ㄧ  ebH   ㄧ
ㄧ    2     ㄧ        0  1  0  1  0  0  1  0  ㄧ  52H   ㄧ
ㄧ    3     ㄧ        0  1  1  0  0 &......

阅读全文(6989) | 评论:2

[050] 求两个矩阵的乘积矩阵(2006-04-09 10:27:00)

摘要:参考: 《C程序设计》(夏宝岚) P78
6.10 求两个矩阵的乘积矩阵。

#include <stdio.h>
int main()
{
    int a[100][100] = {{1, 0, 3, -1}, {2, 1, 0, 2}};
    int b[100][100] = {{4, 1, 0}, {-1, 1, 3}, {2, 0, 1}, {1, 3, 4}};
    int c[100][100] = {{0}};
    int n = 2; /* 第一矩阵的行数 */
    int m = 4; /* 第一矩阵的列数,即第二矩阵的行数 */
    int p = 3; /* 乘积矩阵的列数 */
    int i, j, k;     for (i = 0; i < n; i++)
    {
        for (j = 0; j < p; j++)
        {
            c[i][j] = 0;
            for (k = 0; k < m; k++)
                c[i][j] = c[i][j] + a[i][k] * b[k][j];
&nb......

阅读全文(10169) | 评论:1

[049] 仿骰子程序-随机数的产生(2006-04-07 22:03:00)

摘要:出自:《C程序设计》(夏宝岚) P76
6.8 编写一个仿骰子程序,将六面体骰子掷6000次,统计出各面出现的次数。每次投掷骰子出现哪一面,由随机数发生器提供的函数经过处理而确定。

#include <stdio.h>
#include <stdlib.h> /* rand()函数用 */
int main()
{
    int face;
    int f[6] = {0};
    int i;     for(i = 1; i <= 6000; i++)
        f[rand() % 6]++ ;       /* 数组元素下标为0到5 */     printf("Face  Frequency\n");
    for(face = 0; face < 6; face++)
        printf("%2d %10d\n", face + 1, f[face]);
    return 0;
}

运行结果(仅供参考):
===============================
Face  Frequency
 1       1003
 2       1017
 3        983
 4        994
&nb......

阅读全文(5184) | 评论:1

[048] 整数各位的分离(由低位到高位)(2006-04-06 22:55:00)

摘要:出处: 《C程序设计》(夏宝岚)  P62
练习将一个整数的各位分离处理的方法:

5.9 统计正整数的各位数字中的0的个数,并求各位数字中最大者。例如:31040,其中0的个数是2,最大数是4。

#include <stdio.h>
int main()
{
    int n, count, max, t;
    count = max = 0;     /* count记录0的个数, max记录最大者 */
    scanf("%d", &n);
    do
    {
        t = n % 10;      /* 取当前的最低位 */
        if(t == 0)
            count++;
        else
            if(max < t)
                max = t;
        n /= 10;
    }while(n);

    printf("co......

阅读全文(4202) | 评论:0

【004】流水灯实验 [51](2006-04-06 22:06:00)

摘要:实验目的:点亮二极管。
实验参考:笨笨工作室 实验二、基本I/O口试验二:跑马灯。(查看原文)
实验板: FB51A(查看)。

正如学一门编程语言时第一个程序"Hello World!"一样, "流水灯"(也叫跑马灯)算是学习单片机的第一个程序吧!

电路如下:

汇编:

       org   0000h
       mov   a,#0feh
loop:  mov   p0,a
       lcall delay
       rl    a
       ajmp  loop

delay: mov   r6,#2h    ; djnz为二周期指令,机器周期为振荡周期的12倍.所以延时时间为:
temp:  mov   r5,#0ffh  ; 2×255×2×12×(1/12) =1ms,人眼分辨不出
       djnz  r5,$
       djnz  r6,temp
       ret
end

★ 下载到实验板上并未看到预想的结果,八个LED都呈半亮状态。这是由于延时为1ms,人眼分辨不出闪烁的间隔,将延时时间增长如下:

       org    0000h
 ......

阅读全文(5937) | 评论:9